Skip to content

Conversation

@dpogue
Copy link
Member

@dpogue dpogue commented Jul 16, 2022

Based on some work by @Hazado and references from Drizzle, this seems to be able to read all the MQO files. I'm going to say that editing/writing is probably not safe for now.

For most cases, we can rely on the Class Versions map, except for the case of messages included within responders. That necessitated the addition of a pvMqo entry to PlasmaVersion and a very specific filename/SeqPrefix check to decide when to use it or not 😞

This also adds support for the plCloneSpawnModifier class. Currently this is unused in Uru and MOUL, so we'll always try to read an MQO version if it's MOUL-ish data. Given that the class implementation is actually probably broken in Uru, it makes sense for us to update it in H-uru/Plasma to match MQO at some point so that it's actually usable, but that's neither here nor there.

There's a handful of version checks for Choru data that I've been carrying around locally for a few years in here too. I can try to split them out into their own commit if that's a problem.

Closes #247

pvPrime = MAKE_VERSION(2, 0, 63, 11),
pvPots = MAKE_VERSION(2, 0, 63, 12),
pvMoul = MAKE_VERSION(2, 0, 70, 0),
pvMqo = MAKE_VERSION(2, 0, 70, 1),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

H-uru/Plasma is currently 2.0.70.2, FWIW.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That ends up not really mattering because that's handled via the ClassVersions stuff.

MQO isn't really 2.0.70.1, we just need something to use as a flag because of the missing ClassVersions for messages :(

I believe this is only ever used for MQO.
@dpogue dpogue marked this pull request as ready for review November 1, 2025 21:34
fQuality[0] = (m >> 4) | 0xF0;
fQuality[1] = m | 0xF0;
if (S->getVer() < MAKE_VERSION(2, 0, 63, 0) && S->getVer().isValid()) {
S->readInt();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to update write()

S->writeBool(fDrivable);
S->writeBool(fReversable);
S->writeBool(fSmartSeek);
S->writeBool(fNoSeek);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Make this conditional to match read()?


if (S->getVer() < MAKE_VERSION(2, 0, 63, 0)) {
return;
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also update write()

dpogue and others added 2 commits November 2, 2025 01:11
Co-Authored-By: Edmond Mondor <[email protected]>
plClient writes a computed transform, but does some additional computation
during the read.  We may want this computed transform at some point, but
for now it's easier (and better for preserving PRP identity) to just read
and write the same bits avoiding all additional computation.

Co-Authored-By: Darryl Pogue <[email protected]>
@dpogue
Copy link
Member Author

dpogue commented Nov 2, 2025

I've made those reads/write consistent, and also got support for HKPhysical working.

This now includes a slightly modified version of #138 (in which we still read the hsVector3 because some versions have extra data in there, but assign to the hsQuat without doing any data transformations)

@sinkillerj
Copy link

Just chiming in to say great work with all this research. The MQ community is watching eagerly, as this contributes to future revival efforts.

@zrax zrax merged commit 0822754 into H-uru:master Nov 2, 2025
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

MQO prps fail to open correctly

4 participants