Skip to content

Commit 764cc0d

Browse files
dpogueHazado
andcommitted
Hacks for reading MQO data
Co-Authored-By: Edmond Mondor <Hazado22@hotmail.com>
1 parent a3fcecd commit 764cc0d

File tree

14 files changed

+98
-11
lines changed

14 files changed

+98
-11
lines changed

core/PRP/Avatar/plAGAnim.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ void plAGAnim::read(hsStream* S, plResManager* mgr)
3131
fStart = S->readFloat();
3232
fEnd = S->readFloat();
3333

34+
// MQO data
35+
if (S->getVer().isMoul() && pdUnifiedTypeMap::CurrentVersion(this->ClassIndex()) >= 5) {
36+
fUnknownMQO1 = S->readFloat();
37+
fUnknownMQO2 = S->readFloat();
38+
}
39+
3440
clearApplicators();
3541
fApps.resize(S->readInt());
3642
for (size_t i=0; i<fApps.size(); i++) {
@@ -52,6 +58,12 @@ void plAGAnim::write(hsStream* S, plResManager* mgr)
5258
S->writeFloat(fStart);
5359
S->writeFloat(fEnd);
5460

61+
// MQO data
62+
if (S->getVer().isMoul() && pdUnifiedTypeMap::CurrentVersion(this->ClassIndex()) >= 5) {
63+
S->writeFloat(fUnknownMQO1);
64+
S->writeFloat(fUnknownMQO2);
65+
}
66+
5567
S->writeInt(fApps.size());
5668
for (size_t i=0; i<fApps.size(); i++) {
5769
mgr->WriteCreatable(S, fApps[i]);
@@ -70,6 +82,8 @@ void plAGAnim::IPrcWrite(pfPrcHelper* prc)
7082
prc->writeParam("Name", fName);
7183
prc->writeParam("Start", fStart);
7284
prc->writeParam("End", fEnd);
85+
prc->writeParam("UnknownMQO1", fUnknownMQO1);
86+
prc->writeParam("UnknownMQO2", fUnknownMQO2);
7387
prc->writeParam("EoaFlag", fEoaFlag);
7488
prc->endTag(true);
7589

@@ -93,6 +107,8 @@ void plAGAnim::IPrcParse(const pfPrcTag* tag, plResManager* mgr)
93107
fName = tag->getParam("Name", "");
94108
fStart = tag->getParam("Start", "0").to_float();
95109
fEnd = tag->getParam("End", "0").to_float();
110+
fUnknownMQO1 = tag->getParam("UnknownMQO1", "0").to_float();
111+
fUnknownMQO2 = tag->getParam("UnknownMQO2", "0").to_float();
96112
fEoaFlag = tag->getParam("EoaFlag", "0").to_uint();
97113
} else if (tag->getName() == "Applicators") {
98114
clearApplicators();

core/PRP/Avatar/plAGAnim.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,12 @@ class HSPLASMA_EXPORT plAGAnim : public plSynchedObject
3333
protected:
3434
std::vector<plAGApplicator*> fApps;
3535
float fBlend, fStart, fEnd;
36+
float fUnknownMQO1, fUnknownMQO2;
3637
ST::string fName;
3738
unsigned char fEoaFlag;
3839

3940
public:
40-
plAGAnim() : fBlend(), fStart(), fEnd(), fEoaFlag() { }
41+
plAGAnim() : fBlend(), fStart(), fEnd(), fUnknownMQO1(), fUnknownMQO2(), fEoaFlag() { }
4142
~plAGAnim();
4243

4344
void read(hsStream* S, plResManager* mgr) HS_OVERRIDE;

core/PRP/Avatar/plMultistageBehMod.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ void plMultistageBehMod::read(hsStream* S, plResManager* mgr)
2828

2929
fFreezePhys = S->readBool();
3030
fSmartSeek = S->readBool();
31-
fReverseFBControlsOnRelease = S->readBool();
31+
32+
if (S->getVer() >= MAKE_VERSION(2, 0, 62, 12)) {
33+
fReverseFBControlsOnRelease = S->readBool();
34+
}
3235

3336
clearStages();
3437
fStages.resize(S->readInt());

core/PRP/KeyedObject/plLoadMask.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,13 @@
1818

1919
void plLoadMask::read(hsStream* S)
2020
{
21-
unsigned char m = S->readByte();
22-
fQuality[0] = (m >> 4) | 0xF0;
23-
fQuality[1] = m | 0xF0;
21+
if (S->getVer() < MAKE_VERSION(2, 0, 63, 0) && S->getVer().isValid()) {
22+
S->readInt();
23+
} else {
24+
unsigned char m = S->readByte();
25+
fQuality[0] = (m >> 4) | 0xF0;
26+
fQuality[1] = m | 0xF0;
27+
}
2428
}
2529

2630
void plLoadMask::write(hsStream* S)

core/PRP/KeyedObject/plUoid.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ void plUoid::read(hsStream* S)
4949
unsigned char contents = 0;
5050
if (S->getVer() < MAKE_VERSION(2, 0, 63, 0) && S->getVer().isValid()) {
5151
contents = kHasCloneIDs;
52+
53+
if (S->getVer() > MAKE_VERSION(2, 0, 62, 0)) {
54+
contents |= kHasLoadMask;
55+
}
5256
} else {
5357
contents = S->readByte();
5458
}

core/PRP/Message/plCameraMsg.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,10 @@ void plCameraMsg::read(hsStream* S, plResManager* mgr)
154154
fNewCam = mgr->readKey(S);
155155
fTriggerer = mgr->readKey(S);
156156
fConfig.read(S);
157+
158+
if (S->getVer().isMqo()) {
159+
fUnknownMQO.read(S);
160+
}
157161
}
158162

159163
void plCameraMsg::write(hsStream* S, plResManager* mgr)
@@ -166,6 +170,10 @@ void plCameraMsg::write(hsStream* S, plResManager* mgr)
166170
mgr->writeKey(S, fNewCam);
167171
mgr->writeKey(S, fTriggerer);
168172
fConfig.write(S);
173+
174+
if (S->getVer().isMqo()) {
175+
fUnknownMQO.write(S);
176+
}
169177
}
170178

