Saturday, December 24, 2011

Pingus 0.7.6 - Xmas 2011

Pingus 0.7.6 is out, not much changes to the core game, but 10 brand new Xmas themed levels.
  • added new SVG icons for Pingus
  • added 10 new xmas themed levels
  • added ability to sort levelsets by priority

Tuesday, December 13, 2011

Landscape Generator

Quick&Dirty Landscape Generator using HTML Canvas:


Friday, December 02, 2011

Some fun with gamma and invert

Take an image and invert every other pixel. The result you get will look like this:

Or up close like this:

Zooming in and out in the browser or scaling the image will reveal the image, as most image applications these days handle gamma incorrectly, they assume the image is encoded as a linear range, while it's actually encoded with a gamma value applied to it, that would need to be unapplied before doing the blending performed when scaling the image. This is also the reason why this little trick can't be pulled off in Gimp directly, as the build in invert doesn't handle gamma correctly either.

Little nice side effect: You can use images like this to see if the gamma on your monitor is properly calibrated, if the image doesn't look like a flat gray area, then your gamma is off.

Source Code: ditherinv.cpp

PS: Yes, this is totally not news, just fun to toy around with to see how different image applications react, read that Slashdot story for more background information.

Google Exact String Search

Since a few weeks ago the old trick to get Google to search for an exact phrases no longer works, namely putting the word in quotes or adding a + in front of it, Google will auto-correct all search terms. The functionality is however still available:

Thursday, October 27, 2011

Fixing volume control in XFCE4

Volume control in XFCE4 worked fine with the volume control in the indicator-applet, but failed to work with the hotkeys on the keyboard, namely:
  • lowering the volume to minimum wouldn't mute
  • muting was possible with the keyboard, unmuting was not
Turns out the problem is caused by xfce4-volumed accessing my sound card directly, while the indicator-applet is using pulse audio. Pulseaudio mirrors the controls of the soundcard, but only partially so for some reason. Proper fix for me: Tell xfce4-volumed to use Pulseaudio, but there either isn't a GUI config for that or it's really well hidden. But there is luckily a command line workaround, use:

xfconf-query -c xfce4-mixer -l

to get a list of soundcards and then tell xfce4-mixer to use that

xfconf-query -c xfce4-mixer -p /active-card -s PlaybackInternalAudioAnalogStereoPulseAudioMixer

Now the volume controls seem to work proper.

Edit: A killall xfce4-volumed might be needed, as otherwise the setting will be instantly reverted.

Tuesday, October 25, 2011

Pingus 0.7.5 - Halloween 2011

Pingus 0.7.5 is out, changes include among some fixes, 10 brand new Halloween levels. Linux and Windows versions are provided. No Mac version at this point, it might fallow later on.
  • fixed memory leak in OpenGL renderer
  • added support for Win32 cross-compilation with mingw32
  • added gamespeed adjustments via KPPlus, KPMinus, KPEnter
  • added single-stepping the game with 'S'
  • added better application icon
  • added access to all levelsets in developer-mode (Ctrl-m)
  • added 10 new Halloween levels

Sunday, October 23, 2011

Back to Ubuntu: Xubuntu

That short trip to Linux Mint Debian wasn't all to successful, as Debian unstable doesn't feature Gnome2 either and thus a dist-upgrade wreaked that install. Which of course also rules out Debian as alternative to Ubuntu. So what next? Back to Ubuntu, but this time a fresh install of Xubuntu, to work around any trouble that might have been caused by years old config files floating around on my old install. So impressions so far:
  • the installation looks rather unpolished and takes a bit longer then Mint
  • installation doesn't allow you to not install a boot manager, it will overwrite whatever you have
  • the install offers btrfs for root even so btrfs doesn't play nice with grub (error: sparse file not allowed)
  • once installed, Xubuntu looks good, extremely similar to Gnome2
  • most problems I had previously, like the broken volume applet are gone
  • amdcccle, the ATI control center, does not work in Xubuntu, it segfaults for some reason when trying to apply the config, the driver itself however works, so it helps having a finished config around
  • default greybird theme looks good, but misses the scroll-up/down buttons on the scrollbar and theme editing is currently not possible with XFCE
  • there doesn't seem to be a way to move the bluetooth applet that's actually the notification area and there is a pixel or two to grab it at the side
  • trouble with graphics tablet in Gimp are a known bug, can apparently be fixed with packages from ppa:xorg-edgers/ppa, however that is risky, with xorg-edgers quiting Gimp kills my xserver
  • Gtk3 looks kind of crap, as it's not theme compatible with Gtk2 and I haven't yet found a Clearlooks equivalent
  • eog is broken, displays everything with a completely wrong gamma, i.e. makes everything pretty much a white page
  • Rhythmbox didn't detect MP3 player, needed to "apt-get install gnome" to fix that, not sure which component exactly did the trick
  • I can mute, but not unmute via keyboard, have to click unmute from the menu
Overall, so far so good, when nothing unexpected pops up, I'll probably stick with Xubuntu for now.

Linux Mint (Debian Edition) Impressions

With Ubuntu kind of going downhill with no quick fix in sight I decided to try another distribution. Linux Mint looked like a decent choice, so here a few quick impressions:
  • Mint comes in three different versions, two of which are based on Ubuntu I guess and the other on Debian, as always, the differences and incompatibilites between these versions are never properly explained, so as a user one ends up rather confused
  • Mint Debian is, as the name suggested, a Debian plus some additional tweaks, it is based on testing and thus like testing gets regular updates
  • as usual for Debian testing packages break all the time, currently Blender isn't installable and there is no Wine in the testing repositories, also you will see a lot more useless questions on dist-upgrade then you see on Ubuntu, stuff like this was why I moved away from Debian in the first place many years ago and it doesn't seem to have improved
  • Mint Debian still has good old Gnome2 it works as expected and feels so much better then the incomplete garbage that is the gnome-fallback in the current Ubuntu
  • Mint Debian doesn't support installing on an LVM root, so better have a free regular partition handy, sad to see that LVM is still a niche oddity, not a standard feature of the Linux toolbox
  • Mint can be installed from a live system and the install is very fast, essentially just six clicks and you are done in 15min, tweaking it to your liking will of course take a lot longer then that
  • /etc/defaults/rcS has UTC=yes, this messes up the hardware clock as my Ubuntu is UTC=no
  • can't use my Rhythmbox database, as the Rhythmbox version on Mint is apperently older then the one on Ubuntu, looks like Ubuntu is running straight from the Git repo, as even the latest source release is to old
  • ATI driver performance with linux-image-3.0.0-686-pae is completely horrible, makes the system essentially unusable, linux-image-3.0.0-486 on the other side is fine for some reason
  • added now Debian unstable to sources.list, lets see how much that breaks, Blender and Wine seem installable with that
  • Debian unstable lead to the installation of Gnome3 and destruction of Gnome2, guess I am back at square one
