4

I am trying to get the sprites from a game from 1997 called Swing (US: Marble Master). The file is called NORMAL.SET and contains a set of sprites. There is an executable named SHOWSET.EXE that displays the entire set after printing a number on each sprite.

There are also a file called HINTERH.SWG (SWG probably stands for SWING). I was able to figure out what this file type is using TiledGGD! It is raw data without headers, has the size 640x480, 16 bpp, big endian, (A)RGB. See Screenshot below.

HINTERH.SWG opened in TiledGGD

Using the same settings in TiledGGD I get a close approximation of the NORMAL.SET image. Below you find the output from SHOWSET.EXE (left), aswell as the image how TiledGGD displays it (right).

NORMAL.SET as displayd in game and in TiledGGD

Using a screenshot of the SHOWSET.EXE output, I was able to get close to the codec (?correct term?) used for the pixel data in the NORMAL.SET. I do believe it is based on 16-bit ARGB1555, but still different. Below you see the image extracted from the screenshot. Let's call it screenshot-sprite.

Sprite extracted from Screenshot

Those are the first 192 bytes from NORMAL.SET

47 69 62 20 6D 69 72 20 27 6E 65 20 4B 75 67 65
6C 0A 00 1A 73 74 61 6E 64 61 72 64 00 00 00 00
00 00 00 00 9D 4F DD 32 00 00 00 00 68 27 01 00
14 00 01 0F 1E 00 1E 00 2C 03 00 00 03 00 00 00
00 00 00 00 03 00 0A 00 90 08 90 08 90 08 90 08 <1,2---
8F 08 8F 08 8E 08 6D 08 6C 04 6B 04 03 00 0A 00
03 00 08 00 90 08 91 08 91 08 91 08 91 08 91 08
90 08 90 08 8F 08 8E 08 6D 08 6C 04 6A 04 4A 04
03 00 08 00 03 00 06 00 91 08 91 08 B2 08 B2 08
B2 08 B2 08 B2 08 B2 08 B2 08 91 08 90 08 8F 08
8E 08 6D 08 6C 04 6B 04 49 04 48 04 03 00 06 00
03 00 05 00 90 08 B2 08 B2 08 B3 08 B3 0C B3 0C

Those are the first 192 bytes from the screenshot-sprite.

42 4D 50 07 00 00 00 00 00 00 46 00 00 00 38 00
00 00 1E 00 00 00 E2 FF FF FF 01 00 10 00 03 00
00 00 0A 07 00 00 3B 00 00 00 3B 00 00 00 00 00
00 00 00 00 00 00 00 7C 00 00 E0 03 00 00 1F 00
00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 <1---
00 00 00 00 00 00 00 00 00 00 90 08 90 08 90 08 <2---
90 08 8F 08 8F 08 8E 08 6D 08 6C 04 6B 04 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 90 08 91 08 91 08 91 08 91 08 91 08 90 08
90 08 8F 08 8E 08 6D 08 6C 04 6A 04 4A 04 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

You can see the point where the data does probably begin (arrow 1), you see a similar hex string 90 08 90 08 90 08.

You also see that the data in the screenshot-sprite probably begins with 10 byte-pairs (arrow 2). In the NORMAL.SET you find 0A 00. Now I read about RLE and with some fantasy I could see a link between 10 byte-pairs and 0A 00 which I could translate into "ten times a black pixel".

I am still confused why I see two blue sprites in the NORMAL.SET, where in the screenshot there is only one blue sphere. But that is something I would care about at a later time.

NOTE
At this point I am quite sure that I am on the right track! I think RLE decompression is the only thing missing here, besides figuring out where the data starts and what the headers are supposed to mean. Maybe they aren't even of much use to me.

I am not sure, if I still have a question at the moment. If nobody disagrees, I would keep this here until I figured out the rest in the hopes that someday, to someone this will be helpful. I will update this as soon as I solved the riddle.

Until the, if you got a a solution for the RLE ready, don't be shy to post ;)

  • 2
    You'll have to give a lot more information before anyone can help you, starting with what file format this is. A screenshot from some kind of editor doesn't really help. What games used it? Where did you find it? File extension? Is it based on a known format (JPG,PNG,TGA)? Which editor(s) did you try? You get the idea... – glampert Feb 2 '15 at 4:53
  • 1
    Okay, I did. :) – Daniel Feb 2 '15 at 21:34
  • 1
    Now this is a nicely formulated question! Hope someone can help you. ;) – glampert Feb 2 '15 at 22:16
  • You can try Recource Hacker – Mints97 Feb 4 '15 at 18:37
  • The file extension has nothing to do with the file type in this case. – Daniel Feb 5 '15 at 21:42
1

The quick answer is:

14 00 are the first two bytes of a sprite. The raw bitmap data starts at offset 20, in this case with 03 00 0A 00. The file is RLE encoded, 03 00 being the escape sequence and 0A 00 is telling me that 20 pixels with 00 00 (16 bpp) follow.

With this information I was able to reverse engineer the sprite group.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.