Always on a mission, I raided the bargain bins at some computer shops this evening.
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 00In 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.
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.mpqThis is apparently the MoPaQ format. Inside MoPaQ covers this format from a high-level programming perspective.
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@4Note 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]
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.exeI 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.
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.
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.
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 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