Search in sources :

Example 6 with PenisModifier

use of com.lilithsthrone.game.character.body.valueEnums.PenisModifier in project liliths-throne-public by Innoxia.

the class GenericOrgasms method getGenericPenisOrgasmDescription.

private static String getGenericPenisOrgasmDescription(GameCharacter characterOrgasming, OrgasmCumTarget cumTarget) {
    genericOrgasmSB.setLength(0);
    genericOrgasmSB.append(getPositionPreparation(characterOrgasming));
    GameCharacter characterPenetrated = null;
    OrificeType orificePenetrated = null;
    if (!Sex.getCharactersBeingPenetratedBy(characterOrgasming, PenetrationType.PENIS).isEmpty()) {
        characterPenetrated = Sex.getCharactersBeingPenetratedBy(characterOrgasming, PenetrationType.PENIS).get(0);
        orificePenetrated = Sex.getOrificesBeingPenetratedBy(characterOrgasming, PenetrationType.PENIS, characterPenetrated).get(0);
    }
    if (characterPenetrated == null || cumTarget != OrgasmCumTarget.INSIDE) {
        List<String> modifiers = new ArrayList<>();
        for (PenisModifier mod : PenisModifier.values()) {
            switch(mod) {
                case BARBED:
                    break;
                case BLUNT:
                    break;
                case FLARED:
                    if (characterOrgasming.hasPenisModifier(mod)) {
                        if (characterOrgasming.isPlayer()) {
                            modifiers.add(" The wide, flared head of your [npc1.cock] swells up, and you feel your [npc1.balls+] tightening as you start to cum.");
                        } else {
                            modifiers.add(" The wide, flared head of [npc.name]'s [npc.cock] swells up, and [npc.she] feels [npc.her] [npc.balls+] tightening as [npc.she] starts to cum.");
                        }
                    }
                    break;
                case KNOTTED:
                    if (characterOrgasming.hasPenisModifier(mod)) {
                        if (characterOrgasming.isPlayer()) {
                            modifiers.add(" The thick knot at the base of your [npc1.cock] swells up, and you feel your [npc1.balls+] tightening as you start to cum.");
                        } else {
                            modifiers.add(" The thick knot at the base of [npc.name]'s [npc.cock] swells up, and [npc.she] feels [npc.her] [npc.balls+] tightening as [npc.she] starts to cum.");
                        }
                    }
                    break;
                case PREHENSILE:
                    break;
                case RIBBED:
                    break;
                case SHEATHED:
                    break;
                case TAPERED:
                    break;
                case TENTACLED:
                    if (characterOrgasming.hasPenisModifier(mod)) {
                        if (characterOrgasming.isPlayer()) {
                            modifiers.add(" The little tentacles lining your [npc1.cock] start frantically wriggling, and you feel your [npc1.balls+] tightening as you start to cum.");
                        } else {
                            modifiers.add(" The little tentacles lining [npc.name]'s [npc.cock] start frantically wriggling, and [npc.she] feels [npc.her] [npc.balls+] tightening as [npc.she] starts to cum.");
                        }
                    }
                    break;
                case VEINY:
                    break;
            }
        }
        if (!modifiers.isEmpty()) {
            genericOrgasmSB.append(modifiers.get(Util.random.nextInt(modifiers.size())));
        } else {
            if (characterOrgasming.isPlayer()) {
                genericOrgasmSB.append(" Your [npc1.cock+] twitches, and you feel your [npc1.balls+] tightening as you start to cum.");
            } else {
                genericOrgasmSB.append(" [npc.Name]'s [npc1.cock+] twitches, and [npc.she] feels [npc.her] [npc.balls+] tightening as [npc.she] starts to cum.");
            }
        }
        if (characterPenetrated != null) {
            genericOrgasmSB.append("</br>");
            switch(orificePenetrated) {
                case ANUS:
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append("You slide your [npc1.cock+] out of [npc2.name]'s [npc2.asshole+]");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out of your [npc2.asshole+]");
                        } else {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out of [npc2.name]'s [npc2.asshole+]");
                        }
                    }
                    break;
                case ASS:
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append("You slide your [npc1.cock+] out from between [npc2.name]'s ass cheeks");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out from between your ass cheeks");
                        } else {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out from between [npc2.name]'s ass cheeks");
                        }
                    }
                    break;
                case BREAST:
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append("You slide your [npc1.cock+] out from between [npc2.name]'s [npc2.breasts+]");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out from between your [npc2.breasts+]");
                        } else {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out from between [npc2.name]'s [npc2.breasts+]");
                        }
                    }
                    break;
                case MOUTH:
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append("You slide your [npc1.cock+] out of [npc2.name]'s mouth");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out of your mouth");
                        } else {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out of [npc2.name]'s mouth");
                        }
                    }
                    break;
                case NIPPLE:
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append("You slide your [npc1.cock+] out of [npc2.name]'s [npc2.nipple+]");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out of your [npc2.nipple+]");
                        } else {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out of [npc2.name]'s [npc2.nipple+]");
                        }
                    }
                    break;
                case THIGHS:
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append("You slide your [npc1.cock+] out from between [npc2.name]'s thighs");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out from between your thighs");
                        } else {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out from between [npc2.name]'s thighs");
                        }
                    }
                    break;
                case URETHRA:
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append("You slide your [npc1.cock+] out of [npc2.name]'s [npc2.urethra+]");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out of your [npc2.urethra+]");
                        } else {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out of [npc2.name]'s [npc2.urethra+]");
                        }
                    }
                    break;
                case VAGINA:
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append("You slide your [npc1.cock+] out of [npc2.name]'s [npc2.pussy+]");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out of your [npc2.pussy+]");
                        } else {
                            genericOrgasmSB.append("[npc1.Name] slides [npc.her] [npc1.cock+] out of [npc2.name]'s [npc2.pussy+]");
                        }
                    }
                    break;
                default:
                    break;
            }
            if (!characterOrgasming.getPenisModifiers().isEmpty()) {
                switch(characterOrgasming.getPenisModifiers().get(Util.random.nextInt(characterOrgasming.getPenisModifiers().size()))) {
                    case BARBED:
                        if (characterOrgasming.isPlayer()) {
                            genericOrgasmSB.append(", before reaching down and sliding your [pc.hand] up and down over your sensitive little barbs.");
                        } else {
                            genericOrgasmSB.append(", before reaching down and sliding [npc1.her] [npc1.hand] up and down over [npc1.her] sensitive little barbs.");
                        }
                        break;
                    case BLUNT:
                        if (characterOrgasming.isPlayer()) {
                            genericOrgasmSB.append(", before reaching down and starting to furiously masturbate; your [pc.hand] running up the length of your [pc.cock] to rub and tease your blunt head.");
                        } else {
                            genericOrgasmSB.append(", before reaching down and starting to furiously masturbate; [npc1.her] [npc1.hand] running up the length of [npc1.her] [npc1.cock] to rub and tease [npc1.her] blunt head.");
                        }
                        break;
                    case FLARED:
                        if (characterOrgasming.isPlayer()) {
                            genericOrgasmSB.append(", before reaching down and starting to furiously masturbate; your [pc.hand] running up the length of your [pc.cock] to rub and tease your wide, flared head.");
                        } else {
                            genericOrgasmSB.append(", before reaching down and starting to furiously masturbate; [npc1.her] [npc1.hand] running up the length of [npc1.her] [npc1.cock] to rub and tease [npc1.her] wide, flared head.");
                        }
                        break;
                    case KNOTTED:
                        if (characterOrgasming.isPlayer()) {
                            genericOrgasmSB.append(", before reaching down and starting to furiously masturbate; your [pc.hand] sliding down the length of your [pc.cock] to grip and rub at your swollen knot.");
                        } else {
                            genericOrgasmSB.append(", before reaching down and starting to furiously masturbate; [npc1.her] [npc1.hand] sliding down the length of [npc1.her] [npc1.cock] to grip and rub at [npc1.her] swollen knot.");
                        }
                        break;
                    case PREHENSILE:
                        if (characterOrgasming.isPlayer()) {
                            genericOrgasmSB.append(", before reaching down and starting to furiously masturbate; your [pc.hand] running up the length of your prehensile [pc.cock] as you curl it back against your [pc.fingers].");
                        } else {
                            genericOrgasmSB.append(", before reaching down and starting to furiously masturbate;" + " [npc1.her] [npc1.hand] sliding down the length of [npc1.her] prehensile [npc1.cock] as [npc1.she] curls it back against [npc1.her] [npc1.fingers].");
                        }
                        break;
                    case RIBBED:
                        if (characterOrgasming.isPlayer()) {
                            genericOrgasmSB.append(", before reaching down and sliding your [pc.hand] up and down over the bumpy ribs that line your [pc.cock].");
                        } else {
                            genericOrgasmSB.append(", before reaching down and sliding [npc1.her] [npc1.hand] up and down over the bumpy ribs that line [npc1.her] [npc1.cock].");
                        }
                        break;
                    case SHEATHED:
                        if (characterOrgasming.isPlayer()) {
                            genericOrgasmSB.append(", before reaching down and starting to furiously masturbate; your [pc.hand] sliding down the length of your [pc.cock] to bump against your sheath, before rising back up to your [pc.cockHead+].");
                        } else {
                            genericOrgasmSB.append(", before reaching down and starting to furiously masturbate;" + " [npc1.her] [npc1.hand] sliding down the length of [npc1.her] [npc1.cock] to bump against [npc1.her] sheath, before rising back up to [npc1.her] [npc1.cockHead+].");
                        }
                        break;
                    case TAPERED:
                        if (characterOrgasming.isPlayer()) {
                            genericOrgasmSB.append(", before reaching down and starting to furiously masturbate; your [pc.hand] running up the length of your [pc.cock] to rub and tease your tapered head.");
                        } else {
                            genericOrgasmSB.append(", before reaching down and starting to furiously masturbate; [npc1.her] [npc1.hand] running up the length of [npc1.her] [npc1.cock] to rub and tease [npc1.her] tapered head.");
                        }
                        break;
                    case TENTACLED:
                        if (characterOrgasming.isPlayer()) {
                            genericOrgasmSB.append(", before reaching down and sliding your [pc.hand] up and down over the squirming tentacles that line the sides of your [pc.cock].");
                        } else {
                            genericOrgasmSB.append(", before reaching down and sliding [npc1.her] [npc1.hand] up and down over the squirming tentacles that line the sides of [npc1.her] [npc1.cock].");
                        }
                        break;
                    case VEINY:
                        if (characterOrgasming.isPlayer()) {
                            genericOrgasmSB.append(", before reaching down and sliding your [pc.hand] up and down over your veiny [pc.cock].");
                        } else {
                            genericOrgasmSB.append(", before reaching down and sliding [npc1.her] [npc1.hand] up and down over [npc1.her] veiny [npc1.cock].");
                        }
                        break;
                }
            } else {
                if (characterOrgasming.isPlayer()) {
                    genericOrgasmSB.append(", before reaching down and starting to furiously masturbate; your [pc.hand] running up the length of your [pc.cock] to rub and tease your [pc.cockHead].");
                } else {
                    genericOrgasmSB.append(", before reaching down and starting to furiously masturbate; [npc1.her] [npc1.hand] running up the length of [npc1.her] [npc1.cock] to rub and tease [npc1.her] [npc1.cockHead].");
                }
            }
        }
    } else if (cumTarget == OrgasmCumTarget.INSIDE) {
        List<String> modifiers = new ArrayList<>();
        switch(orificePenetrated) {
            case ANUS:
            case NIPPLE:
            case VAGINA:
                String orificeName = (orificePenetrated == OrificeType.VAGINA ? "[npc2.pussy]" : (orificePenetrated == OrificeType.ANUS ? "[npc2.asshole]" : "[npc2.nipple]"));
                String orificeNamePlusDescriptor = (orificePenetrated == OrificeType.VAGINA ? "[npc2.pussy+]" : (orificePenetrated == OrificeType.ANUS ? "[npc2.asshole+]" : "[npc2.nipple+]"));
                if (characterOrgasming.hasPenisModifier(PenisModifier.KNOTTED)) {
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append(" Pushing forwards, you ram the knot at the base of your [npc1.cock+] against [npc2.name]'s " + orificeNamePlusDescriptor + "." + " It's already started to swell up so much that you don't manage to get it inside on the first thrust," + " but, after pulling back and slamming your [pc.hips] forwards, you manage to push the thick knot into [npc2.her] " + orificeNamePlusDescriptor + ".");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append(" [npc1.Name] pushes forwards, and you feel [npc1.herHim] ramming the knot at the base of [npc1.her] [npc1.cock+] against your " + orificeNamePlusDescriptor + "." + " It's already started to swell up so much that [npc.she] doesn't manage to get it inside on the first thrust," + " but, after pulling back and slamming [npc1.her] [npc1.hips] forwards, [npc1.she] manages to push the thick knot into your " + orificeNamePlusDescriptor + ".");
                        } else {
                            genericOrgasmSB.append(" Ramming the knot at the base of [npc1.her] [npc1.cock+] into [npc2.name]'s " + orificeNamePlusDescriptor + ", [npc1.name] lets out [npc1.a_moan+] as it starts to swell up inside of [npc2.herHim].");
                        }
                    }
                } else {
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append(" Ramming your [npc1.cock+] deep into [npc2.name]'s " + orificeNamePlusDescriptor + ", you let out [npc1.a_moan+] as you feel your [npc1.cock+] start to twitch.");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append(" Ramming [npc1.her] [npc1.cock+] deep into your " + orificeNamePlusDescriptor + ", [npc1.name] lets out [npc1.a_moan+] as it starts to twitch inside of you.");
                        } else {
                            genericOrgasmSB.append(" Ramming [npc1.her] [npc1.cock+] deep into [npc2.name]'s " + orificeNamePlusDescriptor + ", [npc1.name] lets out [npc1.a_moan+] as it starts to twitch inside of [npc2.herHim].");
                        }
                    }
                }
                modifiers.clear();
                for (PenisModifier mod : PenisModifier.values()) {
                    switch(mod) {
                        case BARBED:
                            if (characterOrgasming.hasPenisModifier(mod)) {
                                if (characterOrgasming.isPlayer()) {
                                    modifiers.add(" You continue to make small, thrusting movements, raking your barbs back against the inner walls of [npc2.her] " + orificeName + " and causing [npc2.herHim] to let out [npc2.a_moan+].");
                                } else {
                                    if (characterPenetrated.isPlayer()) {
                                        modifiers.add(" [npc1.Name] continues to make small, thrusting movements, raking [npc1.her] barbs back against the inner walls of your " + orificeName + " and causing you to let out [npc2.a_moan+].");
                                    } else {
                                        modifiers.add(" [npc1.Name] continues to make small, thrusting movements, raking [npc1.her] barbs back against the inner walls of [npc2.name]'s " + orificeName + " and causing [npc2.herHim] to let out [npc2.a_moan+].");
                                    }
                                }
                            }
                            break;
                        case BLUNT:
                            break;
                        case FLARED:
                            if (characterOrgasming.hasPenisModifier(mod)) {
                                if (characterOrgasming.isPlayer()) {
                                    modifiers.add(" You feel the wide, flared head of your [npc1.cock] swell up, making a seal with which to trap your [npc1.cum] deep within [npc2.her] " + orificeName + ".");
                                } else {
                                    if (characterPenetrated.isPlayer()) {
                                        modifiers.add(" The wide, flared head of [npc1.name]'s [npc1.cock] swells up, making a seal with which to trap [npc1.her] [npc1.cum] deep within your " + orificeName + ".");
                                    } else {
                                        modifiers.add(" The wide, flared head of [npc1.name]'s [npc1.cock] swells up, making a seal with which to trap [npc1.her] [npc1.cum] deep within [npc2.name]'s " + orificeName + ".");
                                    }
                                }
                            }
                            break;
                        case KNOTTED:
                            break;
                        case PREHENSILE:
                            break;
                        case RIBBED:
                            if (characterOrgasming.hasPenisModifier(mod)) {
                                if (characterOrgasming.isPlayer()) {
                                    modifiers.add(" You feel your ribbed [npc1.cock] bumping against the inner walls of [npc2.her] " + orificeName + ", which causes [npc2.herHim] to let out [npc2.a_moan+].");
                                } else {
                                    if (characterPenetrated.isPlayer()) {
                                        modifiers.add(" The ribbed length of [npc1.name]'s [npc1.cock] bumps against the inner walls of your " + orificeName + ", which causes you to let out [npc2.a_moan+].");
                                    } else {
                                        modifiers.add(" The ribbed length of [npc1.name]'s [npc1.cock] bumps against the inner walls of [npc2.name]'s " + orificeName + ", which causes [npc2.herHim] to let out [npc2.a_moan+].");
                                    }
                                }
                            }
                            break;
                        case SHEATHED:
                            break;
                        case TAPERED:
                            break;
                        case TENTACLED:
                            if (characterOrgasming.hasPenisModifier(mod)) {
                                if (characterOrgasming.isPlayer()) {
                                    modifiers.add(" You feel the wriggling tentacles lining your [npc1.cock] start to massage the inner walls of [npc2.her] " + orificeName + ", which causes [npc2.herHim] to let out [npc2.a_moan+].");
                                } else {
                                    if (characterPenetrated.isPlayer()) {
                                        modifiers.add(" The wriggling tentacles lining [npc1.name]'s [npc1.cock] start to massage the inner walls of your " + orificeName + ", which causes you to let out [npc2.a_moan+].");
                                    } else {
                                        modifiers.add(" The wriggling tentacles lining [npc1.name]'s [npc1.cock] start to massage the inner walls of [npc2.name]'s " + orificeName + ", which causes [npc2.herHim] to let out [npc2.a_moan+].");
                                    }
                                }
                            }
                            break;
                        case VEINY:
                            break;
                    }
                }
                if (!modifiers.isEmpty()) {
                    genericOrgasmSB.append(modifiers.get(Util.random.nextInt(modifiers.size())));
                }
                if (characterOrgasming.hasPenisModifier(PenisModifier.KNOTTED)) {
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append(" Keeping your [npc1.hips] pushed tightly against [npc2.name]'s " + orificeName + ", you let out [npc1.a_moan+] as you feel your knot swell up to its full size." + " Bucking back a little, you grin as you feel [npc2.name] pulled along with you; evidence that your [npc1.cock] is now firmly locked inside [npc2.her] " + orificeNamePlusDescriptor + ".");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append(" Keeping [npc1.her] [npc1.hips] pushed tightly against your " + orificeName + ", [npc1.name] lets out [npc1.a_moan+] as [npc1.her] knot swells up to its full size." + " [npc.She] then bucks back a little, and you let out a startled cry as you're pulled along with [npc.herHim]; evidence that [npc1.her] [npc1.cock] is now firmly locked inside your " + orificeNamePlusDescriptor + ".");
                        } else {
                            genericOrgasmSB.append(" After just a moment, [npc1.her] knot has fully swollen in size, locking [npc1.her] [npc1.cock] inside [npc2.name]'s " + orificeName + ".");
                        }
                    }
                }
                break;
            case ASS:
                break;
            case BREAST:
                break;
            case MOUTH:
                if (characterOrgasming.hasPenisModifier(PenisModifier.KNOTTED)) {
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append(" Pushing forwards, you ram the knot at the base of your [npc1.cock+] against [npc2.name]'s [npc2.face+]." + " It's already started to swell up so much that you don't manage to get it past [npc2.her] [npc2.lips+] on the first thrust," + " but, after pulling back and slamming your [pc.hips] forwards, you manage to push the thick knot into [npc2.her] [npc2.mouth].");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append(" [npc1.Name] pushes forwards, ramming the knot at the base of [npc1.her] [npc1.cock+] into your [npc2.face+]." + " It's already started to swell up so much that [npc.she] doesn't manage to get it past your [npc2.lips+] on the first thrust," + " but, after pulling back and slamming [npc1.her] [npc1.hips] forwards, [npc1.she] manages to push the thick knot into your [npc2.mouth].");
                        } else {
                            genericOrgasmSB.append(" Ramming the knot at the base of [npc1.her] [npc1.cock+] into [npc2.name]'s mouth, [npc1.name] lets out [npc1.a_moan+] as it starts to swell up inside of [npc2.herHim].");
                        }
                    }
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append(" Ramming the knot at the base of your [npc1.cock+] into [npc2.name]'s mouth, you let out [npc1.a_moan+] as you feel it start to swell up.");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append(" Ramming the knot at the base of [npc1.her] [npc1.cock+] into your mouth, [npc1.name] lets out [npc1.a_moan+] as it starts to swell up inside of you.");
                        } else {
                            genericOrgasmSB.append(" Ramming the knot at the base of [npc1.her] [npc1.cock+] into [npc2.name]'s mouth, [npc1.name] lets out [npc1.a_moan+] as it starts to swell up inside of [npc2.herHim].");
                        }
                    }
                } else {
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append(" Ramming your [npc1.cock+] deep down [npc2.name]'s throat, you let out [npc1.a_moan+] as you feel your [npc1.cock+] start to twitch.");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append(" Ramming [npc1.her] [npc1.cock+] deep down your throat, [npc1.name] lets out [npc1.a_moan+] as it starts to twitch inside of you.");
                        } else {
                            genericOrgasmSB.append(" Ramming [npc1.her] [npc1.cock+] deep down [npc2.name]'s throat, [npc1.name] lets out [npc1.a_moan+] as it starts to twitch inside of [npc2.herHim].");
                        }
                    }
                }
                modifiers.clear();
                for (PenisModifier mod : PenisModifier.values()) {
                    switch(mod) {
                        case BARBED:
                            if (characterOrgasming.hasPenisModifier(mod)) {
                                if (characterOrgasming.isPlayer()) {
                                    modifiers.add(" You continue to make small, thrusting movements, raking your barbs back against the lining of [npc2.her] throat and causing [npc2.herHim] to let out a choking [npc2.moan].");
                                } else {
                                    if (characterPenetrated.isPlayer()) {
                                        modifiers.add(" [npc1.Name] continues to make small, thrusting movements, raking [npc1.her] barbs back against the lining of your throat and causing you to let out a choking [npc2.moan].");
                                    } else {
                                        modifiers.add(" [npc1.Name] continues to make small, thrusting movements, raking [npc1.her] barbs back against the lining of [npc2.name]'s throat and causing [npc2.herHim] to let out a choking [npc2.moan].");
                                    }
                                }
                            }
                            break;
                        case BLUNT:
                            break;
                        case FLARED:
                            if (characterOrgasming.hasPenisModifier(mod)) {
                                if (characterOrgasming.isPlayer()) {
                                    modifiers.add(" You feel the wide, flared head of your [npc1.cock] swell up, making a seal with which to trap your [npc1.cum] deep down [npc2.her] throat.");
                                } else {
                                    if (characterPenetrated.isPlayer()) {
                                        modifiers.add(" The wide, flared head of [npc1.name]'s [npc1.cock] swells up, making a seal with which to trap [npc1.her] [npc1.cum] deep down your throat.");
                                    } else {
                                        modifiers.add(" The wide, flared head of [npc1.name]'s [npc1.cock] swells up, making a seal with which to trap [npc1.her] [npc1.cum] deep down [npc2.name]'s throat.");
                                    }
                                }
                            }
                            break;
                        case KNOTTED:
                            break;
                        case PREHENSILE:
                            break;
                        case RIBBED:
                            if (characterOrgasming.hasPenisModifier(mod)) {
                                if (characterOrgasming.isPlayer()) {
                                    modifiers.add(" You feel your ribbed [npc1.cock] bumping against the lining of [npc2.her] throat, which causes [npc2.herHim] to let out a muffled [npc2.moan].");
                                } else {
                                    if (characterPenetrated.isPlayer()) {
                                        modifiers.add(" The ribbed length of [npc1.name]'s [npc1.cock] bumps against the lining of your throat, which causes you to let out a muffled [npc2.moan].");
                                    } else {
                                        modifiers.add(" The ribbed length of [npc1.name]'s [npc1.cock] bumps against the lining of [npc2.name]'s throat, which causes [npc2.herHim] to let out a muffled [npc2.moan].");
                                    }
                                }
                            }
                            break;
                        case SHEATHED:
                            break;
                        case TAPERED:
                            break;
                        case TENTACLED:
                            if (characterOrgasming.hasPenisModifier(mod)) {
                                if (characterOrgasming.isPlayer()) {
                                    modifiers.add(" You feel the wriggling tentacles lining your [npc1.cock] start to massage the lining of [npc2.her] throat, which causes [npc2.herHim] to let out a muffled [npc2.moan].");
                                } else {
                                    if (characterPenetrated.isPlayer()) {
                                        modifiers.add(" The wriggling tentacles lining [npc1.name]'s [npc1.cock] start to massage the lining of your throat, which causes you to let out a muffled [npc2.moan].");
                                    } else {
                                        modifiers.add(" The wriggling tentacles lining [npc1.name]'s [npc1.cock] start to massage the lining of [npc2.name]'s throat, which causes [npc2.herHim] to let out a muffled [npc2.moan].");
                                    }
                                }
                            }
                            break;
                        case VEINY:
                            break;
                    }
                }
                if (!modifiers.isEmpty()) {
                    genericOrgasmSB.append(modifiers.get(Util.random.nextInt(modifiers.size())));
                }
                if (characterOrgasming.hasPenisModifier(PenisModifier.KNOTTED)) {
                    if (characterOrgasming.isPlayer()) {
                        genericOrgasmSB.append(" Keeping your [npc1.hips] pushed tightly against [npc2.name]'s [npc2.face], you let out [npc1.a_moan+] as you feel your knot swell up to its full size." + " Bucking back a little, you grin as [npc2.name]'s pulled along with you; evidence that your [npc1.cock] is now firmly locked inside [npc2.her] [npc2.mouth].");
                    } else {
                        if (characterPenetrated.isPlayer()) {
                            genericOrgasmSB.append(" Keeping [npc1.her] [npc1.hips] pushed tightly against your [npc2.face], [npc1.name] lets out [npc1.a_moan+] as [npc1.her] knot swells up to its full size." + " [npc.She] then bucks back a little, and you let out a very muffled cry as you're pulled along with [npc1.herHim]; evidence that [npc1.her] [npc1.cock] is now firmly locked inside your [npc2.mouth].");
                        } else {
                            genericOrgasmSB.append(" After just a moment, [npc1.her] knot has fully swollen in size, locking [npc1.her] [npc1.cock] inside [npc2.name]'s [npc2.mouth].");
                        }
                    }
                }
                break;
            case THIGHS:
                break;
            case URETHRA:
                break;
            default:
                break;
        }
    }
    if (characterOrgasming.isPlayer()) {
        genericOrgasmSB.append(" As your [npc1.balls+] tense up, ");
    } else {
        genericOrgasmSB.append(" As [npc1.her] [npc1.balls+] tense up, ");
    }
    genericOrgasmSB.append(getCumQuantityDescription(characterOrgasming));
    if (characterOrgasming.getPenisRawCumProductionValue() > 0) {
        genericOrgasmSB.append(cumTargetDescription(characterOrgasming, characterPenetrated, cumTarget));
    }
    if (characterOrgasming.hasPenisModifier(PenisModifier.KNOTTED) && cumTarget == OrgasmCumTarget.INSIDE) {
        if (characterOrgasming.isPlayer()) {
            genericOrgasmSB.append("</br>" + "Even after your [npc1.balls+] have pumped their entire load into [npc2.name], your knot remains swollen, locking you and your partner together." + " It takes a few minutes for it to start to deflate, and with a wet pop, you're finally able to pull your [npc1.cock+] free.");
        } else {
            if (characterPenetrated.isPlayer()) {
                genericOrgasmSB.append("</br>" + "Even after [npc1.name]'s [npc1.balls+] have pumped their entire load into you, [npc1.her] knot remains swollen, locking you and your partner together." + " It takes a few minutes for it to start to deflate, and with a wet pop, [npc1.she]'s finally able to pull [npc1.her] [npc1.cock+] free.");
            } else {
                genericOrgasmSB.append("</br>" + "Even after [npc1.name]'s [npc1.balls+] have pumped their entire load into [ncp2.name], [npc1.her] knot remains swollen, locking [npc1.herHim] and [npc1.her] partner together." + " It takes a few minutes for it to start to deflate, and with a wet pop, [npc1.she]'s finally able to pull [npc1.her] [npc1.cock+] free.");
            }
        }
    }
    if (characterPenetrated != null) {
        return UtilText.parse(characterOrgasming, characterPenetrated, genericOrgasmSB.toString());
    } else {
        return UtilText.parse(characterOrgasming, genericOrgasmSB.toString());
    }
}
Also used : OrificeType(com.lilithsthrone.game.sex.OrificeType) ArrayList(java.util.ArrayList) GameCharacter(com.lilithsthrone.game.character.GameCharacter) ArrayList(java.util.ArrayList) List(java.util.List) PenisModifier(com.lilithsthrone.game.character.body.valueEnums.PenisModifier)