171179
void plCameraMsg::IPrcWrite(pfPrcHelper* prc)
@@ -189,6 +197,10 @@ void plCameraMsg::IPrcWrite(pfPrcHelper* prc)
189197
prc->closeTag();
190198

191199
fConfig.prcWrite(prc);
200+
201+
prc->writeSimpleTag("UnknownMQO");
202+
fUnknownMQO.prcWrite(prc);
203+
prc->closeTag();
192204
}
193205

194206
void plCameraMsg::IPrcParse(const pfPrcTag* tag, plResManager* mgr)
@@ -207,6 +219,9 @@ void plCameraMsg::IPrcParse(const pfPrcTag* tag, plResManager* mgr)
207219
fTriggerer = mgr->prcParseKey(tag->getFirstChild());
208220
} else if (tag->getName() == "plCameraConfig") {
209221
fConfig.prcParse(tag);
222+
} else if (tag->getName() == "UnknownMQO") {
223+
if (tag->hasChildren())
224+
fUnknownMQO.prcParse(tag->getFirstChild());
210225
} else {
211226
plMessage::IPrcParse(tag, mgr);
212227
}

core/PRP/Message/plCameraMsg.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class HSPLASMA_EXPORT plCameraMsg : public plMessage
9898
plCameraConfig fConfig;
9999
bool fActivated;
100100
hsBitVector fCmd;
101+
hsVector3 fUnknownMQO;
101102

102103
public:
103104
plCameraMsg();

core/PRP/Modifier/plOneShotMod.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,13 @@ void plOneShotMod::read(hsStream* S, plResManager* mgr)
2626
fReversable = S->readBool();
2727
fSmartSeek = S->readBool();
2828

29-
if (S->getVer() > 0x02006304) { /*TODO: Verify! */
29+
if (S->getVer() > MAKE_VERSION(2, 0, 63, 4)) {
3030
fNoSeek = S->readBool();
3131
}
32+
33+
if (S->getVer().isMoul() && pdUnifiedTypeMap::CurrentVersion(this->ClassIndex()) >= 3) {
34+
fUnknownMQO = S->readBool();
35+
}
3236
}
3337

3438
void plOneShotMod::write(hsStream* S, plResManager* mgr)
@@ -41,6 +45,10 @@ void plOneShotMod::write(hsStream* S, plResManager* mgr)
4145
S->writeBool(fReversable);
4246
S->writeBool(fSmartSeek);
4347
S->writeBool(fNoSeek);
48+
49+
if (S->getVer().isMoul() && pdUnifiedTypeMap::CurrentVersion(this->ClassIndex()) >= 3) {
50+
S->writeBool(fUnknownMQO);
51+
}
4452
}
4553

4654
void plOneShotMod::IPrcWrite(pfPrcHelper* prc)
@@ -54,6 +62,7 @@ void plOneShotMod::IPrcWrite(pfPrcHelper* prc)
5462
prc->writeParam("Reversable", fReversable);
5563
prc->writeParam("SmartSeek", fSmartSeek);
5664
prc->writeParam("NoSeek", fNoSeek);
65+
prc->writeParam("UnknownMQO", fUnknownMQO);
5766
prc->endTag(true);
5867
}
5968

@@ -66,6 +75,7 @@ void plOneShotMod::IPrcParse(const pfPrcTag* tag, plResManager* mgr)
6675
fReversable = tag->getParam("Reversable", "false").to_bool();
6776
fSmartSeek = tag->getParam("SmartSeek", "false").to_bool();
6877
fNoSeek = tag->getParam("NoSeek", "true").to_bool();
78+
fUnknownMQO = tag->getParam("UnknownMQO", "false").to_bool();
6979
} else {
7080
plMultiModifier::IPrcParse(tag, mgr);
7181
}

core/PRP/Modifier/plOneShotMod.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ class HSPLASMA_EXPORT plOneShotMod : public plMultiModifier
2525

2626
protected:
2727
ST::string fAnimName;
28-
bool fDrivable, fReversable, fSmartSeek, fNoSeek;
28+
bool fDrivable, fReversable, fSmartSeek, fNoSeek, fUnknownMQO;
2929
float fSeekDuration;
3030

3131
public:
3232
plOneShotMod()
3333
: fDrivable(), fReversable(), fSmartSeek(), fNoSeek(true),
34-
fSeekDuration() { }
34+
fUnknownMQO(), fSeekDuration() { }
3535

3636
void read(hsStream* S, plResManager* mgr) HS_OVERRIDE;
3737
void write(hsStream* S, plResManager* mgr) HS_OVERRIDE;

core/PRP/Physics/plGenericPhysical.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ void plGenericPhysical::read(hsStream* S, plResManager* mgr)
9999
{
100100
plSynchedObject::read(S, mgr);
101101

102+
if (S->getVer() < MAKE_VERSION(2, 0, 63, 0)) {
103+
return;
104+
}
105+
102106
if (S->getVer().isUniversal())
103107
fInternalType = (PhysType)S->readInt();
104108
else if (S->getVer().isNewPlasma())

0 commit comments

Comments
 (0)