Пример #1
0
        private void nailSkinButton_Click(object sender, EventArgs e)
        {
            Option selectedOption = this.optionsBox.SelectedItem as Option;

            foreach (BodyMesh bMesh in selectedOption.BodyMeshes)
            {
                switch (bMesh.MeshType)
                {
                case BodyMeshType.Torso:
                case BodyMeshType.FingerNail:
                case BodyMeshType.ToeNail:
                    SkinCustomizer skinCustomizer = new SkinCustomizer(bMesh, currentModelType);
                    skinCustomizer.ShowDialog();
                    bMesh.TanTexture = skinCustomizer.TanTexture;
                    bMesh.SkinTextures.Clear();
                    foreach (KeyValuePair <String, String> textureSlots in skinCustomizer.SkinTextures)
                    {
                        SkinTexture newSkinTexture = new SkinTexture();
                        newSkinTexture.SkinSlot = textureSlots.Key;
                        newSkinTexture.Filename = textureSlots.Value;
                        bMesh.SkinTextures.Add(newSkinTexture);
                    }
                    break;
                }
            }
        }
Пример #2
0
        public static string AsString(this SkinTexture skinTexture, bool singularFormat = false)
        {
            if (!singularFormat)
            {
                switch (skinTexture)
                {
                case SkinTexture.SEXY: return("sexy");

                case SkinTexture.ROUGH: return("rough");

                case SkinTexture.FRECKLED: return("freckled");

                case SkinTexture.THICK: return("thick");

                case SkinTexture.SMOOTH: return("smooth");

                case SkinTexture.SHINY: return("shiny");

                case SkinTexture.SOFT: return("soft");

                case SkinTexture.NONDESCRIPT:
                default: return("");
                }
            }
            else
            {
                switch (skinTexture)
                {
                case SkinTexture.SEXY: return("a sexy");

                case SkinTexture.ROUGH: return("a rough");

                case SkinTexture.FRECKLED: return("a freckled");

                case SkinTexture.THICK: return("a thick");

                case SkinTexture.SMOOTH: return("a smooth");

                case SkinTexture.SHINY: return("a shiny");

                case SkinTexture.SOFT: return("a soft");

                case SkinTexture.NONDESCRIPT:
                default: return("");
                }
            }
        }
Пример #3
0
        public static string AsAbbreviatedString(this SkinTexture skinTexture)
        {
            switch (skinTexture)
            {
            case SkinTexture.SEXY: return("sxy");

            case SkinTexture.ROUGH: return("rgh");

            case SkinTexture.FRECKLED: return("frkld");

            case SkinTexture.THICK: return("thk");

            case SkinTexture.SMOOTH: return("smth");

            case SkinTexture.SHINY: return("shny");

            case SkinTexture.SOFT: return("sft");

            case SkinTexture.NONDESCRIPT:
            default: return("");
            }
        }
Пример #4
0
 public BodyLotionBase(SkinTexture texture)
 {
     targetTexture = texture;
 }
