[ZB]: Ignore missing sound names in FX (#847)
This commit is contained in:
parent
039cafbc0f
commit
b550438cd8
@ -12,56 +12,6 @@ namespace Assets
|
|||||||
assert(header->data);
|
assert(header->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IFxEffectDef::loadFxElemVisuals(Game::FxElemVisuals* visuals, char elemType, Components::ZoneBuilder::Zone* builder, Utils::Stream::Reader* reader)
|
|
||||||
{
|
|
||||||
|
|
||||||
switch (elemType)
|
|
||||||
{
|
|
||||||
case Game::FX_ELEM_TYPE_MODEL:
|
|
||||||
{
|
|
||||||
if (visuals->model)
|
|
||||||
{
|
|
||||||
visuals->model = Components::AssetHandler::FindAssetForZone(Game::XAssetType::ASSET_TYPE_XMODEL, reader->readString(), builder).model;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case Game::FX_ELEM_TYPE_OMNI_LIGHT:
|
|
||||||
case Game::FX_ELEM_TYPE_SPOT_LIGHT:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Game::FX_ELEM_TYPE_SOUND:
|
|
||||||
{
|
|
||||||
if (visuals->soundName)
|
|
||||||
{
|
|
||||||
visuals->soundName = reader->readCString();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case Game::FX_ELEM_TYPE_RUNNER:
|
|
||||||
{
|
|
||||||
if (visuals->effectDef.handle)
|
|
||||||
{
|
|
||||||
visuals->effectDef.handle = Components::AssetHandler::FindAssetForZone(Game::XAssetType::ASSET_TYPE_FX, reader->readString(), builder).fx;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
if (visuals->material)
|
|
||||||
{
|
|
||||||
visuals->material = Components::AssetHandler::FindAssetForZone(Game::XAssetType::ASSET_TYPE_MATERIAL, reader->readString(), builder).material;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void IFxEffectDef::loadFromIW4OF(Game::XAssetHeader* header, const std::string& name, Components::ZoneBuilder::Zone* builder)
|
void IFxEffectDef::loadFromIW4OF(Game::XAssetHeader* header, const std::string& name, Components::ZoneBuilder::Zone* builder)
|
||||||
{
|
{
|
||||||
header->fx = builder->getIW4OfApi()->read<Game::FxEffectDef>(Game::XAssetType::ASSET_TYPE_FX, name);
|
header->fx = builder->getIW4OfApi()->read<Game::FxEffectDef>(Game::XAssetType::ASSET_TYPE_FX, name);
|
||||||
@ -168,8 +118,17 @@ namespace Assets
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xA:
|
case 0xA:
|
||||||
|
{
|
||||||
|
if (visuals->soundName)
|
||||||
|
{
|
||||||
|
// Double "find call" but we have to because otherwise we'd crash on missing asset
|
||||||
|
// Sometimes Fx reference by name a sound that does not exist. IW oversight ?
|
||||||
|
// Never happens on iw3 but often happens on iw5, especially DLC maps.
|
||||||
|
if (Components::AssetHandler::FindAssetForZone(Game::XAssetType::ASSET_TYPE_SOUND, visuals->soundName, builder, false).data)
|
||||||
{
|
{
|
||||||
builder->loadAssetByName(Game::XAssetType::ASSET_TYPE_SOUND, visuals->soundName, false);
|
builder->loadAssetByName(Game::XAssetType::ASSET_TYPE_SOUND, visuals->soundName, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,5 @@ namespace Assets
|
|||||||
void loadEfx(Game::XAssetHeader* header, const std::string& name, Components::ZoneBuilder::Zone* builder);
|
void loadEfx(Game::XAssetHeader* header, const std::string& name, Components::ZoneBuilder::Zone* builder);
|
||||||
void loadNative(Game::XAssetHeader* header, const std::string& name, Components::ZoneBuilder::Zone* builder);
|
void loadNative(Game::XAssetHeader* header, const std::string& name, Components::ZoneBuilder::Zone* builder);
|
||||||
void loadFromIW4OF(Game::XAssetHeader* header, const std::string& name, Components::ZoneBuilder::Zone* builder);
|
void loadFromIW4OF(Game::XAssetHeader* header, const std::string& name, Components::ZoneBuilder::Zone* builder);
|
||||||
|
|
||||||
void loadFxElemVisuals(Game::FxElemVisuals* visuals, char elemType, Components::ZoneBuilder::Zone* builder, Utils::Stream::Reader* reader);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user