Overall my impressions of Mint so far are quite good. It's nothing revolutionary and the brokeness of testing is annoying, but it provides a simple Gnome2 desktop that just works and that's really all I need. One remaining question of course is: Why Mint and not just Debian Testing directly? The changes so far seem all to be rather minimal.

Friday, October 14, 2011

XFCE4 Impressions

  • looks very similar to Gnome2
  • doesn't seem to have a proper volume control applet
  • xfce4-mixer lets me mute, but not unmute
  • using keyboard shortcuts for lowering volume doesn't mute it at 0
  • no easy way to configure colors of window borders and GUI elements
  • launcher applet as trouble with custom icons, doesn't accept them, seems to be caused by reusing old .desktop files
  • there is a cpugraph applet, but no netgraph applet
  • GUI styles don't apply properly, some apps seems to get them, others not - caused by Gnome3, Gnome2 apps seem fine
  • problems with windows not maximizing on double-click where caused by to low doubleclick threshold
  • no easy way to lock the screen, one has to use command line tool xflock4 which in turn uses xscreensaver
  • installing xubuntu-desktop and using xubuntu session instead of just plain xfce4 might be a good idea, this fixes some issues with volume controls, among other things
Overall, I kind of like XFCE4, it however feels rather rough and buggy in some , so for the time being I switched back to the gnome-fallback, as it doesn't seem to have the problems with Gtk themes that XFCE4 has. If gnome-fallback will disappear I guess I'll switch to XFCE.

Thursday, October 13, 2011

Ubuntu 11.10 impressions

Quick impressions on Ubuntu 11.10, updates as it goes:
  • no more Gnome2, so if you are using Gnome2 right and have uninstalled Unity the upgrade will render your system kind of unusable
  • even manually installing ubuntu-desktop doesn't fix Unity not starting properly
  • manually installing Gnome3 works, but Gnome3 is junk
  • there is still a gnome-panel that can be manually installed and sort of looks like the old Gnome2 one, but it is rather crippled and under featured compared to what was in Gnome2 (no way to position icons, no applet support as far as I can tell, ...)
  • that fallback gnome-panel is not quite as crippled as it first looks, Alt-rightclick instead of regular rightclick is needed to get to the Add-to-Panel menu, still no way to move icons around properly
  • under the fallback gnome-panel, there hides a Nautilus menu, what a mess
  • XFCE4 looks quite nice, it looks more like Gnome2 then current Gnome
  • old panel icons can be found in $HOME/.gnome2/panel2.d/default/launchers
  • something wrong with Gtk+ themes, some apps like Rhythmbox and gnome-terminal don't take them, gnome-tweak-tool doesn't seem to help
  • Gnome3 doesn't even start on my other computer
  • the new lightdm login manager can no longer be configured for autologin via the GUI
  • gphoto gvfs stuff is preventing Sansa Clip+ from being properly recognized again, deleting all gphoto related stuff in gvfs-backends should fix this
  • Rhythmbox is completley broken, for some reason it kills the Sansa Clip+ mount point and makes dmesg reports filesystem problems, even so the player mounts fine, fscks fine and can be access with command line tools without any issues, weird -> fixed by disabling the MTP player plugin
  • Rhythmbox has forgotten where to store music files, it's now trashing my $HOME -> location can be changed in the preferences, podcast has a separate location from the music library
  • Sansa Clip+ write speed is down to 300 kB/S, used to be around 7MB/s or something like that
  • in gnome-fallback the notify stuff currently goes crazy, using 100% CPU
  • halt no longer shuts the computer down?!
  • Firefox now crashes a lot
  • GDM doesn't start any more
  • notifications show up on the wrong screen
  • display of volume control doesn't work, wrong screen, wrong size, doesn't update as volume change
  • the Windows list applet crashes a lot on startup
  • Gimp now crashes, creates garbled lines with graphic tablet
  • file is broken, can't detect mp3 files
  • Rhythmbox converts MP3s to OGG when drag&dropping onto the player, even so it doesn't need to
  • ...
So first impression so far: Stay the hell away from Ubuntu 11.10, if you have a usable Gnome2 desktop right now, Ubuntu 11.10 will trash it and won't give you any easy way to restore it. gnome-session-fallback allows to retain most of the Gnome2-look in Ubuntu 11.10 aside from a minor issue, but it requires a complete reconfiguration, at it won't take over any of the Gnome2 settings.

I am now on my way to install the Debian edition of Mint and see how that goes, at least the liveCD so far looked pretty good, containing good old Gnome2.

I might be able to warm up to Gnome3 if there is a way to get additional panels and a quickstart icons, but so far I haven't found one. No minimize button in Gnome3, seriously?

Monday, October 10, 2011

Pingus 0.7.4

At long last, Pingus 0.7.4 is out. This release does not yet continue the main story, but it contains all the little improvements and bug fixes that have been allocated over the last few years. As a bonus however this release contains two new levelsets with 27 new levels. This release is source only at the moment and will compile in Linux. Windows and MacOSX versions might follow at a later point. Some more things that have changed in this release are:
  • fixed game not starting when no soundcard is present
  • all halloween and tutorial levels have been converted to a minimum size of 1920x1200 so they can be played in fullscreen without letterboxing
  • new --userdir command line switch to set the directory where savegames are saved
  • menu getting confused by fast succedding clicks fixed
  • level-demo recording and playback are back (files not compatible between x86 and x86-64)
  • window resize support throughout the whole game
  • dirty-rectangles drawing for improved performance with software rendering
  • OpenGL rendering
  • new blackboard graphic
  • Unicode support
  • two new levelsets, "Desert" and "Factory Campaign", with 27 new levels
  • added a man-page
  • deadly fall height has been increased
  • support for prefab objects and groups in the editor
  • cleaned up digger, miner and basher paths
  • added an option menu
  • lots of minor bug fixes
  • bitmap fonts have been generated with anti-aliasing

Wednesday, August 31, 2011

Some notes on capturing video/audio with GLC

Some notes on video/audio capturing with GLC:
  • it's much faster then recordmydesktop, but limited to OpenGL apps, can't capture random desktop regions
  • fast enough for 1280x720 capture on my old computer
  • front buffer capture doesn't work for me, as it includes window borders and distorts the picture, backbuffer capture with "-b back" works
  • audio capture is a bit problematic, installing libsdl1.2debian-alsa, forcing SDL to use alsa with "-j" and killing pulseaudio however seems to have fixed that
  • "-s" captures instantly, otherwise press Shift-F8 to start capture
  • "-i" shows an indicator in the top/left corner when recording, if not given, there is no sign if it's recording or not
  • use "glc-play -i 1 pingus3.glc" to inspect what streams are in a recorded file
  • there are some more options to tweak the compression in glc-capture that I haven't tried
  • gamma in the videos recorded by glc looks wrong, the resulting video is to dark
Complete capture line for Pingus looks like this:

