<- 1  -   of 75 ->
^^
vv
List results:
Search options:
Use \ before commas in usernames
Not really, just an understanding of the file formats and a hex editor. I've never tried doing anything with the layer data in the MLVL so I don't really know exactly how it works, but the gist of it is if you scroll to the end of the MLVL you'll see a bunch of 64-bit values with a lot of FFs in them. Those are bit flags for setting whether a layer is enabled by default on a new save file or not. So to turn on a layer, you'd have to figure out which one of them corresponds with the room you want (it's presumably in the same order as the rooms earlier in the file), then which bit corresponds to the layer you want. Then just flip it on by setting the bit to 1. Changing one bit's not a complicated edit, but you do need to be able to read the file to tell which one you need to change.
Ah okay, just manual work then.... neat :)
Edit history:
Antidote: 2014-07-31 04:41:28 pm
Quote from Paraxade:
edit: So if anyone's interested, I checked out the pak format from the leaked Corruption prototype to see if PakTool could dump it out. Turns out the answer is no. The pak format used by the proto is identical to the pak format in Echoes (including the compression format), except with 64-bit file IDs instead of 32-bit ones, so it's not gonna work without some modifications.

Easy fix, since all the paks in the leak have a valid string table it's as simple as this:
            Uint64 tmp = base::readUint32();
            // Support MP3 beta
            if (base::readUint32() > 255)
            {
                ret->setVersion(PakFile::Version::MetroidPrime3Beta);
                base::seek(-8);
                tmp = base::readUint64();
            }
            else
                base::seek(-4);

            ne->setId(tmp);
Edit history:
Aruki: 2014-07-31 04:57:44 pm
Where is this?

edit: I guess you're checking if the "string size" (where the second half of the file ID would be) is over 255? You're breaking compatibility with anyone who decides to make a pak with a stupidly long file name, but I guess that's a fringe case anyway
Anywhere, everywhere
Quote from Paraxade:
The other big change is support for Metroid Prime 3 paks! File extraction/decompression and file list dumping are all fully functional. That said, there's no repacking yet. Not sure when I'll get around to that; probably not until there's actually some interest in modding Prime 3. For now, this should be pretty handy for anyone who wants to poke through Corruption's files.


Well I'll tell ya that if there were a way to get Echoes' Screw Attack in Corruption, I'd have plenty of interest. And Prime's dashes in both the sequels. Damn, son.

Then there's the whole "play Corruption without the Wiimote controls" thing, but that would probably be one hell of an undertaking.
lol, I think that would probably be complicated enough that having a repacker probably wouldn't help you much.
Edit history:
Antidote: 2014-07-31 05:07:07 pm
Antidote: 2014-07-31 05:04:18 pm
Quote from Paraxade:
Where is this?

edit: I guess you're checking if the "string size" (where the second half of the file ID would be) is over 255? You're breaking compatibility with anyone who decides to make a pak with a stupidly long file name, but I guess that's a fringe case anyway


Yes, it's the string length, the primes cap the length to 32 (iirc) anyway.

edit:
Rebuilding the pak should be as simple as building an MP1/2 pak, if you're building from a pre-existing pak (my method) it's a simple matter of just replacing the data with the new data. If you're building from a directory just prompt the user for their desired version, or check the version by detecting the length of the id (8 for MP1/2, 16 for MP3)
Quote from rekameohs:

And Prime's dashes in both the sequels. Damn, son.

I think this has been done in echoes a while ago. All you have to do is remove a certain speedcap.

Doubt the same is true for prime 3.
Quote from Antidote:
the primes cap the length to 32 (iirc) anyway.


