VisParticleGroupDescriptor_cl *VisParticleGroupManager_cl::DoArchiveExchange(VArchive &ar, VisParticleGroupDescriptor_cl *pSource)
{
  if (ar.IsLoading())
  {
    VString fxname,descname;
    ar >> fxname;
    ar >> descname;
    VisParticleEffectFile_cl* pFX = LoadFromFile(fxname);
    if (!pFX)
      return NULL;
    return pFX->FindDescriptor(descname);
  } else
VisParticleGroupDescriptor_cl *VisParticleGroupManager_cl::FindDescriptor(const char *szName) const
{
  const int iCount = GetResourceCount();
  for (int i=0;i<iCount;i++)
  {
    VisParticleEffectFile_cl *pFX = (VisParticleEffectFile_cl *)VisResourceManager_cl::GetResourceByIndex(i);
    if (!pFX) continue;
    VisParticleGroupDescriptor_cl *pDesc = pFX->FindDescriptor(szName);
    if (pDesc)
      return pDesc;
  }
  return NULL;
}