Multimedia Exploration Journal: January 15, 2003

Always on a mission, I raided the bargain bins at some computer shops this evening.

Prince of Persia 3D (MobyGames entry)

This 2002 game published by UbiSoft is a 3D version of the classic Prince of Persia which was available on just about every computer platform known in the early 1990s. 2 CD-ROMs.

The first CD-ROM comes with a complete installation of Quicktime Player. There is also a massive (~340MB) .CAB file. Therefore, the game probably uses QT files for either cutscenes or some other game demos.

The second CD-ROM contains in its directory structure a path called Geometry/. The directory branches out to a number of directories named after possible locales (cliffs, roof1). Each subdirectory is comprised of a TGA and BMP image files and also small IFL and large K2A files. These must be used for rendering 3D settings.

The second disc also has an audio/music directory. The directory contains assorted .sfx, .info, and .data files. The .info and .data files come in pairs, e.g., amb1.data and amb1.info, probably referring to ambient music for level 1. The .info is small (several hundred bytes) and the .data file is large (tens of megabytes). The .info file begins with 8 bytes which look like familiar audio parameters:

  00000000   01 00 02 00  22 56 00 00
In little endian notation, this means 1, 2, and 22050. The third number is certainly a sample rate. The first 2 are probably either channels and bytes per sample, or vice versa. The .info also appears to encode some data length information for the corresponding .data file. Also, if looks like the .info files can specify multiple audio blocks within the .data file. The data in the .data file appears to be 16-bit, little endian, signed PCM data.

When I try to install the game, the installation bails out at 53% twice in a row so I probably got a bad CD-ROM. The installer still managed to extract 5 Quicktime files. The files are high quality Sorenson SVQ1 video with either PCM or QDesign QDM2 audio.

Lords of Magic, Special Edition (MobyGames entry)

Sierra-published title from 2000. Developed by Impressions Games. Rated E for Everyone.

The game has a directory with large .WAV files. They are all 22050 Hz/8 bits/stereo PCM. Some are voice files and some are instrumental music. It is strange that they encoded the voice files in stereo.

The game uses Smacker files for video. It also has a collection of .mpq files which are game resource files judging by their names and sizes:

-r-xr-xr-x    1 root     root      1538330 Sep  9  1998 gs.mpq
-r-xr-xr-x    1 root     root     51488090 Sep  7  1998 imp.mpq
-r-xr-xr-x    1 root     root     68777986 Sep  8  1998 pic.mpq
-r-xr-xr-x    1 root     root     85941418 Sep  7  1998 sndfx.mpq
-r-xr-xr-x    1 root     root     54208726 Sep  7  1998 special.mpq
This is apparently the MoPaQ format. Inside MoPaQ covers this format from a high-level programming perspective.

Aliens versus Predator Gold Edition (MobyGames entry)

Fox Interactive's Aliens/Predator crossover. 2 CD-ROM title. They even have a top-level directory named FMVs/. That was nice of them. No game resource format obfuscation or anything. The directory is loaded with Smacker and Bink files.

The disc also has a directory at the top level named "MPlayer".

This title includes the smackw32.dll for playing .smk files. I have seen this before. What I have not seen before is the binkw32.dll file, ostensibly used for playing .bik Bink files.

Folloup: For a more detailed discussion of some of the more interesting Bink functions listed below, read Multimedia APIs in the Other Multimedia Topics section.
+++++++++++++++++++ EXPORTED FUNCTIONS +++++++++++++++++++

Number of Exported Functions =   62 (decimal)