glc-capture -l /dev/stdout -v 3 -i -j -o /tmp/pingus3.glc -b back build/pingus -r opengl -d data/ -g 1280x720

For converting the capture into a regular format one can follow the instructions from the GLC Wiki.

Final video looks like this:

OpenGL 2D Soft Shadows

A quick little test of soft shadows in OpenGL. It's all just simple textures, no shaders.

The video captured with GLC:

glc-capture -f 25 -b back -o /tmp/video.glc -s ../../build/2dshadow

Pingus: Even more svn2git

After Galapix and Windstille, Pingus is now the third project I converted from SVN to Git in short order. Pingus took noticeably longer to convert, even so the repository isn't much larger, but it contains more branches, tags and a bit more history. svn2git seems to have performed well again. There was a bit more cleanup I had to do this time around, as some of the resulting tags, going back to CVS days. Essentially there where two kinds of tags again:


In this case the 'foobar' tags would point to an empty commit created by cvs2svn that would branch of from the main tree, while the foobar@234 would point to the actual position in the main tree. A bit of "git tag -d foobar", "git tag foobar foobar@234" and "git tag -d foobar@234" fixed that easy enough.

Another problem that popped up during the conversion where old tags and branches that I want to keep for historic purpose, but that don't play any role in active development. In SVN one could simply delete those and it would be fine, as they would stay in the SVN history. With Git that is not possible, branches and tags are unversioned in Git and when one deletes them they are gone for good, including the source code to which they pointed. To work around that I converted the branches to tags:

git tag archive/branches/foobar foobar
git branch -d foobar

This way the code to which the branches pointed are still around and can be converted back to a branch via a simple checkout. The old stuff still shows up in "git tag", but as one uses that command a lot less then "git branch", it's not really a problem. The process for the obsolete tags was the same, I moved them to archive/tags/.

I also did a bit of normalization with the release tags, which game in numerous different forms, such as release_0_1_0 or pingus-0.7.2. I renamed them to the semantic versioning scheme, i.e. "v0.7.0".

Final repository is available at:

The few subprojects floating around in the old SVN trunk/ will be converted in the coming days, some of them probably ending up on GitHub instead of in the Pingus repository, as they are not all that Pingus specific.

Saturday, August 27, 2011

Windstille: Another round of svn2git

Did another round of converting an SVN repository to Git yesterday, this time Windstille. Instead of going the manual route I used svn2git this time, which automates the renaming of remote branches/tags to local ones. I haven't verified in depth if everything worked out right, but it seems to have performed well enough. Even svn2git however leaves some traces of SVN behind that have to be cleaned up, namely a few svn remote repositories and a few entries in .git/config, but that is easy enough to fix. The final result can be found at:
Why Google Code and not GitHub or something else? First of course the obvious, Google Code now supports Git, which it didn't some month ago. More importantly however Google Code has a 4GB space limit, while GitHub has a tiny 0.3GB space limit. Google Code also now finally has support for multiple Git repositories in a single project, so it's easy to break of all the subdirectories one might have had in SVN, without it getting to messy and without a need to stuck it all into a single Git repository.

Wednesday, August 17, 2011

Converting from SVN to Git

I just converted Galapix from SVN to Git, so here a quick overview about the process.

First thing one wants to do is make a copy of the repository, as the conversion can take quite a bit of time and made require a few restarts to get every detail right. A copy of the repository can be done with svnsync:

svnadmin create /tmp/your_svn_repository
svnsync init file:///tmp/your_svn_repository http://www.googlecode/your_projects_svn_dir
svnsync sync file:///tmp/your_svn_repository

This creates a local repository and copies all the content from the remote, here googlecode, repository in it. One done with that one can start creating the git repository from it, for that there exist "git svn", which not only allows conversions of repository, but also checkins from the Git repository back into the SVN repository if desired, however we are not going to allow this. This is meant as a one way conversion from SVN to Git without a way back.

So next step is:

git svn clone file:///tmp/your_svn_repository/ your_project.git \
--trunk trunk/galapix/ \
--tags tags/ \
--branches branches/ \
-A /tmp/authors.txt \

The --trunk, --tags and --branches do the obvious thing, they tell "git svn" where to look for your branches and tags, as they don't have a fixed locations in SVN. The authors.txt file is a simple text file mapping the SVN account to Git style names, it has the form of:

grumbel = Ingo Ruhnke <>

Where the left half is the SVN accountname and the right half the Git name.

Tho --no-metadata flag strips out meta data that "git svn" would normally insert into the commit messages to allow tracking the Git commits back to their SVN origin. This might have some use if you have references in documentation or bug reports to older revisions, but seems otherwise not be needed, so we strip it here.

The next step is a bit weird. With that "git svn clone" you now have a full functioning Git repository of your SVN content, but something is still wrong. All your SVN tags get converted to remote branches by "git svn", not tags and all the SVN branches are also remote branches, not local ones. I am not quite sure why that happens, part of the reason seems to be because SVN tags don't have to be constant, while Git tags have to be, but not really sure way then they are remote and not local ones.

Anyway, the conversion from remote branches to proper tags and local branches isn't that difficult, just a little ugly. To see everything "git svn" has produced use:

git branch -a -v

The interesting part are the remote branches, listable via:

git branch -r -v

Another way to inspect the repository situation is via:

git show-ref

Converting the branches to tags is a simple matter of doing something like this:

git tag galapix-0.1.0 tags/galapix-0.1.0

Converting the branches can be done with:

git branch local_branch_name remote_branch_name

Some branches and tags might be exist multiple times, once as tags/galapix-0.1.0 and once as something like tags/galapix-0.1.0@723. I assume that is the result of SVN "accidents", i.e. deleting a tag or branch and then recreating it or otherwise breaking clean continuity of the repository. The @{number} branches and tags seem to be the older one, so in case you know what you are doing, you can probably just delete them. There might also be a branch called trunk/, you can just delete that as it should be identical with the master branch you have.

Deleting the old now converted branches is a simple matter of:

git branch -d -r tags/galapix-0.1.0

The final step is cleaning up some remains of "git svn", in .git/config there is a section called [svn-remote] and [svn] that can be deleted and there is a subdirectory .git/svn/ which is no longer needed either.

If that last section sounded a bit messy, it's because it is. I couldn't really find any definitive documentation on how to do any of that the proper way, it all boilded down to some manual for-loop and grep'ing to manually translate the branches to local ones and tags.

Another issue which I haven't really looked deeper into is how the whole process reacts to less clean SVN repositories, i.e. repositories where the content of trunk/ might have been moved around to say trunk/{subproject} or where other accidents might have happened with the branches/ and tags/ directory.

I am also still a little clueless on why "git svn" creates everything as remote branches, not as regular local branches, its highly likely an artifact of "git svn" allowing commits back into the svn repository, but no idea why there isn't an easy way to disable that.

Saturday, August 06, 2011

