/// <summary>
            /// Apply adjustments to breast dynamic bones
            /// </summary>
            private void UpdateBreastDB(DynamicBone_Ver02 dynamicBone)
            {
                if (!BreastDBComments.Contains(dynamicBone.Comment))
                {
                    return;
                }

                //Expand the collision radius for the breast dynamic bones
                foreach (var pat in dynamicBone.Patterns)
                {
#if KK
                    pat.Params[0].CollisionRadius = BreastCollidersEnabled ? 0.08f * BreastCollisionRadiusMultiplier : 0;
                    pat.Params[1].CollisionRadius = BreastCollidersEnabled ? 0.06f * BreastCollisionRadiusMultiplier : 0;
#elif AI
                    pat.Params[2].CollisionRadius = BreastCollidersEnabled ? 0.8f * BreastCollisionRadiusMultiplier : 0;
                    pat.Params[3].CollisionRadius = BreastCollidersEnabled ? 0.6f * BreastCollisionRadiusMultiplier : 0;
#else
                    throw new System.NotImplementedException();
#endif
                }

                dynamicBone.GetType().GetMethod("InitNodeParticle", AccessTools.all).Invoke(dynamicBone, null);
                dynamicBone.GetType().GetMethod("SetupParticles", AccessTools.all).Invoke(dynamicBone, null);
                dynamicBone.InitLocalPosition();
                if ((bool)dynamicBone.GetType().GetMethod("IsRefTransform", AccessTools.all).Invoke(dynamicBone, null))
                {
                    dynamicBone.setPtn(0, true);
                }
                dynamicBone.GetType().GetMethod("InitTransforms", AccessTools.all).Invoke(dynamicBone, null);
            }
            /// <summary>
            /// Apply adjustments to breast dynamic bones
            /// </summary>
            private void UpdateBreastDB(DynamicBone_Ver02 dynamicBone)
            {
                if (!BreastDBComments.Contains(dynamicBone.Comment))
                {
                    return;
                }

                //Expand the collision radius for the breast dynamic bones
                for (var index = 0; index < dynamicBone.Patterns.Count; index++)
                {
                    var pat = dynamicBone.Patterns[index];
#if KK || KKS
                    pat.Params[0].CollisionRadius = BreastCollidersEnabled ? 0.10f * BreastSize : 0;
                    pat.Params[1].CollisionRadius = BreastCollidersEnabled ? 0.08f * BreastSize : 0;
#elif AI || HS2
                    pat.Params[2].CollisionRadius = BreastCollidersEnabled ? 1.0f * BreastSize : 0;
                    pat.Params[3].CollisionRadius = BreastCollidersEnabled ? 0.8f * BreastSize : 0;
#endif
                }

                dynamicBone.GetType().GetMethod("InitNodeParticle", AccessTools.all).Invoke(dynamicBone, null);
                dynamicBone.GetType().GetMethod("SetupParticles", AccessTools.all).Invoke(dynamicBone, null);
                dynamicBone.InitLocalPosition();
                if ((bool)dynamicBone.GetType().GetMethod("IsRefTransform", AccessTools.all).Invoke(dynamicBone, null))
                {
                    dynamicBone.setPtn(0, true);
                }
                dynamicBone.GetType().GetMethod("InitTransforms", AccessTools.all).Invoke(dynamicBone, null);
            }
            /// <summary>
            /// Applies this character's arm colliders to breast dynamic bones
            /// </summary>
            private void UpdateArmCollidersBreastDB(DynamicBone_Ver02 dynamicBone)
            {
                if (!BreastDBComments.Contains(dynamicBone.Comment))
                {
                    return;
                }
                if (ArmColliders == null)
                {
                    return;
                }
                UpdateArmCollidersBreastDB(dynamicBone, ArmColliders);

                for (var i = 0; i < ArmColliders.Count; i++)
                {
                    var armCollider = ArmColliders[i];
                    if (!BreastCollidersEnabled)
                    {
                        dynamicBone.Colliders.Remove(armCollider);
                    }
                    else if (armCollider != null && !dynamicBone.Colliders.Contains(armCollider))
                    {
                        dynamicBone.Colliders.Add(armCollider);
                    }
                }
            }
            /// <summary>
            /// Applies the floor collider to the breast dynamic bone
            /// </summary>
            private void UpdateFloorColliderBreastDB(DynamicBone_Ver02 dynamicBone)
            {
                if (!BreastDBComments.Contains(dynamicBone.Comment))
                {
                    return;
                }
                if (FloorCollider == null)
                {
                    return;
                }

                if (!FloorColliderEnabled || !BreastCollidersEnabled)
                {
                    dynamicBone.Colliders.Remove(FloorCollider);
                }
                else if (!dynamicBone.Colliders.Contains(FloorCollider))
                {
                    dynamicBone.Colliders.Add(FloorCollider);
                }
            }
            /// <summary>
            /// Applies arm colliders to breast dynamic bones
            /// </summary>
            private void UpdateArmCollidersBreastDB(DynamicBone_Ver02 dynamicBone, List <DynamicBoneCollider> armColliders)
            {
                if (!BreastDBComments.Contains(dynamicBone.Comment))
                {
                    return;
                }
                if (armColliders == null)
                {
                    return;
                }

                foreach (var armCollider in armColliders)
                {
                    if (!BreastCollidersEnabled)
                    {
                        dynamicBone.Colliders.Remove(armCollider);
                    }
                    else if (armCollider != null && !dynamicBone.Colliders.Contains(armCollider))
                    {
                        dynamicBone.Colliders.Add(armCollider);
                    }
                }
            }