Addr:10006500 Ord:   1 (0001h) Name: _BinkBufferBlit@12
Addr:100053E0 Ord:   2 (0002h) Name: _BinkBufferCheckWinPos@12
Addr:10006340 Ord:   3 (0003h) Name: _BinkBufferClose@4
Addr:10006840 Ord:   4 (0004h) Name: _BinkBufferDescription@4
Addr:100069E0 Ord:   5 (0005h) Name: _BinkBufferGetError@0
Addr:100063A0 Ord:   6 (0006h) Name: _BinkBufferLock@4
Addr:10005650 Ord:   7 (0007h) Name: _BinkBufferOpen@16
Addr:10006830 Ord:   8 (0008h) Name: _BinkBufferSetHWND@8
Addr:10005470 Ord:   9 (0009h) Name: _BinkBufferSetOffset@12
Addr:100053C0 Ord:  10 (000Ah) Name: _BinkBufferSetResolution@12
Addr:10006730 Ord:  11 (000Bh) Name: _BinkBufferSetScale@12
Addr:100064A0 Ord:  12 (000Ch) Name: _BinkBufferUnlock@4
Addr:100052E0 Ord:  13 (000Dh) Name: _BinkCheckCursor@20
Addr:100085A0 Ord:  14 (000Eh) Name: _BinkClose@4
Addr:100079B0 Ord:  15 (000Fh) Name: _BinkCopyToBuffer@28
Addr:100069F0 Ord:  16 (0010h) Name: _BinkDDSurfaceType@4
Addr:10007FC0 Ord:  17 (0011h) Name: _BinkDoFrame@4
Addr:10006C10 Ord:  18 (0012h) Name: _BinkGetError@0
Addr:10008430 Ord:  19 (0013h) Name: _BinkGetKeyFrame@12
Addr:10008A20 Ord:  20 (0014h) Name: _BinkGetRealtime@12
Addr:10008B20 Ord:  21 (0015h) Name: _BinkGetRects@8
Addr:10008880 Ord:  22 (0016h) Name: _BinkGetSummary@8
Addr:10009220 Ord:  23 (0017h) Name: _BinkGetTrackData@12
Addr:10009200 Ord:  24 (0018h) Name: _BinkGetTrackID@8
Addr:100091E0 Ord:  25 (0019h) Name: _BinkGetTrackType@8
Addr:10008500 Ord:  26 (001Ah) Name: _BinkGoto@12
Addr:10004FB0 Ord:  27 (001Bh) Name: _BinkIsSoftwareCursor@8
Addr:100091D0 Ord:  28 (001Ch) Name: _BinkLogoAddress@0
Addr:100083B0 Ord:  29 (001Dh) Name: _BinkNextFrame@4
Addr:10006CC0 Ord:  30 (001Eh) Name: _BinkOpen@8
Addr:10012DC0 Ord:  31 (001Fh) Name: _BinkOpenDirectSound@4
Addr:10011640 Ord:  32 (0020h) Name: _BinkOpenMiles@4
Addr:100087E0 Ord:  33 (0021h) Name: _BinkPause@8
Addr:10005390 Ord:  34 (0022h) Name: _BinkRestoreCursor@4
Addr:10009150 Ord:  35 (0023h) Name: _BinkService@4
Addr:10006BE0 Ord:  36 (0024h) Name: _BinkSetError@4
Addr:10006C70 Ord:  37 (0025h) Name: _BinkSetFrameRate@8
Addr:10006C90 Ord:  38 (0026h) Name: _BinkSetIOSize@4
Addr:100091A0 Ord:  39 (0027h) Name: _BinkSetPan@8
Addr:10006CA0 Ord:  40 (0028h) Name: _BinkSetSimulate@4
Addr:10006C20 Ord:  41 (0029h) Name: _BinkSetSoundSystem@8
Addr:10006CB0 Ord:  42 (002Ah) Name: _BinkSetSoundTrack@4
Addr:10009170 Ord:  43 (002Bh) Name: _BinkSetVolume@8
Addr:10008650 Ord:  44 (002Ch) Name: _BinkWait@4
Addr:10004E60 Ord:  45 (002Dh) Name: _ExpandBink@40
Addr:10002440 Ord:  46 (002Eh) Name: _ExpandBundleSizes@8
Addr:10002540 Ord:  47 (002Fh) Name: _ExpandPlane@40
Addr:10029130 Ord:  48 (0030h) Name: S
Addr:1000A360 Ord:  49 (0031h) Name: _YUV_blit_16bpp@44
Addr:1000BF80 Ord:  50 (0032h) Name: _YUV_blit_16bpp_mask@36
Addr:10009C80 Ord:  51 (0033h) Name: _YUV_blit_24bpp@44
Addr:1000BA20 Ord:  52 (0034h) Name: _YUV_blit_24bpp_mask@36
Addr:10009570 Ord:  53 (0035h) Name: _YUV_blit_32bpp@44
Addr:1000B4C0 Ord:  54 (0036h) Name: _YUV_blit_32bpp_mask@36
Addr:1000AF70 Ord:  55 (0037h) Name: _YUV_blit_UYVY@44
Addr:1000CBF0 Ord:  56 (0038h) Name: _YUV_blit_UYVY_mask@36
Addr:1000AC00 Ord:  57 (0039h) Name: _YUV_blit_YUY2@44
Addr:1000C660 Ord:  58 (003Ah) Name: _YUV_blit_YUY2_mask@36
Addr:1000B2E0 Ord:  59 (003Bh) Name: _YUV_blit_YV12@48
Addr:10009230 Ord:  60 (003Ch) Name: _YUV_init@4
Addr:10001050 Ord:  61 (003Dh) Name: _radfree@4
Addr:10001000 Ord:  62 (003Eh) Name: _radmalloc@4
Note that while all of the Smacker files play with Rad Game Tool's Smacker toolkit, the Bink files do not play under their standalone Bink player. The Bink files to not even have the standard 'BIK' signature. One hypothesis is that these files are raw Bink data chunks that are being fed directly into one of the above DLL API functions.