xboxdrv 0.8.2 released

  • added click-press, click-release, click-both button filter
  • added delay button filter
  • added simple Python script for response curve generation
  • added PDF Afterglow AX.1 Xbox360 controller support
  • fixed swapped keys in KeyAxisEventHandler

Monday, August 01, 2011

Review: Descent 3: Mercenary (PC)

Descent 3: Mercenary is a seven level expansion pack to Descent 3, it was released in 1999 six month after the original game. The games story takes place inbetween the end of Descent II and the first few missions of Descent 3. The player controls this time around not the Material Defender, like in other Descent parts, but a mercenary that is involved in attack and sabotage missions, some of those attacks triggering events happening in the original Descent 3 plot.

The core gameplay of Mercenary is identical to that of Descent 3, new weapons or game objects are not provided as far as I can tell, aside from a few new enemy types. Descent 3 problems are also untouched. The guide bot still moves rather erratically in large environments, which makes it extremely hard to follow, it can also still get lost from time to time and not find the way back, both problems didn't exist in Descent II. Weapon and enemy fire still lack a proper feel for impact, making it hard to judge if you hit something or got hit. Enemy design is also still rather problematic, with enemies shooting to many to fast moving projectiles that make it impossible to properly dodge them other then by wild circle strafing. The game also again contains plenty of unbalanced gameplay situations, where you run into spots one is attacked from multiple sides by multiple enemies, making it hard or impossible to find a save spot. Enemies also reduce your health rather quickly, sometimes in two hits, which often leads to random death before you even know what was going on.

The reset point system from Descent 3 is present again. It will respawn you with your weapons gone and placed on your death spot for recollection without reseting the game world, thus enemies will stay exactly where they where when you died. This keeps frustration rather low, even in unfair situations. The game does however have a few weird spots where you have to do something under a timelimit and failing to do so will result in a failure of the mission, with the player being reset to the start of the level. Thus saving before pressing a switch that might trigger a time limit is needed to avoid running into situations that force a replay of a level.

As with the original game, Descent 3: Mercenary is again rather heavy on the puzzles. A lot of times you will have to press a switch or perform other puzzly acts and not be much involved in combat. Combat takes more of a side role, it's there, but it often feels more like a small obstacle between the current puzzle and the next, not the core focus of the game. The reset system, which often lead to a simple death/retry loop further enhances that feeling, as being actually good in combat provides little if any benefit. The game also introduces a few weird "soccer puzzles", in which you have to push a ball around and navigate it to a specific target, those feel kind of even more out of place then the regular switches. One of those puzzles also felt rather broken, or well, maybe I just couldn't figure out the proper solution. All it involved was kicking a ball through a pipe, except that none of the weapons seemed to have any effect and the only way to push it was with the ship itself. Touching the ball however lead to instant death, no matter how slow and gentle. I solved the puzzle simply by crash, respawn, crash, etc. On the positive side of things I however found none of the puzzles to be as complicated and time consuming as some of the bad ones in the original Desecent 3.

Overall Descent 3: Mercenary is simply more Descent 3, with all the problems and issues still intact. The thing I like about Descent is the fast navigation through narrow tunnels and the way you can manoveur around enemy projectiles with the 6DOF control scheme. In Descent 3 and this add-on, however all the locations are large, making the navigation feel slow and boring and the number and speed of enemy projectiles makes them near impossible to dodge individually and you quickly resort to random circle strafing and random death. The focus on puzzles also just feels out of place. The last boss fight, in the tradition of the series, also feels incredible unfair again and the ending is, unlike the fully animated intro, just a disappointing still frame with a lazy "The End" text, the add-on doesn't even bother to scroll any credits. So while this isn't a bad game, it again fails to reach the real potential that I see in the Descent series.

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.

Wednesday, June 29, 2011

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

Following situation: You have an application or game in Linux that you want to run in fullscreen, but the app doesn't support it or not with the flexibility you want.

Simple Case

In the simple case you will have the problem with an application that allows window resize, if that's the case, the solution is a simple:

wmctrl -r ":ACTIVE:" -b toggle,fullscreen

Which will put the currently focused window into fullscreen, i.e. maximize it and get rid of the window borders and title.

Complicated Case

There are of course also applications that don't do window resize properly or not at all, for those the solution is a bit more complicated. First thing we have to do is get rid of the window borders on move the window to 0,0. As the Gnome panel doesn't allow that, just removing the decorations, which can be done with wmctrl, isn't enough, we have to set override redirect, which will take the window out of the window managers hand and thus allow us to position it above the Gnome panel at the top/left of the screen. So how do we do that? A bit of Python and Gtk (raw X11 would of course do as will, but Gtk makes things a little easier):

#! /usr/bin/python
from gtk.gdk import *
import gtk.gdk
import time
import sys

if len(sys.argv) == 2:
w = window_foreign_new(int(sys.argv[1], 16))
w = window_foreign_new((get_default_root_window().property_get("_NET_ACTIVE_WINDOW")[2][0]))

w.set_keep_above(True) # to raise it over the panel
w.move(0, 0)

This script will either take the currently focused window or a window given on the command line and put it in override redirect mode, as well as position it at 0,0. There is also a keep_above() in there so that the panel won't end up behind the Gnome panel.

The script isn't pretty, bug free or finished, it's actually kind of a mess. The flush() stuff is trying to work around the image move() command getting ignored, but doesn't really fix it. And I am not sure why the set_decorations(0) is needed in addition when doing a set_override_redirect(True). But whatever, it kind of works and if it doesn't just run it twice. Once run the currently focused window should be hanging at the top/left of your screen.

Switching the resolution

A window at the top/left screen is of course by itself not very attractive, so the next step is to switch the resolution, that can either be done manually via the XRandr GUI tools or via shell with something like:

xrandr --output DFP2 --mode "640x480"

Exact commands will of course vary from system to system. The fun part is that this also allows multi-monitor setups:

xrandr \
--output DFP2 \
--mode "640x480" \
--panning "640x480+1280+0/0x0+0+0" \
--output CRT1 \
--mode "1280x1024" \
--panning "1280x1024+0+0/0x0+0+0"

This would put the right monitor into 640x480, while keeping the left monitor at its native resolution, thus you can browse the web while playing an old game in Dosbox or whatever.

Other solutions and remaining issues

Another solution to the fullscreen problem is to run a separate Xserver for the game with the right resolution and without a window manager, this allows clean switching between game and desktop, but doesn't allow multi monitor use.

Mouse/keyboard grab is another problem that might be worth some further exploration, some games depend on it, so it might be worthwhile to force it, while other don't let you ungrab the mouse without exiting the game. I haven't really looked into either, but at least for the more popular things like Dosbox, there is generally a keyboard combination to break it (Ctrl-F10). Another problem with grab is that it is often to tight, i.e. commands like Volume Up/Down will get eaten by the app and not make it to the window manager which is quite annoying.

