STEP - 1 - DEBRIS DATA (player.cs) First find this datablock: datablock DebrisData( PlayerDebris ) { Then right above that copy and paste this: Code: -------------------------------------------------------------------------------- datablock DebrisData( HumanRedPlayerDebris ) { explodeOnMaxBounce = false; elasticity = 0.35; friction = 0.5; lifetime = 4.0; lifetimeVariance = 0.0; emitters[0] = HumanRedBloodEmitter; emitters[1] = HumanRedPlayerSplashMistEmitter; emitters[2] = HumanRedDropletsEmitter; minSpinSpeed = 60; maxSpinSpeed = 900; numBounces = 15; bounceVariance = 0; staticOnMaxBounce = true; gravModifier = 1.0; useRadiusMass = true; baseRadius = 1; velocity = 18.0; velocityVariance = 12.0; }; datablock DebrisData( BiodermPlayerDebris ) { explodeOnMaxBounce = false; elasticity = 0.35; friction = 0.5; lifetime = 4.0; lifetimeVariance = 0.0; emitters[0] = BiodermBloodEmitter; emitters[1] = BiodermPlayerSplashMistEmitter; emitters[2] = PurpleBiodermDropletsEmitter; minSpinSpeed = 60; maxSpinSpeed = 900; numBounces = 15; bounceVariance = 0; staticOnMaxBounce = true; gravModifier = 1.0; useRadiusMass = true; baseRadius = 1; velocity = 18.0; velocityVariance = 12.0; }; -------------------------------------------------------------------------------- Then in every one of your armor datablocks find these lines: debrisShapeName = "debris_player.dts"; debris = PlayerDebris; AND change them to this: debrisShapeName = "debris_player.dts"; debris = HumanRedPlayerDebris; AND for your bioderm datablocks change or add these lines: debrisShapeName = "debris_player.dts"; debris = BiodermPlayerDebris; This sets up your Debris so on death your pices have blood trails. STEP - 2 - DEATH FUNCTIONS (player.cs) Now copy and paste this at the very bottom of your player.cs file: Code: -------------------------------------------------------------------------------- datablock AudioProfile(DeathExplosionSound) { filename = "fx/explosions/explosion.xpl10.wav"; description = AudioClosest3d; preload = true; }; function CreateBlood(%obj) { if(%obj.killType $= "1") { schedule(1800,0,"DeathExplosionEffect",%obj); } else if(%obj.killType $= "2") { DeathExplosionEffect(%obj); } } function DeathExplosionEffect(%obj) { %dmgRadius = 1.0; %dmgMod = 2.0; %expImpulse = 1000; %dmgType = $DamageType::ArmorDeath; %obj.blowingUp = true; RadiusExplosion(%obj, %obj.getPosition(), %dmgRadius, %dmgMod, %expImpulse, %obj.sourceObject, %dmgType); %pPos = %obj.getPosition(); %pos = %pPos; %obj.playAudio(1, DeathExplosionSound); %effect1 = new ParticleEmissionDummy() { position = %pos; rotation = "1 0 0 0"; scale = "1 1 1"; dataBlock = "doubleTimeEmissionDummy"; lockCount = "0"; homingCount = "0"; emitter = "AABulletExplosionEmitter2"; velocity = "1"; }; %effect2 = new ParticleEmissionDummy() { position = getWord(%pos,0) @ " " @ getWord(%pos,1) @ " " @ getWord(%pos,2) + 0.75; rotation = "1 0 0 0"; scale = "1 1 1"; dataBlock = "doubleTimeEmissionDummy"; lockCount = "0"; homingCount = "0"; emitter = "AABulletExplosionEmitter2"; velocity = "1"; }; %effect5 = new ParticleEmissionDummy() { position = getWord(%pos,0) @ " " @ getWord(%pos,1) @ " " @ getWord(%pos,2) + 0.75; rotation = "1 0 0 0"; scale = "1 1 1"; dataBlock = "defaultEmissionDummy"; lockCount = "0"; homingCount = "0"; emitter = "FireballAtmosphereEmitter"; velocity = "1"; }; %effect4 = new ParticleEmissionDummy() { position = getWord(%pos,0) @ " " @ getWord(%pos,1) @ " " @ getWord(%pos,2) + 0.75; rotation = "1 0 0 0"; scale = "1 1 1"; dataBlock = "defaultEmissionDummy"; lockCount = "0"; homingCount = "0"; emitter = "FlyerJetEmitter"; velocity = "1"; }; %effect6 = new ParticleEmissionDummy() { position = getWord(%pos,0) @ " " @ getWord(%pos,1) @ " " @ getWord(%pos,2) + 0.75; rotation = "1 0 0 0"; scale = "1 1 1"; dataBlock = "defaultEmissionDummy"; emitter = "TractorSparksEmitter"; velocity = "1"; }; MissionCleanup.add(%effect1); MissionCleanup.add(%effect2); MissionCleanup.add(%effect4); MissionCleanup.add(%effect5); MissionCleanup.add(%effect6); %effect5.schedule(350, "delete"); %effect1.schedule(200, "delete"); %effect2.schedule(200, "delete"); %effect4.schedule(300, "delete"); %effect6.schedule(300, "delete"); %obj.setMomentumVector(%momVec); %obj.blowup(); if(%obj.client.race $= "Bioderm") { schedule(200,0,"BiodermGreenSplatter",%obj); for (%i=0;%i<6;%i++) // was 3 { %x = (getRandom() * 2) - 1; %y = (getRandom() * 2) - 1; %z = getRandom() / 2; %vec = %x SPC %y SPC %z; %pos = VectorAdd(posFromTransform(%obj.getTransform()), VectorScale(%vec, 3)); %p = new (GrenadeProjectile)() { dataBlock = PurpleBiodermBlood; initialDirection = %vec; initialPosition = %pos; sourceObject = %obj; sourceSlot = 1; vehicleObject = 0; }; MissionCleanup.add(%p); return; } } else { for (%i=0;%i<6;%i++) // was 3 { %x = (getRandom() * 2) - 1; %y = (getRandom() * 2) - 1; %z = getRandom() / 2; %vec = %x SPC %y SPC %z; %pos = VectorAdd(posFromTransform(%obj.getTransform()), VectorScale(%vec, 3)); %p = new (GrenadeProjectile)() { dataBlock = HumanBlood; initialDirection = %vec; initialPosition = %pos; sourceObject = %obj; sourceSlot = 1; vehicleObject = 0; }; MissionCleanup.add(%p); } } } function BiodermGreenSplatter(%obj) { for (%i=0;%i<6;%i++) // was 3 { %x = (getRandom() * 2) - 1; %y = (getRandom() * 2) - 1; %z = getRandom() / 2; %vec = %x SPC %y SPC %z; %pos = VectorAdd(posFromTransform(%obj.getTransform()), VectorScale(%vec, 3)); %p = new (GrenadeProjectile)() { dataBlock = BiodermBlood; initialDirection = %vec; initialPosition = %pos; sourceObject = %obj; sourceSlot = 1; vehicleObject = 0; }; MissionCleanup.add(%p); } } -------------------------------------------------------------------------------- These are the functions that actually create the effects STEP - 3 - MAKING THE MAJIC HAPPEN!(player.cs) Open player.cs and look for this function: function Armor::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec, %mineSC) { Then look for these lines here: Code: -------------------------------------------------------------------------------- // should this guy be blown apart? if( %damageType == $DamageType::Explosion || %damageType == $DamageType::TankMortar || %damageType == $DamageType::Mortar || %damageType == $DamageType::MortarTurret || %damageType == $DamageType::BomberBombs || %damageType == $DamageType::SatchelCharge || %damageType == $DamageType::Missile ) { if( %previousDamage >= 0.35 ) // only if <= 35 percent damage remaining { %targetObject.setMomentumVector(%momVec); %targetObject.blowup(); } } // this should be funny... if( %damageType == $DamageType::VehicleSpawn ) { %targetObject.setMomentumVector("0 0 1"); %targetObject.blowup(); } -------------------------------------------------------------------------------- And replace those lines with these lines here: Code: -------------------------------------------------------------------------------- // should this guy be blown apart? //Blow UP!! (see function DeathExplosionEffect(%obj) //These damagetypes here have a delay before the explosion happens if( %damageType == $DamageType::ShockLance || %damageType == $DamageType::ELF || %damageType == $DamageType::ElfTurret || %damageType == $DamageType::OutOfBounds || %damageType == $DamageType::Lightning || %damageType == $DamageType::Blaster || %damageType == $DamageType::Blaster2 || %damageType == $DamageType::Blaster3 || %damageType == $DamageType::Saw || %damageType == $DamageType::JetBike || %damageType == $DamageType::BellyTurret || %damageType == $DamageType::Impact || %damageType == $DamageType::Ground || %damageType == $DamageType::Disc || %damageType == $DamageType::Grenade || %damageType == $DamageType::IndoorDepTurret || %damageType == $DamageType::Mine || %damageType == $DamageType::OutdoorDepTurret || %damageType == $DamageType::SentryTurret || %damageType == $DamageType::AATurret || %damageType == $DamageType::Turret || %damageType == $DamageType::Bullet || %damageType == $DamageType::Default || %damageType == $DamageType::TankChaingun || %damageType == $DamageType::ShotGun || %damageType == $DamageType::Plasma || %damageType == $DamageType::Crash || %damageType == $DamageType::Repeater || %damageType == $DamageType::FFCamping || %damageType == $DamageType::NexusCamping || %damageType == $DamageType::Suicide || %damageType == $DamageType::ShrikeBlaster ) { %targetObject.killType = "1"; } //These damage types here have a instant explosion. else if( %damageType == $DamageType::Explosion || %damageType == $DamageType::TankMortar || %damageType == $DamageType::Mortar || %damageType == $DamageType::MortarTurret || %damageType == $DamageType::BomberBombs || %damageType == $DamageType::Napalm || %damageType == $DamageType::NightmareBolt || %damageType == $DamageType::Shockwave || %damageType == $DamageType::Intrepid || %damageType == $DamageType::SatchelCharge || %damageType == $DamageType::Caster || %damageType == $DamageType::MPBMissile || %damageType == $DamageType::SatchelCharge || %damageType == $DamageType::VehicleSpawn || %damageType == $DamageType::ForceFieldPowerup || %damageType == $DamageType::Cyclone || %damageType == $DamageType::MissileTurret || %damageType == $DamageType::PlasmaTurret || %damageType == $DamageType::Beam || %damageType == $DamageType::Laser || %damageType == $DamageType::Suicide || %damageType == $DamageType::Missile ) { %targetObject.killType = "2"; } -------------------------------------------------------------------------------- You'll just need to customize your damage types to work they way you want and everything should work fine. STEP - 4 - LOADING THE EFFECTS & CALLING THE FUNCTIONS! (server.cs, defaultgame.cs) Okay next you'll need to create 2 .cs files in your scripts folder the fist is bloodHuman.cs and the second is bloodBioderm.cs here they are: Code: -------------------------------------------------------------------------------- //------------------------------------------------------------------------------ // Human Death Effects v3.0 // Effects By: LuCiD //============================================================================== // see player.cs for functions. datablock AudioProfile(BloodSplashSound) { filename = "fx/armor/light_LF_water.wav"; description = AudioClosest3d; preload = true; }; //------------------------------------------------------------------------------ // Splash Mist //============================================================================== datablock ParticleData(HumanRedPlayerSplashMist) { dragCoefficient = 2.0; gravityCoefficient = -0.05; inheritedVelFactor = 0.0; constantAcceleration = 0.0; lifetimeMS = 600; lifetimeVarianceMS = 100; useInvAlpha = false; spinRandomMin = -90.0; spinRandomMax = 500.0; textureName = "particleTest"; colors[0] = "0.9 0.1 0.1 0.5"; colors[1] = "0.6 0.05 0.05 0.5"; colors[2] = "0.4 0.0 0.0 0.0"; sizes[0] = 0.5; sizes[1] = 0.5; sizes[2] = 0.8; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; }; datablock ParticleEmitterData(HumanRedPlayerSplashMistEmitter) { ejectionPeriodMS = 6; periodVarianceMS = 1; ejectionVelocity = 4.0; velocityVariance = 2.0; ejectionOffset = 0.0; thetaMin = 85; thetaMax = 85; phiReferenceVel = 0; phiVariance = 360; overrideAdvances = false; lifetimeMS = 450; particles = "HumanRedPlayerSplashMist"; }; //------------------------------------------------------------------------------ // Human Red Pool //============================================================================== datablock ShockwaveData(RedBloodHit) { width = 3.0; numSegments = 164; numVertSegments = 35; velocity = -1.5; acceleration = 2.0; lifetimeMS = 800; height = 0.1; verticalCurve = 0.5; mapToTerrain = false; renderBottom = true; orientToNormal = true; texture[0] = "special/shockwave4"; texture[1] = "special/droplet";//"special/gradient"; texWrap = 8.0; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; colors[0] = "0.9 0.1 0.1 0.5"; colors[1] = "0.6 0.05 0.05 0.5"; colors[2] = "0.4 0.0 0.0 0.0"; }; //------------------------------------------------------------------------------ // Human Red Blood //============================================================================== datablock ParticleData(HumanRedBloodParticle) { dragCoeffiecient = 0.0; gravityCoefficient = 120.0; inheritedVelFactor = 0.0; lifetimeMS = 1600; lifetimeVarianceMS = 000; textureName = "snowflake8x8";//"particletest"; useInvAlpha = true; spinRandomMin = -30.0; spinRandomMax = 30.0; colors[0] = "0.9 0.1 0.1 0.5"; colors[1] = "0.6 0.05 0.05 0.5"; colors[2] = "0.4 0.0 0.0 0.0"; sizes[0] = 0.2; sizes[1] = 0.05; sizes[2] = 0.06; times[0] = 0.0; times[1] = 0.2; times[2] = 1.0; }; datablock ParticleEmitterData(HumanRedBloodEmitter) { ejectionPeriodMS = 15; periodVarianceMS = 5; ejectionVelocity = 1.25; velocityVariance = 0.50; thetaMin = 0.0; thetaMax = 90.0; particles = "HumanRedBloodParticle"; }; //------------------------------------------------------------------------------ // Human Red Droplets Particle //============================================================================== datablock ParticleData( HumanRedDropletsParticle ) { dragCoefficient = 1; gravityCoefficient = 0.5; inheritedVelFactor = 0.5; constantAcceleration = 0.1; lifetimeMS = 300; lifetimeVarianceMS = 100; textureName = "special/droplet"; colors[0] = "0.9 0.1 0.1 1.0"; colors[1] = "0.6 0.05 0.05 1.0"; colors[2] = "0.4 0.0 0.0 0.0"; sizes[0] = 0.8; sizes[1] = 0.3; sizes[2] = 0.0; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; }; datablock ParticleEmitterData( HumanRedDropletsEmitter ) { ejectionPeriodMS = 7; periodVarianceMS = 0; ejectionVelocity = 2; velocityVariance = 1.0; ejectionOffset = 0.0; thetaMin = 60; thetaMax = 80; phiReferenceVel = 0; phiVariance = 360; overrideAdvances = false; orientParticles = true; particles = "HumanRedDropletsParticle"; }; //------------------------------------------------------------------------------ // Human Red Explosion //============================================================================== datablock ExplosionData(HumanRedExplosion) { soundProfile = BloodSplashSound; particleEmitter = HumanRedBloodEmitter; particleDensity = 250; particleRadius = 1.25; faceViewer = true; emitter[0] = HumanRedPlayerSplashMistEmitter; emitter[1] = HumanRedDropletsEmitter; shockwave = RedBloodHit; }; datablock GrenadeProjectileData(HumanBlood) { projectileShapeName = "turret_muzzlepoint.dts"; //Really small and hard to see emitterDelay = -1; directDamage = 0.0; hasDamageRadius = false; indirectDamage = 0.0; damageRadius = 0.0; radiusDamageType = $DamageType::Default; kickBackStrength = 0; bubbleEmitTime = 1.0; //sound = BloodSplashSound; explosion = HumanRedExplosion; //explodeOnMaxBounce = true; velInheritFactor = 0.5; baseEmitter[0] = HumanRedBloodEmitter; grenadeElasticity = 0.4; grenadeFriction = 0.2; armingDelayMS = 100; // was 400 muzzleVelocity = 0; drag = 0.1; }; -------------------------------------------------------------------------------- AND Code: -------------------------------------------------------------------------------- //------------------------------------------------------------------------------ // Bioderm Death Effects v3.0 // Effects by: LuCiD //============================================================================== // see player.cs for functions. //------------------------------------------------------------------------------ // Splash Mist //============================================================================== datablock ParticleData(BiodermPlayerSplashMist) { dragCoefficient = 2.0; gravityCoefficient = -0.05; inheritedVelFactor = 0.0; constantAcceleration = 0.0; lifetimeMS = 600; lifetimeVarianceMS = 100; useInvAlpha = false; spinRandomMin = -90.0; spinRandomMax = 500.0; textureName = "particleTest"; colors[0] = "0.1 0.9 0.1 0.5"; colors[1] = "0.2 0.09 0.05 0.5"; colors[2] = "0.0 0.4 0.0 0.0"; sizes[0] = 0.5; sizes[1] = 0.5; sizes[2] = 0.8; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; }; datablock ParticleEmitterData(BiodermPlayerSplashMistEmitter) { ejectionPeriodMS = 6; periodVarianceMS = 0; ejectionVelocity = 3.0; velocityVariance = 2.0; ejectionOffset = 0.0; thetaMin = 85; thetaMax = 85; phiReferenceVel = 0; phiVariance = 360; overrideAdvances = false; lifetimeMS = 450; particles = "BiodermPlayerSplashMist"; }; //------------------------------------------------------------------------------ // Bioderm Green Pool //============================================================================== datablock ShockwaveData(GreenBloodHit) { width = 3.0; numSegments = 164; numVertSegments = 35; velocity = -1.5; acceleration = 2.0; lifetimeMS = 800; height = 0.1; verticalCurve = 0.5; mapToTerrain = false; renderBottom = true; orientToNormal = true; texture[0] = "special/shockwave4"; texture[1] = "special/droplet";//"special/gradient"; texWrap = 8.0; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; colors[0] = "0.1 0.9 0.1 0.5"; colors[1] = "0.5 0.06 0.05 0.5"; colors[2] = "0.0 0.4 0.0 0.0"; }; //------------------------------------------------------------------------------ // Bioderm Blood //============================================================================== datablock ParticleData(BiodermBloodParticle) { dragCoeffiecient = 0.0; gravityCoefficient = 120.0; // drops quickly inheritedVelFactor = 0; lifetimeMS = 1600; // lasts 2 second lifetimeVarianceMS = 000; // ...more or less textureName = "snowflake8x8";//"particletest"; useInvAlpha = true; spinRandomMin = -30.0; spinRandomMax = 30.0; colors[0] = "0.1 0.9 0.1 0.5"; colors[1] = "0.2 0.06 0.05 0.5"; colors[2] = "0.0 0.4 0.0 0.0"; sizes[0] = 0.2; sizes[1] = 0.05; sizes[2] = 0.06; times[0] = 0.0; times[1] = 0.2; times[2] = 1.0; }; datablock ParticleEmitterData(BiodermBloodEmitter) { ejectionPeriodMS = 15; periodVarianceMS = 5; ejectionVelocity = 1.25; velocityVariance = 0.50; thetaMin = 0.0; thetaMax = 90.0; particles = "BiodermBloodParticle"; }; //------------------------------------------------------------------------------ // Bioderm Droplets Particle //============================================================================== datablock ParticleData( BiodermDropletsParticle ) { dragCoefficient = 1; gravityCoefficient = 0.5; inheritedVelFactor = 0.5; constantAcceleration = 0.1; lifetimeMS = 300; lifetimeVarianceMS = 100; textureName = "special/droplet"; colors[0] = "0.1 0.9 0.1 1.0"; colors[1] = "0.2 0.06 0.05 1.0"; colors[2] = "0.0 0.4 0.0 0.0"; sizes[0] = 0.8; sizes[1] = 0.3; sizes[2] = 0.0; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; }; datablock ParticleEmitterData( BiodermDropletsEmitter ) { ejectionPeriodMS = 7; periodVarianceMS = 0; ejectionVelocity = 2; velocityVariance = 1.0; ejectionOffset = 0.0; thetaMin = 60; thetaMax = 80; phiReferenceVel = 0; phiVariance = 360; overrideAdvances = false; orientParticles = true; particles = "BiodermDropletsParticle"; }; //------------------------------------------------------------------------------ // Bioderm Explosion //============================================================================== datablock ExplosionData(BiodermExplosion) { soundProfile = BloodSplashSound; particleEmitter = BiodermBloodEmitter; particleDensity = 250; particleRadius = 1.25; faceViewer = true; emitter[0] = BiodermPlayerSplashMistEmitter; emitter[1] = BiodermDropletsEmitter; shockwave = GreenBloodHit; }; datablock GrenadeProjectileData(BiodermBlood) { projectileShapeName = "turret_muzzlepoint.dts"; //Really small and hard to see emitterDelay = -1; directDamage = 0.15; hasDamageRadius = false; indirectDamage = 0.0; damageRadius = 0.15; radiusDamageType = $DamageType::ArmorDeath; kickBackStrength = 0; bubbleEmitTime = 1.0; //sound = BloodSplashSound; explosion = BiodermExplosion; //explodeOnMaxBounce = true; velInheritFactor = 0.5; baseEmitter[0] = BiodermBloodEmitter; grenadeElasticity = 0.4; grenadeFriction = 0.2; armingDelayMS = 100; // was 400 muzzleVelocity = 0; drag = 0.1; }; //------------------------------------------------------------------------------ // Purple Bioderm blood //============================================================================== //------------------------------------------------------------------------------ // Purple Splash Mist //============================================================================== datablock ParticleData(PurpleBiodermPlayerSplashMist) { dragCoefficient = 2.0; gravityCoefficient = -0.05; inheritedVelFactor = 0.0; constantAcceleration = 0.0; lifetimeMS = 600; lifetimeVarianceMS = 100; useInvAlpha = false; spinRandomMin = -90.0; spinRandomMax = 500.0; textureName = "particleTest"; colors[0] = "0.25 0.12 0.40 0.5"; colors[1] = "0.25 0.12 0.40 0.5"; colors[2] = "0.4 0.0 0.5 0.0"; sizes[0] = 0.5; sizes[1] = 0.5; sizes[2] = 0.8; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; }; datablock ParticleEmitterData(PurpleBiodermPlayerSplashMistEmitter) { ejectionPeriodMS = 6; periodVarianceMS = 0; ejectionVelocity = 3.0; velocityVariance = 2.0; ejectionOffset = 0.0; thetaMin = 85; thetaMax = 85; phiReferenceVel = 0; phiVariance = 360; overrideAdvances = false; lifetimeMS = 450; particles = "PurpleBiodermPlayerSplashMist"; }; //------------------------------------------------------------------------------ // Bioderm Purple Pool //============================================================================== datablock ShockwaveData(PurpleBloodHit) { width = 3.0; numSegments = 164; numVertSegments = 35; velocity = -1.5; acceleration = 2.0; lifetimeMS = 800; height = 0.1; verticalCurve = 0.5; mapToTerrain = false; renderBottom = true; orientToNormal = true; texture[0] = "special/shockwave4"; texture[1] = "special/droplet";//"special/gradient"; texWrap = 8.0; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; colors[0] = "0.25 0.12 0.40 0.5"; colors[1] = "0.25 0.12 0.40 0.5"; colors[2] = "0.4 0.0 0.5 0.0"; }; //------------------------------------------------------------------------------ // Purple Bioderm Blood //============================================================================== datablock ParticleData(PurpleBiodermBloodParticle) { dragCoeffiecient = 0.0; gravityCoefficient = 120.0; // drops quickly inheritedVelFactor = 0; lifetimeMS = 1550; // lasts 2 second lifetimeVarianceMS = 300; // ...more or less textureName = "snowflake8x8";//"particletest"; useInvAlpha = true; spinRandomMin = -30.0; spinRandomMax = 30.0; colors[0] = "0.25 0.12 0.40 0.5"; colors[1] = "0.25 0.12 0.40 0.5"; colors[2] = "0.4 0.0 0.5 0.0"; sizes[0] = 0.2; sizes[1] = 0.05; sizes[2] = 0.05; times[0] = 0.0; times[1] = 0.2; times[2] = 1.0; }; datablock ParticleEmitterData(PurpleBiodermBloodEmitter) { ejectionPeriodMS = 15; periodVarianceMS = 5; ejectionVelocity = 1.25; velocityVariance = 0.50; thetaMin = 0.0; thetaMax = 90.0; particles = "PurpleBiodermBloodParticle"; }; //------------------------------------------------------------------------------ // purple Bioderm Droplets Particle //============================================================================== datablock ParticleData( PurpleBiodermDropletsParticle ) { dragCoefficient = 1; gravityCoefficient = 0.5; inheritedVelFactor = 0.5; constantAcceleration = -0.0; lifetimeMS = 300; lifetimeVarianceMS = 100; textureName = "special/droplet"; colors[0] = "0.25 0.12 0.40 0.5"; colors[1] = "0.25 0.12 0.40 0.5"; colors[2] = "0.4 0.0 0.5 0.0"; sizes[0] = 0.8; sizes[1] = 0.3; sizes[2] = 0.0; times[0] = 0.0; times[1] = 0.5; times[2] = 1.0; }; datablock ParticleEmitterData( PurpleBiodermDropletsEmitter ) { ejectionPeriodMS = 7; periodVarianceMS = 0; ejectionVelocity = 2; velocityVariance = 1.0; ejectionOffset = 0.0; thetaMin = 60; thetaMax = 80; phiReferenceVel = 0; phiVariance = 360; overrideAdvances = false; orientParticles = true; particles = "PurpleBiodermDropletsParticle"; }; //------------------------------------------------------------------------------ // Purple Bioderm Explosion //============================================================================== datablock ExplosionData(PurpleBiodermExplosion) { soundProfile = BloodSplashSound; particleEmitter = PurpleBiodermBloodEmitter; particleDensity = 250; particleRadius = 1.25; faceViewer = true; emitter[0] = PurpleBiodermPlayerSplashMistEmitter; emitter[1] = PurpleBiodermDropletsEmitter; shockwave = PurpleBloodHit; }; datablock GrenadeProjectileData(PurpleBiodermBlood) { projectileShapeName = "turret_muzzlepoint.dts"; //Really small and hard to see emitterDelay = -1; directDamage = 0.0; hasDamageRadius = false; indirectDamage = 0.0; damageRadius = 0.0; radiusDamageType = $DamageType::Default; kickBackStrength = 0; bubbleEmitTime = 1.0; //sound = BloodSplashSound; explosion = PurpleBiodermExplosion; //explodeOnMaxBounce = true; velInheritFactor = 0.5; baseEmitter[0] = PurpleBiodermBloodEmitter; grenadeElasticity = 0.4; grenadeFriction = 0.2; armingDelayMS = 100; // was 400 muzzleVelocity = 0; drag = 0.1; }; -------------------------------------------------------------------------------- Now open up server.cs and add these lines above your player.cs exec exec("scripts/bloodHuman.cs"); exec("scripts/bloodBioderm.cs"); or whatever you decided to called them. Next open up defaultgame.cs and find this function: function DefaultGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLocation) { Then add this line to the function: CreateBlood(%clVictim.player); Thats it fully working LuCiD MoD explosion & blood effects v3.0 thanks to Defender and all the others that got me started on this i never would have even considered it if you didn't bring it up Also thanks to Badshot,Zod,Sparky and anyone else i've had the chance to learn from here. Sorry if i don't mention all your names..