public void ImpactEffects(Vector3 pos, Map map, ThingDef explosionMoteDef, float ExplosionMoteSize, Color?color, SoundDef sound, FleckDef ImpactMoteDef, float ImpactMoteSize, FleckDef ImpactGlowMoteDef, float ImpactGlowMoteSize, Thing hitThing = null, Thing projectile = null, int OverrideSolidTime = -1)
        {
            Rand.PushState();
            FleckDef impactMoteDef = ImpactMoteDef ?? this.ImpactMoteDef;
            float    rotationRate  = Rand.Range(-30f, 30f);
            float    VelocityAngel = (float)Rand.Range(0, 360);
            float    VelocitySpeed = Rand.Range(0.48f, 0.72f);

            Rand.PopState();
            if (ImpactGlowMoteDef != null)
            {
                try
                {
                    AdeptusFleckMaker.ThrowGlow(pos, map, ImpactGlowMoteSize, ImpactGlowMoteDef);

                    /*
                     * mote.instanceColor.r = color.Value.r * 0.25f;
                     * mote.instanceColor.g = color.Value.g * 0.25f;
                     * mote.instanceColor.b = color.Value.b * 0.25f;
                     */
                }
                catch (System.Exception)
                {
                    //     Log.Message("Waaah "+ projectile + " ImpactGlowMoteDef broke Vs " + hitThing);
                }
            }
            if (explosionMoteDef != null)
            {
                try
                {
                    Vector3 loc = pos;
                    loc.y = explosionMoteDef.Altitude;
                    MoteThrown moteThrown;
                    moteThrown       = (MoteThrown)ThingMaker.MakeThing(explosionMoteDef, null);
                    moteThrown.Scale = ExplosionMoteSize;
                    Rand.PushState();
                    moteThrown.rotationRate = Rand.Range(-30f, 30f);
                    Rand.PopState();
                    moteThrown.exactPosition = loc;
                    moteThrown.instanceColor = color.Value;
                    moteThrown.SetVelocity(VelocityAngel, VelocitySpeed);
                    if (OverrideSolidTime > -1)
                    {
                        moteThrown.solidTimeOverride = OverrideSolidTime;
                    }
                    GenSpawn.Spawn(moteThrown, loc.ToIntVec3(), map, WipeMode.Vanish);
                }
                catch (System.Exception)
                {
                    //     Log.Message("Waaah " + projectile + " explosionMoteDef broke Vs " + hitThing);
                }
            }
            if (ImpactMoteDef != null)
            {
                try
                {
                    Vector3 loc = pos;
                    if (hitThing != null && hitThing is Pawn pawn)
                    {
                        impactMoteDef = DefDatabase <FleckDef> .GetNamedSilentFail("AdeptusMechanicus_Mote_Blood_Puff");

                        if (sound != null)
                        {
                            sound.PlayOneShot(new TargetInfo(loc.ToIntVec3(), map, false));
                        }
                        AdeptusFleckMaker.Thrown(loc, map, impactMoteDef, ImpactMoteSize, pawn.RaceProps.BloodDef?.graphic.color, null, Rand.Range(-30f, 30f), OverrideSolidTime > -1 ? (float?)OverrideSolidTime : null, VelocityAngel, VelocitySpeed);
                    }
                    else
                    {
                        Color c = Color.white;
                        if (color.HasValue)
                        {
                            c.r = color.Value.r * 0.25f;
                            c.g = color.Value.g * 0.25f;
                            c.b = color.Value.b * 0.25f;
                        }
                        AdeptusFleckMaker.Thrown(loc, map, impactMoteDef, ImpactGlowMoteSize, c, null, Rand.Range(-30f, 30f), OverrideSolidTime > -1 ? (float?)OverrideSolidTime : null, VelocityAngel, VelocitySpeed);
                    }
                }
                catch (System.Exception)
                {
                    //     Log.Message("Waaah " + projectile + " ImpactMoteDef broke Vs "+hitThing);
                }
            }
        }