It might also be worth to cleanup the above script into a proper wrapper that can be used around the game executable to make the whole process of override redirect and resolution switch fully automatic. Integration into the window manager would also be nice, to make it a more standard part of the Linux desktop experience, not an dirty hack.

Saturday, June 25, 2011

Review: Descent 3 (PC)

Descent 3 was developed by Outrage Entertainment and released in 1999. The game follows the same base gameplay that the previous two games in the series did. The player is in control of a small spacecraft that is used to navigate through underground mines, caves and similar structures. Descent allows full six degrees of freedom controls in those environments, thus flying through a hole in the roof or diving through a hole in the ground are very common occasions.

The graphics in Descent 3 stay relatively close to those of the predecessor games, but thanks to Direct3D or OpenGL now allow much higher resolutions and texture filtering. Even so the polygon count is higher however the graphics are largely unspectacular and can look rather block in spots, the one exception being the light effects. The game now as a nice little glow effect around light sources and missiles and laser fire, as in the previous games, continue to light up the environment. Thus firing a missile through a dark cave will give a nice illumination of the cave as the missile flies along. The game also allows the player to fire flares or use headlights on his spaceship to light up dark caves. While all those effects might technically not be all that impressive by today's standards, I haven't really seen any game that really replicated them this well either.

On the control side Descent 3 offers a wide variety of configuration options and allows to map essentially every of the six axis it needs to either a button or joystick axis, thus is works quite fine even with modern day gamepads. An auto-leveling function is available when one doesn't have enough controls available to control the roll of the ship comfortably and while this function works for most part quite fine, I found it a little odd that it often leaves one off by a few degrees, instead of given a perfect horizontal level orientation. Another odd thing with the controls are some of the key mappings, unlike the main vehicle functions, which are completely configurable, some auxiliary functions are not and mapped to weird key combinations. Saving is mapped to Alt-F2 and viewing the log messages is mapped to Alt-F8 and releasing the guide bot is mapped to F4, what makes this weird is that those are all functions one regularly uses in the game, essentially the only function for which one needs the keyboard, so having them mapping to key-combination is rather uncomfortable. Viewing the log messages with Shift-F8 furthermore doesn't pause the game, so it can get really awkward when one gets surprised by an enemy while reading the log.

The control scheme I used for ship control was left-stick for horizontal-strafe and forward/backward, right stick for pitch and yaw and LB/RB for vertical-strafe. I mapped roll to dpad left/right, but didn't use that much in actual gameplay.

The game provides the player with three types of weapons, a gun for firing lasers and other small projectiles, a missile launcher and the ability to drop mines. Upgrades to those weapons are spread throughout the levels or dropped by killed enemies. I found the mines, from which there are even different types, to be rather useless throughout the single player campaign, one acquires them to rarely and the fighting is to hectically to really allow strategic placement of them, they seem to be build for multiplayer use. Same is true for some of the missile types, which while extremely powerful, are so rare that one never really has the change to use them in a good spot. Furthermore the game is rather bad when it comes to weapon, whenever the current weapon runs out of ammunition, the most powerful one will be selected, the problem is that this often results in weapons getting selected that should be reserved for special purposes and fired by accident. Thus one not only wasted a special weapon, but often even dies as result, as their damage radius is to large for them to be used in normal combat.

Aside from the combat mechanics, a central part of Descent is the guide bot. This little bot, whose beeping noises are reminiscent of R2-D2's in Star Wars, is a fundamental helper in guiding the player through the complicated levels. It keeps track of the next mission objective and will show the player the way to the target. It will also light the way by shooting flares into walls and occasionally shoot one into the players windshield by accident. When the players ship catches fire he will also act as fire extinguisher and put the fire out. The guide bot adds a great amount of personality to the game, as it is a small little dependable helper, that helps you through his actions, not by dialog and seeing it flying around the ship trying to get the player to follow him is jut cute. It's implementation has a few small issues, sometimes it will get left behind and not find the way back to the player on his own and in large open areas he seems to fly around a bit randomly and untargeted, marking it hard to follow him, but especially in the more tighter parts of a level the bot is a great orientation help and does this job in a much more interesting and charming way then the anonymous navigation lines and arrows used in modern games.

The enemies in Descent 3 are yet again a whole bunch of industrial robots that have gone aggressive due to a virus, there is a wide variety of enemies, with unique looks and weapons. However where the game falls flat is in how it uses those enemies, far to often it just pushes the player against an overly large number of enemies, making the combat chaotic and random. Frequently one simply gets overpowered by enemies and dies before even realizing what was going on. The enemies also all act with the same six degrees of freedom as the player does, this sadly removes the opportunity of a tactical approaching to exploit the enemies weak spots, instead most of the time one just circle strafes a lot and fires whatever weapons one has left. This is also true for the few boss enemies in the game, which really don't seem to allow any kind of tactical approach other then just shooting a lot at it. Enemies also have a noticeably lack of hit feedback, so it is often not clear if one is even doing any damage.

The way the game handles death and respawn is rather interesting, similar to Bioshock's Vita Chambers, the game will reset the player when he dies, but won't reset the rest of game world. The players collected weapons will however remain at his position of death and have to be required. While this removes a lot of the frustration one might have in the game, it removes any challenge, especially when it comes to boss fights, one simply fires what one has, dies, respawn and fires again. This makes the fights tedious and uninteresting. Furthermore one sometimes loses all the weapons in the process, as fighting the boss doesn't leave time to recollect the lost weapons and the next level might trigger before one has managed to do so. However I only ran into that issue once in the game. On normal levels the guide bot has the ability to search for the lost items so that they can be recollected even when one doesn't remember where one lost them.

As far as story and setting go, Descent 3 is a weird mix. Intro and outro cutscenes, while technically primitive, are quite well done and have a bigger emotional impact then one would expect from this type of game. However they don't really factor into the gameplay itself. There are some rare voice communications that inform the player of the mission goals, but it is so rare and limited to the start of a level, that at the end of it, one regularly forgets why one is even there. The mission briefings at the start of a mission don't really help much either. Essentially without the guide bot remembering what one has to do next, one could easily get completely lost. The setting of the game have however a good amount of variety, one isn't limited to caves and mines, one also goes flying through subway stations, invades factories and goes flying on the surfaces of Venus and Mercury, but again, the story just enough to turn all of that into a larger connected experience. It all feels a little random and is rather hard to follow. The game also throws in a few puzzle sequences here and there which feel a bit out of place, after all flying in a spaceship isn't the best place to push switches.

Overall I am rather split on Descent 3, while I still love the core six-degree-of-freedom gameplay, the guide bot and the creative enemy design, the game build around it just feels rough and unbalanced. Some of the boss enemies, especially the last one, essentially felt completely impossible to beat in any sane manner and beating them by abusing the respawn mechanics didn't felt very satisfactory either. Regular enemies don't far much better, to often one is just overpowered by them with no real way to fight back. Tactical fighting almost never works and it all becomes a hectic circle strafe fest that isn't much fun. The game also features a few points where enemies can endlessly respawn, which seem to serve no other purpose then annoy and frustrate the player and especially late in the game those things can become a huge problem those spots are combined with time consuming switch puzzles one has to do while being attacked by enemies. Often even without proper hints of what one needs to do. Especially later in the game it became just more frustration then it was fun.