[Link: Smacker samples, Bink samples]

Hotwired

Outlaw racing game. I don't explicitly remember purchasing this one but it probably is good for some multimedia files anyway.

The game has 3 files:

-r-xr-xr-x    1 root     root           58 Apr 30  2001 autorun.inf
-r-xr-xr-x    1 root     root       129642 Apr 30  2001 hotwired.dat
-r-xr-xr-x    1 root     root     33732983 Apr 30  2001 setup.exe
I have to install the game to find it there are any multimedia files. None. I should have guessed by the total amount of data on the disc (under 35MB) that there wouldn't be any.

Monsters Inc. 8-Ball Chaos (MobyGames entry)

This is one of a triumvirate of games affectionately named "Wreck Room Arcade" based on the Disney/Pixar movie. If you collect all 3 (this game along with Bowling for Screams and Monster Tag) you receive the value-add of unlocking a secret game.

The back of the CD-ROM jewel case lists the game as using Quicktime, Bink video, and Miles audio drivers. The disc actually contains several .bik trailers for various other games. All of the game data is contained inside an enormous CAB archive.

When I install the game, it still needs the CD-ROM in the drive in order to run. When the opening movies are playing, data is being read from the CD-ROM drive. Therefore, the media is still contained somewhere on the CD-ROM.

[Link: Bink samples]

Tony Hawk's Pro Skater 2 (MobyGames entry)

Cheap game by Activsion. Any media? The disc contains a binkw32.dll so it is likely that the game uses Bink multimedia.

Sure enough, the game has plenty of movies in a Movies/ directory (only they are masquerading as .dat files; how very sneaky). Further, there is a Music/ directory elsewhere on the disc with the same setup (Bink as DAT files). This indicates that Bink can be used to transport audio-only media.

[Link: Bink samples]

Skateboard Park Tycoon

Demonstrating how out-of-control the Tycoon franchise has gotten, Interplay published Skateboard Park Tycoon most likely to ride the coattails of Tony Hawk's success.

I was expecting a structure similar to the Tony Hawk game. However, the only media files to be found were some PCM-encoded WAV files.

Sonic Bundle

A 3-pack of games starring Sega's Hedgehog character. The specific titles are Sonic CD, Sonic and Knuckles Collection, and Sonic R.

Sonic CD (MobyGames entry) notably contains an INDEO/ directory at the top level with contains a lone DLL for decoding Indeo 4.1 video data. The game does feature 6 Indeo4-encoded AVI files.

Sonic and Knuckles Collection (MobyGames entry) has a Cinepak/PCM logo AVI at the top level. Lots and lots of WAV files but no other media files to be found. The WAV files comprise the background music. If you can believe it, it sounds like the software house contracted to port the game to the PC simply sampled synthesized audio out of the Sega Genesis into 11025Hz / 8-bit PCM files. What I'm trying to say is that it sounds lousy.

In Sonic R (racing game, MobyGames entry) sound effects are encoded as 22050 Hz / 16-bit PCM WAV files so they sound a bit better than the last game. These are the only apparent media files on the game.

Conclusion: Although these titles were published well into the interactive movie/full motion video phase of video gaming, they were ports of console games that could still hold their own by the novelty of their action-oriented gameplay. They did not need to rely on multimedia.

by Mike Melanson (mike at multimedia.cx).

Multimedia Exploration Journal
Multimedia Research Institute Main Page