Gruntz … the game of my entire childhood (right after The Neverhood) and the game I have really fond memories of. And definitely I’m not the only one out there – since the game was produced in 1999, numerous Gruntz communities and fan pages have been created. Unfortunately the time spares no man and these activities were not an exception. Most of them have been forgotten or closed down due to lack of activitity. The one that did survive and is noteworthy is the GooRoo’s Gruntz Forum. The forum has been already running for 14 years (and I’ve been its proud member for 10 years). Naturally it had its ups and downs but thanks to Ed Kivi – the founder of the forum – everything is running smoothly and the forum is prospering. The most of the forum’s activity is based on the work of the Designers, who design custom levels for others to play. At the time of writing there are 619 custom levels and counting! 12 of which are made by yours truly 😉 The most recent level was released less than month ago so the site is doing perfectly well.
I’d even say there’s quite a fandom concentrated around the game. There are illustrated walkthroughs to guide the player through a level, be it standard or custom one (some of them in a video form), there are countless discussions on possible sequels of the game (some are even in the making), there was also a time when comic strips were put together. Oh, and there’s an interesting habit of changing the spelling of words ending with an “s” where it’s replaced with a “z” instead, so we can spot “Switchez”, “Cheatz” and “Toolz” all over the place instead of regular “Switches”, “Cheats” and “Tools”. It’s not only restricted to plurals – just take “Indiana Jonez” as an example (and bonus point to those who know where this phrase is used in the game!). This distinctive notation was introduced by the creators of the game themselves (the name of the game being a subtle hint – “Gruntz”).
Naturally many of the activites of the Gruntz community were related more closely to the game itself. And so all the collectibles and their statistics have been cataloged and indexed, as well as the enemy types (those not encountered during a standard play as well), the game mechanics … it’d be a challenge to find something not yet documented by the community, really. There are new cheat codes being discovered every now and then (I’m planning to put an end to this endeavor soon, but shush …), all the secret levels have been revealed (well, only one, but what a crafty beast she was!). So many new logics for objects have been dug up that have never been used by the original designers. Plenty of glitches and exploits have been found in the game (but that would require the basic knowledge of the game’s mechanics – one exploit would allow the SpringzGrunt to jump over gaps two tiles wide for instance). I could talk about these for hours.
There are however next degrees of initiation that some might not be aware of. That’s because some members of the community are programmers and those fellas are known for their high success rate at breaking everything at will 😉 And as you can easily tell – I’m one of them. So let’s get to it!
In the beginning the programmers had to decide what to work on first. And so they started with one of the most crucial files in the main directory of the game – GRUNTZ.REZ (and the GRUNTZ.VRZ as a natural consequence), which are archives containing the game files. The attempts at opening these archives are as old as the game itself. Back then there was a very popular application called WinRezLT which allowed for modifiation of REZ files. Unfortunately it was given quite a bad name after dozens of antiviruses started spotting malware in it. Many people didn’t want to risk it and started searching for an alternative which as far as I know, did not prove successful. It was the perfect occasion for programmers to really shine as they could provide such tools. There was one problem though – the lack of REZ format specification. And without the knowledge on how to actually read REZ archives no tools could be devised. The situation didn’t change until the discovery of the REZ specification on the Xentax wiki (the author of the specification being Watto himself, the author of the famous Game Extractor). Now let’s take a closer look at the archives.
Chronologically speaking, the next two formats that have been deciphered are: *.WWD (Wap World Document – files containing playable levels) and *.PID (in-game sprites and images). If it wasn’t for the user kijanek6, there might not be any documentation on these formats to this day. He’s not a part of the Gruntz community however, but the member of the Claw Forum – the Polish forum about the game Claw (the game released two years before Gruntz but based on the same game engine). kijanek6 believed that the original editor for WWD files (Wap World Editor) is rather rough and hard to work with. That’s why he decided to create his own level editor for the game Claw called WapMap (available for download from The Claw Recluse download section). Since it would be using the resources of the original game, specifications for REZ, PID and WWD file formats had to be known. While the REZ specification was already available at that point, the PID and WWD formats had yet to be deciphered. All other file formats (like color palettes and animations – files *.PAL and *.ANI accordingly) were way less problematic.
When it comes to the *.PID files, the Claw community had a lot of luck. It turned out that in the CLAW.REZ archive there was an executable with the very promising name: PCX2PID.EXE. The name is rather self-explanatory – its job was to convert PCX files to the file format used by the game engine. Perhaps the program was included in the archive by accident or the developers forgot to remove the file before the final release. Nobody knows and I doubt anyone ever will. Anyways kijanek6 reverse engineered this application and created the PID file format specification. The most difficult part was determining the compression algorithms used (there are two to choose from in the program).
Next in line there were *.WWD files. The situation was very similar – the original level editor was publicly available and it simply had to be reversed. You simply change one parameter in the editor and see which bytes in the output WWD file get modified and you go on like this until the entire structure of the file is clear. There happened to be only two obstacles on the way. Firstly the level editor had the option to compress the WWD file and so the compression algorithm used had to be resolved. It turned out to be the deflate algorithm (skimming though the executable with the Notepad and looking for strings containing any copyright notices did the trick). The second problem was way more severe: there were four bytes left to analyze which changed after modifying pretty much any parameter in the level editor. If these bytes contain an invalid value, the level editor and the game refused to load the level. Obviously it had to be some kind of a checksum which could possibly thwart the entire project if not taken care of. And so the task of figuring out the checksum was given to me. After some time staring at those pesky bytes in a HEX editor and making notes I finally cracked the code and the first version of the WapMap could finally be released.
The WapMap editor from the very beginning was leaning more towards making custom levels for Claw. Altough you can open any WWD files with it including levels from other games (like Gruntz), the program doesn’t handle them very well and crashes quiten often. For that reason the Gruntz community stayed with the good old Gruntz Level Editor and I guess it will stay that way. The WapMap project however gave birth to some other tools – after deciphering PID format kijanek6 created some programs automating the conversion process (if I remember correctly they were named PID Converter and GIF2PID). The user Kubus_PL from the Claw Forum on the other hand took advantage of the newly created WWD specification and designed a programming library named libwap32 which would allow to work with all file formats used by the WAP32 game engine. Its source code is available on GitHub. As of this writing it handles only WWD files so far. Obviously it’s only a real treat for programmers like myself who are interested in creating applications dabbling with WAP32. I’ve already tried it out, have you? 🙂
I’m pretty sure all of these spectacular achievements I’ve mentioned in this article are the milestones not only in Gruntz modding scene but also in modding any game based on the WAP32 engine, like Claw and Get Medieval. I couldn’t write about everything and anything, otherwise the article would at least triple in size – many, many more people were involved in the modding endevours and many more tools have been released from that time. Perhaps I’ll mention them in some of my future posts, who knows. But the most important thing is that the history of WAP32 modding is now, it’s not a thing of the past. And you still can be a part of it!
This post will serve as a little introduction to my next posts about Gruntz and WAP32. I believe it’s a good idea to keep everything WAP32 related in one place, like informations, format specifications, resources, applications … Perhaps it will turn into some kind of the chronicles everyone will be fond of in the next dozen of years, who knows 😛 My plans for this blog are quite ambitious and we shall see for how long I will perservere in my efforts.
PS. If I got any of the facts above wrong or if anybody has any other objections – don’t hesitate and let me know!