From d9493a5b99cbfa6c062e1d12839c6ffcabec0188 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Thu, 30 Mar 2023 21:11:57 -0700 Subject: [PATCH] Update documentation to use updated Z64Utils release + updated directions (#1223) --- docs/tutorial/documenting.md | 12 ++++-------- .../images/z64utils_object_analyzer.png | Bin 11211 -> 0 bytes docs/tutorial/object_decomp.md | 2 +- docs/tutorial/object_decomp_example.md | 6 +++--- 4 files changed, 8 insertions(+), 12 deletions(-) delete mode 100644 docs/tutorial/images/z64utils_object_analyzer.png diff --git a/docs/tutorial/documenting.md b/docs/tutorial/documenting.md index e7e82e5e68..7ecd37ccbf 100644 --- a/docs/tutorial/documenting.md +++ b/docs/tutorial/documenting.md @@ -327,17 +327,13 @@ the fourth element is the object (it is actually an enum, but the file itself ha ## Z64Utils -The latest release of Z64Utils can be downloaded from [https://github.com/Random06457/Z64Utils/releases]. To use it with MM, you also need a json file to fill in the file names: the latest version can be obtained from [https://github.com/Random06457/Z64Utils-Config]. It should work on Wine. Some graphics cards don't love it, but the 3D graphical part is only required for skeleton and animations. +The latest release of Z64Utils can be downloaded from [https://github.com/zeldaret/Z64Utils/releases]. It should work on Wine. Some graphics cards don't love it, but the 3D graphical part is only required for skeleton and animations. Having downloaded and unzipped it, open the baserom file. This will populate the main window with a list: ![Z64Utils' main window](images/z64utils_main.png) -Search for the object file, right-click and select "Open in Object Analyzer". It will ask you to choose a segment: this is the segment that the file is put on, and allows Z64Utils to resolve the segmented addresses it references into symbols. The json already knows it should be segment `6`, so just click okay. This will open this window: - -![Z64Utils' object analyzer window](images/z64utils_object_analyzer.png) - -Go to "Analysis -> Find Dlists" and press OK (the defaults are usually fine). This will automatically search for displaylists in the object, which are a sufficiently distinctive format to be easy to find. We want to see the other stuff in the object too, so also do "Analysis -> Analyze Dlists". This will populate the window with even more stuff: +Search for the object file, then either double-click it or right-click it and select "Open in Object Analyzer" to open it. It will ask you to choose a segment: this is the segment that the file is put on, and allows Z64Utils to resolve the segmented addresses it references into symbols. The json already knows it should be segment `6`, so just click okay. This will open this window; displaylists and other data will automatically be analyzed when the object is opened: ![Z64Utils, with an analyzed object](images/z64utils_object_analyzed.png) @@ -347,7 +343,7 @@ We will talk about what all these types of data are next time, but for now, all static void* D_80C106B0[4] = { object_bg_Tex_00F8F0, object_bg_Tex_00FCF0, object_bg_Tex_0100F0, object_bg_Tex_00FCF0 }; ``` -actually are. We know they are set on segment 8, so we need to find where the skeleton uses them. We know from `object_bg_Skel_011B60` that this is at `0x06011B60`, so scroll down to it, right-click on it, and choose "Open in Skeleton Viewer". Pick an animation that we know it uses (sometimes Z64Utils misidentifies other things for animations), such as `object_bg_Anim_000968`, and you will get this error: +actually are. We know they are set on segment 8, so we need to find where the skeleton uses them. We know from `object_bg_Skel_011B60` that this is at `0x06011B60`, so scroll down to it and either double-click on it or right-click on it and choose "Open in Skeleton Viewer". Pick an animation that we know it uses (sometimes Z64Utils misidentifies other things for animations), such as `object_bg_Anim_000968`, and you will get this error: ![Z64Utils, error when viewing skeleton](images/z64utils_skeleton_error.png) @@ -447,7 +443,7 @@ void EnRecepgirl_UnkLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { } ``` -It is used to do a rotation of whatever limb `5` is. (The `+=` is because `rot->x` is the base rotation of the limb, and we have to add the same thing to it every frame to keep the angle changed and constant.) We can use Z64Utils to : setting segment `8` to one of what we know now are the eye textures, we can view the model in the skeleton viewer. The limb numbers in the object are one smaller than those in the actor (the root limb is only a concept for the code, not the object), so we find limb 4: +It is used to do a rotation of whatever limb `5` is. (The `+=` is because `rot->x` is the base rotation of the limb, and we have to add the same thing to it every frame to keep the angle changed and constant.) We can use Z64Utils to figure this out: setting segment `8` to one of what we know now are the eye textures, we can view the model in the skeleton viewer. The limb numbers in the object are one smaller than those in the actor (the root limb is only a concept for the code, not the object), so we find limb 4: ![Z64Utils highlighting a limb](images/z64utils_skeleton_head.png) diff --git a/docs/tutorial/images/z64utils_object_analyzer.png b/docs/tutorial/images/z64utils_object_analyzer.png deleted file mode 100644 index 7a6adec3db39949df102c15383b018039df3e499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11211 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 Find Dlists" and press OK (the defaults are usually fine). This will only find display lists, so to find everything else in the obect, do "Analysis -> Analyze Dlists". We're looking for the skeleton, so scroll down to the SkeletonHeader, right-click it, and select "Open in Skeleton Viewer": +In the resulting window, you'll see displaylists, textures, and other assets. We're looking for the skeleton, so scroll down to the SkeletonHeader, then either double-click on it or right-click it and select "Open in Skeleton Viewer": ![Finding object_dns's SkeletonHeader in Z64Utils](images/z64utils_dns_skeletonheader.png) @@ -186,7 +186,7 @@ For some actors, there may be a few other things left to name that are directly gSPDisplayList(POLY_OPA_DISP++, &D_06002C48); ``` -In Z64Utils, scroll to find this display list, then right-click and select "Open in Dlist Viewer": +In Z64Utils, scroll to find this display list, then either double-click it or right-click it and select "Open in Dlist Viewer": ![Opening dlist_00002C48 in Z64Utils](images/z64utils_dns_display_list.png)