Welcome to z64 .me . Here you will find a collection of Zelda 64 tools, guides, and patches. If you're a fan of Ocarina of Time or Majora's Mask, you've come to the right place.For new visitors who found their way here on their quest for beta content, you may be looking for this. |
Home
RIP in peace, Google Sites
Legacy Google Sites are being discontinued, so I'm mirroring everything over to old.z64.me. This is a great opportunity to break away from the Web 1.0 meme and do something new with the website. |
z64compress release
My Zelda 64 rom compressor. Find it on GitHub. |
new play-as pipeline released
It is pretty much final now. The new Blender tutorial explains how to use everything. A huge thank you to everyone who contributed. :) Can't wait for the bug reports. ;( |
zzrtl revision 4
Remember this junk from the manual? `repack` should always be false (0) unless you modify MM's packing functionality; this makes it so the re-encoded files fit at the offsets of the original files within the archives (this is to get around MM's hard-coded references to the assets; if you happen to use custom code for MM archive parsing, you can use true (1) It turns out that was dead wrong. The actual problem was, certain parts of a certain (few?) archive(s)'s file table(s) were being overwritten thanks to a hiccup in my alignment code. Thankfully, Aroenai was able to pinpoint one of these broken files and the bug was fixed in no time. One less thing to haunt me; thanks again, Aroenai! r4 credits    - relocating yaz files within archives was not      working properly due to alignment, but now it      is; thanks for the bug report, Aroenai! |
zztexview rev 1
Bug fix: could not edit value/text boxes after clicking drop-downs Bug fix: "Scale" drop-down text now wraps properly when scrolling on it Bug report credits: AriaHiro, Zeldaboy14 |
zzrtl revision 3
r3 credits    - /Zel/ - MM script collaboration r3 changes    - final changes to make MM scripts possible    - MM scripts are now available    - updated OoT scripts    - dump scripts now work on compressed roms    - extension assertion: zzrtl now complains if     provided with a file not of the extension .rtl    - raw data assertion: zzrtl now complains if     provided with a file that doesn't contain some     form of "int main" (e.g. an html file saved     with the .rtl extension)    - added a function file_exists(fn) to check if a     file exists (returns 1 if it does, 0 otherwise)    - rom.inject_dma() function added for injecting     a file over a known existing DMA entry     (file-size must match file being overwritten)     (rom.inject_raw_dma() also available)    - rom.extract_dma() function added for extracting     a file of a known DMA index    - .next() and .remaining() are now able to be     used with conf files of type list, for the     purpose of stepping through list items    - .name() and .value() functions for retrieving     the name and value (as strings) of the     selected conf list item have been added    - an int_array() function to make up for zzrtl     not supporting int array[32]; type declarations    - a new_string() function for easy string building    - rom version checking to reduce weird errors     encountered from using a dump/build script with     a rom not supported by it    - loadfile() function added    - tsv_col_row() function added |
zzplayas revision 3
This revision eliminates a rare bug that was encountered when an old pointer and a new pointer share the same offset. zzrtl project files are now supported as well. If you used an older dump script to generate your filesystem, you will have to edit your project.zzrpl file in Notepad++ so that the variables used by zzplayas are prefixed with ZZPLAYAS_ , like so:zzrtl                  v0.01 baserom                "baserom.z64" ZZPLAYAS_VROM_CODE     "'baserom.z64'+0x00B3C000" ZZPLAYAS_VROM_PLAYER   "'baserom.z64'+0x00CA7F00" The scripts on the repo have been updated to reflect this change. Due to popular demand, the command line utility zzobjman.exe is included in the win32 folder of this release.As always, you can find the update on the zzplayas download page.Bug report and testing credits for this version: CrookedPoe and Skilar |
zzrtl revision 2, and some more codecs
r2 changes    - faster compression    - compression ratio is now printed afterwards    - removed zx7 codec (was slower than ucl and     had a worse compression ratio than ucl)    - added aplib codec (better ratio than ucl, and     faster load times than ucl on Wii VC; the only     downside is roms take a few minutes to compress)    - lzo and aplib patches are now available r2 credits    - Mikau6 - hardware testing |
zzrtl revision 1, codec patches
zzrtl has received the following updates. Also, codec patches are now available. r1 changes - added compression codecs ucl, xz7, slowyaz - added support for deleted files in MM dmadata specification (aka pstart == pend == -1) - added rearchive(), file_dma(), and cloudpatch() - added --compress command line argument so zzrtl can be used as a standalone rom compressor - added --nocache command line argument for doing compression without generating a cache folder - added --cloudpatch command line argument for easy command line cloudpatching - added --help command line argument so a massive wall of documentation doesn't pop up and scare double-clickers away - stability improvements - when compressing a file makes it larger, its uncompressed counterpart is used instead - better compressed file packing r1 notes - individual files compressed with slowyaz are byte-identical to those in retail roms; aside from weird corner cases, there is no reason you should use slowyaz; it is slower than yaz and produces files slightly larger than yaz... - it should now contain everything necessary to support Majora's Mask r1 credits - Mikau6, CrookedPoe - hardware testing |
zzplayas revision 2
Further details lie in the manual. And you can grab the latest revision here. |
zzconvert revision 7
Hierarchical display lists derived from riggedmesh were sometimes breaking on some processors due to features introduced in revision 6. This revision fixes that problem.Bug report credits: AriaHiroDKD |
zzromtool revision 4, zzconvert revision 6
zzromtool improvements
zzconvert improvements
|
zzromtool 0.01 revision 3
The following changes have been made:
|
zzromtool 0.01 revision 2
Scuba gear is no longer necessary, as a new initialization data search method is now available for those who wish to use it: In an actor's initialization data, the first two bytes, which normally represent the actor's number, should be replaced with the bytes 0xDEAD. Ten bytes later are two unused padding bytes, which we replace with 0xBEEF. See seagull.c for an example of this applied in C. You may also omit the Initialization section of conf.txt. Additionally, two new tutorials are live, geared towards setting up mips64gcc and and compiling actor overlays written in C. |
zzromtool 0.01 revision 1
Apparently I forgot to test dumping a rom with the previous revision before releasing. It should work now. 8) |
zzromtool 0.01 revision 0
The following updates have been made
More details can be found in the manual. |
zzromtool 0.01
It's finally stable enough for a public release. Please reference the guides and the manual for all the specifics, as it has its fair share of nuances and a thousand-and-one things that could go wrong when using it. |
zzplayas 0.01 revision 1
Now supports non-debug OoT as long as you edit your manifest files accordingly, as well as ZZRP files when using in conjunction with zzromtool. Sample manifest files compatible with 1.0 U can be found here. |
zzconvert v0.01 revision 5, zzplayas v0.01 revision 0
In this revision
|
Cylindrical billboarding woes
First, some background. If you've ever ported a map from Majora's Mask to Ocarina of Time, chances are you've seen missing or misplaced map meshes. "What causes this?", you might ask yourself. Let's inspect the display list in a hex editor and find out. The bytes DA380001 01000040 may catch your attention. These bytes push the matrix 01000040 onto the stack. Ocarina of Time does this all the time for billboards like Navi, bombs, the sun, and the moon, but that's with matrix 01000000 . What's so special about matrix 01000040 ? Let's substitute one for the other and see what happens.Perfect, everything works now. Case closed. Except, not really. How do these look from above? Oh no, they are locked to face the camera from all angles! You'll get problems with these posts anytime the camera is looking up or down. When the camera isn't level, something is noticeably wrong with them. It turns out that all objects using matrix 01000000 (Navi, bombs, the sun, the moon, and more) have one thing in common: they face the camera no matter what angle you view them from. We call this a spherical billboard.After inspecting the behavior of matrix 01000040 in Majora's Mask, we conclude that all objects that use it are always upright. The objects are still forced to face the camera, but the world's up direction is always respected, so not on that axis. This is called a cylindrical billboard.You can witness the difference for yourself outside the Astral Observatory in Majora's Mask. It turns out, one of the stars uses a spherical billboard and the other uses a cylindrical billboard. Perhaps the cylindrical billboard matrix was added late in the game's development and they forgot to update this one. "But Ocarina of Time does that too! What about the flame actors?", you may be thinking. This was very boggling, but it turns out actors that do this in OoT calculate their position relative to the camera and rotate the models so they align to the camera on all axes besides Y (up). In this sense, OoT does cylindrical billboards, but not via a global matrix. We cannot apply this hack on maps. Since OoT does not create this matrix, 01000040 is junk data. This explains why the map parts that referenced it were floating around strangely.Now, to write an assembly hack that will create a cylindrical billboard matrix that will be accessible in maps and objects by pushing matrix 01000040 onto the stack, like in MM. Do so without overwriting or breaking the matrix 01000000 .To save you a long story detailing all the trouble it was and how it still isn't perfect, I'll just say that it's usable for the purposes I intended for it to be usable for. As an additional test, I modeled a lamppost and embedded it into Kokiri Forest's geometry. The lower right image is a screenshot from Killgore52 (aka E-Gor) showing that the assembly and mesh are hardware compatible. Thanks man! Finally, here's a zip containing the modified code , spot04_room_0 *, and spot04_scene . Do a file comparison between this code and the original to find what has changed. Some notes are also embedded within. If you improve upon it (it needs it), please share your fixes so everyone can use cylindrical billboards that have been refined as much as possible.* Because content was added to Kokiri Forest, its size increased, so keep that in mind when putting it in the rom for testing! |
zzconvert v0.01 revision 4
The following updates are now in place:
|
zzconvert v0.01 revision 3
Remember this feature on the feature page? Unsupported texture dimensions are automatically scaled to nearest
power-of-two size (ex: 27x65 -> 32x64, 512x512 -> 64x64). It should actually work now. It still hasn't been tested very thoroughly, so the best practice is to use properly-sized textures when possible. Maybe I'll have it print a warning or pop up an annoying message box in the future, but this quick fix will do for now. |
zzconvert v0.01 revision 2
The following updates have been made to improve stability and conversion quality:
Thanks for the bug report Airikita! Get the updated version on the download page. |
zzconvert revision 1
The following updates have been made to improve stability and conversion quality:
Get the updated version on the download page.
|
zzconvert revision 0
The following updates have been made to improve stability and conversion quality:
Get the updated version on the download page. |
zzconvert 0.01, zzplayas 0.1, new play-as tutorial
Everyone's been waiting about half a year for this stuff, so get it while it's hot. 8) |