diff --git a/source/glest_game/type_instances/unit.cpp b/source/glest_game/type_instances/unit.cpp index 0cce4e9b..e7e0a478 100644 --- a/source/glest_game/type_instances/unit.cpp +++ b/source/glest_game/type_instances/unit.cpp @@ -3553,38 +3553,50 @@ void Unit::saveGame(XmlNode *rootNode) { // vector unitParticleSystems; for(unsigned int i = 0; i < unitParticleSystems.size(); ++i) { UnitParticleSystem *ups= unitParticleSystems[i]; - ups->saveGame(unitNode); + if(ups != NULL) { + ups->saveGame(unitNode); + } } // vector queuedUnitParticleSystemTypes; for(unsigned int i = 0; i < queuedUnitParticleSystemTypes.size(); ++i) { UnitParticleSystemType *upst= queuedUnitParticleSystemTypes[i]; - upst->saveGame(unitNode); + if(upst != NULL) { + upst->saveGame(unitNode); + } } // UnitParticleSystems damageParticleSystems; for(unsigned int i = 0; i < damageParticleSystems.size(); ++i) { UnitParticleSystem *ups= damageParticleSystems[i]; - ups->saveGame(unitNode); + if(ups != NULL) { + ups->saveGame(unitNode); + } } // std::map damageParticleSystemsInUse; for(std::map::const_iterator iterMap = damageParticleSystemsInUse.begin(); iterMap != damageParticleSystemsInUse.end(); ++iterMap) { - XmlNode *damageParticleSystemsInUseNode = unitNode->addChild("damageParticleSystemsInUse"); + if(iterMap->second != NULL) { + XmlNode *damageParticleSystemsInUseNode = unitNode->addChild("damageParticleSystemsInUse"); - damageParticleSystemsInUseNode->addAttribute("key",intToStr(iterMap->first), mapTagReplacements); - iterMap->second->saveGame(damageParticleSystemsInUseNode); + damageParticleSystemsInUseNode->addAttribute("key",intToStr(iterMap->first), mapTagReplacements); + iterMap->second->saveGame(damageParticleSystemsInUseNode); + } } // vector fireParticleSystems; for(unsigned int i = 0; i < fireParticleSystems.size(); ++i) { ParticleSystem *ps= fireParticleSystems[i]; - ps->saveGame(unitNode); + if(ps != NULL) { + ps->saveGame(unitNode); + } } // vector smokeParticleSystems; for(unsigned int i = 0; i < smokeParticleSystems.size(); ++i) { UnitParticleSystem *ups= smokeParticleSystems[i]; - ups->saveGame(unitNode); + if(ups != NULL) { + ups->saveGame(unitNode); + } } // CardinalDir modelFacing; diff --git a/source/shared_lib/sources/graphics/particle.cpp b/source/shared_lib/sources/graphics/particle.cpp index ad2a0f32..2f7f315b 100644 --- a/source/shared_lib/sources/graphics/particle.cpp +++ b/source/shared_lib/sources/graphics/particle.cpp @@ -727,7 +727,9 @@ void GameParticleSystem::saveGame(XmlNode *rootNode) { // Children children; for(unsigned int i = 0; i < children.size(); ++i) { - children[i]->saveGame(gameParticleSystemNode); + if(children[i] != NULL) { + children[i]->saveGame(gameParticleSystemNode); + } } // Primitive primitive; gameParticleSystemNode->addAttribute("primitive",intToStr(primitive), mapTagReplacements);