Author Archives: [maven]

Shadow of the Colossus

Last week, Shadow of the Colossus finally came out in Europe. It’s a PS2 game by the same team which did the excellent ICO, and it shows.

It also is very hard to talk about it objectively, as it is a very subjective experience, but definitely one that you should try (in addition to ICO), as the games seemingly take place in the same world.

Essentially, the game offers you 16 boss battles (and plenty of replay incentives after that). These are sometimes more, sometimes less frantic, but always distinct episodes, separated by calming travels through the gorgeous but largely barren landscapes (which are barren for a reason; also note this does not imply boring) presented entirely without load times.

Beautiful is not a big enough word to describe how the game looks, but it pays for its epic scale with a less than stellar (but never hindering) frame-rate. I’ve entered a cave, where a waterfall falls out from a shadowed ledge into the bright sunlight that’s entering the cave from above. Or the small touches, like the doves near the altar flying off and leaving feathers behind, sea-sawing slowly to the ground, or the beauty of the water, both being below the surface or simply seeing the blurry reflections.
The animation of the main character, his horse (which you really only have to nudge where you want him to go), and the colossi themselves are moving incredibly well, with a precision and connectedness to their environment (via inverse kinematics) that is rarely seen.
Hats off to the artists and directors (not to forget the programmers, who made it all possible on aging hardware); this game has evoked emotion and thought from me on a scale I find hard to believe.

The gameplay probably won’t be to everyone’s taste (best described as a mixture of action and puzzle game), but give it a chance to enchant you. Most highly recommended, both as a game and a story.

Wavelet 3.1

Another week, another release of my Wavelet image compression. I figured out how to do complete embedding, which justifies another release. This means you can compress an image once, and then get different rates by simply truncating that file! The resulting decompressed image will always have the highest possible quality. This sped the code up dramatically as it no longer needs to look for quantizers, it simply writes in the determined (“scheduled”) order until the bit-budget is used up.
I’ve also added the link to the sidebar. Go there for the documentation / changelog.

Wavelet 3.0

I’ve been steadily working on my wavelet image compression for the past few weeks, and in the process have improved it in many ways. These are largely not technical improvements, but rather a huge code refactoring, the creation of decent documentation, reducing memory usage an so on.
You can read the freshly pressed documentation or simply download the source.
It is a fairly simple but thus compact (executable with compression and decompressing is 30kb uncompressed) and relatively speedy image compression library, that provides up to 16 channels per file and combines lossless with lossy compression in a single algorithm, that can even be changed from channel to channel. As it’s based on the wavelet transform, it allows for progressive decoding (which means that if you only have the beginning of the file, you get a lower quality version of the whole file) and can also extract smaller “thumbnails” of the original image.
For encoding it also support various modes, one is to give a mean-square error for each channel (similar to the JPEG quality setting), and another one is to fit the best quality image into a given amount of bits.
Unfortunately, there is a catch with the new version, too (and this is the reason why the sidebar link still refers to the old version). As my primary development platform has moved from Windows to Mac OS (and Linux), I have not updated the Windows GUI (written in Delphi) nor the Web-Browser plugin. I plan to offer new GUIs eventually; the current plan is to write one in C# for Windows and Linux, and do a native Cocoa one for Mac OS.
Finally, I’ve changed the license from the GPL to the zlib-license, which should allow use in closed source applications. If you decide to use it, or even decide not to use it, feedback and suggestions would be much appreciated.

Hilbert Curve

I’ve been reading a bit about the spacefilling curves for my wavelet image compression (take a look here and here).
There is a very nice way to convert from the Hilbert derived key to (multi-dimensional coordinates) described by John J. Bartholdi, III and Paul Goldsman in “Vertex-Labeling Algorithms for the Hilbert Spacefilling Curve”.
They describe a recursive procedure, but in the particular case mentioned above, this can be easily unrolled. It also works very well with fixed point arithmetic. The following source code can be further optimized by storing each point’s x and y coordinate in a single unsigned int, as everything except for the final averaging is easily replicated across the vector by applying the operation to the combined integer.
Continue reading

Xbox 360

The Xbox 360 has been out for a month (in the US at least), and of course I couldn’t resist picking one up here on the 2nd of December. I got the Premium Pack (the only sensible choice for people playing online) with Kameo, Project Gotham Racing 3 and Perfect Dark Zero.

The Console
Heavy bugger. Size is pretty much the same as the old Xbox (except that that had the power supply installed internally) but the pretty newfangled design makes it look much smaller. Power brick is big, but not huge (slightly bigger than my Mac Mini power brick).
Noise is about the same as my old 1.4 Xbox until you insert a game disc. Then it goes a bit mental. You don’t really notice when playing games, but when the music is off during the loading screen, it’s making a fair bit of ruckus.

Project Gotham 3
Good soundtrack (like a configurable car CD changer with different music styles to choose from). And it looks really nice in motion (the motion blur makes it feel really smooth) and the HDR / exposure is really great. No AA I could discern, and I looked pretty closely. Single player is standard PGR2 with a few new variations (time vs. kudos), which serves me well, but is a bit short overall.
Online is a blast (when driving with non-morons), but what really impressed me is that all of the tracks we were driving felt great, in contrast to PGR2 there seems to plenty of jumps / elevation changes (special mention to the parking garage in Tokyo and the ramp before the sharp right corner in London).
On the handling, it feels very similar to PGR2 to me. I think there’s a bit more sideways action going on, but overall rather similar. That said, I sold PGR2 together with my Xbox about 3 months ago, so I cannot really go back and check.

