Previous Page | Next Page

by MarkGrass at 1:17 AM EST on November 24, 2008
Excellent work, messiaen.

I love this project as well, so please, keep it up!
by messiaen at 4:11 PM EST on November 24, 2008
Thanks everybody for the support :), I sure learned a lot while trying to understand this format.

To find the sequence "bank", you can either search for "00 03 00 xx" [xx being the sequence count (hex) you can get from the USF] or for the
sequences themselves - which always begin with 0xD380, 0xD360 or 0xD320 - and scroll up from there. There is an utility in my site (seq_rip.exe) which will rip the sequences into individual files.

I'm not sure if I would call this format "generic" because these may be the only three games that use it (but I'm not 100% sure about it), because this is an very
early format. Something I want to look now is at the sequences from the PAL version of Mario64 (it uses a few different commands) and provide a better support in my parser for Mario Kart/Wave Race.

I can't provide much technical information besides the specs I posted because pretty much I've discovered was by experimenting with the sequences themselves or by looking at portions of the sequence player to find some command lenghts.
by jurassicPieter at 6:33 AM EST on November 26, 2008
hm, looking for the sequence bank by just checking the rom is like looking for a needle in a haystack. 00 03 00 xx is very common, D3 80, D3 60 and D3 20 are all very common too.
And xx is not always certain(think of removed non-working songs, dynamic songs, different version etc.)

And i think it might work on other games but that the revision byte 03 is probably different( 00,01 and 02 are probably only used in super mario 64 beta's running on emulators because the real hardware was not made yet).

It's impossible to write a program that will find it all automatically, but i could write a program that will give all possible occurences and the human can pick which one it probably is.

See if i can make that. Would be cool to see if other games are using it. And might give you something extra to figuring out the midi.
by messiaen at 7:45 AM EST on November 26, 2008
I was looking at some of the Zelda 64 sequences and turns out that the format is more similar than I once thought, so with some modifications the parser might be able to tacke Zelda64 as well.

However I can't understand the "sequence bank" pointers. 0x30860 is the first sequence, so I think they are located between 0x303B0 and this.

This is for the normal (non-debug) Ocarina of Time ROM, it would be probably better to look for that on a Debug ROM as it might be more useful for hacking, but I couldn't find it yet (anyone wants to give some help on that?)

Edit: With some manual modifications, I got a Zelda64 sequence to run on Mario 64 :). Some of the sequences are more close to the Mario Kart64/Wave Race64 format, while others use a structure which is a bit different.

JurassicPieter: that's a nice idea. You can try also searching for 0xD320D7 or 0xD320D5, 0xD5 and 0xD7 being the two commands you would normally expect on the sequence beggining. The "20" after 0xD3 can be exchanged with 60 or 80. Also, usually all sequences start on an offset multiple of 0x10.

edited 10:07 AM EST November 26, 2008
by unknownfile at 1:34 PM EST on November 26, 2008
Can you check Starfox64? Pretty sure it uses the same stuff...
by messiaen at 4:09 PM EST on November 26, 2008
Indeed it uses the same format (first sequence at 0xFB220) !! So, it's really a generic Nintendo format, although not all games use exactly the same format.

So far, there are apparently three different versions:

Mario 64 (probably the first version)
Mario Kart 64 / Wave Race 64 / Star Fox 64
Zelda (the most different but still pretty close)

Edit: Some Starfox sequences begin also with 0xD3E0.

Here is a starfox sequence played from Mario64:
http://br.youtube.com/watch?v=kjLqJYWQgQE

Edit2: Yet another (1997 Nintendo) game which uses the same format: Yoshi's Story.

edited 6:29 PM EST November 26, 2008
by snakemeat at 12:50 AM EST on November 27, 2008
It's impossible to write a program that will find it all automatically, but i could write a program that will give all possible occurences and the human can pick which one it probably is.

I wrote a similar program to scan RAM dumps while doing some Hoot related stuff. Maybe it can help you out.

It takes the hex string (0x not needed) and a file extension (for multiple file checking) and returns a list of offsets to the queried hex bytes. If you want the source, just let me know. Just some pretty straight forward stream examination.

Grab it here.

edited 12:49 AM EST November 27, 2008
by messiaen at 12:21 PM EST on November 27, 2008
That's a interesting tool, and as someone who's just giving his first steps in programming I'd like to see the source. If anyone wants to use that method be sure that the ROM is in ABCD order. The z64 or v64 extension doesn't always means a specific byte order. AFAIR, there are some byte-swappers at dextrose.com.

I have found that 1080 Snowboarding also uses the same base format. Each game presents some minimal variations, but I'll try to cover some of them in my WIP specification (link on previous posts).

edited 12:20 PM EST November 27, 2008
by snakemeat at 1:40 PM EST on November 28, 2008
That's a interesting tool, and as someone who's just giving his first steps in programming I'd like to see the source.

I've updated the source with some comments to help explain things. One thing I noticed while reviewing the source is that you can enter multiple search strings separated by commas. I'd forgotten I added that. Be sure to put the whole list of search strings in quotation marks so the app doesn't get the arguments confused. BTW: This is a C# app and I use Visual C# 2008 Express Edition to build it.

Grab the source here.

If anyone wants to use that method be sure that the ROM is in ABCD order.

Agreed. This tool searches in sequential order, so if the bytes are reversed in your game image, be sure to reverse the search string bytes to match that.

edited 1:41 PM EST November 28, 2008

edited 1:41 PM EST November 28, 2008
by messiaen at 3:19 PM EST on December 4, 2008
Thanks for the source, I think I'll try something similar in C for misc romhacking purposes :).

I was looking at the USF Rip (I gotta learn to do this kind of stuff :D) of Mario 64 and I was wondering what are these alternate versions of Hazy Maze Cave and Dire Dire Docks? Also, why is the sequence 01 "End Level" missing?

Something very strange is that the first sequence (number 00) is rather akward. What happens is that this sequence is played all the time, along with the regular ones, kind like a second music layer. I don't know if it's used to initialize stuff or what, and it doesn't seem to support any instrument besides a simple "click". Any idea what may be the use of this? First I thought it could be used to initialize stuff, but I'm not sure about it, it doesn't seem to have any purpose.

Previous Page | Next Page
Go to Page 0 1 2 3

Search this thread

Show all threads

Reply to this thread:

User Name Tags:

bold: [b]bold[/b]
italics: [i]italics[/i]
emphasis: [em]emphasis[/em]
underline: [u]underline[/u]
small: [small]small[/small]
Link: [url=http://www.google.com]Link[/url]

[img=https://www.hcs64.com/images/mm1.png]
Password
Subject
Message

HCS Forum Index
Halley's Comet Software
forum source