Example 7 with PenisModifier

use of com.lilithsthrone.game.character.body.valueEnums.PenisModifier in project liliths-throne-public by Innoxia.

the class Body method saveAsXML.

@Override
public Element saveAsXML(Element parentElement, Document doc) {
    // Core:
    Element bodyCore = doc.createElement("bodyCore");
    parentElement.appendChild(bodyCore);
    CharacterUtils.addAttribute(doc, bodyCore, "piercedStomach", String.valueOf(this.isPiercedStomach()));
    CharacterUtils.addAttribute(doc, bodyCore, "height", String.valueOf(this.getHeightValue()));
    CharacterUtils.addAttribute(doc, bodyCore, "femininity", String.valueOf(this.getFemininity()));
    CharacterUtils.addAttribute(doc, bodyCore, "bodySize", String.valueOf(this.getBodySize()));
    CharacterUtils.addAttribute(doc, bodyCore, "muscle", String.valueOf(this.getMuscle()));
    CharacterUtils.addAttribute(doc, bodyCore, "pubicHair", String.valueOf(this.getPubicHair()));
    CharacterUtils.addAttribute(doc, bodyCore, "bodyMaterial", String.valueOf(this.getBodyMaterial()));
    CharacterUtils.addAttribute(doc, bodyCore, "genitalArrangement", String.valueOf(this.getGenitalArrangement()));
    for (BodyCoveringType bct : BodyCoveringType.values()) {
        Element element = doc.createElement("bodyCovering");
        bodyCore.appendChild(element);
        CharacterUtils.addAttribute(doc, element, "type", bct.toString());
        CharacterUtils.addAttribute(doc, element, "pattern", this.coverings.get(bct).getPattern().toString());
        CharacterUtils.addAttribute(doc, element, "modifier", this.coverings.get(bct).getModifier().toString());
        CharacterUtils.addAttribute(doc, element, "colourPrimary", this.coverings.get(bct).getPrimaryColour().toString());
        if (this.coverings.get(bct).isPrimaryGlowing()) {
            CharacterUtils.addAttribute(doc, element, "glowPrimary", String.valueOf(this.coverings.get(bct).isPrimaryGlowing()));
        }
        CharacterUtils.addAttribute(doc, element, "colourSecondary", this.coverings.get(bct).getSecondaryColour().toString());
        if (this.coverings.get(bct).isSecondaryGlowing()) {
            CharacterUtils.addAttribute(doc, element, "glowSecondary", String.valueOf(this.coverings.get(bct).isSecondaryGlowing()));
        }
        if (this.getBodyCoveringTypesDiscovered().contains(bct)) {
            CharacterUtils.addAttribute(doc, element, "discovered", String.valueOf(this.getBodyCoveringTypesDiscovered().contains(bct)));
        }
    }
    // Antennae:
    Element bodyAntennae = doc.createElement("antennae");
    parentElement.appendChild(bodyAntennae);
    CharacterUtils.addAttribute(doc, bodyAntennae, "type", this.antenna.getType().toString());
    CharacterUtils.addAttribute(doc, bodyAntennae, "rows", String.valueOf(this.antenna.getAntennaRows()));
    // Arm:
    Element bodyArm = doc.createElement("arm");
    parentElement.appendChild(bodyArm);
    CharacterUtils.addAttribute(doc, bodyArm, "type", this.arm.getType().toString());
    CharacterUtils.addAttribute(doc, bodyArm, "rows", String.valueOf(this.arm.getArmRows()));
    CharacterUtils.addAttribute(doc, bodyArm, "underarmHair", this.arm.getUnderarmHair().toString());
    // Ass:
    Element bodyAss = doc.createElement("ass");
    parentElement.appendChild(bodyAss);
    CharacterUtils.addAttribute(doc, bodyAss, "type", this.ass.getType().toString());
    CharacterUtils.addAttribute(doc, bodyAss, "assSize", String.valueOf(this.ass.getAssSize().getValue()));
    CharacterUtils.addAttribute(doc, bodyAss, "hipSize", String.valueOf(this.ass.getHipSize().getValue()));
    Element bodyAnus = doc.createElement("anus");
    parentElement.appendChild(bodyAnus);
    CharacterUtils.addAttribute(doc, bodyAnus, "wetness", String.valueOf(this.ass.anus.orificeAnus.wetness));
    CharacterUtils.addAttribute(doc, bodyAnus, "elasticity", String.valueOf(this.ass.anus.orificeAnus.elasticity));
    CharacterUtils.addAttribute(doc, bodyAnus, "plasticity", String.valueOf(this.ass.anus.orificeAnus.plasticity));
    CharacterUtils.addAttribute(doc, bodyAnus, "capacity", String.valueOf(this.ass.anus.orificeAnus.capacity));
    CharacterUtils.addAttribute(doc, bodyAnus, "stretchedCapacity", String.valueOf(this.ass.anus.orificeAnus.stretchedCapacity));
    CharacterUtils.addAttribute(doc, bodyAnus, "virgin", String.valueOf(this.ass.anus.orificeAnus.virgin));
    CharacterUtils.addAttribute(doc, bodyAnus, "bleached", String.valueOf(this.ass.anus.bleached));
    CharacterUtils.addAttribute(doc, bodyAnus, "assHair", this.ass.anus.assHair.toString());
    Element anusModifiers = doc.createElement("anusModifiers");
    bodyAnus.appendChild(anusModifiers);
    for (OrificeModifier om : OrificeModifier.values()) {
        CharacterUtils.addAttribute(doc, anusModifiers, om.toString(), String.valueOf(this.ass.anus.orificeAnus.hasOrificeModifier(om)));
    }
    // Breasts:
    Element bodyBreast = doc.createElement("breasts");
    parentElement.appendChild(bodyBreast);
    CharacterUtils.addAttribute(doc, bodyBreast, "type", this.breast.type.toString());
    CharacterUtils.addAttribute(doc, bodyBreast, "shape", this.breast.shape.toString());
    CharacterUtils.addAttribute(doc, bodyBreast, "size", String.valueOf(this.breast.size));
    CharacterUtils.addAttribute(doc, bodyBreast, "rows", String.valueOf(this.breast.rows));
    CharacterUtils.addAttribute(doc, bodyBreast, "milkStorage", String.valueOf(this.breast.milkStorage));
    CharacterUtils.addAttribute(doc, bodyBreast, "storedMilk", String.valueOf(this.breast.milkStored));
    CharacterUtils.addAttribute(doc, bodyBreast, "milkRegeneration", String.valueOf(this.breast.milkRegeneration));
    CharacterUtils.addAttribute(doc, bodyBreast, "nippleCountPerBreast", String.valueOf(this.breast.nippleCountPerBreast));
    Element bodyNipple = doc.createElement("nipples");
    parentElement.appendChild(bodyNipple);
    CharacterUtils.addAttribute(doc, bodyNipple, "elasticity", String.valueOf(this.breast.nipples.orificeNipples.elasticity));
    CharacterUtils.addAttribute(doc, bodyNipple, "plasticity", String.valueOf(this.breast.nipples.orificeNipples.plasticity));
    CharacterUtils.addAttribute(doc, bodyNipple, "capacity", String.valueOf(this.breast.nipples.orificeNipples.capacity));
    CharacterUtils.addAttribute(doc, bodyNipple, "stretchedCapacity", String.valueOf(this.breast.nipples.orificeNipples.stretchedCapacity));
    CharacterUtils.addAttribute(doc, bodyNipple, "virgin", String.valueOf(this.breast.nipples.orificeNipples.virgin));
    CharacterUtils.addAttribute(doc, bodyNipple, "pierced", String.valueOf(this.breast.nipples.pierced));
    CharacterUtils.addAttribute(doc, bodyNipple, "nippleSize", String.valueOf(this.breast.nipples.nippleSize));
    CharacterUtils.addAttribute(doc, bodyNipple, "nippleShape", this.breast.nipples.nippleShape.toString());
    CharacterUtils.addAttribute(doc, bodyNipple, "areolaeSize", String.valueOf(this.breast.nipples.areolaeSize));
    CharacterUtils.addAttribute(doc, bodyNipple, "areolaeShape", this.breast.nipples.areolaeShape.toString());
    Element nippleModifiers = doc.createElement("nippleModifiers");
    bodyNipple.appendChild(nippleModifiers);
    for (OrificeModifier om : OrificeModifier.values()) {
        CharacterUtils.addAttribute(doc, nippleModifiers, om.toString(), String.valueOf(this.breast.nipples.orificeNipples.hasOrificeModifier(om)));
    }
    Element bodyMilk = doc.createElement("milk");
    parentElement.appendChild(bodyMilk);
    CharacterUtils.addAttribute(doc, bodyMilk, "flavour", this.breast.milk.getFlavour().toString());
    Element milkModifiers = doc.createElement("milkModifiers");
    bodyMilk.appendChild(milkModifiers);
    for (FluidModifier fm : FluidModifier.values()) {
        CharacterUtils.addAttribute(doc, milkModifiers, fm.toString(), String.valueOf(this.breast.milk.hasFluidModifier(fm)));
    }
    // TODO transformativeEffects;
    // Ear:
    Element bodyEar = doc.createElement("ear");
    parentElement.appendChild(bodyEar);
    CharacterUtils.addAttribute(doc, bodyEar, "type", this.ear.type.toString());
    CharacterUtils.addAttribute(doc, bodyEar, "pierced", String.valueOf(this.ear.pierced));
    // Eye:
    Element bodyEye = doc.createElement("eye");
    parentElement.appendChild(bodyEye);
    CharacterUtils.addAttribute(doc, bodyEye, "type", this.eye.type.toString());
    CharacterUtils.addAttribute(doc, bodyEye, "eyePairs", String.valueOf(this.eye.eyePairs));
    CharacterUtils.addAttribute(doc, bodyEye, "irisShape", this.eye.irisShape.toString());
    CharacterUtils.addAttribute(doc, bodyEye, "pupilShape", this.eye.pupilShape.toString());
    // Face:
    Element bodyFace = doc.createElement("face");
    parentElement.appendChild(bodyFace);
    CharacterUtils.addAttribute(doc, bodyFace, "type", this.face.type.toString());
    CharacterUtils.addAttribute(doc, bodyFace, "piercedNose", String.valueOf(this.face.piercedNose));
    CharacterUtils.addAttribute(doc, bodyFace, "facialHair", this.face.facialHair.toString());
    Element bodyMouth = doc.createElement("mouth");
    parentElement.appendChild(bodyMouth);
    CharacterUtils.addAttribute(doc, bodyMouth, "elasticity", String.valueOf(this.face.mouth.orificeMouth.elasticity));
    CharacterUtils.addAttribute(doc, bodyMouth, "plasticity", String.valueOf(this.face.mouth.orificeMouth.plasticity));
    CharacterUtils.addAttribute(doc, bodyMouth, "capacity", String.valueOf(this.face.mouth.orificeMouth.capacity));
    CharacterUtils.addAttribute(doc, bodyMouth, "stretchedCapacity", String.valueOf(this.face.mouth.orificeMouth.stretchedCapacity));
    CharacterUtils.addAttribute(doc, bodyMouth, "virgin", String.valueOf(this.face.mouth.orificeMouth.virgin));
    CharacterUtils.addAttribute(doc, bodyMouth, "piercedLip", String.valueOf(this.face.mouth.piercedLip));
    CharacterUtils.addAttribute(doc, bodyMouth, "lipSize", String.valueOf(this.face.mouth.lipSize));
    Element mouthModifiers = doc.createElement("mouthModifiers");
    bodyMouth.appendChild(mouthModifiers);
    for (OrificeModifier om : OrificeModifier.values()) {
        CharacterUtils.addAttribute(doc, mouthModifiers, om.toString(), String.valueOf(this.face.mouth.orificeMouth.hasOrificeModifier(om)));
    }
    Element bodyTongue = doc.createElement("tongue");
    parentElement.appendChild(bodyTongue);
    CharacterUtils.addAttribute(doc, bodyTongue, "piercedTongue", String.valueOf(this.face.tongue.pierced));
    CharacterUtils.addAttribute(doc, bodyTongue, "tongueLength", String.valueOf(this.face.tongue.tongueLength));
    Element tongueModifiers = doc.createElement("tongueModifiers");
    bodyTongue.appendChild(tongueModifiers);
    for (TongueModifier tm : TongueModifier.values()) {
        CharacterUtils.addAttribute(doc, tongueModifiers, tm.toString(), String.valueOf(this.face.tongue.hasTongueModifier(tm)));
    }
    // Hair:
    Element bodyHair = doc.createElement("hair");
    parentElement.appendChild(bodyHair);
    CharacterUtils.addAttribute(doc, bodyHair, "type", this.hair.type.toString());
    CharacterUtils.addAttribute(doc, bodyHair, "length", String.valueOf(this.hair.length));
    CharacterUtils.addAttribute(doc, bodyHair, "hairStyle", this.hair.style.toString());
    // Horn:
    Element bodyHorn = doc.createElement("horn");
    parentElement.appendChild(bodyHorn);
    CharacterUtils.addAttribute(doc, bodyHorn, "type", this.horn.type.toString());
    CharacterUtils.addAttribute(doc, bodyHorn, "length", String.valueOf(this.horn.length));
    CharacterUtils.addAttribute(doc, bodyHorn, "rows", String.valueOf(this.horn.rows));
    // Leg:
    Element bodyLeg = doc.createElement("leg");
    parentElement.appendChild(bodyLeg);
    CharacterUtils.addAttribute(doc, bodyLeg, "type", this.leg.type.toString());
    // Penis:
    Element bodyPenis = doc.createElement("penis");
    parentElement.appendChild(bodyPenis);
    CharacterUtils.addAttribute(doc, bodyPenis, "type", this.penis.type.toString());
    CharacterUtils.addAttribute(doc, bodyPenis, "size", String.valueOf(this.penis.size));
    CharacterUtils.addAttribute(doc, bodyPenis, "girth", String.valueOf(this.penis.girth));
    CharacterUtils.addAttribute(doc, bodyPenis, "pierced", String.valueOf(this.penis.pierced));
    CharacterUtils.addAttribute(doc, bodyPenis, "virgin", String.valueOf(this.penis.virgin));
    Element penisModifiers = doc.createElement("penisModifiers");
    bodyPenis.appendChild(penisModifiers);
    for (PenisModifier pm : PenisModifier.values()) {
        CharacterUtils.addAttribute(doc, penisModifiers, pm.toString(), String.valueOf(this.penis.hasPenisModifier(pm)));
    }
    CharacterUtils.addAttribute(doc, bodyPenis, "elasticity", String.valueOf(this.penis.orificeUrethra.elasticity));
    CharacterUtils.addAttribute(doc, bodyPenis, "plasticity", String.valueOf(this.penis.orificeUrethra.plasticity));
    CharacterUtils.addAttribute(doc, bodyPenis, "capacity", String.valueOf(this.penis.orificeUrethra.capacity));
    CharacterUtils.addAttribute(doc, bodyPenis, "stretchedCapacity", String.valueOf(this.penis.orificeUrethra.stretchedCapacity));
    CharacterUtils.addAttribute(doc, bodyPenis, "urethraVirgin", String.valueOf(this.penis.orificeUrethra.virgin));
    Element urethraModifiers = doc.createElement("urethraModifiers");
    bodyPenis.appendChild(urethraModifiers);
    for (OrificeModifier om : OrificeModifier.values()) {
        CharacterUtils.addAttribute(doc, urethraModifiers, om.toString(), String.valueOf(this.penis.orificeUrethra.hasOrificeModifier(om)));
    }
    Element bodyTesticle = doc.createElement("testicles");
    parentElement.appendChild(bodyTesticle);
    CharacterUtils.addAttribute(doc, bodyTesticle, "testicleSize", String.valueOf(this.penis.testicle.testicleSize));
    CharacterUtils.addAttribute(doc, bodyTesticle, "cumProduction", String.valueOf(this.penis.testicle.cumStorage));
    CharacterUtils.addAttribute(doc, bodyTesticle, "numberOfTesticles", String.valueOf(this.penis.testicle.testicleCount));
    CharacterUtils.addAttribute(doc, bodyTesticle, "internal", String.valueOf(this.penis.testicle.internal));
    Element bodyCum = doc.createElement("cum");
    parentElement.appendChild(bodyCum);
    CharacterUtils.addAttribute(doc, bodyCum, "flavour", this.penis.testicle.cum.flavour.toString());
    Element cumModifiers = doc.createElement("cumModifiers");
    bodyCum.appendChild(cumModifiers);
    for (FluidModifier fm : FluidModifier.values()) {
        CharacterUtils.addAttribute(doc, cumModifiers, fm.toString(), String.valueOf(this.penis.testicle.cum.hasFluidModifier(fm)));
    }
    // TODO transformativeEffects;
    // Skin:
    Element bodySkin = doc.createElement("skin");
    parentElement.appendChild(bodySkin);
    CharacterUtils.addAttribute(doc, bodySkin, "type", this.skin.type.toString());
    // Tail:
    Element bodyTail = doc.createElement("tail");
    parentElement.appendChild(bodyTail);
    CharacterUtils.addAttribute(doc, bodyTail, "type", this.tail.type.toString());
    CharacterUtils.addAttribute(doc, bodyTail, "count", String.valueOf(this.tail.tailCount));
    // Vagina
    Element bodyVagina = doc.createElement("vagina");
    parentElement.appendChild(bodyVagina);
    CharacterUtils.addAttribute(doc, bodyVagina, "type", this.vagina.type.toString());
    CharacterUtils.addAttribute(doc, bodyVagina, "labiaSize", String.valueOf(this.vagina.labiaSize));
    CharacterUtils.addAttribute(doc, bodyVagina, "clitSize", String.valueOf(this.vagina.clitSize));
    CharacterUtils.addAttribute(doc, bodyVagina, "pierced", String.valueOf(this.vagina.pierced));
    CharacterUtils.addAttribute(doc, bodyVagina, "wetness", String.valueOf(this.vagina.orificeVagina.wetness));
    CharacterUtils.addAttribute(doc, bodyVagina, "elasticity", String.valueOf(this.vagina.orificeVagina.elasticity));
    CharacterUtils.addAttribute(doc, bodyVagina, "plasticity", String.valueOf(this.vagina.orificeVagina.plasticity));
    CharacterUtils.addAttribute(doc, bodyVagina, "capacity", String.valueOf(this.vagina.orificeVagina.capacity));
    CharacterUtils.addAttribute(doc, bodyVagina, "stretchedCapacity", String.valueOf(this.vagina.orificeVagina.stretchedCapacity));
    CharacterUtils.addAttribute(doc, bodyVagina, "virgin", String.valueOf(this.vagina.orificeVagina.virgin));
    CharacterUtils.addAttribute(doc, bodyVagina, "squirter", String.valueOf(this.vagina.orificeVagina.squirter));
    Element vaginaModifiers = doc.createElement("vaginaModifiers");
    bodyVagina.appendChild(vaginaModifiers);
    for (OrificeModifier om : OrificeModifier.values()) {
        CharacterUtils.addAttribute(doc, vaginaModifiers, om.toString(), String.valueOf(this.vagina.orificeVagina.hasOrificeModifier(om)));
    }
    Element bodyGirlcum = doc.createElement("girlcum");
    parentElement.appendChild(bodyGirlcum);
    CharacterUtils.addAttribute(doc, bodyGirlcum, "flavour", this.vagina.girlcum.flavour.toString());
    Element girlcumModifiers = doc.createElement("girlcumModifiers");
    bodyGirlcum.appendChild(girlcumModifiers);
    for (FluidModifier fm : FluidModifier.values()) {
        CharacterUtils.addAttribute(doc, girlcumModifiers, fm.toString(), String.valueOf(this.vagina.girlcum.hasFluidModifier(fm)));
    }
    // TODO transformativeEffects;
    // Wing:
    Element bodyWing = doc.createElement("wing");
    parentElement.appendChild(bodyWing);
    CharacterUtils.addAttribute(doc, bodyWing, "type", this.wing.type.toString());
    CharacterUtils.addAttribute(doc, bodyWing, "size", String.valueOf(this.wing.size));
    return parentElement;
}
Also used : FluidModifier(com.lilithsthrone.game.character.body.valueEnums.FluidModifier) TongueModifier(com.lilithsthrone.game.character.body.valueEnums.TongueModifier) Element(org.w3c.dom.Element) BodyCoveringType(com.lilithsthrone.game.character.body.types.BodyCoveringType) PenisModifier(com.lilithsthrone.game.character.body.valueEnums.PenisModifier) OrificeModifier(com.lilithsthrone.game.character.body.valueEnums.OrificeModifier)