Technical notes: Playing the game in Wine in Linux didn't work for me. First stopping point was the video-tab in the setup dialog that freezes. This could be worked around with a regedit hack. Once past that the graphics themselves worked fine and where fluid, the sound however was completely broken. I ended up playing the game in Vista. To map the Xbox360 gamepad triggers to missiles and laser shots I had to use XPadder, as the game didn't allow doing that with its internal configuration.

Wednesday, May 25, 2011

xboxdrv 0.8.0 released

  • added --no-dbus option
  • added ABS/axis support to macros
  • added Street Fighter Fightpad support
  • added example config for Microsoft Ergonomic 4000 zoom wheel
  • added example config for Star Wars: Tie Fighter
  • added rel-repeat value of -1 for sending an event only once
  • added support for chatpad on bcdVersion 1.14 controller
  • added support for relative filenames for macros
  • fixed daemon mode
  • fixed deadzone filter issues with MIN:MAX:SMOOTH
  • fixed endian issues in Xbox360 and Xbox360 wireless controller
  • fixed wireless controller not getting reset to neutral position on disconnected
  • changed the meaning of --timeout 0
  • removed boost::thread dependency
  • switched from threads to asynchronous USB handling and glib

This releases contains a large scale switch to asynchronous USB communication, so expect some bugs to pop up. Daemon mode is working again. Bug reports are welcome.


Tuesday, May 17, 2011

Review: Dead Space (PC)

Dead Space is a sci-fi survival horror game developed by Electronic Arts and released in 2008. In the game the player takes control of engineer Isaac Clarke, who battles himself through hordes of mutated creatures on the spaceship USG Ishimura. The setting takes quite some inspiration from movies like Event Horizon, while the gameplay is very similar to that of Resident Evil 4.

As far as story is concerned there really isn't much positive to say about Dead Space. A few moments after arriving on the deserted USG Ishimura with his team essentially all hell breaks lose and Isaac is separated from the rest of his surviving team. They continue to stay around to give new objectives via video chat, but one never directly interacts with them or anybody else for that matter over the coures of the game. A further frustration is that many of the story sequences are implemented as essentially a cutscenes behind a window, which stops you from interacting with the events unfolding and makes you a passive observer. Dead Space isn't the first game to use this cheap trick, but it uses it in almost every single character interaction which makes it feel incredible fake and forced. Every now and then the game will also have you run into an audio-log, but those rarely contain anything to interesting. On top of that the few regular text-logs that the game provides feel like they should have been audio-log, as they slow the game down unnecessarily.

The story follows essentially all the stupid genre cliches, everybody except the player character will die and there is some obvious betrayal down the line. Most of the objectives also feel rather tedious, as Isaac is essentially send from one section of the ship to the next to fix something, only to have another thing break a few moments later to turn into his next objective. This makes the whole plot feel unfocused and improved, as there really isn't much of a real build up or senes of accomplishment. The bit of backtracking that this causes is however not really an issue, as it is quite rare and most of the game is very linear.

The gameplay is easily strongest part of Dead Space. While it does take many obvious inspirations from Resident Evil 4 it goes a different route with the monster killing, as it doesn't just matter how many times you shoot an enemy, but it becomes more important of where you shoot them. Limbs can be shoot of and in turn will slow an enemy down and they take much more health then a regular body hit. Most enemies will also die after a specific number of limbs have been detached. A limited stasis power can be used to freeze enemies on the spot to give more time for aiming at the limbs. This mechanic of dismemberment is quite fun for most part, as it requires a more thoughtful approach to put down enemies then just the regular spraying of bullets. The weapon design is also special, as it doesn't follow the regular pistol, shotgun, assault rifle, etc. design, but instead each weapon, maskeraded by the game as an engineering tool, has a unique feel to it, thus you have cutting weapons that are either optimal for many short range cuts or weapons that excel at precision cuts in the distance, while a flamethrower will help to get rid of swarms of small enemies. Weapon upgrades are done via power nodes that can be collected throughout the game or bought from the shop, upgrade itself happens on a benches that are again scattered throughout the game.

Aside from the weopons and the statis power the game also provides you with a kinesis power, that works somewhat similar to the gravity gun in Half Life 2. It is hovever only used for very simple tasks such moving a piece of machinery from one location to the other or launching an explosive container against an enemy, elaborate physics puzzles aren't provided and in general the game doesn't really have any real puzzles, just a few switches to press to make machinery go.

The inventory management, along with a shop and storage system, also takes quite some inspirations from Resident Evil 4, but feels a little misplaced in this game. You never have to pick up puzzle relevant objects, thus your whole inventory is only used for ammunition, health packs and a few other items, but unlike Resident Evil, the inventory here feels huge, it can hold all the health packs you want along with more ammunition then you will ever need, thus there never is much of a trade off to make on what you want to take with you, you simply take all of it. Weapons are placed outside of the inventory and you can always carry four with you. You might still run out of inventory space every now and then in the beginning of the game, but that's just because you get overfull with ammunition and health packs and haven't run past a store to drop it off. Later in the game suit upgrades will increase your inventory space even more, so that you will essentially never run out of space again. A little annoyance however in the rare instance when you do run out of space is that the game won't let you use things in place, so instead just using a health pack, you have to first put it in your inventory, which means when that is full that you first have to drop an item, pick up the health pack, use it, the repickup the item you dropped. Not much of a practical problem, but a really cumbersome and ugly way to do such a basic task.

While Dead Space obviously tries to go for horror, I found the horror aspects to be pretty much non-existant, yes, it is a dark game, sometimes only illuminated by some flashing lights, has all the monster growling filling the audio channel and the occasional try at a jump scare, but it all feels extremely formulaic and predictable. The heavy use of monster closets and the overuse of monster types doesn't help either. You simply get used to it all very quickly and the worst the game will do to you is give you a headache, as the contrast between dark environment and flashing lights can get a little annoying. The moments where the game gets atmospheric are the rare moments where it breaks away from the cliche monster growling and lets the player go into a vacuum, in those moments the background sound fades away and you can't hear much more then your breathing and your food steps, everything else is completely muted away, which not only gives everything a nice space atmosphere, it also makes monster harder to spot, as you can no longer hear them.

On the technical side of things Dead Space is very solid, the graphics look very detailed and run fluidly on max settings without a problem on a ATI HD5670. However the games art direction looks a little boring, as you run mostly through the same looking dark corridors over and over again. The game never really gives you a very good sense of scale for the spaceship you are on, even the rare moments where you actually go out into space feel very corridor like and you almost never really have an open window or something along the lines to look out onto the rest of the ship.