Пример #5
0
        protected internal override string DoTransformation(Creature target, out bool isBadEnd)
        {
            isBadEnd = false;

            //by default, this is 2 rolls at 50%, so a 25% chance of 0 additional tfs, 50% chance of 1 additional tf, 25% chance of 2 additional tfs.
            //also takes into consideration any perks that increase or decrease tf effectiveness. if you need to roll out your own, feel free to do so.
            int changeCount      = GenerateChangeCount(target, new int[] { 2, 2 }, 2);
            int remainingChanges = changeCount;

            StringBuilder sb = new StringBuilder();

            //For all of these, any text regarding the transformation should be instead abstracted out as an abstract string function. append the result of this abstract function
            //to the string builder declared above (aka sb.Append(FunctionCall(variables));) string builder is just a fancy way of telling the compiler that you'll be creating a
            //long string, piece by piece, so don't do any crazy optimizations first.

            //the initial text for starting the transformation. feel free to add additional variables to this if needed.
            sb.Append(InitialTransformationText(target));

            //Add any free changes here - these can occur even if the change count is 0. these include things such as change in stats (intelligence, etc)
            //change in height, hips, and/or butt, or other similar stats.

            //this will handle the edge case where the change count starts out as 0.
            if (remainingChanges <= 0)
            {
                return(ApplyChangesAndReturn(target, sb, changeCount - remainingChanges));
            }

            //Any transformation related changes go here. these typically cost 1 change. these can be anything from body parts to gender (which technically also changes body parts,
            //but w/e). You are required to make sure you return as soon as you've applied changeCount changes, but a single line of code can be applied at the end of a change to do
            //this for you.

            //paste this line after any tf is applied, and it will: automatically decrement the remaining changes count. if it becomes 0 or less, apply the total number of changes
            //underwent to the target's change count (if applicable) and then return the StringBuilder content.
            //if (--remainingChanges <= 0) return ApplyChangesAndReturn(target, sb, changeCount - remainingChanges);


            //STATS
            if (target.relativeSensitivity > 25 && Utils.Rand(3) < 2)
            {
                target.ChangeSensitivity((-1 - Utils.Rand(3)));
            }
            //Increase strength 1-2 points (Up to 50) (60 for tiger)
            if (((target.relativeStrength < 60 && isTigerShark) || target.relativeStrength < 50) && Utils.Rand(3) == 0)
            {
                target.ChangeStrength(1 + Utils.Rand(2));
            }
            //Increase Speed 1-3 points (Up to 75) (100 for tigers)
            if (((target.relativeSpeed < 100 && isTigerShark) || target.relativeSpeed < 75) && Utils.Rand(3) == 0)
            {
                target.ChangeSpeed(1 + Utils.Rand(3));
            }
            //Reduce sensitivity 1-3 Points (Down to 25 points)

            //Increase Libido 2-4 points (Up to 75 points) (100 for tigers)
            if (((target.relativeLibido < 100 && isTigerShark) || target.relativeLibido < 75) && Utils.Rand(3) == 0)
            {
                target.ChangeLibido((1 + Utils.Rand(3)));
            }
            //Decrease intellect 1-3 points (Down to 40 points)
            if (target.relativeIntelligence > 40 && Utils.Rand(3) == 0)
            {
                target.ChangeIntelligence(-(1 + Utils.Rand(3)));
            }
            //Smexual stuff!
            //-TIGGERSHARK ONLY: Grow a c**t (guaranteed if no gender)
            if (isTigerShark && (target.gender == 0 || (!target.hasVagina && Utils.Rand(3) == 0)))
            {
                if (--remainingChanges <= 0)
                {
                    return(ApplyChangesAndReturn(target, sb, changeCount - remainingChanges));
                }
                //(balls)
                //(dick)
                //(neither)
                target.genitals.AddVagina();
                target.ChangeSensitivity(10);
            }
            //WANG GROWTH - TIGGERSHARK ONLY
            if (isTigerShark && (!target.hasCock) && Utils.Rand(3) == 0)
            {
                //Genderless:
                //Female:
                if (target.balls.count == 0)
                {
                    target.balls.GrowBalls();
                }
                target.genitals.AddCock(CockType.defaultValue, 7, 1.4);

                target.DeltaCreatureStats(lib: 4, sens: 5, lus: 20);
                if (--remainingChanges <= 0)
                {
                    return(ApplyChangesAndReturn(target, sb, changeCount - remainingChanges));
                }
            }
            //(Requires the target having two testicles)
            if (isTigerShark && (target.balls.count == 0 || target.balls.count == 2) && target.hasCock && Utils.Rand(3) == 0)
            {
                if (target.balls.count == 2)
                {
                    target.balls.AddBalls(2);
                }
                else if (target.balls.count == 0)
                {
                    target.balls.GrowBalls();
                }
                target.DeltaCreatureStats(lib: 2, sens: 3, lus: 10);
                if (--remainingChanges <= 0)
                {
                    return(ApplyChangesAndReturn(target, sb, changeCount - remainingChanges));
                }
            }
            //-Remove extra breast rows
            if (target.breasts.Count > 1 && Utils.Rand(3) == 0 && !hyperHappy)
            {
                target.RemoveExtraBreastRows();
            }
            //Neck restore
            if (target.neck.type != NeckType.HUMANOID && Utils.Rand(4) == 0)
            {
                target.RestoreNeck();
            }
            //Rear body restore
            if (!target.back.isDefault && Utils.Rand(5) == 0)
            {
                target.RestoreBack();
            }
            //Ovi perk loss
            if (target.womb.canRemoveOviposition && Utils.Rand(5) == 0)
            {
                target.womb.ClearOviposition();
                sb.Append(ClearOvipositionText(target));

                if (--remainingChanges <= 0)
                {
                    return(ApplyChangesAndReturn(target, sb, changeCount - remainingChanges));
                }
            }
            //Transformations:
            //Mouth TF
            if (target.face.type != FaceType.SHARK && Utils.Rand(3) == 0)
            {
                FaceData oldData = target.face.AsReadOnlyData();
                target.UpdateFace(FaceType.SHARK);
                sb.Append(UpdateFaceText(target, oldData));

                if (--remainingChanges <= 0)
                {
                    return(ApplyChangesAndReturn(target, sb, changeCount - remainingChanges));
                }
            }
            //Remove odd eyes
            if (Utils.Rand(5) == 0 && target.eyes.type != EyeType.HUMAN)
            {
                EyeData oldData = target.eyes.AsReadOnlyData();
                target.RestoreEyes();
                sb.Append(RestoredEyesText(target, oldData));

                if (--remainingChanges <= 0)
                {
                    return(ApplyChangesAndReturn(target, sb, changeCount - remainingChanges));
                }
            }
            //Tail TF
            if (target.tail.type != TailType.SHARK && Utils.Rand(3) == 0)
            {
                TailData oldData = target.tail.AsReadOnlyData();
                target.UpdateTail(TailType.SHARK);
                sb.Append(UpdateTailText(target, oldData));

                if (--remainingChanges <= 0)
                {
                    return(ApplyChangesAndReturn(target, sb, changeCount - remainingChanges));
                }
            }
            //Gills TF
            if (target.gills.type != GillType.FISH && target.tail.type == TailType.SHARK && target.face.type == FaceType.SHARK && Utils.Rand(3) == 0)
            {
                GillData oldData = target.gills.AsReadOnlyData();
                target.UpdateGills(GillType.FISH);
                sb.Append(UpdateGillsText(target, oldData));

                if (--remainingChanges <= 0)
                {
                    return(ApplyChangesAndReturn(target, sb, changeCount - remainingChanges));
                }
            }
            //Hair
            if (target.hair.hairColor != HairFurColors.SILVER && Utils.Rand(4) == 0)
            {
                target.hair.SetHairColor(HairFurColors.SILVER);

                if (--remainingChanges <= 0)
                {
                    return(ApplyChangesAndReturn(target, sb, changeCount - remainingChanges));
                }
            }
            //Skin
            //MOD NOTE: F**K. A TWO TONED SKIN TONE. F**K F**K F**K.
            //MOD NOTE (continued): tigershark skin tone is hacked in. it's a hack. it's an ugly as f**k hack and i need a shower now. but it'll work. i really, really, really
            //dont want to add a new body type for tigersharks, and i am not adding a fur color equivalent for tones for literally just tigersharks.
            if (((target.body.primarySkin.tone != Tones.GRAY && target.body.primarySkin.tone != Tones.TIGERSHARK) || target.body.type != BodyType.HUMANOID) && Utils.Rand(7) == 0)
            {
                Tones       targetTone    = isTigerShark ? Tones.TIGERSHARK : Tones.GRAY;
                SkinTexture targetTexture = SkinTexture.ROUGH;
                //getGame().rathazul.addMixologyXP(20);

                BodyData oldData = target.body.AsReadOnlyData();
                target.UpdateBody(BodyType.HUMANOID, targetTone, targetTexture);
                sb.Append(UpdateBodyText(target, oldData));

                if (--remainingChanges <= 0)
                {
                    return(ApplyChangesAndReturn(target, sb, changeCount - remainingChanges));
                }
            }
            //FINZ R WINGS
            if ((target.wings.type != WingType.NONE || target.back.type != BackType.SHARK_FIN) && Utils.Rand(3) == 0)
            {
                target.UpdateBack(BackType.SHARK_FIN);
                WingData oldData = target.wings.AsReadOnlyData();
                target.RestoreWings();
                sb.Append(RestoredWingsText(target, oldData));

                if (--remainingChanges <= 0)
                {
                    return(ApplyChangesAndReturn(target, sb, changeCount - remainingChanges));
                }
            }

            //this is the fallthrough that occurs when a tf item goes through all the changes, but does not proc enough of them to exit early. it will apply however many changes
            //occurred, then return the contents of the stringbuilder.
            return(ApplyChangesAndReturn(target, sb, changeCount - remainingChanges));
        }