Example 8 with PenisModifier

use of com.lilithsthrone.game.character.body.valueEnums.PenisModifier in project liliths-throne-public by Innoxia.

the class Penis method setType.

public String setType(GameCharacter owner, PenisType type) {
    if (type == getType()) {
        if (owner.isPlayer()) {
            if (type == PenisType.NONE) {
                return "<p style='text-align:center;'>[style.colourDisabled(You already lack a cock, so nothing happens...)]</p>";
            } else {
                return "<p style='text-align:center;'>[style.colourDisabled(You already have [pc.a_cockRace]'s cock, so nothing happens...)]</p>";
            }
        } else {
            if (type == PenisType.NONE) {
                return "<p style='text-align:center;'>[style.colourDisabled([npc.Name] already lacks a cock, so nothing happens...)]</p>";
            } else {
                return UtilText.parse(owner, "<p style='text-align:center;'>[style.colourDisabled([npc.Name] already has [npc.a_cockRace]'s cock, so nothing happens...)]</p>");
            }
        }
    } else {
        UtilText.transformationContentSB.setLength(0);
        if (owner.getPenisType() == PenisType.NONE) {
            if (size < 1) {
                size = 1;
            }
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append("<p>" + "You feel an intense heat building up in your groin, and you let out a lewd moan as you feel the [pc.skin] " + (owner.hasVagina() ? "above your pussy" : "between your legs") + " tighten up and start to press outwards." + " Within moments, a large bump has formed " + (owner.hasVagina() ? "above your feminine slit," : "in the middle of your groin,") + " and with a sudden splitting sensation, the bump pushes out and forms into a penis.");
                if (owner.isInternalTesticles()) {
                    UtilText.transformationContentSB.append(" As your new cock flops down " + (owner.hasVagina() ? "to bump against your pussy, you feel [pc.a_balls] growing within your groin," : "between your legs, you feel [pc.a_balls] growing within your groin,") + " and you let out an unwitting [pc.moan] as your new sexual organ finishes growing.</br>");
                } else {
                    UtilText.transformationContentSB.append(" As your new cock flops down " + (owner.hasVagina() ? "to bump against your pussy, you feel [pc.a_balls] pushing out between your two sexes," : "between your legs, you feel [pc.a_balls] push out underneath the base of your new shaft,") + " and you let out an unwitting [pc.moan] as your new sexual organ finishes growing.</br>");
                }
            } else {
                UtilText.transformationContentSB.append("<p>" + "[npc.Name] feels an intense heat building up in [npc.her] groin, and [npc.she] lets out [npc.a_moan+] as [npc.she] feels the [npc.skin] " + (owner.hasVagina() ? "above [npc.her] pussy" : "between [npc.her] legs") + " tighten up and start to press outwards." + " Within moments, a large bump has formed " + (owner.hasVagina() ? "above [npc.her] feminine slit," : "in the middle of [npc.her] groin,") + " and with a sudden splitting sensation, the bump pushes out and forms into a penis.");
                if (owner.isInternalTesticles()) {
                    UtilText.transformationContentSB.append(" As [npc.her] new cock flops down " + (owner.hasVagina() ? "to bump against [npc.her] pussy, [npc.she] feels [npc.a_balls] growing within [npc.her] groin," : "between [npc.her] legs, [npc.she] feels [npc.a_balls] growing within [npc.her] groin,") + " and [npc.she] lets out an unwitting [npc.moan] as [npc.her] new sexual organ finishes growing.</br>");
                } else {
                    UtilText.transformationContentSB.append(" As [npc.her] new cock flops down " + (owner.hasVagina() ? "to bump against [npc.her] pussy, [npc.she] feels [npc.a_balls] pushing out between [npc.her] two sexes," : "between [npc.her] legs, [npc.she] feels [npc.a_balls] push out underneath the base of [npc.her] new shaft,") + " and [npc.she] lets out an unwitting [npc.moan] as [npc.her] new sexual organ finishes growing.</br>");
                }
            }
        } else {
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append("<p>" + "You let out a gasp as you feel your [pc.cock] suddenly stand to attention, and, trying to get your unexpected erection under control, your gasp soon turns into [pc.a_moan+] as it transforms.</br>");
            } else {
                UtilText.transformationContentSB.append("<p>" + "[npc.Name] suddenly blushes and lets out [npc.a_moan+], squeezing [npc.her] thighs together as [npc.her] [npc.cock] transforms.</br>");
            }
        }
    }
    // Parse existing content before transformation:
    String s = UtilText.parse(owner, UtilText.transformationContentSB.toString());
    UtilText.transformationContentSB.setLength(0);
    UtilText.transformationContentSB.append(s);
    this.type = type;
    testicle.setType(owner, type.getTesticleType());
    switch(type) {
        case NONE:
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append("You squirm and moan as your cock and balls rapidly shrink away, and within seconds, nothing's left to remind you of your manhood.</br>" + "You now have [style.boldSex(no penis)]." + "</p>");
            } else {
                UtilText.transformationContentSB.append("[npc.She] squirms and moans as [npc.her] cock and balls rapidly shrink away, and within seconds, nothing's left to remind [npc.herHim] of [npc.her] manhood.</br>" + "[npc.Name] now has [style.boldSex(no penis)]." + "</p>");
            }
            orificeUrethra.setVirgin(true);
            owner.setPiercedPenis(false);
            break;
        case HUMAN:
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append("You now have a [style.boldHuman(human penis)], covered in [pc.penisFullDescription(true)].</br>" + "You have [style.boldHuman([pc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " human balls)], covered in [pc.ballsFullDescription(true)], which produce [pc.cumColour(true)] [style.boldHuman(human cum)].");
            } else {
                UtilText.transformationContentSB.append("[npc.She] now has a [style.boldHuman(human penis)], covered in [npc.penisFullDescription(true)].</br>" + "[npc.She] has [style.boldHuman([npc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " human balls)], covered in [npc.ballsFullDescription(true)], which produce [npc.cumColour(true)] [style.boldHuman(human cum)].");
            }
            break;
        case DEMON_COMMON:
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append("You squirm and [pc.moan] as the skin covering your cock transforms into a smooth, highly sensitive demonic counterpart." + " Slimy pre-cum starts drooling from the tip, and you let out [pc.a_moan+] as thick ridges suddenly press out all along its length." + " As if that wasn't enough, rows of little bumps start to press out and form into little tentacles, which then start wriggling with a mind of their own.</br>" + "You now have a [style.boldDemon(demonic penis)], covered in [pc.penisFullDescription(true)].</br>" + "You have [style.boldDemon([pc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " demonic balls)], covered in [pc.ballsFullDescription(true)], which produce [pc.cumColour(true)] [style.boldDemon(demon cum)].");
            } else {
                UtilText.transformationContentSB.append("[npc.She] squirms and [npc.moansVerb] as the skin covering [npc.her] cock transforms into a smooth, highly sensitive demonic counterpart." + " Slimy pre-cum starts drooling from the tip, and [npc.she] lets out [npc.a_moan+] as thick ridges suddenly press out all along its length." + " As if that wasn't enough, rows of little bumps start to press out and form into little tentacles, which then start wriggling with a mind of their own.</br>" + "[npc.She] now has a [style.boldDemon(demonic penis)], covered in [npc.penisFullDescription(true)].</br>" + "[npc.She] has [style.boldDemon([npc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " demonic balls)], covered in [npc.ballsFullDescription(true)], which produce [npc.cumColour(true)] [style.boldDemon(demon cum)].");
            }
            break;
        case IMP:
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append("You squirm and [pc.moan] as the skin covering your cock transforms into a smooth, highly sensitive impish counterpart." + " Slimy pre-cum starts drooling from the tip, and you let out [pc.a_moan+] as thick ridges suddenly press out all along its length." + " As if that wasn't enough, rows of little bumps start to press out and form into little tentacles, which then start wriggling with a mind of their own.</br>" + "You now have an [style.boldImp(impish penis)], covered in [pc.penisFullDescription(true)].</br>" + "You have [style.boldImp([pc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " impish balls)], covered in [pc.ballsFullDescription(true)], which produce [pc.cumColour(true)] [style.boldImp(imp cum)].");
            } else {
                UtilText.transformationContentSB.append("[npc.She] squirms and [npc.moansVerb] as the skin covering [npc.her] cock transforms into a smooth, highly sensitive impish counterpart." + " Slimy pre-cum starts drooling from the tip, and [npc.she] lets out [npc.a_moan+] as thick ridges suddenly press out all along its length." + " As if that wasn't enough, rows of little bumps start to press out and form into little tentacles, which then start wriggling with a mind of their own.</br>" + "[npc.She] now has a [style.boldImp(impish penis)], covered in [npc.penisFullDescription(true)].</br>" + "[npc.She] has [style.boldImp([npc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " impish balls)], covered in [npc.ballsFullDescription(true)], which produce [npc.cumColour(true)] [style.boldImp(imp cum)].");
            }
            break;
        case CANINE:
            owner.setSkinCovering(new Covering(BodyCoveringType.PENIS, Colour.SKIN_RED), false);
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append("Letting out an involuntary moan, you feel your penis shifting into a new form, and you're hit by a wave of overwhelming arousal as a thick knot suddenly presses out at the base of your shaft." + " Panting and gasping for air, you feel the tip of your cock narrowing down as it tapers into its new form.</br>" + "You now have a [style.boldDogMorph(canine penis)], covered in [pc.penisFullDescription(true)].</br>" + "You have [style.boldDogMorph([pc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " canine balls)], covered in [pc.ballsFullDescription(true)], which produce [pc.cumColour(true)] [style.boldDogMorph(canine cum)].");
            } else {
                UtilText.transformationContentSB.append("Letting out an involuntary moan, [npc.name] feels [npc.her] penis shifting into a new form, and [npc.she]'s hit by a wave of overwhelming arousal as a thick knot suddenly presses out at the base of [npc.her] shaft." + " As [npc.she] pants and gasps for air, the tip of [npc.her] cock narrows down as it tapers into its new form.</br>" + "[npc.She] now has a [style.boldDogMorph(canine penis)], covered in [npc.penisFullDescription(true)].</br>" + "[npc.She] has [style.boldDogMorph([npc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " canine balls)], covered in [npc.ballsFullDescription(true)], which produce [npc.cumColour(true)] [style.boldDogMorph(canine cum)].");
            }
            break;
        case ANGEL:
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append("You now have an [style.boldAngel(angelic penis)], covered in [pc.penisFullDescription(true)].</br>" + "You have [style.boldAngel([pc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " angelic balls)], covered in [pc.ballsFullDescription(true)], which produce [pc.cumColour(true)] [style.boldAngel(angelic cum)].");
            } else {
                UtilText.transformationContentSB.append("[npc.She] now has an [style.boldAngel(angelic penis)], covered in [npc.penisFullDescription(true)].</br>" + "[npc.She] has [style.boldAngel([npc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " angelic balls)], covered in [npc.ballsFullDescription(true)], which produce [npc.cumColour(true)] [style.boldAngel(angelic cum)].");
            }
            break;
        case AVIAN:
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append(" Letting out an involuntary moan, you feel your penis shifting into a new form, and you're hit by a wave of overwhelming arousal as it retreats down into a new sheath that's formed at the base.</br>" + "You now have an [style.boldHarpy(avian penis)], covered in [pc.penisFullDescription(true)].</br>" + "You have [style.boldHarpy([pc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " avian balls)], covered in [pc.ballsFullDescription(true)], which produce [pc.cumColour(true)] [style.boldHarpy(avian cum)].");
            } else {
                UtilText.transformationContentSB.append("Letting out an involuntary moan, [npc.name] feels [npc.her] penis shifting into a new form, and [npc.she]'s hit by a wave of overwhelming arousal as it retreats down into a new sheath that's formed at the base.</br>" + "[npc.She] now has an [style.boldHarpy(avian penis)], covered in [npc.penisFullDescription(true)].</br>" + "[npc.She] has [style.boldHarpy([npc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " avian balls)], covered in [npc.ballsFullDescription(true)], which produce [npc.cumColour(true)] [style.boldHarpy(avian cum)].");
            }
            break;
        case EQUINE:
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append("Letting out an involuntary moan, you feel your penis shifting into a new form, and you're hit by a wave of overwhelming arousal as your shaft grows wider and the head flattens down.</br>" + "You now have an [style.boldHorseMorph(equine penis)], covered in [pc.penisFullDescription(true)].</br>" + "You have [style.boldHorseMorph([pc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " equine balls)], covered in [pc.ballsFullDescription(true)], which produce [pc.cumColour(true)] [style.boldHorseMorph(equine cum)].");
            } else {
                UtilText.transformationContentSB.append("Letting out an involuntary moan, [npc.name] feels [npc.her] penis shifting into a new form, and [npc.she]'s hit by a wave of overwhelming arousal as [npc.her] shaft grows wider and the head flattens down.</br>" + "[npc.She] now has an [style.boldHorseMorph(equine penis)], covered in [npc.penisFullDescription(true)].</br>" + "[npc.She] has [style.boldHorseMorph([npc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " equine balls)], covered in [npc.ballsFullDescription(true)], which produce [npc.cumColour(true)] [style.boldHorseMorph(equine cum)].");
            }
            break;
        case REINDEER_MORPH:
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append("Letting out an involuntary moan, you feel your penis shifting into a new form, and you're hit by a wave of overwhelming arousal as your shaft grows wider and the head flattens down.</br>" + "You now have a [style.boldReindeerMorph(reindeer-like penis)], covered in [pc.penisFullDescription(true)].</br>" + "You have [style.boldReindeerMorph([pc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " rangiferine balls)]," + " covered in [pc.ballsFullDescription(true)], which produce [pc.cumColour(true)] [style.boldReindeerMorph(rangiferine cum)].");
            } else {
                UtilText.transformationContentSB.append("Letting out an involuntary moan, [npc.name] feels [npc.her] penis shifting into a new form, and [npc.she]'s hit by a wave of overwhelming arousal as [npc.her] shaft grows wider and the head flattens down.</br>" + "[npc.She] now has an [style.boldReindeerMorph(reindeer-like penis)], covered in [npc.penisFullDescription(true)].</br>" + "[npc.She] has [style.boldReindeerMorph([npc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " rangiferine balls)]," + " covered in [npc.ballsFullDescription(true)], which produce [npc.cumColour(true)] [style.boldReindeerMorph(rangiferine cum)].");
            }
            break;
        case BOVINE:
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append("Letting out an involuntary moan, you feel your penis shifting into a new form, and you're hit by a wave of overwhelming arousal as your shaft grows wider and the head flattens down.</br>" + "You now have a [style.boldCowMorph(bovine penis)], covered in [pc.penisFullDescription].</br>" + "You have [style.boldCowMorph([pc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " bovine balls)], covered in [pc.ballsFullDescription(true)], which produce [pc.cumColour(true)] [style.boldCowMorph(bovine cum)].");
            } else {
                UtilText.transformationContentSB.append("Letting out an involuntary moan, [npc.name] feels [npc.her] penis shifting into a new form, and [npc.she]'s hit by a wave of overwhelming arousal as [npc.her] shaft grows wider and the head flattens down.</br>" + "[npc.She] now has a [style.boldCowMorph(bovine penis)], covered in [npc.penisFullDescription].</br>" + "[npc.She] has [style.boldCowMorph([npc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " bovine balls)], covered in [npc.ballsFullDescription(true)], which produce [npc.cumColour(true)] [style.boldCowMorph(bovine cum)].");
            }
            break;
        case FELINE:
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append("Letting out an involuntary moan, you feel your penis shifting into a new form, and you're hit by a wave of overwhelming arousal as rows of fleshy little backwards-facing barbs press out all along your shaft.</br>" + "You now have a [style.boldCatMorph(feline penis)], covered in [pc.penisFullDescription(true)].</br>" + "You have [style.boldCatMorph([pc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " feline balls)], covered in [pc.ballsFullDescription(true)], which produce [pc.cumColour(true)] [style.boldCatMorph(feline cum)].");
            } else {
                UtilText.transformationContentSB.append("Letting out an involuntary moan, [npc.she] feels [npc.her] penis shifting into a new form, and [npc.she]'s hit by a wave of overwhelming arousal as rows of fleshy little backwards-facing barbs press out all along [npc.her] shaft.</br>" + "[npc.She] now has a [style.boldCatMorph(feline penis)], covered in [npc.penisFullDescription(true)].</br>" + "[npc.She] has [style.boldCatMorph([npc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " feline balls)], covered in [npc.ballsFullDescription(true)], which produce [npc.cumColour(true)] [style.boldCatMorph(feline cum)].");
            }
            break;
        case LUPINE:
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append(" Letting out an involuntary moan, you feel your penis shifting into a new form, and you're hit by a wave of overwhelming arousal as a thick knot suddenly presses out at the base of your shaft." + " Panting and gasping for air, you feel the tip of your cock narrowing down as it tapers into its new form.</br>" + "You now have a [style.boldWolfMorph(lupine penis)], covered in [pc.penisFullDescription(true)].</br>" + "You have [style.boldWolfMorph([pc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " lupine balls)], covered in [pc.ballsFullDescription(true)], which produce [pc.cumColour(true)] [style.boldWolfMorph(lupine cum)].");
            } else {
                UtilText.transformationContentSB.append(" Letting out an involuntary moan, [npc.name] feels [npc.her] penis shifting into a new form, and [npc.she]'s hit by a wave of overwhelming arousal as a thick knot suddenly presses out at the base of [npc.her] shaft." + " As [npc.she] pants and gasps for air, the tip of [npc.her] cock narrows down as it tapers into its new form.</br>" + "[npc.She] now has a [style.boldWolfMorph(lupine penis)], covered in [npc.penisFullDescription(true)].</br>" + "[npc.She] has [style.boldWolfMorph([npc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " lupine balls)], covered in [npc.ballsFullDescription(true)], which produce [npc.cumColour(true)] [style.boldWolfMorph(lupine cum)].");
            }
            break;
        case ALLIGATOR_MORPH:
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append("Letting out an involuntary moan, you feel your penis shifting into a new form, and you're hit by a wave of overwhelming arousal as your shaft grows erect and the head smoothes over.</br>" + "You now have an [style.boldGatorMorph(alligator penis)], covered in [pc.penisFullDescription].</br>" + "You have [style.boldGatorMorph([pc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " reptilian balls)]," + " covered in [pc.ballsFullDescription(true)], which produce [pc.cumColour(true)] [style.boldGatorMorph(alligator-morph cum)].");
            } else {
                UtilText.transformationContentSB.append("Letting out an involuntary moan, [npc.name] feels [npc.her] penis shifting into a new form, and [npc.she]'s hit by a wave of overwhelming arousal as [npc.her] shaft grows erect and the head smoothes over.</br>" + "[npc.She] now has an [style.boldGatorMorph(alligator penis)], covered in [npc.penisFullDescription].</br>" + "[npc.She] has [style.boldGatorMorph([npc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " reptilian balls)]," + " covered in [npc.ballsFullDescription(true)], which produce [npc.cumColour(true)] [style.boldGatorMorph(alligator-morph cum)].");
            }
            break;
        case SQUIRREL:
            if (owner.isPlayer()) {
                UtilText.transformationContentSB.append("You now have a [style.boldSquirrelMorph(squirrel-morph's penis)], covered in [pc.penisFullDescription(true)].</br>" + "You have [style.boldSquirrelMorph([pc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " squirrel-morph's balls)]," + " covered in [pc.ballsFullDescription(true)], which produce [pc.cumColour(true)] [style.boldSquirrelMorph(squirrel-morph cum)].");
            } else {
                UtilText.transformationContentSB.append("[npc.She] now has a [style.boldSquirrelMorph(squirrel-morph's penis)], covered in [npc.penisFullDescription(true)].</br>" + "[npc.She] has [style.boldSquirrelMorph([npc.ballsCount]" + (owner.isInternalTesticles() ? " internal," : "") + " squirrel-morph's balls)], covered in [npc.ballsFullDescription(true)]," + " which produce [npc.cumColour(true)] [style.boldSquirrelMorph(squirrel-morph cum)].");
            }
            break;
    }
    penisModifiers.clear();
    penisModifiers.addAll(type.getDefaultPenisModifiers());
    if (owner.isPlayer()) {
        UtilText.transformationContentSB.append("</br>" + "Any old modifiers that your penis might have had have [style.boldShrink(transformed away)]!");
    } else {
        UtilText.transformationContentSB.append("</br>" + "Any old modifiers that [npc.her] penis might have had have [style.boldShrink(transformed away)]!");
    }
    if (penisModifiers.isEmpty()) {
        UtilText.transformationContentSB.append("</p>");
    } else {
        if (owner.isPlayer()) {
            UtilText.transformationContentSB.append("</br>" + "Instead, your new cock is:");
        } else {
            UtilText.transformationContentSB.append("</br>" + "Instead, [npc.her] new cock is:");
        }
        for (PenisModifier pm : penisModifiers) {
            UtilText.transformationContentSB.append("</br>[style.boldGrow(" + Util.capitaliseSentence(pm.getName()) + ")]");
        }
        UtilText.transformationContentSB.append("</p>");
    }
    return UtilText.parse(owner, UtilText.transformationContentSB.toString()) + "<p>" + owner.postTransformationCalculation(false) + "</p>";
}
Also used : PenisModifier(com.lilithsthrone.game.character.body.valueEnums.PenisModifier)