On the control side the game supports the Xbox360 controller out of the box. One issue I first had with that control scheme however was the way it handles turning on the right analog stick. The game employs a huge deadzone followed by a fast character rotation, which makes it hard to do small turns. This issue was made much worse due to the heavy delay that was caused by Vsync, switching Vsync off however fixed that. The problem with small turns still existed, but one gets used to it quite quickly, especially as it only exists in walking mode, not when aiming, thus it becomes actually useful, as it allows quick 180° turns while still allowing precise aiming. A quick 180° like Resident Evil has isn't present in this game.

The way the game handles the HUD is interesting, aside from the main menu, it doesn't use any actually HUD on the screen, instead it sticks everything in the game world, be it ammunition, health or even inventory and the game map. While that works well for health, ammunition and especially the way points, it is a bit more troublesome for the inventory, map and other normal GUI elements, as those will be displayed as a hologram floating in front of your character, which works fine in normal situation, but when in a tight corner or when an object is in the way it can cause the camera to tilt in such a way that you can't actually see the inventory screen properly or fonts you want to read can become to small as the camera might be to far out.

The physics engine also has a few issues, the main one is simply that all the dead bodies in the world are physically interactive, that by itself wouldn't be that bad, the problem is that they have no weight to them, thus everything you run into will go flying through the room in a highly unrealistic manner. In some instances this will even cause some actual gameplay confusion, as you can't really tell if the monster twitching on the ground is still alive or if it is just the physic engine that hasn't yet stopped jiggling the body around. In one instance I also had the physics engine fail on a puzzle that required me to push a battery into a slot, the battery would just fall out of the slot again and not register as properly inserted.

The save system is also of questionable quality, while the game is filled with reset points throughout the game, regular save points are much more rare, you only come across them every 10 or so minutes. The save dialog also misses a way to directly save to the next free slot, thus you have to always scroll through the list of all your past saves to make it to a free slot, this pulls you out of the game on as it makes saving much more cumbersome then it should be. The save system also has the problem that it keeps stores, upgrade benches and savepoint separate, thus you will often encounter one without the other, which can require some backtracking as you might want to buy a few power nodes to upgrade your weapon before using a bench.

Overall Dead Space is a technically solid game with some good gameplay concepts, that however aren't enough to carry a full game with such a forgettable cliched story. Especially the end game was rather disappointing as the game doesn't get more interesting with time, it simply throws more and faster versions of the same enemies at you. This also makes the formerly thoughtful enemy dismemberment overly chaotic and luck based. The overall difficulty however is rather mild on medium setting, as even when you die you always have a checkpoint very close and most monsters can be defeated without a problem when they don't catch you by supprise. I never found ammunition to be a problem, one might run out of ammunition for the favorite gun every now and then, but one generally has plenty of stuff left for the other weapons. The story goes nowhere and it just becomes tedious to go fix one issue after another without seeing much new. NewGame+ in Dead Space is also heavily flawed as it only allows you to reply the game with all the collected weapons on the same difficulty, changing it is not allowed, this makes NewGame+ sadly ridiculously easy and steels the fun of playing the game on a harder difficulty with a fully equipped character. The game is around 12 hours long or around 9 hours when you don't count the death and retries.

Monday, May 16, 2011

Some more faces for Naev

Some more character graphics for Naev:

Full resolution graphics are available via git and licensed under GPLv3 and CC-by-sa-3.0:

git clone

Saturday, May 14, 2011

Review: Hydrophobia: Prophecy (PC)

Hydrophobia is an episodic action/adventure developed by Dark Energy Digital, in late 2010 for the Xbox360, with a PC version followed in mid 2011 released on Steam and a PS3 version later that same year. The game is set in the near future and puts you in the role of Kate Wilson, a systems engineer on the city-sized ship 'Queen of the World', who after a terrorist attack has to fight for her survival and stop the terrorists.

The game currently exists under three names, "Hydrophobia", "Hydrophobia: Pure" and "Hydrophobia: Prophecy". The first one was the original Xbox360 release, Pure was the name of large patch for the Xbox360 version that fixed not only a few bugs, but also reworked large parts of the game, such as the controls, while Prophecy is the name of the PC and PS3 versions, which are mostly identical to the Pure version, but contain additional tweaks, a new short section after where the Xbox360 version ended and completely recast and revoiced one of the main roles.

The core exploration gameplay of Hydrophobia is very similar to that of Tomb Raider, with all the jumping, climbing and swimming that that implies. The shooting on the other side follows the direction of modern cover-based shooter. What makes Hydrophobia special are its water physics, which unlike other games aren't build on pre-scripted events, but follow actual physics, thus if you have a room filled with water and open up a door into an empty room, water will flow from one room to the other and the created waves will splash you around. This is essentially the first game to ever try that.

The story of the game is mainly delievered through constant voice communication with your operator, who provides you with information on what to do next and what the terrorist are currently doing. Where needed the game also falls back to classical cutscenes.

The gameplay follows mostly a linear structure, but containts a bit of backtracking and gives you the option to hide the objectives marker, which forces you into a more exploratory style of play. This works reasonably well, as a lot of times you can navigate the world simply by hints from the voice communication. If needed the game also provides a map
and a log of your next objective. The game also provides a way to remote control CCTV cameras or remotly open doors, which is used for a few puzzles, but otherwise not all that impactful on the game overall.

Overall I very much enjoyed Hydrophobia. It is by no means a perfect game, as there are still quite a few bugs left, which the developers are currently working on with a new patch on an almost daily basis and the performance of the game isn't so great. But the water physics of Hydrophobia are pretty much unmatched, they essentially put an advanced form of what Wave Race did with water physics into a Tomb Raider-like world. Making the whole world feel much more dynamic and interactive then your regular static game world, as opening a door or shooting a glass panel can flood the room and completely change the way you have to fight.

The biggest problem I have with Hydrophobia right now is that it still feels kind of like an incomplete game, it is planed to be episodic in nature and the 4-5 hours it takes to complete it seem appropriate, but it doesn't really feel that way, it feels more like the first third or so of a regular full game and thus the story ends rather abruptly with not much of a conclusion. There are also numerous gameplay elements that are under used. You for example have numerous types of ammunition, but the basic sonic rounds, of which you have an unlimited supply, work the best most of the time, leaving little need to ever switch to anything else. A few subplots are also not only go without conclusion, but really never even fully opened up, they are kind of hinted at, but then never go anywhere.

Aside from the performance issues the game also has some trouble with the audio, which currently seems very chaotic and badly mixed. The dialog between characters comes out fine, but for example the sound of enemies shooting at you is often muted away by background sounds, making it hard to spot and react to enemies.

In the end, even with those issues in mind, it is however still a fantastic game that leaves you simply wanting more. It is one of those rare games that moves the gaming world a step forward and provides you with a way to interact with the game world you haven't seen before.

Tuesday, May 10, 2011

How to use the GOGDownloader in Linux

