diff --git a/resources/gameinfo/GameInfoMP1.xml b/resources/gameinfo/GameInfoMP1.xml index 22558010..5405e3fe 100644 --- a/resources/gameinfo/GameInfoMP1.xml +++ b/resources/gameinfo/GameInfoMP1.xml @@ -679,7 +679,7 @@ 8ABEB3C3 - 10_over1lavaarea + 10_over_1alavaarea 901040DF diff --git a/src/Core/Resource/Factory/CResourceFactory.h b/src/Core/Resource/Factory/CResourceFactory.h index 56642779..7dae470d 100644 --- a/src/Core/Resource/Factory/CResourceFactory.h +++ b/src/Core/Resource/Factory/CResourceFactory.h @@ -95,6 +95,7 @@ public: case eTexture: pRes = CTextureDecoder::LoadTXTR(rInput, pEntry); break; case eWorld: pRes = CWorldLoader::LoadMLVL(rInput, pEntry); break; + case eBurstFireData: case eParticle: case eParticleElectric: case eParticleSorted: @@ -103,6 +104,7 @@ public: case eParticleDecal: case eParticleWeapon: case eParticleCollisionResponse: + case eUserEvaluatorData: pRes = CUnsupportedParticleLoader::LoadParticle(rInput, pEntry); break; diff --git a/src/Core/Resource/Factory/CUnsupportedParticleLoader.cpp b/src/Core/Resource/Factory/CUnsupportedParticleLoader.cpp index f3a30469..94fea0e8 100644 --- a/src/Core/Resource/Factory/CUnsupportedParticleLoader.cpp +++ b/src/Core/Resource/Factory/CUnsupportedParticleLoader.cpp @@ -14,6 +14,7 @@ bool CUnsupportedParticleLoader::ParseParticleParameter(IInputStream& rPART) // Bool case FOURCC('AAPH'): case FOURCC('CIND'): + case FOURCC('DBPS'): case FOURCC('FXLL'): case FOURCC('INDM'): case FOURCC('LINE'): @@ -21,12 +22,20 @@ bool CUnsupportedParticleLoader::ParseParticleParameter(IInputStream& rPART) case FOURCC('MBLR'): case FOURCC('OPTS'): case FOURCC('ORNT'): + case FOURCC('ORTC'): case FOURCC('PMAB'): + case FOURCC('PMLT'): case FOURCC('PMOO'): + case FOURCC('PMTF'): case FOURCC('PMUS'): case FOURCC('RDOP'): case FOURCC('RSOP'): case FOURCC('SORT'): + case FOURCC('STOP'): + case FOURCC('VGD1'): + case FOURCC('VGD2'): + case FOURCC('VGD3'): + case FOURCC('VGD4'): case FOURCC('VMD1'): case FOURCC('VMD2'): case FOURCC('VMD3'): @@ -42,22 +51,28 @@ bool CUnsupportedParticleLoader::ParseParticleParameter(IInputStream& rPART) break; // Int + case FOURCC('ALSC'): + case FOURCC('AMSC'): case FOURCC('CSSD'): + case FOURCC('HJAK'): case FOURCC('LFOT'): case FOURCC('LTME'): case FOURCC('LTYP'): case FOURCC('MAXP'): + case FOURCC('MBDM'): case FOURCC('MBSP'): case FOURCC('NCSY'): case FOURCC('NDSY'): + case FOURCC('PBDM'): case FOURCC('PISY'): - case FOURCC('PSIV'): case FOURCC('PSLT'): case FOURCC('PSWT'): case FOURCC('SEED'): case FOURCC('SESD'): case FOURCC('SISY'): case FOURCC('SSSD'): + case FOURCC('VSPC'): + case FOURCC('XJAK'): case FOURCC('XTAD'): ParseIntFunction(rPART); break; @@ -72,8 +87,10 @@ bool CUnsupportedParticleLoader::ParseParticleParameter(IInputStream& rPART) case FOURCC('ADV7'): case FOURCC('ADV8'): case FOURCC('ADV9'): + case FOURCC('EADV'): case FOURCC('FXBR'): case FOURCC('GRTE'): + case FOURCC('ISVF'): case FOURCC('LENG'): case FOURCC('LFOR'): case FOURCC('LINT'): @@ -81,6 +98,7 @@ bool CUnsupportedParticleLoader::ParseParticleParameter(IInputStream& rPART) case FOURCC('PSTS'): case FOURCC('ROTA'): case FOURCC('SIZE'): + case FOURCC('SVEO'): case FOURCC('WIDT'): ParseFloatFunction(rPART); break; @@ -96,6 +114,7 @@ bool CUnsupportedParticleLoader::ParseParticleParameter(IInputStream& rPART) case FOURCC('PMRT'): case FOURCC('PMSC'): case FOURCC('POFS'): + case FOURCC('PSIV'): case FOURCC('PSOV'): case FOURCC('SEPO'): case FOURCC('SSPO'): @@ -172,6 +191,7 @@ bool CUnsupportedParticleLoader::ParseElectricParameter(IInputStream& rELSC) ParseBitfieldFunction(rELSC); break; + case FOURCC('BLDM'): case FOURCC('LIFE'): case FOURCC('SCNT'): case FOURCC('SLIF'): @@ -324,9 +344,13 @@ bool CUnsupportedParticleLoader::ParseSwooshParameter(IInputStream& rSWHC) ParseBitfieldFunction(rSWHC); break; + case FOURCC('ALSC'): case FOURCC('LENG'): case FOURCC('PSLT'): + case FOURCC('SBDM'): case FOURCC('SIDE'): + case FOURCC('SPLN'): + case FOURCC('TSPN'): ParseIntFunction(rSWHC); break; @@ -334,9 +358,10 @@ bool CUnsupportedParticleLoader::ParseSwooshParameter(IInputStream& rSWHC) case FOURCC('LRAD'): case FOURCC('ROTM'): case FOURCC('RRAD'): - case FOURCC('SPLN'): case FOURCC('TIME'): - case FOURCC('TSPN'): + case FOURCC('XROT'): + case FOURCC('YROT'): + case FOURCC('ZROT'): ParseFloatFunction(rSWHC); break; @@ -442,6 +467,7 @@ bool CUnsupportedParticleLoader::ParseWeaponParameter(IInputStream& rWPSC) case FOURCC('AS11'): case FOURCC('AS12'): case FOURCC('AS13'): + case FOURCC('BEAM'): case FOURCC('BHBT'): case FOURCC('DP1C'): case FOURCC('DP2C'): @@ -458,8 +484,10 @@ bool CUnsupportedParticleLoader::ParseWeaponParameter(IInputStream& rWPSC) case FOURCC('RWPE'): case FOURCC('SPS1'): case FOURCC('SPS2'): + case FOURCC('SREL'): case FOURCC('SVBD'): case FOURCC('SWTR'): + case FOURCC('TCND'): case FOURCC('VMD2'): ParseBoolFunction(rWPSC); break; @@ -472,6 +500,8 @@ bool CUnsupportedParticleLoader::ParseWeaponParameter(IInputStream& rWPSC) case FOURCC('B1SE'): case FOURCC('B2RT'): case FOURCC('B2SE'): + case FOURCC('FADD'): + case FOURCC('FADS'): case FOURCC('FOFF'): case FOURCC('RNGE'): case FOURCC('TLEN'): @@ -522,6 +552,7 @@ bool CUnsupportedParticleLoader::ParseWeaponParameter(IInputStream& rWPSC) case FOURCC('ASW3'): case FOURCC('COLR'): case FOURCC('OHEF'): + case FOURCC('PSFX'): ParseAssetFunction(rWPSC); break; @@ -609,17 +640,28 @@ bool CUnsupportedParticleLoader::ParseCollisionResponseParameter(IInputStream& r case FOURCC('3LAV'): case FOURCC('1MUD'): case FOURCC('3MUD'): + case FOURCC('1PRJ'): + case FOURCC('3PRJ'): case FOURCC('1SAN'): case FOURCC('3SAN'): + case FOURCC('1WOD'): + case FOURCC('3WOD'): case FOURCC('CHDL'): case FOURCC('CODL'): case FOURCC('CRTS'): + case FOURCC('CSSD'): case FOURCC('DCHR'): + case FOURCC('DCSD'): case FOURCC('DDCL'): case FOURCC('DEFS'): case FOURCC('DENM'): + case FOURCC('DESD'): case FOURCC('DESH'): + case FOURCC('DSND'): + case FOURCC('DSSD'): case FOURCC('ENDL'): + case FOURCC('GLAS'): + case FOURCC('GLDL'): case FOURCC('GODL'): case FOURCC('GOOO'): case FOURCC('GRAS'): @@ -628,6 +670,12 @@ bool CUnsupportedParticleLoader::ParseCollisionResponseParameter(IInputStream& r case FOURCC('ICEE'): case FOURCC('MEDL'): case FOURCC('MTLS'): + case FOURCC('P3SD'): + case FOURCC('PLAY'): + case FOURCC('PLSD'): + case FOURCC('PLY3'): + case FOURCC('SNDL'): + case FOURCC('SNEE'): case FOURCC('TALP'): case FOURCC('WATR'): case FOURCC('WODL'): @@ -645,6 +693,111 @@ bool CUnsupportedParticleLoader::ParseCollisionResponseParameter(IInputStream& r return true; } +bool CUnsupportedParticleLoader::ParseBurstFireParameter(IInputStream& rBFRC) +{ + u32 ParamOffset = rBFRC.Tell(); + CFourCC Param = rBFRC.ReadLong(); + if (Param == FOURCC('_END')) return false; + + switch (Param.ToLong()) + { + case FOURCC('BTMI'): + ParseIntFunction(rBFRC); + break; + + case FOURCC('B0CH'): + case FOURCC('B1CH'): + case FOURCC('B2CH'): + case FOURCC('B3CH'): + case FOURCC('B4CH'): + case FOURCC('B5CH'): + case FOURCC('B6CH'): + case FOURCC('B7CH'): + case FOURCC('B0VL'): + case FOURCC('B1VL'): + case FOURCC('B2VL'): + case FOURCC('B3VL'): + case FOURCC('B4VL'): + case FOURCC('B5VL'): + case FOURCC('B6VL'): + case FOURCC('B7VL'): + case FOURCC('OVLH'): + case FOURCC('OVLW'): + case FOURCC('SHVR'): + ParseFloatFunction(rBFRC); + break; + + default: + Log::FileError(rBFRC.GetSourceString(), ParamOffset, "Unknown BFRC parameter: " + Param.ToString()); + DEBUG_BREAK; + return false; + } + + return true; +} + +bool CUnsupportedParticleLoader::ParseUserEvaluatorParameter(IInputStream& rUSRC) +{ + u32 ParamOffset = rUSRC.Tell(); + CFourCC Param = rUSRC.ReadLong(); + if (Param == FOURCC('_END')) return false; + + switch (Param.ToLong()) + { + case FOURCC('IPM0'): + case FOURCC('IPM1'): + case FOURCC('IPM2'): + case FOURCC('IPM3'): + case FOURCC('IPM4'): + ParseIntFunction(rUSRC); + break; + + case FOURCC('RPM0'): + case FOURCC('RPM1'): + case FOURCC('RPM2'): + case FOURCC('RPM3'): + case FOURCC('RPM4'): + case FOURCC('RPM5'): + case FOURCC('RPM6'): + case FOURCC('RPM7'): + case FOURCC('RPM8'): + case FOURCC('RPM9'): + ParseFloatFunction(rUSRC); + break; + + case FOURCC('VEC0'): + case FOURCC('VEC1'): + case FOURCC('VEC2'): + ParseVectorFunction(rUSRC); + break; + + case FOURCC('MVC0'): + case FOURCC('MVC1'): + ParseModVectorFunction(rUSRC); + break; + + case FOURCC('CLR1'): + ParseColorFunction(rUSRC); + break; + + case FOURCC('TEX0'): + case FOURCC('TEX1'): + ParseUVFunction(rUSRC); + break; + + case FOURCC('EMT1'): + ParseEmitterFunction(rUSRC); + break; + + default: + Log::FileError(rUSRC.GetSourceString(), ParamOffset, "Unknown USRC parameter: " + Param.ToString()); + DEBUG_BREAK; + return false; + } + + return true; +} + // ************ FUNCTION LOADING ************ void CUnsupportedParticleLoader::ParseBoolFunction(IInputStream& rFile) { @@ -769,6 +922,7 @@ void CUnsupportedParticleLoader::ParseFloatFunction(IInputStream& rFile) case FOURCC('PAP7'): case FOURCC('PAP8'): case FOURCC('PAP9'): + case FOURCC('PEA0'): case FOURCC('PRLW'): case FOURCC('PSLL'): break; @@ -805,6 +959,11 @@ void CUnsupportedParticleLoader::ParseFloatFunction(IInputStream& rFile) ParseIntFunction(rFile); break; + case FOURCC('MULV'): + ParseFloatFunction(rFile); + ParseIntFunction(rFile); + break; + case FOURCC('CHAN'): ParseFloatFunction(rFile); ParseFloatFunction(rFile); @@ -1073,6 +1232,7 @@ void CUnsupportedParticleLoader::ParseModVectorFunction(IInputStream& rFile) break; case FOURCC('EXPL'): + case FOURCC('SWLC'): ParseFloatFunction(rFile); ParseFloatFunction(rFile); break; @@ -1085,8 +1245,8 @@ void CUnsupportedParticleLoader::ParseModVectorFunction(IInputStream& rFile) case FOURCC('PULS'): ParseIntFunction(rFile); ParseIntFunction(rFile); - ParseFloatFunction(rFile); - ParseFloatFunction(rFile); + ParseModVectorFunction(rFile); + ParseModVectorFunction(rFile); break; case FOURCC('SPHV'): @@ -1147,6 +1307,7 @@ void CUnsupportedParticleLoader::ParseColorFunction(IInputStream& rFile) ParseFloatFunction(rFile); break; + case FOURCC('CFDL'): case FOURCC('ISWT'): case FOURCC('MULT'): ParseColorFunction(rFile); @@ -1215,6 +1376,13 @@ void CUnsupportedParticleLoader::ParseUVFunction(IInputStream& rFile) ParseBoolFunction(rFile); break; + case FOURCC('TEXP'): + ParseAssetFunction(rFile); + ParseIntFunction(rFile); + ParseIntFunction(rFile); + ParseFloatFunction(rFile); + break; + default: Log::FileError(rFile.GetSourceString(), FuncOffset, "Unknown UV function: " + Func.ToString()); DEBUG_BREAK; @@ -1370,17 +1538,6 @@ void CUnsupportedParticleLoader::ParseKeyframeEmitterData(IInputStream& rFile, c } // ************ STATIC ************ -enum { - kGPSM = FOURCC('GPSM'), - kELSM = FOURCC('ELSM'), - kSRSM = FOURCC('SRSM'), - kSPSM = FOURCC('SPSM'), - kSWSH = FOURCC('SWSH'), - kDPSM = FOURCC('DPSM'), - kWPSM = FOURCC('WPSM'), - kCRSM = FOURCC('CRSM') -}; - CDependencyGroup* CUnsupportedParticleLoader::LoadParticle(IInputStream& rFile, CResourceEntry *pEntry) { CFourCC Magic = rFile.ReadLong(); @@ -1389,7 +1546,7 @@ CDependencyGroup* CUnsupportedParticleLoader::LoadParticle(IInputStream& rFile, CUnsupportedParticleLoader Loader; Loader.mpGroup = new CDependencyGroup(pEntry); - if (pEntry->Game() >= eCorruptionProto) + if (pEntry->Game() >= eReturns) return Loader.mpGroup; while (true) @@ -1406,9 +1563,12 @@ CDependencyGroup* CUnsupportedParticleLoader::LoadParticle(IInputStream& rFile, case FOURCC('DPSM'): ShouldContinue = Loader.ParseDecalParameter(rFile); break; case FOURCC('WPSM'): ShouldContinue = Loader.ParseWeaponParameter(rFile); break; case FOURCC('CRSM'): ShouldContinue = Loader.ParseCollisionResponseParameter(rFile); break; + case FOURCC('BFRE'): ShouldContinue = Loader.ParseBurstFireParameter(rFile); break; + case FOURCC('USER'): ShouldContinue = Loader.ParseUserEvaluatorParameter(rFile); break; default: Log::Error("Unrecognized particle system magic: " + Magic.ToString()); + ShouldContinue = false; break; } diff --git a/src/Core/Resource/Factory/CUnsupportedParticleLoader.h b/src/Core/Resource/Factory/CUnsupportedParticleLoader.h index db2a0d10..0a6b3f44 100644 --- a/src/Core/Resource/Factory/CUnsupportedParticleLoader.h +++ b/src/Core/Resource/Factory/CUnsupportedParticleLoader.h @@ -19,6 +19,8 @@ class CUnsupportedParticleLoader bool ParseDecalParameter(IInputStream& rDPSC); bool ParseWeaponParameter(IInputStream& rWPSC); bool ParseCollisionResponseParameter(IInputStream& rCRSC); + bool ParseBurstFireParameter(IInputStream& rBFRC); + bool ParseUserEvaluatorParameter(IInputStream& rUSRC); // Function Loading void ParseBoolFunction(IInputStream& rFile); diff --git a/src/Editor/WorldEditor/CWorldEditor.cpp b/src/Editor/WorldEditor/CWorldEditor.cpp index 5585132d..2656afc6 100644 --- a/src/Editor/WorldEditor/CWorldEditor.cpp +++ b/src/Editor/WorldEditor/CWorldEditor.cpp @@ -555,14 +555,11 @@ void CWorldEditor::OnActiveProjectChanged(CGameProject *pProj) AllowBloom ? SetFakeBloom() : SetNoBloom(); ui->menuBloom->setEnabled(AllowBloom); - if (!pProj) - { - // Update recent projects list - UpdateOpenRecentActions(); + // Update recent projects list + UpdateOpenRecentActions(); - // Reset editor mode - ChangeEditMode(eWEM_EditWorldInfo); - } + // Reset editor mode + ChangeEditMode(eWEM_EditWorldInfo); } void CWorldEditor::OnLinksModified(const QList& rkInstances) diff --git a/templates/mp3/Script/LUAScript.xml b/templates/mp3/Script/LUAScript.xml index d57627b7..de0c4641 100644 --- a/templates/mp3/Script/LUAScript.xml +++ b/templates/mp3/Script/LUAScript.xml @@ -3,8 +3,8 @@ LUAScript - - + +