Oh, just a heads up, Jack and I have had our roles a bit reversed, while jack has been able to get time to work on URDE, I've been struggling to find the time, however URDE is still being actively worked on, when we have time, and we've made massive progress since our last progress report. I'll let jack elaborate on that if he wants, since he's been the one to do most of the work.

very nice! I've been slow the last few months because I needed to focus on Hat in Time (WHICH BTW CAME OUT THIS MONTH AND PEOPLE REALLY LIKE IT) and so didn't really have any time for any hobby stuff. But now that it's out I'm trying to figure out a more balanced schedule going forward so I can keep doing hobby projects like PWE on the side.

For right now I'm toying around with some DKCTF stuff I've been wanting to do for ages, cuz I'm not super thrilled with the way I did a few things in PWE and a fresh project is a great opportunity to experiment with some new stuff and try putting into practice some of the stuff I've learned working on Hat. So might be a bit longer before I go back to PWE, but whenever I do there is still a *lot* of stuff I'm really excited to work on for it! Lately it's just really a matter of finding time for this stuff since I have so many other things demanding my attention right now. My life has definitely changed a hell of a lot since I started working on this project.

Also, I made this code to fix frustum culling issues. I didn't want to use the existing code because they disable the culling entirely. Which is good for VR, but way overkill if you just want widescreen. So here's a code that extends the frustum range, but still allows for culling to happen offscreen. This works because the CFrustumPlanes constructor takes the aspect ratio as a function parameter. This code patches in an instruction that forces the game to always load 2.0 as the aspect ratio value.

Code:

043452A8 C342CB78

Would it be possible to create a specific code for 21:9 using an aspect ratio value above 2.0? I have tried a few generic codes but they seem to disable culling entirely, which tanks performance.

Also, I made this code to fix frustum culling issues. I didn't want to use the existing code because they disable the culling entirely. Which is good for VR, but way overkill if you just want widescreen. So here's a code that extends the frustum range, but still allows for culling to happen offscreen. This works because the CFrustumPlanes constructor takes the aspect ratio as a function parameter. This code patches in an instruction that forces the game to always load 2.0 as the aspect ratio value.

Code:

043452A8 C342CB78

Would it be possible to create a specific code for 21:9 using an aspect ratio value above 2.0? I have tried a few generic codes but they seem to disable culling entirely, which tanks performance.

possibly. I implemented the code by pointing to a 2.0 value that happened to be nearby in memory to the one the game normally uses for frustum culling. You could possibly either find a different value to point to, or implement the code in a different way. Not something I'm gonna be personally looking at doing right now either way though, unfortunately.

so this isn't a huge development or anything - but Shinesparkers talked to one of the technical lead engineers, Jack Mathews, and asked him about our modding work and PWE, and he had this to say:

Quote:

SS: We have a lot of creative fans within the community, and on their behalf I would like to ask are you aware of fan efforts to mod the Prime games using Prime World Editor and the software they use to do it? How do you feel about this?

I’ve been following the mod stuff off and on for years and I am so impressed. I also have to apologize to the modding community – I’m actually responsible for a ton of the file formats in the games – particularly the graphics assets, the PAK files, and I believe the area files. I cannot believe what people discovered without actual source, and I can assure all of you, I know how terrible the formats are and… sorry.

So Jack says MP1 uses CRC32 hashes for asset IDs, whereas MP3 uses MD5 hashes with the top half cut off, and all games use CRC32 for property IDs. Additionally, asset paths start with "$/". Using this info, we've been able to replicate the asset ID hashes for both MP1 and MP3!! For example, take the path for the Space Pirate Frigate world asset, from Metroid1.pak.contents.txt:

To get the correct hash, you need to convert the string to lowercase, and replace "K:/new_rep" with a $. So this is the string you hash:

Code:

$/worlds/introllevel/!intro_master/cooked/!intro_master.mwld

After that, run the game's CRC32 function on it. This differs from a standard CRC32 function in that the final XOR at the end is not performed. The resulting hash is 0x158EFE17, which is the same asset ID as you find in the game data!

Some random stuff about asset paths Antidote and I have figured out by guessing and checking the resulting hashes- AGSC files are in $/sounds/audiogroups/<name>.agsc- Tweak files are in $/tweaks/cooked/<name>.ctwk- Characters are generally pretty easy to find, most are in $/characters/<char name>/<character>_bound.<cmdl/cskr/cin>- ANCS files are in the same folder and are formatted <character>.acs- ANIM/EVNT filenames generally match the animation names from the ANCS files and have .ani/.evnt extensions- The SCAN filenames from some actor instance names in the MREA files are indeed the actual filename- Some of my auto-generated lightmap filenames for various rooms in Ruins/Phen/etc are correct lol. Others are wrong due to being in the wrong order but the general naming scheme is correct.- Antidote figured out that a lot of the paths from the MP3 prototype build can be matched up with 32-bit MP1/2 hashes by applying CRC32 to them instead of MD5. These were previously impossible to translate so were only useful for MP3/DKCR.- It should be feasible to bruteforce some filenames (such as textures in the common_textures folders which often have pretty short filenames)

we can replicate property IDs now! It turns out that you have to append the property type to the end of the property name. So for example for the Patterned property called "Mass" you have to hash the string "Massfloat" and the result is 0x75DBB375. Or for EditorProperties you need to hash the string "EditorPropertiesEditorProperties" and the result is 0x255A4580.

this is thanks to Jack Mathews too - he couldn't remember exactly how the property names were formatted but he told me what he thought they probably did, and I managed to get the IDs to match up by going off what he said. So he's pretty dang awesome!!

so the last few days we've been using the new info to determine the real names of tons of properties. I integrated a property name validation system into PWE's property editor, and I also wrote some tools that guess property names by using a list of dictionary words and checking against known property IDs, again all integrated into PWE. Also this makes it actually feasible to start importing the property names from DKCR3D back to the original DKCR, so I've been working on that too. According to Bearborg we have something like 37% of all property names named correctly so far.

I wanna release a new build of PWE with these new tools soon, so hopefully I will have time to keep fleshing them out until I get in all the features I want soon.

Until then, anyone who is interested in Prime hacking I highly recommend you join our discord server. I am trying to keep this thread mostly updated but it's dead here. There is way more stuff happening on Discord.

I'm not sure if this is the correct place to ask this. I'm looking for the missile explosion and skeeker missile sound effects in Prime 3 but I cannot find them at all. Does anyone know their file names?

EDIT: I managed to find the file. It's "f26124f3c11a716e.CSMP" in "SamGunFx.pak". Now I have another problem, I want to replace the Bryyo thorn jungle theme but the game crashes with the new file as soon as I enter the thorn jungle area. The problem seems to be that whatever is saved with the audacity fork as ".fsb" will cause the error, even if it's just the unmodified existing file importedn and exported as fsb.