The GOGDownloader is a small little tool used by (Good Old Games) to download their games and while running it under Wine works fine, it doesn't integrate into Firefox and thus clicking the "Add to GOGDownloader" link responds with a useless:

"Firefox doesn't know how to open this address, because the protocol (gogdownloader) isn't associated with any program."

Integration however is reasonably simple and can be done with two lines of gconftool:

$ gconftool-2 -s /desktop/gnome/url-handlers/gogdownloader/command '/home/juser/bin/gogdownloader %s' --type String
$ gconftool-2 -s /desktop/gnome/url-handlers/gogdownloader/enabled --type Boolean true

Where gogdownloader is the full path to a script that runs the GOGDownloader, as I use a separate WINEPREFIX for every Wine app that looks something like this:


set -e

export WINEPREFIX=/home/ingo/games/gogdownloader
cd "/home/juser/games/gogdownloader/drive_c/Program Files/"
wine GOGDownloader.exe "$@"

# EOF #

Friday, May 06, 2011

Flattr News

Three interesting Flattr news bits that you might have missed:
  • you can now have Flattr buttons without paying the previously mandatory 2€ minimum donation per month, so Flattr is now free to try, hopefully that will increase its adoption outside of Germany
  • you can now directly donate money to another person via Flattr without using the whole cake-slice per month method, it is still anonymous and thus not suited for buying things
  • you can now flattr a person via their Twitter account, even without that person having a Flattr account, people flattered in this way can then claim that money by registering with Flattr
For those that don't know, Flattr is a micro-donation service that allows you to give very small amounts of money to projects you like. The recent re:publica talk of Peter Sunde contains some more updates, along with a short intro video for those that don't know what Flattr is.

Thursday, May 05, 2011

Review: Dark Void (PC)

Dark Void was released in 2010 and developed by Airtight Games. The game mixes regular third person shooting with Crimson Skies like air combat, a previous game form Airtight Games. The story focuses around a cargo pilot that while traveling through the bermuda triangle got catapulted into a another world where he has to fight of on alien invasion that targets earth.

The game starts out with a ridicoulus long installation routine, that for some reason took two hours here. Not sure what went wrong there, it might have been a broken DVD, but I could copy data from the DVD normaly just fine, only the installation worked at a snails pace. Once the installation was done the game however ran without any issues.

The story of Dark Void makes a rather rushed and unfinished impression, as it wastes basically no time in actually introducing the setting or characters and instead has you pretty much fighting right from the start. Even throughout the later parts of the game that initial confusion doesn't really clear up, as character are barely ever properly introduced and the motivations for the next mission barely ever properly explained. In addition to that everybody seems kind of unsuprised at what is happening. Aliens in the bermuda triangle? Apperantly nothing to unusual in Dark Voids universe.

Most of the story is told through regular non-interactive cutscenes and while those cutscenes themselves are fine with good graphics and solid voice work, there just aren't enough of them to really piece together a coorent story. In a few rare spots the game also uses dialog between characters to tell parts of the plot, but those parts feel rather awkward, as you have to simply run behind another character while the non-interactive dialog plays, which turns it into more of a chore then an interesting way to deliver a story.

The fighting is split into air combat and third person ground combat. While there are a few sections where both can be used together, a very large part of the game is spend either completely on ground or completely in the air. The split between both air and ground combat is around 40/60.

Ground combat follows mostly just regular third person shooter conventions. You can take cover, blind fire, etc. Melee attacks are possible, but I found them hard to pull of, the game seems to require you to stand in an exact position relative to the enemy or else it just won't register your button press. A special feature of Dark Void is the vertical cover that allows you not only to take cover behind the regular boxes, but on the ledge of a platform, to either fire up or down. Enemies themselves have the same ability and thus a small part of the game is spend climbing up towers or other vertical structure while fighting enemies along the way. However the vertical cover doesn't really change much of the core gameplay, as it plays pretty much like regular cover, only the camera, which in those modes looks straight up or down causes a bit of initial confusion as you enter or leave vertical cover. Climbing between platforms happens via canned animations that leap you from one platform to the next, Tomb Raider-like climbing mechanics aren't present in this game.

When in the air the game uses pretty standard air combat controls, you can brake, you have a boost and a gun. A press of the A button will switch you to hover mode. The second analog is used to trigger special maneuvers such as 180° turns or dodging. Enemy planes can be captured via a short quick time event sequence, once captured they provide a bit of additional firepower and production. When hovering the camera still tries to stay in the over the shoulder perspective, will can get quite a annoying as it makes it impossible to see your feed and thus judge distance when landing. A further zoomed out camera would have been prefered.

The game features six weapons that can be upgraded over the course of the game, however as the money you need to collect is hard to come by, you will only ever manage to fully upgrade two of them and pretty much ignore the rest. The game also gives you little reason to ever switch weapons, as all of them pretty much feel equally ineffective against enemies. Most enemies can take a full magazine before going down and there don't seem to be any discernable special hitzones to speed it up. This makes combat often very tedious.

The graphics are pretty good overall and run quite fluid on the PC. They also feature some nice looking crepuscular rays on the higher settings. Character art leaves something to be desired, as the faces look kind of weird. In some interior sections the graphics can however get quite dark, making it hard to really see anything, even with a maxed out brightness setting.

Overall this games leaves a rather mediocre impression. The few moments where you can freely switch between air and ground combat and use each of them to your strategic advantage can be good fun and in those sections the game manages an impressive sense of scale. But far to much time in the game is spend in regular third person combat that simply feels boring and unexciting. The number of different enemies is extremely limited and doesn't really change much over the course of the game. The few quick time events that the game uses to take over an enemy aircraft can also get repetative very quickly as there is only really a single of those sequences that is always the same. In general the game just lacks variation.

The recharging health is also rather troublesome, as it is hard to really get a proper idea of how much health you have left and recharging takes a little long, so you die quite a bit by simply being inpatient. Reset points can also be a little to far apart and uneven, as sometimes you don't get any after a cutscene, while othertimes a reset point will put you past the enemy you where just fighting. Air combat also has its issues, as it never gets very creative, most of the time you spend hunting down the exact same enemy planes and while there are a few nice sections where you have to fight bigger battleships by landing on them, those sections are however very rare.

The setting is certainly interesting and some of the set pieces look quite nice, but the story is completely underdeveloped and gives you very little sense of what you are fighting against or why. The game also overuses waypoints a lot, so instead of figuring out where you have to go next on your own, you are guided by a bright yellow dot. Exploration is pretty much non-existent and the whole experience feels extremely linear.

It is not an awful game by any means, but given the interesting premise it could have been so much more. As is, it is a rather boring third person shooter with some fun, but not really outstanding, flying action. Given that the game sells for $5 these days I would still recommend it, as there just aren't very many games that have you flying around with a jetpack, just don't expect anything to special. It is fun for the good 7 hours it lasts, but doesn't really do anything that you haven't already seen done better in other games.