Aggregations

PenisModifier (com.lilithsthrone.game.character.body.valueEnums.PenisModifier)8 OrificeModifier (com.lilithsthrone.game.character.body.valueEnums.OrificeModifier)5 BodyCoveringType (com.lilithsthrone.game.character.body.types.BodyCoveringType)4 TongueModifier (com.lilithsthrone.game.character.body.valueEnums.TongueModifier)4 ArrayList (java.util.ArrayList)4 FluidModifier (com.lilithsthrone.game.character.body.valueEnums.FluidModifier)3 OrificeType (com.lilithsthrone.game.sex.OrificeType)3 GameCharacter (com.lilithsthrone.game.character.GameCharacter)2 Covering (com.lilithsthrone.game.character.body.Covering)2 BodyHair (com.lilithsthrone.game.character.body.valueEnums.BodyHair)2 BreastShape (com.lilithsthrone.game.character.body.valueEnums.BreastShape)2 CoveringModifier (com.lilithsthrone.game.character.body.valueEnums.CoveringModifier)2 NPC (com.lilithsthrone.game.character.npc.NPC)2 Subspecies (com.lilithsthrone.game.character.race.Subspecies)2 PenetrationType (com.lilithsthrone.game.sex.PenetrationType)2 SexType (com.lilithsthrone.game.sex.SexType)2 HashMap (java.util.HashMap)2 EnchantmentEventListener (com.lilithsthrone.controller.eventListeners.EnchantmentEventListener)1 InventorySelectedItemEventListener (com.lilithsthrone.controller.eventListeners.InventorySelectedItemEventListener)1 InventoryTooltipEventListener (com.lilithsthrone.controller.eventListeners.InventoryTooltipEventListener)1