Breaking Eggs And Making Omelettes

Topics On Multimedia Technology and Reverse Engineering


Archives:

ROM-Based FMV

March 31st, 2007 by Multimedia Mike

I found out that the Nintendo 64 version of Capcom’s timeless Resident Evil 2 features FMV. This is amazing given that that the game is cartridge-based and only has 64 megabytes of data. According to some reports I have read, the N64 version had essentially the same FMV content as the the original PlayStation version had (which came on 2 CDs and had dedicated FMV decoding hardware at it disposal).

I’m sure I’m not the only person to wonder how this N64 FMV works.

Further, I read that the Neo Geo version of the 1994 remake of Double Dragon featured a FMV clip from the hilariously absurd 1994 movie. Naturally, I’m curious how that video was stored. I believe the Neo Geo was another strictly tile-based console which would have required vector quantization.

Posted in Game Hacking | 3 Comments »

Trixter’s Favorite Text Editor

March 30th, 2007 by Multimedia Mike

If you think I’m obsessed with long-obsolete software and technology, I’ve got nothing on Trixter. This guy actually had a bake-off to determine which text editor performs best on an original 8088 PC. Forget vi vs. Emacs. Check out main article. Actually, vi is a contender but it didn’t fare well.

Check out Trixter’s blog for more classic hardware hacking, including information on how he is reworking his infamous 8088 Corruption PC video demo.

Posted in General | Comments Off on Trixter’s Favorite Text Editor

Streaming Trailer Set-Top Box

March 29th, 2007 by Multimedia Mike

So the Apple TV hit the street last week. I wasn’t aware of it until a friend just IM’d me informing me that he kept up his long-standing tradition of early adoption, putting one of these shiny new units next to his Nintendo Wii and Sony PlayStation 3.


Apple TV

Here’s the killer feature he relayed to me:

You’d like apple tv. There’s a built-in movie trailer streaming function.

To think: If Apple had released this unit 7 years ago, I might never have started down the path of multimedia hacking.

Posted in Multimedia Goals And TODO | Comments Off on Streaming Trailer Set-Top Box

Sega CD Ripper

March 27th, 2007 by Multimedia Mike

I’ve started to plunder my stash of Sega CD games for my Gaming Pathology project. To run the games with the Gens emulator under Windows it is necessary to either install ASPI drivers for accessing the game CD-ROMs in a particular manner, or rip the data and audio tracks into a particular filename sequence in order to play them directly from the hard disk. Since I couldn’t make the former work on my new machine, I proceeded with the latter option.


Sega CD unit

Gens wants the data track, i.e. ISO-9660 CD-ROM filesystem, as ‘title.iso’. Any redbook CD audio tracks after the data track need to be in the same directory, compressed as MP3, and named as ‘title 02.mp3’…’title nn.mp3’. After performing the process more or less manually for Revengers of Vengeance (I automated some parts, but had to manually rename the files in the end, and RoV has 44 audio tracks), I wrote a Python script to help me with other games (and I’m not very good at Python yet but I like these opportunities to learn).

There might be other ways, better ways, but this is my new way. The script relies on cdparanoia and LAME (oh, and dd and rm). I didn’t know any program to query a CD to learn how many audio tracks it had (except my own hacked up program and I didn’t feel like leveraging it), so I just perform a rip loop until cdparanoia returns an error. LAME is instructed to encode at its ‘insane’ profile, sparing no bitrate. Syntax is ‘./rip-sega-cd.py “game title”‘ which will produce an ISO file and a series of MP3 files if redbook audio is present:

$ ./rip-sega-cd.py "Revengers Of Vengeance"
ripping Revengers Of Vengeance
ripping data track...
/bin/dd if=/dev/cdrom of="Revengers Of Vengeance.iso"

ripping audio tracks...
/usr/bin/cdparanoia --quiet 2
/usr/bin/lame --quiet --preset insane cdda.wav "Revengers Of Vengeance 02.mp3"
/bin/rm cdda.wav

[...repeated for each redbook CD audio track...]
  1. #!/usr/bin/python
  2.  
  3. import os
  4. import commands
  5. from sys import argv
  6.  
  7. # programs
  8. SOURCE_DRIVE = "/dev/cdrom"
  9. DD_COMMAND = "/bin/dd"
  10. CDPARANOIA_COMMAND = "/usr/bin/cdparanoia --quiet"
  11. LAME_COMMAND = "/usr/bin/lame --quiet --preset insane"
  12. RM_COMMAND = "/bin/rm"
  13.  
  14. if (len(argv) < 2):
  15.     print "USAGE: rip-sega-cd.py <title>"
  16. else:
  17.     title = argv[1]
  18.     print "ripping " + title
  19.  
  20.     # rip ISO-9660 filesystem in the first track
  21.     data_rip_command = DD_COMMAND + " if=" + SOURCE_DRIVE + " of=\"" + title + ".iso\""
  22.     print "ripping data track..."
  23.     print data_rip_command
  24.     commands.getstatusoutput(data_rip_command)
  25.     print
  26.  
  27.     # rip CD audio tracks -> MP3 files until cdparanoia reports an error
  28.     print "ripping audio tracks..."
  29.     n = 2
  30.     error = 0
  31.     rm_command = RM_COMMAND + " cdda.wav"
  32.     while (error == 0):
  33.         # rip
  34.         audio_rip_command = '%(cmd)s %(n)d' % \
  35.             { 'cmd': CDPARANOIA_COMMAND, 'n' : n }
  36.         print audio_rip_command
  37.         commands.getstatusoutput(audio_rip_command)
  38.  
  39.         # encode
  40.         audio_encode_command = '%(cmd)s cdda.wav "%(title)s %(n)02d.mp3"' % \
  41.             { 'cmd' : LAME_COMMAND, 'title' : title, 'n' : n }
  42.         print audio_encode_command
  43.         if (commands.getstatusoutput(audio_encode_command)[0]):
  44.             error = 1
  45.  
  46.         # cleanup
  47.         print rm_command
  48.         commands.getstatusoutput(rm_command)
  49.  
  50.         n = n + 1
  51.         print

Posted in Game Hacking, Python | 5 Comments »

« Previous Entries