Kameo
Best looking launch game from the 3 I’ve got. The first level and the overall attention to detail (character design and animation) is very nice. Yes, you can see they tried to make it colourful. Yes, they tried to cram every effect known to mankind in there (imagine the ICO shadows looking like the Shadow Trolls… O_o). Yes, the variation of some of the “puzzles” isn’t too great, i.e. instead of puzzles there is something which would be a part of the solution of a bigger puzzle (for example in Zelda).
But still, I think it’s a good game all the way through and some of the vistas presented during gameplay are most impressive. And it’s not too easy (having the hints turned off), some bosses (although there aren’t that many) are quite interesting to fight.

Perfect Dark Zero
Finished this on Secret Agent. Controls feel a bit odd, but workable. Most of the levels use specular lighting and metallic surfaces, even in the outdoor levels. It feels very different to Halo, though. What I really like is the feeling of presence of your character (your shadow, or simply the smoothness of animation when going from 1st to 3rd person). Graphics are good, but not as effects-in-your-face as the beginning of Kameo. Then you get from small tunnels and confined rooms, to a huge detailed hangar with 20-30 enemies, some allies, and a lot of spider bots attacking you, and you realize there’s a lot of power under the hood.
The single player campaign is more of a “high score run” arrangement of individual missions than what one traditionally expects in a campaign. The cut-scenes are fairly laughable as well, but the actual levels are quite distinct (ignoring the shinyness) and offer quite a bit of variation.
This also has a fairly large multiplayer offering, but so far I’ve only tried it once, and realized I don’t get on with jet packs at all…

Xbox Live
Ace. Check in-game, what message you got. Ask someone with a voice message to re-invite you. Voice-chat with someone else while playing.
The interface is well done, but a bit jarring at times: One of the metallic overlay blades pops in left, you make a selection, the blade moves out left and another the blade pops in right. Setting up the console felt like watching a tennis match!
Similarly, when the game is calling console internal Live functionality (like “View gamercard” for example), the look changes from whatever the game looks like to the metal blade overlay (or however you have configured it to look).
Overall, a big (!) step forward for Live, in particular the Market Place and Xbox Live Arcade is very well done (buy the excellent “Geometry Wars Evolved”!).
It is amazing, how different online gaming feels simply due to using the (great) wireless controller. For lack of a better term, you feel much more “free” to move around a bit, or sit slightly sideways (which is bad for you neck, though :().

A few backward compatibility remarks
The VGA cable only supports 60Hz. Ergo, only games that support PAL60 can possibly work. Halo 2 does. But not the included Xbox Live Update and Downloader program. So to play online, you need to connect the LoDef cable (well, anything BUT the VGA cable), hope you have a device to display it on, download the updates and maps, reconnect the VGA cable and you’re good to go. Until they decide to update it again… :'(
And everyone that is running 1280×1024 with he VGA cable may have an incorrect aspect-ratio depending on the game, as that resolution was added with a firmware upgrade and some games (e.g. PGR3) haven’t been tested with that mode and thus display incorrectly (for now).

Revision Control Systems

I’ve been looking for something (other than regular backups) to keep a history of my personal development projects.
Once upon a time, I used Perforce (the free 2 client license), but I’ve never really gotten on with it that well; probably using about 2% of its features. It also uses a rather different terminology to what I am used to.
Looking for alternatives, I ended up trying out darcs, and it is easy to use and does what I want from it. An additional bonus is, that you can work disconnectedly (as each workspace is also a repository) and that it does not try to reinvent the wheel by not having its own server / network protocol. Simply get access to the files any way you can (e.g. http, ftp, ssh, …).
This serves me quite well when developing the same project on more than one machine, although darcs most decidedly does not like keyboard-interactive ssh authentication. It simply fails to get the patches (using sftp), although manual sftp / scp and ssh work fine (using Ubuntu Linux to get a repository from Mac OS 10.4). Using non-interactive key-based authentication works fine, however.
It is written in Haskell, which has some unwieldly dependencies unless linked statically; I have to admit I’d feel slightly better were darcs written in something else (e.g. Python or Ruby). But, as long as it works… 😉
I also took a look at Codeville but that doesn’t even support binary files, so it’s a no-go.
Nevertheless, I’d quite like a comparison between recent, maintained distributed revision control systems (e.g. darcs, arch (?), codeville, monotone, git (?), …).

Automated Downloading

On Patrick‘s insistent encouragement, I’ve finished my “downloading system”. I use it to easily and quickly queue files on a remote machine for downloading (or starting (Bit-)torrent downloads). It consists of two scripts, one written in PHP and running on a web-server which presents a very basic (login protected) interface: A text-area where links to files or torrents are pasted, and a “send” button. The script then creates a cryptographically signed email-message which is sent via the web-server to a POP3 account.
The 2nd scripts runs my actual server at home and is written in Ruby (and it should work on Windows as well as Unix). This polls the POP3 box for mails, verifies their signature to check that it’s authentic, and then processes the URLs contained in the message: “.torrent” files are downloaded and passed to Azureus (which can in theory work from just the URLs, but then Azureus requires a manual intervention by pressing OK in the “Open URL” window), everything else is downloaded with wget.