No they don't... I just tested with a ~1000-character MLVL name, works fine.
Edit history:
Antidote: 2014-07-31 05:35:11 pm
Antidote: 2014-07-31 05:29:52 pm
I never said it wouldn't, check how much of the name is actually loaded. I just implied that going past 32 characters is effectively pointless, even if I'm wrong about the length (and I might very well be, it's been a while since I actually looked at that), having a string length greater than 32 for a resource name is kinda crazy.

Especially for a game that doesn't even use them :P

edit;
I just looked through the InGameAudio.prj file in the beta, and the largest resource name I found was 31 characters. They also seem to be separated by named groups called "ResourceCollections" That matches up with the overall structure I observed. Unfortunately it doesn't reveal a whole lot about the packages :/
Edit history:
Aruki: 2014-07-31 05:46:24 pm
MiscData.pak in Echoes has a 38-character one. "PART_DarkWorldDamageEffectsThirdPerson"

At the end of the day though not really important either way. I doubt anyone would want to make a name anywhere near that long, so meh. The amount the game loads into memory is kinda irrelevant as well if it's not actually used or shown anywhere. Only real limit here is that the length of the name should fit in 32 bits.
Edit history:
coppro: 2014-08-02 12:26:47 am
Looked at the AGSC format for a little bit tonight. It's clearly an ADPCM stream, same as a DSP. I don't have the technical expertise to try to work it directly, but I might trial and error it through a decoder at various positions to see what sounds most correct, and see if I can at least get a pretty good idea of what parts of the file are and aren't raw audio.

EDIT: The Projectile one in MP2 seems to have a much longer header. Possibly this header contains position and timing data, to allow the sound to move?
Edit history:
Aruki: 2014-08-02 05:56:54 am
Aruki: 2014-08-02 05:54:59 am
Aruki: 2014-08-02 05:52:11 am
Aruki: 2014-08-02 05:30:29 am
I've looked at AGSC a few times but unfortunately I don't know a whole ton about how sound formats work. Been trying to learn more. What I have figured out so far is that there's a data table at the top; after the directory and subdirectory strings at the beginning, there's a value that says the size of that table in bytes. I'm not really sure what the stuff in the table is, but each element starts with a value stating the size of that element (including the size value). Haven't really worked out anything beyond that.

edit: Oh, actually I did work out one other thing - after the size value on each element, there's a 16-bit number. I believe that's probably a sound ID. My guess is the table has one element per sound in the file. I'd guess the ADPCM data starts after this table... The ATBL file is just a giant table of sound IDs as well.
Quote from Paraxade:
I've looked at AGSC a few times but unfortunately I don't know a whole ton about how sound formats work. Been trying to learn more. What I have figured out so far is that there's a data table at the top; after the directory and subdirectory strings at the beginning, there's a value that says the size of that table in bytes. I'm not really sure what the stuff in the table is, but each element starts with a value stating the size of that element (including the size value). Haven't really worked out anything beyond that.

edit: Oh, actually I did work out one other thing - after the size value on each element, there's a 16-bit number. I believe that's probably a sound ID. My guess is the table has one element per sound in the file. I'd guess the ADPCM data starts after this table... The ATBL file is just a giant table of sound IDs as well.


Oh my god, if you're able to figure out how to extract the ADPCM streams from the AGSC files, I will give you the biggest internet high five ever.  I've been trying to crack the file format forever and VGMToolbox doesn't want to work with the files.  The data for loop points and pitch bends are probably in there as well.  For example, the Metroid hover sound effect changes in pitch after each loop.

Thanks in advance for all the awesome work you've done so far!!
Quote from DJGrenola:
there really should be a public repository for symbols in the executables that people have figured out.

Here are the filetype factories and the ReadXYZ functions from 0-00:
80080190 MAPA
8009f3f4 MAPW
800de7fc AFSM
8016991c SCAN
801ca16c PATH
80201d10 MAPU
80267144 HINT
8026ad60 SAVW
802adef0 DCLN
802b1fb4 WPSC
802b2158 CRSC
802b45e0 DPSC
802c1df4 FRME
802d80b8 ANCS
802e78e4 ATBL
802ebaf0 EVNT
802f818c CINF
802fe198 ANIM
80300080 FONT
8030e76c TXTR
8032a00c PART
8032ffe0 SWHC
8034a024 AGSC
80353c64 CSKR
803556dc CMDL
80356500 STRG
80358b64 CSNG
8035e734 ELSC
80364f54 DGRP

8033ec54  ReadFloat
8033ec84  ReadLong
8033ecb0  ReadShort
8033ecdc  ReadChar
8033ed0c  ReadByte
8033ed38  ReadBytes

SAVW and HINT were added to 0-00 and KFAM only exists in the demo.  In each factory, the first call is to GetToken and can be skipped.  I'm still looking into PAS4 in ANCS files, but its a C++ ratsnest of functions. :(

An important "previous" of DJGrenola was a memory card hardware hack.  It deserves to be linked from this topic.
Hacking Gamecube Memory Cards For Fun (but no Profit)

Quote from rekameohs:
Well I'll tell ya that if there were a way to get Echoes' Screw Attack in Corruption, I'd have plenty of interest. And Prime's dashes in both the sequels. Damn, son.

I'll look into ShouldStrafe(), IsStrafing(), and UpdateStrafe() across the demo, 0-00, 0-02, Echoes and Corruption to see how/if the sequels can be "fixed."

Once the difference in many filetypes between Prime and Echoes are understood, I'd like to see Prime's rooms loaded into Echoes (and vice versa).  Screw Attacking across Tallon IV would be awesome.
Edit history:
Aruki: 2014-08-08 01:03:20 am
Aruki: 2014-08-04 06:37:01 am
Aruki: 2014-08-04 06:01:21 am
Hey Skippy, speaking of that, I have another thing you can try looking into - how can we add extra paks to the game? If we could get the game to detect it, creating additional worlds and putting them in new paks instead of adding them to paks that are already in the game would probably work fine, since it just needs is a valid reference to the world's MLVL file. That being said, I'm not sure how it works, because I don't see the Metroid* paks listed in the dol or anywhere else, and it doesn't seem to merely parse every pak present on the disc either.

Could be it just detects any pak starting with the word Metroid...? I can't test anything at the moment, but I'll try it out soon. [edit: it doesn't]

Quote:
Oh my god, if you're able to figure out how to extract the ADPCM streams from the AGSC files, I will give you the biggest internet high five ever.


I'd really love to have it cracked too, I'm interested in poking through the sound effects. If the format gets cracked I'll try out writing something to extract sound files from them.
Edit history:
DJGrenola: 2014-08-04 12:09:22 pm
DJGrenola: 2014-08-04 12:08:13 pm
DJGrenola: 2014-08-04 11:56:22 am
DJGrenola: 2014-08-04 11:47:00 am
DJGrenola: 2014-08-04 11:46:46 am
Quote from SkippyJr:
Here are the filetype factories and the ReadXYZ functions from 0-00:


Ah, excellent. Steely-eyed missile man and all that.

Quote:
An important "previous" of DJGrenola was a memory card hardware hack.  It deserves to be linked from this topic.
Hacking Gamecube Memory Cards For Fun (but no Profit)


Oh, I didn't think I'd see that again. I didn't get very far analysing the data I dumped this way but it's an interesting piece of history because it comes from an in-between era before you could just buy a cheap Arduino or Raspberry Pi for this kind of home hardware probing. I had to go back to 80s gear that was actually designed to be interfaced with external electronics. I still have that microcomputer under my bed. Funnily enough I now live about a mile from where that computer (the BBC micro) was designed, a decision which had a degree of the pilgrimage about it. I actually met the daughter of the guy who designed the machine's casing and for years I didn't know who her dad was. But anyway.

So here's something small I found in the DOL that might be worth mentioning. I didn't read YAGCD sufficiently thoroughly while writing mkiso.php, so v0.1 contains a bug which incorrectly truncates the apploader to 0x2000 bytes. The only place this seems to affect Metroid Prime is that it breaks the soft-reset function which calls a piece of the apploader beyond the 0x2000 boundary, so trying to soft-reset the game just hangs it. The fix to mkiso.php is trivial (I'll get round to putting a new version out soon, promise) but finding the cause of it led me on a chase through the DOL accompanied by dolphin's evil debugging facilities.

In 0-00, the soft-reset function lives at 0x80382e44. It's a decently long function rather than just a stub so this might be a very useful place to stick code that you want to run by pressing the soft-reset button combination. I was going to see if I could come up with a proof of concept that would allow you to refill your missiles or something by patching this function but I got bored trying to figure out where the missile stock address is. I guess there are Action Replay codes which would tell me this but whatever.

Also worth mentioning is that this function (which I called definitely_reset) is called by a function at 803831f4 (which I called maybe_reset). This function takes three parameters which appear to be boolean flags. In turn, maybe_reset is called by a long function that starts at 80005cfc:

  - 80005f78: maybe_reset (1, 0, 1);
  - 80005fa4: maybe_reset (0, 0, 0); <-- this is the one that actually resets it
  - 80005fb8: maybe_reset (1, 0, 0);

Makes me wonder what maybe_reset is actually for. Calling it with (0,0,0) ultimately leads to definitely_reset, but I'm wondering what the (1,0,1) and (1,0,0) versions of the call are for. Was this used during development to break into some sort of debugger?
Edit history:
DJGrenola: 2014-08-04 05:32:05 pm
just for fun I hacked dolphin to print out all accesses to PAKs, recompiled it and ran 0-00 on it. this is a log of what it reads when you start up, load a "0:00 Space Pirate Frigate" game, and skip through to where you gain control of Samus (where you shoot the targets). It's really interesting that it loads Tweaks.Pak first. (I've been wondering about that 'Loaded audio tweaks from memory card' string in the DOL, too -- was/is there a mechanism for patching the game using files on a memory card?)

The first argument in the brackets below is the offset where the read begins (in hex), and the second figure is the number of bytes read (in decimal). It's not as interesting as I'd hoped but if you could be bothered to figure out which actual files within the PAKs the listed offsets point to then you might get more insight. in some cases it's obviously just loading the entire PAK but in other cases it's equally obviously going after specific files within them.

Code:
Tweaks.Pak: read(0x0, 9504)
NoARAM.pak: read(0x0, 8192)
MiscData.pak: read(0x0, 65536)
NoARAM.pak: read(0x2000, 5120)
MiscData.pak: read(0x10000, 6368)
AudioGrp.pak: read(0x0, 8192)
SamusGun.pak: read(0x0, 65536)
NoARAM.pak: read(0x460540, 5280)
AudioGrp.pak: read(0x6507a0, 524288)
AudioGrp.pak: read(0x6d07a0, 160288)
Metroid1.pak: read(0x0, 8192)
SamusGun.pak: read(0x10000, 65536)
Metroid1.pak: read(0x2000, 123584)
SamusGun.pak: read(0x20000, 65536)
Metroid2.pak: read(0x0, 8192)
SamusGun.pak: read(0x30000, 65536)
Metroid2.pak: read(0x2000, 268096)
SamusGun.pak: read(0x40000, 65536)
Metroid3.pak: read(0x0, 8192)
SamusGun.pak: read(0x50000, 65536)
Metroid3.pak: read(0x2000, 314944)
SamusGun.pak: read(0x60000, 65536)
Metroid4.pak: read(0x0, 8192)
SamusGun.pak: read(0x70000, 65536)
Metroid4.pak: read(0x2000, 163296)
SamusGun.pak: read(0x80000, 65536)
metroid5.pak: read(0x0, 8192)
SamusGun.pak: read(0x90000, 65536)
metroid5.pak: read(0x2000, 251712)
SamusGun.pak: read(0xa0000, 65536)
Metroid6.pak: read(0x0, 8192)
SamusGun.pak: read(0xb0000, 65536)
Metroid6.pak: read(0x2000, 75200)
SamusGun.pak: read(0xc0000, 65536)
NoARAM.pak: read(0x4624e0, 1920)
Metroid7.pak: read(0x0, 8192)
SamusGun.pak: read(0xd0000, 65536)
Metroid7.pak: read(0x2000, 30784)
SamusGun.pak: read(0xe0000, 65536)
Metroid8.pak: read(0x0, 8192)
SamusGun.pak: read(0xf0000, 65536)
SamusGun.pak: read(0x100000, 61536)
TestAnim.Pak: read(0x0, 65536)
TestAnim.Pak: read(0x10000, 65536)
TestAnim.Pak: read(0x20000, 65536)
TestAnim.Pak: read(0x30000, 65536)
TestAnim.Pak: read(0x40000, 65536)
TestAnim.Pak: read(0x50000, 65536)
TestAnim.Pak: read(0x60000, 65536)
TestAnim.Pak: read(0x70000, 65536)
TestAnim.Pak: read(0x80000, 65536)
TestAnim.Pak: read(0x90000, 65536)
TestAnim.Pak: read(0xa0000, 65536)
TestAnim.Pak: read(0xb0000, 65536)
TestAnim.Pak: read(0xc0000, 65536)
TestAnim.Pak: read(0xd0000, 65536)
TestAnim.Pak: read(0xe0000, 65536)
TestAnim.Pak: read(0xf0000, 65536)
TestAnim.Pak: read(0x100000, 65536)
TestAnim.Pak: read(0x110000, 65536)
TestAnim.Pak: read(0x120000, 65536)
TestAnim.Pak: read(0x130000, 65536)
TestAnim.Pak: read(0x140000, 65536)
TestAnim.Pak: read(0x150000, 65536)
TestAnim.Pak: read(0x160000, 65536)
TestAnim.Pak: read(0x170000, 65536)
TestAnim.Pak: read(0x180000, 65536)
TestAnim.Pak: read(0x190000, 65536)
TestAnim.Pak: read(0x1a0000, 65536)
TestAnim.Pak: read(0x1b0000, 19680)
SamGunFx.pak: read(0x0, 65536)
SamGunFx.pak: read(0x10000, 65536)
SamGunFx.pak: read(0x20000, 65536)
SamGunFx.pak: read(0x30000, 65536)
SamGunFx.pak: read(0x40000, 65536)
SamGunFx.pak: read(0x50000, 65536)
SamGunFx.pak: read(0x60000, 65536)
SamGunFx.pak: read(0x70000, 65536)
SamGunFx.pak: read(0x80000, 65536)
SamGunFx.pak: read(0x90000, 65536)
SamGunFx.pak: read(0xa0000, 65536)
SamGunFx.pak: read(0xb0000, 65536)
SamGunFx.pak: read(0xc0000, 65536)
SamGunFx.pak: read(0xd0000, 4000)
MidiData.pak: read(0x0, 17216)
GGuiSys.pak: read(0x0, 65536)
GGuiSys.pak: read(0x10000, 65536)
GGuiSys.pak: read(0x20000, 65536)
GGuiSys.pak: read(0x30000, 65536)
GGuiSys.pak: read(0x40000, 65536)
GGuiSys.pak: read(0x50000, 35168)
NoARAM.pak: read(0x4e3f40, 1600)
Metroid1.pak: read(0x3582880, 74688)
Metroid2.pak: read(0x91c1540, 165696)
Metroid3.pak: read(0x7ca03c0, 224128)
Metroid4.pak: read(0x4c4d520, 115744)
metroid5.pak: read(0x5bb0de0, 186912)
Metroid6.pak: read(0x31fe940, 81184)
Metroid7.pak: read(0x1719780, 36704)
Metroid8.pak: read(0x5f7be0, 2496)
Metroid1.pak: read(0x3573600, 1888)
Metroid2.pak: read(0x918cca0, 3744)
Metroid3.pak: read(0x7c75940, 3648)
Metroid4.pak: read(0x4c34e40, 1952)
metroid5.pak: read(0x5b92ee0, 3104)
NoARAM.pak: read(0x45f1e0, 2944)
Metroid6.pak: read(0x31e8100, 1152)
Metroid7.pak: read(0x17112e0, 320)
Metroid8.pak: read(0x5f6ce0, 64)
Metroid1.pak: read(0x3573540, 192)
Metroid2.pak: read(0x918cc00, 160)
Metroid3.pak: read(0x7c75880, 192)
Metroid4.pak: read(0x4c34d80, 192)
metroid5.pak: read(0x5b92e40, 160)
Metroid6.pak: read(0x31e8040, 192)
Metroid7.pak: read(0x1711220, 192)
AudioGrp.pak: read(0x4c1980, 524288)
AudioGrp.pak: read(0x541980, 159104)
AudioGrp.pak: read(0x1269a00, 377600)
AudioGrp.pak: read(0x9205c0, 524288)
AudioGrp.pak: read(0x9a05c0, 418208)
AudioGrp.pak: read(0xeb3ec0, 2144)
AudioGrp.pak: read(0x1304580, 10400)
NoARAM.pak: read(0x45fd60, 2016)
NoARAM.pak: read(0x461f60, 1408)
NoARAM.pak: read(0x4619e0, 1408)
NoARAM.pak: read(0x467360, 864)
NoARAM.pak: read(0x4676c0, 160)
NoARAM.pak: read(0x467760, 160)
NoARAM.pak: read(0x467800, 160)
NoARAM.pak: read(0x4678a0, 160)
NoARAM.pak: read(0x467940, 160)
NoARAM.pak: read(0x4679e0, 160)
NoARAM.pak: read(0x467a80, 160)
NoARAM.pak: read(0x467b20, 320)
NoARAM.pak: read(0x467c60, 448)
NoARAM.pak: read(0x467e20, 320)
NoARAM.pak: read(0x467f60, 320)
NoARAM.pak: read(0x4680a0, 352)
NoARAM.pak: read(0x468200, 320)
NoARAM.pak: read(0x468340, 320)
NoARAM.pak: read(0x468480, 352)
NoARAM.pak: read(0x4685e0, 160)
NoARAM.pak: read(0x468680, 160)
NoARAM.pak: read(0x469500, 12544)
NoARAM.pak: read(0x473300, 160)
NoARAM.pak: read(0x4733a0, 3424)
NoARAM.pak: read(0x474100, 160)
NoARAM.pak: read(0x4741a0, 3232)
NoARAM.pak: read(0x474e40, 160)
NoARAM.pak: read(0x474ee0, 1088)
NoARAM.pak: read(0x475320, 192)
NoARAM.pak: read(0x4753e0, 896)
NoARAM.pak: read(0x475760, 160)
NoARAM.pak: read(0x475800, 160)
NoARAM.pak: read(0x4758a0, 160)
NoARAM.pak: read(0x475940, 736)
NoARAM.pak: read(0x475c20, 160)
NoARAM.pak: read(0x475cc0, 160)
NoARAM.pak: read(0x475d60, 1216)
NoARAM.pak: read(0x476220, 160)
NoARAM.pak: read(0x4762c0, 1760)
NoARAM.pak: read(0x4769a0, 512)
NoARAM.pak: read(0x476ba0, 320)
NoARAM.pak: read(0x476ce0, 448)
NoARAM.pak: read(0x476ea0, 320)
NoARAM.pak: read(0x476fe0, 320)
NoARAM.pak: read(0x477120, 352)
NoARAM.pak: read(0x477280, 320)
NoARAM.pak: read(0x4773c0, 320)
NoARAM.pak: read(0x477500, 352)
NoARAM.pak: read(0x477660, 4864)
NoARAM.pak: read(0x4f13e0, 576)
NoARAM.pak: read(0x4f2140, 544)
NoARAM.pak: read(0x4f2360, 576)
NoARAM.pak: read(0x4f25a0, 992)
NoARAM.pak: read(0x4f3000, 1056)
NoARAM.pak: read(0x4f3420, 1056)
NoARAM.pak: read(0x4f3840, 1120)
NoARAM.pak: read(0x4f3ca0, 1088)
NoARAM.pak: read(0x4f40e0, 1056)
NoARAM.pak: read(0x4f4760, 480)
NoARAM.pak: read(0x4f4940, 1120)
NoARAM.pak: read(0x4f5240, 1248)
NoARAM.pak: read(0x4f5720, 1120)
NoARAM.pak: read(0x4f6020, 1248)
NoARAM.pak: read(0x4f69e0, 32480)
NoARAM.pak: read(0x478960, 160)
NoARAM.pak: read(0x478a00, 4416)
NoARAM.pak: read(0x479b40, 160)
NoARAM.pak: read(0x479be0, 160)
NoARAM.pak: read(0x479c80, 160)
NoARAM.pak: read(0x479d60, 192)
NoARAM.pak: read(0x479e20, 192)
NoARAM.pak: read(0x479ee0, 9440)
NoARAM.pak: read(0x462c60, 832)
NoARAM.pak: read(0x483bc0, 4128)
AudioGrp.pak: read(0x1e8b60, 524288)
AudioGrp.pak: read(0x268b60, 524288)
AudioGrp.pak: read(0x2e8b60, 524288)
AudioGrp.pak: read(0x368b60, 385760)
NoARAM.pak: read(0x5015c0, 320)
Metroid1.pak: read(0x3582880, 74688)
Metroid1.pak: read(0x356bd00, 30784)
Metroid1.pak: read(0x3582800, 128)
Metroid1.pak: read(0x3573d60, 5024)
Metroid1.pak: read(0x3575100, 576)
Metroid1.pak: read(0x3575340, 576)
Metroid1.pak: read(0x3575580, 2624)
Metroid1.pak: read(0x35632c0, 26752)
Metroid1.pak: read(0x353fa00, 17344)
Metroid1.pak: read(0x35630c0, 512)
Metroid1.pak: read(0x3544460, 126048)
Metroid1.pak: read(0x3544260, 512)
Metroid1.pak: read(0x353b260, 18336)
Metroid1.pak: read(0x3538f80, 8928)
Metroid1.pak: read(0x3543dc0, 512)
Metroid1.pak: read(0x3544060, 512)
Metroid1.pak: read(0x3543fc0, 160)
Metroid1.pak: read(0x3569b40, 8640)
AudioGrp.pak: read(0x87d160, 371392)
AudioGrp.pak: read(0xa505c0, 144384)
AudioGrp.pak: read(0x1038ac0, 69664)
AudioGrp.pak: read(0x10c3e20, 18048)
AudioGrp.pak: read(0x10958a0, 189824)
AudioGrp.pak: read(0xe82920, 100000)
AudioGrp.pak: read(0xa41080, 62784)
AudioGrp.pak: read(0x46fa0, 524288)
AudioGrp.pak: read(0xc6fa0, 524288)
AudioGrp.pak: read(0x146fa0, 360992)
AudioGrp.pak: read(0x114f860, 86528)
AudioGrp.pak: read(0x3c6e40, 81216)
AudioGrp.pak: read(0x7bf2c0, 524288)
AudioGrp.pak: read(0x83f2c0, 230784)
AudioGrp.pak: read(0x494720, 108864)
AudioGrp.pak: read(0xa9a4c0, 16352)
Metroid1.pak: read(0x202c0, 4160)
Metroid1.pak: read(0x21300, 2112)
Metroid1.pak: read(0x21b40, 2304)
Metroid1.pak: read(0x22440, 18656)
Metroid1.pak: read(0x26d20, 15264)
Metroid1.pak: read(0x2a8c0, 7168)
Metroid1.pak: read(0x2c4c0, 18816)
Metroid1.pak: read(0x30e40, 1792)
Metroid1.pak: read(0x31540, 2080)
Metroid1.pak: read(0x31d60, 992)
Metroid1.pak: read(0x32140, 18592)
Metroid1.pak: read(0x369e0, 21472)
Metroid1.pak: read(0x3bdc0, 1216)
Metroid1.pak: read(0x3c280, 36128)
Metroid1.pak: read(0x44fa0, 12960)
Metroid1.pak: read(0x48240, 2208)
Metroid1.pak: read(0x48ae0, 34592)
Metroid1.pak: read(0x51200, 21632)
Metroid1.pak: read(0x56680, 32736)
Metroid1.pak: read(0x5e660, 34816)
Metroid1.pak: read(0x66e60, 1408)
Metroid1.pak: read(0x673e0, 9184)
Metroid1.pak: read(0x697c0, 3840)
Metroid1.pak: read(0x6a6c0, 2208)
Metroid1.pak: read(0x6af60, 36064)
Metroid1.pak: read(0x73c40, 35808)
Metroid1.pak: read(0x7c820, 17856)
Metroid1.pak: read(0x80de0, 15328)
Metroid1.pak: read(0x849c0, 32672)
Metroid1.pak: read(0x8c960, 7744)
Metroid1.pak: read(0x8e7a0, 1088)
Metroid1.pak: read(0x8ebe0, 19968)
Metroid1.pak: read(0x939e0, 4032)
Metroid1.pak: read(0x949a0, 20000)
Metroid1.pak: read(0x997c0, 640)
Metroid1.pak: read(0x99a40, 32288)
Metroid1.pak: read(0xa1860, 9216)
Metroid1.pak: read(0xa3c60, 608)
Metroid1.pak: read(0xa3ec0, 2272)
Metroid1.pak: read(0xa47a0, 4448)
Metroid1.pak: read(0xa5900, 16992)
Metroid1.pak: read(0xa9b60, 5600)
Metroid1.pak: read(0xab140, 21824)
Metroid1.pak: read(0xb0680, 21408)
Metroid1.pak: read(0xb5a20, 4192)
Metroid1.pak: read(0xb73a0, 1184)
Metroid1.pak: read(0xb7840, 8416)
Metroid1.pak: read(0xb9920, 28608)
Metroid1.pak: read(0xc08e0, 20160)
Metroid1.pak: read(0xc57a0, 12416)
Metroid1.pak: read(0xc8820, 416)
Metroid1.pak: read(0xc89c0, 8448)
Metroid1.pak: read(0xcaac0, 4672)
Metroid1.pak: read(0xcbd00, 2336)
Metroid1.pak: read(0xcc620, 160)
Metroid1.pak: read(0xcc6c0, 4768)
Metroid1.pak: read(0xcd960, 21792)
Metroid1.pak: read(0xd2e80, 8256)
Metroid1.pak: read(0xd4ec0, 1920)
Metroid1.pak: read(0xd5640, 34016)
Metroid1.pak: read(0xddb20, 2272)
Metroid1.pak: read(0xde400, 29120)
Metroid1.pak: read(0xe55c0, 2272)
Metroid1.pak: read(0xe5ea0, 16800)
Metroid1.pak: read(0xea040, 7168)
Metroid1.pak: read(0xebc40, 35808)
Metroid1.pak: read(0xf4820, 128)
Metroid1.pak: read(0xf48a0, 20256)
Metroid1.pak: read(0xfcb40, 1280)
Metroid1.pak: read(0xfd040, 18048)
Metroid1.pak: read(0x1016c0, 4288)
Metroid1.pak: read(0x102780, 34016)
Metroid1.pak: read(0x10ac80, 352)
Metroid1.pak: read(0x10ade0, 2496)
Metroid1.pak: read(0x10b7a0, 18176)
Metroid1.pak: read(0x10fea0, 6560)
Metroid1.pak: read(0x111840, 1760)
Metroid1.pak: read(0x111f20, 15104)
Metroid1.pak: read(0x115a20, 1024)
Metroid1.pak: read(0x115e20, 2080)
Metroid1.pak: read(0x116640, 21440)
Metroid1.pak: read(0x11ba00, 3552)
Metroid1.pak: read(0x11c7e0, 31808)
Metroid1.pak: read(0x124420, 2464)
Metroid1.pak: read(0x124dc0, 4000)
Metroid1.pak: read(0x125d60, 224)
Metroid1.pak: read(0x125e40, 192)
Metroid1.pak: read(0x125f00, 17440)
Metroid1.pak: read(0x12a320, 1248)
Metroid1.pak: read(0x12a800, 96)
Metroid1.pak: read(0x12a860, 2336)
Metroid1.pak: read(0x12b180, 4416)
Metroid1.pak: read(0x12c2c0, 18880)
Metroid1.pak: read(0x130c80, 1856)
Metroid1.pak: read(0x1313c0, 16000)
Metroid1.pak: read(0x135240, 32128)
Metroid1.pak: read(0x13cfc0, 3968)
Metroid1.pak: read(0x13df40, 1120)
Metroid1.pak: read(0x13e3a0, 5056)
Metroid1.pak: read(0x13f760, 15968)
Metroid1.pak: read(0x1435c0, 16032)
Metroid1.pak: read(0x147460, 18336)
Metroid1.pak: read(0x14bc00, 3200)
Metroid1.pak: read(0x14c880, 4480)
Metroid1.pak: read(0x14da00, 20384)
Metroid1.pak: read(0x1529a0, 8640)
Metroid1.pak: read(0x154b60, 2112)
Metroid1.pak: read(0x1553a0, 31936)
Metroid1.pak: read(0x15d060, 12352)
Metroid1.pak: read(0x1600a0, 672)
Metroid1.pak: read(0x160340, 19168)
Metroid1.pak: read(0x164e20, 4608)
Metroid1.pak: read(0x166020, 33888)
Metroid1.pak: read(0x16e480, 992)
Metroid1.pak: read(0x16e860, 36128)
Metroid1.pak: read(0x178980, 640)
Metroid1.pak: read(0x178c00, 160)
Metroid1.pak: read(0x178ca0, 192)
Metroid1.pak: read(0x178d60, 20096)
Metroid1.pak: read(0x17dbe0, 36352)
Metroid1.pak: read(0x1869e0, 2240)
Metroid1.pak: read(0x1872a0, 33696)
Metroid1.pak: read(0x18f640, 1856)
Metroid1.pak: read(0x18fd80, 17216)
Metroid1.pak: read(0x1940c0, 1536)
Metroid1.pak: read(0x5c6ae0, 128)
Metroid1.pak: read(0x1b1680, 544)
Metroid1.pak: read(0x1c09c0, 1280)
Metroid1.pak: read(0x1c0ec0, 672)
Metroid1.pak: read(0x1c1160, 256)
Metroid1.pak: read(0x1c1260, 32)
Metroid1.pak: read(0x1c1280, 160)
Metroid1.pak: read(0x1c1320, 160)
Metroid1.pak: read(0x177580, 5120)
Metroid1.pak: read(0x1b2e00, 2720)
Metroid1.pak: read(0x1b38a0, 1600)
Metroid1.pak: read(0x1b4260, 864)
Metroid1.pak: read(0x1b9180, 2272)
Metroid1.pak: read(0x1b9a60, 800)
Metroid1.pak: read(0x1ba9a0, 2048)
Metroid1.pak: read(0x1bb1a0, 800)
Metroid1.pak: read(0x1bc6c0, 576)
Metroid1.pak: read(0x1c13c0, 992)
Metroid1.pak: read(0x1c1f60, 1632)
Metroid1.pak: read(0x1c25c0, 3424)
Metroid1.pak: read(0x1c3320, 7200)
Metroid1.pak: read(0x1c4f40, 26688)
Metroid1.pak: read(0x1cb780, 1344)
Metroid1.pak: read(0x1cbcc0, 17056)
Metroid1.pak: read(0x1cff60, 31360)
Metroid1.pak: read(0x1d79e0, 4448)
Metroid1.pak: read(0x1d8b40, 20832)
Metroid1.pak: read(0x1ddca0, 152960)
Metroid1.pak: read(0x203220, 128)
Metroid1.pak: read(0x2032a0, 2336)
Metroid1.pak: read(0x204340, 864)
Metroid1.pak: read(0x2046a0, 2048)
Metroid1.pak: read(0x204ea0, 1888)
Metroid1.pak: read(0x205600, 704)
Metroid1.pak: read(0x2058c0, 896)
Metroid1.pak: read(0x205c40, 8128)
Metroid1.pak: read(0x207c00, 1088)
Metroid1.pak: read(0x208040, 416)
Metroid1.pak: read(0x2081e0, 992)
Metroid1.pak: read(0x2085c0, 1888)
Metroid1.pak: read(0x208d20, 768)
Metroid1.pak: read(0x209020, 864)
Metroid1.pak: read(0x209380, 768)
Metroid1.pak: read(0x209680, 3616)
Metroid1.pak: read(0x20a4a0, 832)
Metroid1.pak: read(0x20a7e0, 896)
Metroid1.pak: read(0x20ab60, 1888)
Metroid1.pak: read(0x20b2c0, 1888)
Metroid1.pak: read(0x20bf00, 704)
Metroid1.pak: read(0x20c980, 1632)
Metroid1.pak: read(0x20cfe0, 832)
Metroid1.pak: read(0x20d320, 960)
Metroid1.pak: read(0x20d6e0, 1888)
Metroid1.pak: read(0x20de40, 1888)
Metroid1.pak: read(0x20e5a0, 1888)
Metroid1.pak: read(0x214d80, 672)
Metroid1.pak: read(0x215020, 3712)
Metroid1.pak: read(0x21e1e0, 7904)
Metroid1.pak: read(0x2200c0, 24864)
Metroid1.pak: read(0x217220, 960)
Metroid1.pak: read(0x2175e0, 480)
Metroid1.pak: read(0x2261e0, 608)
Metroid1.pak: read(0x226440, 1664)
Metroid1.pak: read(0x20ed00, 704)
Metroid1.pak: read(0x20efc0, 2400)
Metroid1.pak: read(0x2177c0, 3520)
Metroid1.pak: read(0x218580, 8672)
Metroid1.pak: read(0x20f920, 1408)
Metroid1.pak: read(0x20fea0, 4768)
Metroid1.pak: read(0x211140, 960)
Metroid1.pak: read(0x211500, 640)
Metroid1.pak: read(0x21a760, 1600)
Metroid1.pak: read(0x21ada0, 4928)
Metroid1.pak: read(0x21c5c0, 2496)
Metroid1.pak: read(0x21cf80, 4704)
Metroid1.pak: read(0x21c0e0, 608)
Metroid1.pak: read(0x21c340, 640)
Metroid1.pak: read(0x211780, 960)
Metroid1.pak: read(0x211b40, 3776)
Metroid1.pak: read(0x212a00, 896)
Metroid1.pak: read(0x212d80, 3872)
Metroid1.pak: read(0x213ca0, 608)
Metroid1.pak: read(0x213f00, 3712)
Metroid1.pak: read(0x2161e0, 608)
Metroid1.pak: read(0x216440, 3552)
Metroid1.pak: read(0x226ac0, 1184)
Metroid1.pak: read(0x27b780, 320)
Metroid1.pak: read(0x289800, 5088)
Metroid1.pak: read(0x273ee0, 2016)
Metroid1.pak: read(0x27b8c0, 27200)
Metroid1.pak: read(0x3a2300, 320)
Metroid1.pak: read(0x3a2440, 32)
Metroid1.pak: read(0x268c20, 2528)
Metroid1.pak: read(0x457fe0, 160)
Metroid1.pak: read(0x458080, 39168)
Metroid1.pak: read(0x461980, 256)
Metroid1.pak: read(0x461a80, 14080)
Metroid1.pak: read(0x465180, 96)
Metroid1.pak: read(0x4651e0, 11872)
Metroid1.pak: read(0x468040, 448)
Metroid1.pak: read(0x468200, 31616)
Metroid1.pak: read(0x46fd80, 1088)
Metroid1.pak: read(0x470a80, 224)
Metroid1.pak: read(0x470b60, 160)
Metroid1.pak: read(0x470c00, 576)
Metroid1.pak: read(0x470e40, 224)
Metroid1.pak: read(0x473360, 576)
Metroid1.pak: read(0x4735a0, 992)
Metroid1.pak: read(0x473980, 416)
Metroid1.pak: read(0x473d80, 160)
Metroid1.pak: read(0x473e20, 160)
Metroid1.pak: read(0x473ec0, 224)
Metroid1.pak: read(0x4747c0, 288)
Metroid1.pak: read(0x4748e0, 192)
Metroid1.pak: read(0x4b21e0, 32)
Metroid1.pak: read(0x4b2200, 10240)
Metroid1.pak: read(0x4b4a00, 416)
Metroid1.pak: read(0x4b4ba0, 576)
Metroid1.pak: read(0x4b4de0, 160)
Metroid1.pak: read(0x4b4e80, 1216)
Metroid1.pak: read(0x4b5340, 1216)
Metroid1.pak: read(0x4b5800, 1216)
Metroid1.pak: read(0x4b6100, 736)
Metroid1.pak: read(0x4b63e0, 2048)
Metroid1.pak: read(0x4b6be0, 1216)
Metroid1.pak: read(0x4b70a0, 1216)
Metroid1.pak: read(0x4b7560, 736)
Metroid1.pak: read(0x4b7840, 2048)
Metroid1.pak: read(0x55eec0, 288)
Metroid1.pak: read(0x5a6a00, 160)
Metroid1.pak: read(0x5a6de0, 224)
Metroid1.pak: read(0xb6a80, 2336)
Metroid1.pak: read(0x10ac60, 32)
Metroid1.pak: read(0x1946c0, 37664)
Metroid1.pak: read(0x19d9e0, 2528)
Metroid1.pak: read(0x19e3c0, 35648)
Metroid1.pak: read(0x1a6f00, 96)
Metroid1.pak: read(0x1a6f60, 4096)
Metroid1.pak: read(0x1a7f60, 1056)
Metroid1.pak: read(0x1a8380, 2880)
Metroid1.pak: read(0x1a8ec0, 768)
Metroid1.pak: read(0x1a91c0, 1120)
Metroid1.pak: read(0x1a9620, 4896)
Metroid1.pak: read(0x1aa940, 1440)
Metroid1.pak: read(0x1aaee0, 1440)
Metroid1.pak: read(0x1ab480, 1440)
Metroid1.pak: read(0x1aba20, 1504)
Metroid1.pak: read(0x1ac000, 1600)
Metroid1.pak: read(0x1ac640, 1568)
Metroid1.pak: read(0x1acc60, 2048)
Metroid1.pak: read(0x1ad460, 1856)
Metroid1.pak: read(0x1adba0, 1856)
Metroid1.pak: read(0x1ae2e0, 1984)
Metroid1.pak: read(0x1aeaa0, 1632)
Metroid1.pak: read(0x1af100, 1952)
Metroid1.pak: read(0x1af8a0, 1920)
Metroid1.pak: read(0x1b0020, 1856)
Metroid1.pak: read(0x1b0760, 1920)
Metroid1.pak: read(0x1b0ee0, 1952)
Metroid1.pak: read(0x1b18a0, 1056)
Metroid1.pak: read(0x1b1cc0, 1408)
Metroid1.pak: read(0x1b2240, 672)
Metroid1.pak: read(0x1b24e0, 384)
Metroid1.pak: read(0x1b2660, 1088)
Metroid1.pak: read(0x1b2aa0, 160)
Metroid1.pak: read(0x1b2b40, 704)
Metroid1.pak: read(0x1b3ee0, 896)
Metroid1.pak: read(0x1b45c0, 800)
Metroid1.pak: read(0x1b48e0, 4256)
Metroid1.pak: read(0x1b5980, 4032)
Metroid1.pak: read(0x1b6940, 3776)
Metroid1.pak: read(0x1b7800, 96)
Metroid1.pak: read(0x1b7860, 704)
Metroid1.pak: read(0x1b7ca0, 96)
Metroid1.pak: read(0x1b7d00, 320)
Metroid1.pak: read(0x1b7b20, 96)
Metroid1.pak: read(0x1b7b80, 288)
Metroid1.pak: read(0x1b7e40, 32)
Metroid1.pak: read(0x1b7e60, 160)
Metroid1.pak: read(0x1b7f00, 256)
Metroid1.pak: read(0x1b8000, 4064)
Metroid1.pak: read(0x1b8fe0, 416)
Metroid1.pak: read(0x1b9d80, 2304)
Metroid1.pak: read(0x1ba680, 800)
Metroid1.pak: read(0x1bb4c0, 2272)
Metroid1.pak: read(0x1bbda0, 1728)
Metroid1.pak: read(0x1bc460, 608)
Metroid1.pak: read(0x1bc900, 960)
Metroid1.pak: read(0x1bccc0, 1216)
Metroid1.pak: read(0x1bd180, 1440)
Metroid1.pak: read(0x1bd720, 1888)
Metroid1.pak: read(0x1bde80, 1056)
Metroid1.pak: read(0x1be2a0, 1472)
Metroid1.pak: read(0x1be860, 928)
Metroid1.pak: read(0x1bec00, 1888)
Metroid1.pak: read(0x1bf360, 1920)
Metroid1.pak: read(0x1bfae0, 1952)
Metroid1.pak: read(0x1c06e0, 736)
Metroid1.pak: read(0x55ee20, 160)
Metroid1.pak: read(0x5a6300, 832)
Metroid1.pak: read(0x5a6640, 960)
Metroid1.pak: read(0x5c6b60, 96)
Metroid1.pak: read(0x5c6bc0, 21760)
Metroid1.pak: read(0x5cc0c0, 65536)
Metroid1.pak: read(0x5dc0c0, 65088)
Metroid1.pak: read(0x5ebf00, 65184)
Metroid1.pak: read(0x5fbda0, 64896)
Metroid1.pak: read(0x60bb20, 64896)
Metroid1.pak: read(0x61b8a0, 65344)
Metroid1.pak: read(0x62b7e0, 65440)
Metroid1.pak: read(0x63b780, 65472)
Metroid1.pak: read(0x64b740, 65408)
Metroid1.pak: read(0x65b6c0, 64832)
Metroid1.pak: read(0x66b400, 65152)
Metroid1.pak: read(0x67b280, 65376)
Metroid1.pak: read(0x68b1e0, 65376)
Metroid1.pak: read(0x69b140, 62592)
Metroid1.pak: read(0x6aa5c0, 62368)
Metroid1.pak: read(0x6b9960, 65536)
Metroid1.pak: read(0x6c9960, 65312)
Metroid1.pak: read(0x6d9880, 64768)
Metroid1.pak: read(0x6e9580, 65504)
Metroid1.pak: read(0x6f9560, 64672)
Metroid1.pak: read(0x709200, 64704)
Metroid1.pak: read(0x718ec0, 65152)
Metroid1.pak: read(0x728d40, 61344)
Metroid1.pak: read(0x737ce0, 64640)
Metroid1.pak: read(0x747960, 65536)
Metroid1.pak: read(0x757960, 64992)
Metroid1.pak: read(0x767740, 64160)
Metroid1.pak: read(0x7771e0, 65472)
Metroid1.pak: read(0x7871a0, 65280)
Metroid1.pak: read(0x7970a0, 64320)
Metroid1.pak: read(0x7a6be0, 8064)
Metroid1.pak: read(0x7a8b60, 58720)
Metroid1.pak: read(0x7b70c0, 161376)
Metroid1.pak: read(0x7de720, 174176)
Metroid1.pak: read(0x808f80, 6464)
Metroid1.pak: read(0x5b01c0, 160)
Metroid1.pak: read(0x5b02c0, 160)
Metroid1.pak: read(0x5b03e0, 160)
Metroid1.pak: read(0x5b0600, 160)
Metroid1.pak: read(0x5b0800, 160)
Metroid1.pak: read(0x5b0a00, 160)
Metroid1.pak: read(0x5b0ba0, 160)
Metroid1.pak: read(0x5c63c0, 160)
Metroid1.pak: read(0x5c6500, 160)
Metroid1.pak: read(0x5c6680, 160)
Metroid1.pak: read(0x5c6820, 160)
Metroid1.pak: read(0x5c6920, 160)
Metroid1.pak: read(0x5c6a40, 160)
NoARAM.pak: read(0x4dede0, 384)
NoARAM.pak: read(0x4def60, 416)
NoARAM.pak: read(0x4dea60, 416)
NoARAM.pak: read(0x4dec00, 480)
NoARAM.pak: read(0x4de760, 384)
NoARAM.pak: read(0x4de8e0, 384)
NoARAM.pak: read(0x4de460, 384)
NoARAM.pak: read(0x4de5e0, 384)
NoARAM.pak: read(0x4ec620, 3200)
NoARAM.pak: read(0x4ed2a0, 640)
NoARAM.pak: read(0x46c600, 160)
NoARAM.pak: read(0x46c6a0, 640)
NoARAM.pak: read(0x46c920, 224)
NoARAM.pak: read(0x46cb20, 160)
NoARAM.pak: read(0x46cc60, 160)
NoARAM.pak: read(0x46cea0, 704)
NoARAM.pak: read(0x46d160, 448)
NoARAM.pak: read(0x46d320, 384)
NoARAM.pak: read(0x46d4a0, 160)
NoARAM.pak: read(0x46d540, 4064)
NoARAM.pak: read(0x46e520, 224)
NoARAM.pak: read(0x46e600, 800)
NoARAM.pak: read(0x46e920, 800)
NoARAM.pak: read(0x46ec40, 800)
NoARAM.pak: read(0x46ef60, 800)
NoARAM.pak: read(0x46f280, 800)
NoARAM.pak: read(0x46f5a0, 256)
NoARAM.pak: read(0x46f6a0, 224)
NoARAM.pak: read(0x46f780, 288)
NoARAM.pak: read(0x46f8a0, 224)
NoARAM.pak: read(0x46f980, 224)
NoARAM.pak: read(0x46fa60, 224)
NoARAM.pak: read(0x46fb40, 256)
NoARAM.pak: read(0x46fc40, 224)
NoARAM.pak: read(0x46fd20, 160)
NoARAM.pak: read(0x46fdc0, 800)
NoARAM.pak: read(0x4700e0, 800)
NoARAM.pak: read(0x470400, 352)
NoARAM.pak: read(0x470560, 224)
NoARAM.pak: read(0x470640, 800)
NoARAM.pak: read(0x470960, 288)
NoARAM.pak: read(0x470a80, 224)
NoARAM.pak: read(0x470b60, 800)
NoARAM.pak: read(0x470e80, 288)
NoARAM.pak: read(0x470fa0, 224)
NoARAM.pak: read(0x471080, 800)
NoARAM.pak: read(0x4713a0, 160)
NoARAM.pak: read(0x471440, 224)
NoARAM.pak: read(0x471520, 160)
NoARAM.pak: read(0x471800, 6912)
NoARAM.pak: read(0x47c3c0, 320)
NoARAM.pak: read(0x47c500, 1760)
NoARAM.pak: read(0x47cbe0, 1280)
NoARAM.pak: read(0x47d0e0, 128)
NoARAM.pak: read(0x47d160, 128)
NoARAM.pak: read(0x47d1e0, 8704)
NoARAM.pak: read(0x47f3e0, 64)
NoARAM.pak: read(0x47f420, 448)
NoARAM.pak: read(0x47f5e0, 8352)
NoARAM.pak: read(0x481680, 224)
NoARAM.pak: read(0x481760, 224)
NoARAM.pak: read(0x481840, 576)
NoARAM.pak: read(0x481a80, 480)
NoARAM.pak: read(0x481c60, 96)
NoARAM.pak: read(0x481cc0, 288)
NoARAM.pak: read(0x481de0, 448)
NoARAM.pak: read(0x481fa0, 352)
NoARAM.pak: read(0x482100, 352)
NoARAM.pak: read(0x482260, 320)
NoARAM.pak: read(0x4823a0, 1440)
NoARAM.pak: read(0x482940, 1088)
NoARAM.pak: read(0x482d80, 3648)
Metroid1.pak: read(0x2d8ea0, 205536)
Metroid1.pak: read(0x30b180, 448)
Metroid1.pak: read(0x5a6ec0, 96)
Metroid1.pak: read(0x80a8c0, 8800)
Metroid1.pak: read(0x2d1b20, 29568)
Metroid1.pak: read(0x2bd360, 27168)
Metroid1.pak: read(0x2caf60, 27456)
Metroid1.pak: read(0x245d20, 2048)
Metroid1.pak: read(0x269840, 4736)
Metroid1.pak: read(0x2d1aa0, 128)
Metroid1.pak: read(0x2c3d80, 28864)
Metroid1.pak: read(0x226f60, 320)
Metroid1.pak: read(0x272e20, 4288)
Metroid1.pak: read(0x2cae40, 288)
Metroid1.pak: read(0x282380, 4448)
Metroid1.pak: read(0x80a8c0, 8800)
Metroid1.pak: read(0x80cb20, 36832)
Metroid1.pak: read(0x815b00, 352)
Metroid1.pak: read(0x815c60, 2016)
Metroid1.pak: read(0x816440, 2304)
Metroid1.pak: read(0x816d40, 352)
Metroid1.pak: read(0x816ea0, 24800)
Metroid1.pak: read(0x86e5e0, 128)
Metroid1.pak: read(0x81cf80, 33824)
Metroid1.pak: read(0x8253a0, 34688)
Metroid1.pak: read(0x82db20, 672)
Metroid1.pak: read(0x82ddc0, 32)
Metroid1.pak: read(0x82dde0, 192)
Metroid1.pak: read(0x82e040, 1440)
Metroid1.pak: read(0x82dea0, 416)
Metroid1.pak: read(0x82e5e0, 224)
Metroid1.pak: read(0x82e6c0, 864)
Metroid1.pak: read(0x82ea20, 32)
Metroid1.pak: read(0x82ea40, 192)
Metroid1.pak: read(0x82eb00, 160)
Metroid1.pak: read(0x82eba0, 768)
Metroid1.pak: read(0x82eea0, 39072)
Metroid1.pak: read(0x838740, 1600)
Metroid1.pak: read(0x838d80, 32)
Metroid1.pak: read(0x838da0, 192)
Metroid1.pak: read(0x838e60, 1600)
Metroid1.pak: read(0x8394a0, 160)
Metroid1.pak: read(0x839540, 9088)
Metroid1.pak: read(0x83b8c0, 6112)
Metroid1.pak: read(0x83d0a0, 32)
Metroid1.pak: read(0x83d0c0, 160)
Metroid1.pak: read(0x83d160, 2560)
Metroid1.pak: read(0x83db60, 160)
Metroid1.pak: read(0x83dc00, 960)
Metroid1.pak: read(0x83dfc0, 7968)
Metroid1.pak: read(0x83fee0, 6048)
Metroid1.pak: read(0x8418e0, 1664)
Metroid1.pak: read(0x841f60, 4768)
Metroid1.pak: read(0x843200, 1440)
Metroid1.pak: read(0x8437a0, 736)
Metroid1.pak: read(0x843a80, 992)
Metroid1.pak: read(0x843e60, 8288)
Metroid1.pak: read(0x845ec0, 448)
Metroid1.pak: read(0x846080, 7520)
Metroid1.pak: read(0x847de0, 448)
Metroid1.pak: read(0x847fa0, 12672)
Metroid1.pak: read(0x84b120, 992)
Metroid1.pak: read(0x84b500, 544)
Metroid1.pak: read(0x84b720, 18688)
Metroid1.pak: read(0x850020, 36320)
Metroid1.pak: read(0x859f40, 800)
Metroid1.pak: read(0x85a260, 4320)
Metroid1.pak: read(0x85b340, 448)
Metroid1.pak: read(0x85d1c0, 160)
Metroid1.pak: read(0x86e660, 96)
Metroid1.pak: read(0x86e6c0, 2752)
Metroid1.pak: read(0x86f180, 65536)
Metroid1.pak: read(0x87f180, 65472)
Metroid1.pak: read(0x88f140, 55200)
Metroid1.pak: read(0x89c8e0, 15904)
Metroid1.pak: read(0x86e120, 160)
Metroid1.pak: read(0x86e240, 160)
Metroid1.pak: read(0x86e420, 160)
Metroid1.pak: read(0x86e540, 160)
Edit history:
DJGrenola: 2014-08-04 05:30:42 pm
by the way, does NTSC prime 2 have a soft-reset function? because AFAIK the PAL one doesn't. and that game really badly needs one, if you catch my drift.
Edit history:
Aruki: 2014-08-04 05:50:41 pm
Aruki: 2014-08-04 05:46:04 pm
Aruki: 2014-08-04 05:45:38 pm
The way I understand paks working is, the only files the game accesses directly are files listed in the name table at the top of the pak (or rather "named resources" as the MP3 proto files call them). Everything else is a dependency of the named files. So for a world pak, for instance, the MLVL is the only named resource in the pak, and every other file is a dependent of the MLVL. The non-world paks have more named resources so the game accesses more files from those paks directly.

I have no idea what you guys are talking about but it's cool and makes me wanna learn. Good stuff. :P

EDIT: Oh, as for tweaks - Tweaks.pak contains a list of CTWK files, which are just lists of variable values. It would take a ton of trial and error to fully reverse engineer every CTWK file, but it's basically exactly what it sounds like - it lets you tweak little things in the game. For example, you can tweak weapon damage, and there's a string somewhere that implies you can tweak the X-Ray visor fog. Miles also has a picture he posted earlier of the game being upside down - he did that by screwing around with the tweaks. Not really surprised at all it loads the tweaks first.

Those accesses to each of the Metroid*.paks at the beginning is likely the game indexing every MLVL file. It's one of the first things it does - the game crashes on the Nintendo logo if you have a bad MLVL file. Presumably it's so it can load the world name string to display on the file select screen.
Quote from Paraxade:
The way I understand paks working is, the only files the game accesses directly are files listed in the name table at the top of the pak (or rather "named resources" as the MP3 proto files call them). Everything else is a dependency of the named files. So for a world pak, for instance, the MLVL is the only named resource in the pak, and every other file is a dependent of the MLVL. The non-world paks have more named resources so the game accesses more files from those paks directly.


ah, interesting. I did wonder why the world PAKs only had that one name in them, and why the other PAKs only had a few named files.

Quote from Paraxade:
Those accesses to each of the Metroid*.paks at the beginning is likely the game indexing every MLVL file. It's one of the first things it does - the game crashes on the Nintendo logo if you have a bad MLVL file. Presumably it's so it can load the world name string to display on the file select screen.


the string reads are these ones I think:

Code:
Metroid1.pak: read(0x3573540, 192)
Metroid2.pak: read(0x918cc00, 160)
Metroid3.pak: read(0x7c75880, 192)
Metroid4.pak: read(0x4c34d80, 192)
metroid5.pak: read(0x5b92e40, 160)
Metroid6.pak: read(0x31e8040, 192)
Metroid7.pak: read(0x1711220, 192)


metroid8 misses out
Quote from Paraxade:
I've looked at AGSC a few times but unfortunately I don't know a whole ton about how sound formats work. Been trying to learn more. What I have figured out so far is that there's a data table at the top; after the directory and subdirectory strings at the beginning, there's a value that says the size of that table in bytes. I'm not really sure what the stuff in the table is, but each element starts with a value stating the size of that element (including the size value). Haven't really worked out anything beyond that.

edit: Oh, actually I did work out one other thing - after the size value on each element, there's a 16-bit number. I believe that's probably a sound ID. My guess is the table has one element per sound in the file. I'd guess the ADPCM data starts after this table... The ATBL file is just a giant table of sound IDs as well.


I'm not an expert at audio either, but my friend looking at it is. What I've gathered so far is that the data with a few bits set every 8 bytes (looks like a consistent column of letters in a hex editor) is all audio. Metroid is weird and puts the two channels independently (that is, it has a large chunk of left channel and then a large chunk of right, rather than interleaving them regularly like most ADPCM formats do). This may be because AGSC's probably only have one channel each and are balanced based on position relative to the camera. There are a few important pieces of info, though, like the coefficients used in the en/decoding. These must be stored somewhere and are super important; there's also AFAIK no good way to check if they're right other than by trying to decode and seeing if they work. The coefficients are 16 bytes per channel in a DSP, dunno if that's true of AGSC's as well. It's worth noting that usual ADPCM formats place the coefficients at regular intervals throughout the stream; DSP just uses a single global set.
Are we sure the sounds are even stereo? The DSPADPCM docs seem to stress that the input files for encoding DSP should be mono.
Edit history:
Baby Sheegoth: 2014-08-04 09:51:00 pm
Wow, something I actually know something about.

They're mono tracks, but each track has 2 parts which play simultaneously in either channel to obtain a stereo response. Not sure why that is. This applies only to the music, though. As far as I know.
I've been able to get sounds out of AGSC files, though they're not very useful, what we really need to do is figure out the header. They're definitely ADPCM.