Search in sources :

Example 6 with GameCharacter

use of com.lilithsthrone.game.character.GameCharacter in project liliths-throne-public by Innoxia.

the class NPC method getCharacterInformationScreen.

public String getCharacterInformationScreen() {
    infoScreenSB.setLength(0);
    infoScreenSB.append("<h4>Background</h4>" + "<p>" + this.getDescription() + "</p>" + "</br>" + "<h4>Relationships</h4>" + "<p>" + "[style.boldAffection(Affection:)]</br>" + AffectionLevel.getDescription(this, Main.game.getPlayer(), AffectionLevel.getAffectionLevelFromValue(this.getAffection(Main.game.getPlayer())), true));
    for (Entry<String, Float> entry : this.getAffectionMap().entrySet()) {
        GameCharacter target = Main.game.getNPCById(entry.getKey());
        if (!target.isPlayer()) {
            infoScreenSB.append("</br>" + AffectionLevel.getDescription(this, target, AffectionLevel.getAffectionLevelFromValue(this.getAffection(target)), true));
        }
    }
    infoScreenSB.append("</br></br>" + "[style.boldObedience(Obedience:)]</br>" + UtilText.parse(this, (this.isSlave() ? "[npc.Name] [style.boldArcane(is a slave)], owned by " + (this.getOwner().isPlayer() ? "you!" : this.getOwner().getName("a") + ".") : "[npc.Name] [style.boldGood(is not a slave)].")) + "</br>" + ObedienceLevel.getDescription(this, ObedienceLevel.getObedienceLevelFromValue(this.getObedienceValue()), true, true));
    if (!this.getSlavesOwned().isEmpty()) {
        infoScreenSB.append("</br></br>" + "[style.boldArcane(Slaves owned:)]");
        for (String id : this.getSlavesOwned()) {
            infoScreenSB.append(UtilText.parse(Main.game.getNPCById(id), "</br>[npc.Name]"));
        }
    }
    infoScreenSB.append("</p>" + "</br>" + "<h4>Appearance</h4>" + "<p>" + this.getBodyDescription() + "</p>" + getStats(this));
    return infoScreenSB.toString();
}
Also used : GameCharacter(com.lilithsthrone.game.character.GameCharacter)

Example 7 with GameCharacter

use of com.lilithsthrone.game.character.GameCharacter in project liliths-throne-public by Innoxia.

the class Ashley method getCharacterInformationScreen.

@Override
public String getCharacterInformationScreen() {
    infoScreenSB.setLength(0);
    infoScreenSB.append("<h4>Background</h4>" + "<p>" + this.getDescription() + "</p>" + "</br>" + "<h4>Relationships</h4>" + "<p>" + "[style.boldAffection(Affection:)]</br>" + AffectionLevel.getDescription(this, Main.game.getPlayer(), AffectionLevel.getAffectionLevelFromValue(this.getAffection(Main.game.getPlayer())), true));
    for (Entry<String, Float> entry : this.getAffectionMap().entrySet()) {
        GameCharacter target = Main.game.getNPCById(entry.getKey());
        if (!target.isPlayer()) {
            infoScreenSB.append("</br>" + AffectionLevel.getDescription(this, target, AffectionLevel.getAffectionLevelFromValue(this.getAffection(target)), true));
        }
    }
    infoScreenSB.append("</br></br>" + "[style.boldObedience(Obedience:)]</br>" + UtilText.parse(this, (this.isSlave() ? "[npc.Name] [style.boldArcane(is a slave)], owned by " + (this.getOwner().isPlayer() ? "you!" : this.getOwner().getName("a") + ".") : "[npc.Name] [style.boldGood(is not a slave)].")) + "</br>" + ObedienceLevel.getDescription(this, ObedienceLevel.getObedienceLevelFromValue(this.getObedienceValue()), true, true) + "</p>" + "</br>" + "<h4>Appearance</h4>" + "<p>" + (Main.game.getPlayer().hasTraitActivated(Perk.OBSERVANT) ? "Despite the fact that you're highly observant, there's no giveaway whatsoever which would hint as to what Ashley's gender is." : "You have no idea what Ashley's gender is.") + " Standing at full height, they measure 6'1\" (186cm)." + "</p>" + "<p>" + "The hood of their cloak is pulled up, completely obscuring their facial features." + " All that you can make out from the darkness of the hood is the sheen of a pair of deep blue eyes." + "</p>" + "<p>" + "Ashley's cloak covers the entirety of their body, leaving you completely unable to see any part of their body." + " You have no idea what race they are, much less the state of their breasts and genitals." + "</p>");
    return infoScreenSB.toString();
}
Also used : GameCharacter(com.lilithsthrone.game.character.GameCharacter)

Example 8 with GameCharacter

use of com.lilithsthrone.game.character.GameCharacter in project liliths-throne-public by Innoxia.

the class SexAction method getFetishesForEitherPartner.

public List<Fetish> getFetishesForEitherPartner(GameCharacter characterPerformingAction, boolean characterPerformingActionFetishes) {
    // if(characterFetishes==null || characterFetishes.get(characterPerformingAction)==null) {
    GameCharacter characterTarget = Sex.getTargetedPartner(characterPerformingAction);
    characterFetishes = new HashMap<>();
    characterFetishesForPartner = new HashMap<>();
    characterFetishes.putIfAbsent(characterPerformingAction, new HashSet<>());
    characterFetishesForPartner.putIfAbsent(characterPerformingAction, new HashSet<>());
    if (this.getParticipantType() == SexParticipantType.SELF && !characterPerformingActionFetishes) {
        // If this is a self action, do not apply fetishes to other partner.
        return new ArrayList<>(characterFetishesForPartner.get(characterPerformingAction));
    }
    if (this.getParticipantType() != SexParticipantType.SELF && characterPerformingAction.isRelatedTo(characterTarget)) {
        characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_INCEST);
        characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_INCEST);
    }
    if (this.getSexPace(characterPerformingAction) != null) {
        switch(this.getSexPace(characterPerformingAction)) {
            case DOM_GENTLE:
                characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_DOMINANT);
                characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_SUBMISSIVE);
                break;
            case DOM_NORMAL:
                characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_DOMINANT);
                characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_SUBMISSIVE);
                break;
            case DOM_ROUGH:
                characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_DOMINANT);
                characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_SUBMISSIVE);
                characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_SADIST);
                characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_MASOCHIST);
                break;
            case SUB_EAGER:
                characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_SUBMISSIVE);
                characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_DOMINANT);
                break;
            case SUB_NORMAL:
                characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_SUBMISSIVE);
                characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_DOMINANT);
                break;
            case SUB_RESISTING:
                characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_SUBMISSIVE);
                characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_DOMINANT);
                characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_NON_CON_SUB);
                characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_NON_CON_DOM);
                break;
        }
    }
    List<CoverableArea> cummedOnList = this.getAreasCummedOn(characterPerformingAction, characterTarget);
    if (cummedOnList != null) {
        characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_CUM_STUD);
        characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_CUM_ADDICT);
        for (CoverableArea area : cummedOnList) {
            switch(area) {
                case ANUS:
                case ASS:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_ANAL_GIVING);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_ANAL_RECEIVING);
                    break;
                case BACK:
                    break;
                case BREASTS:
                case NIPPLES:
                    if (characterTarget.getBreastRawMilkStorageValue() > 0) {
                        characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_LACTATION_OTHERS);
                        characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_LACTATION_SELF);
                    }
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_BREASTS_OTHERS);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_BREASTS_SELF);
                    break;
                case HAIR:
                    break;
                case LEGS:
                case THIGHS:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_LEG_LOVER);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_STRUTTER);
                    break;
                case MOUND:
                    break;
                case MOUTH:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_ORAL_GIVING);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_ORAL_RECEIVING);
                    break;
                case PENIS:
                case TESTICLES:
                    break;
                case STOMACH:
                    break;
                case VAGINA:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_VAGINAL_GIVING);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_VAGINAL_RECEIVING);
                    break;
            }
        }
    }
    cummedOnList = this.getAreasCummedOn(characterTarget, characterPerformingAction);
    if (cummedOnList != null) {
        characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_CUM_ADDICT);
        characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_CUM_STUD);
        for (CoverableArea area : cummedOnList) {
            switch(area) {
                case ANUS:
                case ASS:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_ANAL_RECEIVING);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_ANAL_GIVING);
                    break;
                case BACK:
                    break;
                case BREASTS:
                case NIPPLES:
                    if (characterPerformingAction.getBreastRawMilkStorageValue() > 0) {
                        characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_LACTATION_SELF);
                        characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_LACTATION_OTHERS);
                    }
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_BREASTS_SELF);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_BREASTS_OTHERS);
                    break;
                case HAIR:
                    break;
                case LEGS:
                case THIGHS:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_STRUTTER);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_LEG_LOVER);
                    break;
                case MOUND:
                    break;
                case MOUTH:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_ORAL_RECEIVING);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_ORAL_GIVING);
                    break;
                case PENIS:
                case TESTICLES:
                    break;
                case STOMACH:
                    break;
                case VAGINA:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_VAGINAL_RECEIVING);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_VAGINAL_GIVING);
                    break;
            }
        }
    }
    List<OrificeType> cummedInList = this.getAreasCummedIn(characterPerformingAction, characterTarget);
    if (cummedInList != null) {
        characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_CUM_STUD);
        characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_CUM_ADDICT);
        for (OrificeType orifice : cummedInList) {
            switch(orifice) {
                case ANUS:
                case ASS:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_ANAL_GIVING);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_ANAL_RECEIVING);
                    break;
                case BREAST:
                case NIPPLE:
                    if (characterTarget.getBreastRawMilkStorageValue() > 0) {
                        characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_LACTATION_OTHERS);
                        characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_LACTATION_SELF);
                    }
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_BREASTS_OTHERS);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_BREASTS_SELF);
                    break;
                case THIGHS:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_LEG_LOVER);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_STRUTTER);
                    break;
                case MOUTH:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_ORAL_GIVING);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_ORAL_RECEIVING);
                    break;
                case VAGINA:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_VAGINAL_GIVING);
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_IMPREGNATION);
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_SEEDER);
                    if (this.getParticipantType() == SexParticipantType.SELF) {
                        characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_PREGNANCY);
                        characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_BROODMOTHER);
                    }
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_VAGINAL_RECEIVING);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_PREGNANCY);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_BROODMOTHER);
                    break;
                case URETHRA:
                    break;
            }
        }
    }
    cummedInList = this.getAreasCummedIn(characterTarget, characterPerformingAction);
    if (cummedInList != null) {
        characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_CUM_ADDICT);
        characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_CUM_STUD);
        for (OrificeType orifice : cummedInList) {
            switch(orifice) {
                case ANUS:
                case ASS:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_ANAL_RECEIVING);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_ANAL_GIVING);
                    break;
                case BREAST:
                case NIPPLE:
                    if (characterPerformingAction.getBreastRawMilkStorageValue() > 0) {
                        characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_LACTATION_SELF);
                        characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_LACTATION_OTHERS);
                    }
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_BREASTS_SELF);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_BREASTS_OTHERS);
                    break;
                case THIGHS:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_STRUTTER);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_LEG_LOVER);
                    break;
                case MOUTH:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_ORAL_RECEIVING);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_ORAL_GIVING);
                    break;
                case VAGINA:
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_VAGINAL_RECEIVING);
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_PREGNANCY);
                    characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_BROODMOTHER);
                    if (this.getParticipantType() == SexParticipantType.SELF) {
                        characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_IMPREGNATION);
                        characterFetishes.get(characterPerformingAction).add(Fetish.FETISH_SEEDER);
                    }
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_VAGINAL_GIVING);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_IMPREGNATION);
                    characterFetishesForPartner.get(characterPerformingAction).add(Fetish.FETISH_SEEDER);
                    break;
                case URETHRA:
                    break;
            }
        }
    }
    if (this.getAssociatedPenetrationType() != null && this.getAssociatedOrificeType() != null && this.getActionType() != SexActionType.PLAYER_STOP_PENETRATION && this.getActionType() != SexActionType.PARTNER_STOP_PENETRATION && this.getParticipantType() != SexParticipantType.MISC) {
        if (characterPerformingActionFetishes) {
            characterFetishes.get(characterPerformingAction).addAll(getFetishesFromPenetrationAndOrificeTypes(characterPerformingAction, this.getAssociatedPenetrationType(), this.getAssociatedOrificeType(), characterPerformingActionFetishes));
        } else {
            characterFetishesForPartner.get(characterPerformingAction).addAll(getFetishesFromPenetrationAndOrificeTypes(characterPerformingAction, this.getAssociatedPenetrationType(), this.getAssociatedOrificeType(), characterPerformingActionFetishes));
        }
    }
    characterFetishes.get(characterPerformingAction).removeIf(f -> !characterTarget.hasVagina() && (f == Fetish.FETISH_VAGINAL_GIVING || f == Fetish.FETISH_IMPREGNATION || f == Fetish.FETISH_SEEDER));
    characterFetishesForPartner.get(characterPerformingAction).removeIf(f -> !characterTarget.hasVagina() && (f == Fetish.FETISH_VAGINAL_GIVING || f == Fetish.FETISH_IMPREGNATION || f == Fetish.FETISH_SEEDER));
    if (characterPerformingActionFetishes) {
        return new ArrayList<>(characterFetishes.get(characterPerformingAction));
    } else {
        return new ArrayList<>(characterFetishesForPartner.get(characterPerformingAction));
    }
}
Also used : CoverableArea(com.lilithsthrone.game.character.body.CoverableArea) OrificeType(com.lilithsthrone.game.sex.OrificeType) ArrayList(java.util.ArrayList) GameCharacter(com.lilithsthrone.game.character.GameCharacter)

Example 9 with GameCharacter

use of com.lilithsthrone.game.character.GameCharacter in project liliths-throne-public by Innoxia.

the class SexAction method getFetishesFromPenetrationAndOrificeTypes.

protected List<Fetish> getFetishesFromPenetrationAndOrificeTypes(GameCharacter characterPerformingAction, PenetrationType penetrationBeingUsed, OrificeType orificeBeingUsed, boolean characterPerformingActionFetishes) {
    GameCharacter characterTarget = Sex.getTargetedPartner(characterPerformingAction);
    List<Fetish> associatedFetishes = new ArrayList<>();
    List<Fetish> associatedFetishesPartner = new ArrayList<>();
    boolean isCharacterPerformingActionUsingOrificeType = this.getParticipantType().isUsingSelfOrificeType();
    boolean isCharacterPerformingActionUsingPenetrationType = this.getParticipantType().isUsingSelfPenetrationType();
    switch(penetrationBeingUsed) {
        case FINGER:
            if (isCharacterPerformingActionUsingOrificeType) {
                switch(orificeBeingUsed) {
                    case ANUS:
                    case ASS:
                        associatedFetishes.add(Fetish.FETISH_ANAL_RECEIVING);
                        break;
                    case BREAST:
                        associatedFetishes.add(Fetish.FETISH_BREASTS_SELF);
                        break;
                    case MOUTH:
                        associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        break;
                    case NIPPLE:
                        if (characterPerformingAction.getBreastRawMilkStorageValue() > 0) {
                            associatedFetishes.add(Fetish.FETISH_LACTATION_SELF);
                        }
                        associatedFetishes.add(Fetish.FETISH_BREASTS_SELF);
                        break;
                    case URETHRA:
                        associatedFetishes.add(Fetish.FETISH_MASTURBATION);
                        break;
                    case VAGINA:
                        associatedFetishes.add(Fetish.FETISH_MASTURBATION);
                        associatedFetishes.add(Fetish.FETISH_VAGINAL_RECEIVING);
                        break;
                    case THIGHS:
                        associatedFetishes.add(Fetish.FETISH_STRUTTER);
                        break;
                }
            }
            if (isCharacterPerformingActionUsingPenetrationType) {
                switch(orificeBeingUsed) {
                    case ANUS:
                    case ASS:
                        associatedFetishes.add(Fetish.FETISH_ANAL_GIVING);
                        break;
                    case BREAST:
                        if (!isCharacterPerformingActionUsingOrificeType) {
                            associatedFetishes.add(Fetish.FETISH_BREASTS_OTHERS);
                        }
                        break;
                    case MOUTH:
                        break;
                    case NIPPLE:
                        if (!isCharacterPerformingActionUsingOrificeType) {
                            if (characterTarget.getBreastRawMilkStorageValue() > 0) {
                                associatedFetishes.add(Fetish.FETISH_LACTATION_OTHERS);
                            }
                            associatedFetishes.add(Fetish.FETISH_BREASTS_OTHERS);
                        }
                        break;
                    case URETHRA:
                        associatedFetishes.add(Fetish.FETISH_MASTURBATION);
                        break;
                    case VAGINA:
                        associatedFetishes.add(Fetish.FETISH_VAGINAL_GIVING);
                        associatedFetishes.add(Fetish.FETISH_MASTURBATION);
                        break;
                    case THIGHS:
                        associatedFetishes.add(Fetish.FETISH_LEG_LOVER);
                        break;
                }
            }
            break;
        case PENIS:
            if (isCharacterPerformingActionUsingOrificeType) {
                switch(orificeBeingUsed) {
                    case ANUS:
                    case ASS:
                        associatedFetishes.add(Fetish.FETISH_ANAL_RECEIVING);
                        break;
                    case BREAST:
                        associatedFetishes.add(Fetish.FETISH_BREASTS_SELF);
                        break;
                    case MOUTH:
                        associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        if (this.getParticipantType() == SexParticipantType.SELF) {
                            associatedFetishes.add(Fetish.FETISH_ORAL_RECEIVING);
                        }
                        break;
                    case NIPPLE:
                        if (characterPerformingAction.getBreastRawMilkStorageValue() > 0) {
                            associatedFetishes.add(Fetish.FETISH_LACTATION_SELF);
                        }
                        associatedFetishes.add(Fetish.FETISH_BREASTS_SELF);
                        break;
                    case URETHRA:
                        break;
                    case VAGINA:
                        associatedFetishes.add(Fetish.FETISH_VAGINAL_RECEIVING);
                        break;
                    case THIGHS:
                        associatedFetishes.add(Fetish.FETISH_STRUTTER);
                        break;
                }
            }
            if (isCharacterPerformingActionUsingPenetrationType) {
                switch(orificeBeingUsed) {
                    case ANUS:
                    case ASS:
                        associatedFetishes.add(Fetish.FETISH_ANAL_GIVING);
                        break;
                    case BREAST:
                        if (!isCharacterPerformingActionUsingOrificeType) {
                            associatedFetishes.add(Fetish.FETISH_BREASTS_OTHERS);
                        }
                        break;
                    case MOUTH:
                        associatedFetishes.add(Fetish.FETISH_ORAL_RECEIVING);
                        break;
                    case NIPPLE:
                        if (!isCharacterPerformingActionUsingOrificeType) {
                            if (characterTarget.getBreastRawMilkStorageValue() > 0) {
                                associatedFetishes.add(Fetish.FETISH_LACTATION_OTHERS);
                            }
                            associatedFetishes.add(Fetish.FETISH_BREASTS_OTHERS);
                        }
                        break;
                    case URETHRA:
                        break;
                    case VAGINA:
                        associatedFetishes.add(Fetish.FETISH_VAGINAL_GIVING);
                        break;
                    case THIGHS:
                        associatedFetishes.add(Fetish.FETISH_LEG_LOVER);
                        break;
                }
            }
            break;
        case TAIL:
            if (isCharacterPerformingActionUsingOrificeType) {
                switch(orificeBeingUsed) {
                    case ANUS:
                    case ASS:
                        associatedFetishes.add(Fetish.FETISH_ANAL_RECEIVING);
                        break;
                    case BREAST:
                        associatedFetishes.add(Fetish.FETISH_BREASTS_SELF);
                        break;
                    case MOUTH:
                        associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        if (this.getParticipantType() == SexParticipantType.SELF) {
                            associatedFetishes.add(Fetish.FETISH_ORAL_RECEIVING);
                        }
                        break;
                    case NIPPLE:
                        if (characterPerformingAction.getBreastRawMilkStorageValue() > 0) {
                            associatedFetishes.add(Fetish.FETISH_LACTATION_SELF);
                        }
                        associatedFetishes.add(Fetish.FETISH_BREASTS_SELF);
                        break;
                    case URETHRA:
                        break;
                    case VAGINA:
                        associatedFetishes.add(Fetish.FETISH_VAGINAL_RECEIVING);
                        break;
                    case THIGHS:
                        associatedFetishes.add(Fetish.FETISH_STRUTTER);
                        break;
                }
            }
            if (isCharacterPerformingActionUsingPenetrationType) {
                switch(orificeBeingUsed) {
                    case ANUS:
                    case ASS:
                        associatedFetishes.add(Fetish.FETISH_ANAL_GIVING);
                        break;
                    case BREAST:
                        if (!isCharacterPerformingActionUsingOrificeType) {
                            associatedFetishes.add(Fetish.FETISH_BREASTS_OTHERS);
                        }
                        break;
                    case MOUTH:
                        associatedFetishes.add(Fetish.FETISH_ORAL_RECEIVING);
                        break;
                    case NIPPLE:
                        if (!isCharacterPerformingActionUsingOrificeType) {
                            if (characterTarget.getBreastRawMilkStorageValue() > 0) {
                                associatedFetishes.add(Fetish.FETISH_LACTATION_OTHERS);
                            }
                            associatedFetishes.add(Fetish.FETISH_BREASTS_OTHERS);
                        }
                        break;
                    case URETHRA:
                        break;
                    case VAGINA:
                        associatedFetishes.add(Fetish.FETISH_VAGINAL_GIVING);
                        break;
                    case THIGHS:
                        associatedFetishes.add(Fetish.FETISH_LEG_LOVER);
                        break;
                }
            }
            break;
        case TENTACLE:
            if (isCharacterPerformingActionUsingOrificeType) {
                switch(orificeBeingUsed) {
                    case ANUS:
                    case ASS:
                        associatedFetishes.add(Fetish.FETISH_ANAL_RECEIVING);
                        break;
                    case BREAST:
                        associatedFetishes.add(Fetish.FETISH_BREASTS_SELF);
                        break;
                    case MOUTH:
                        associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        if (this.getParticipantType() == SexParticipantType.SELF) {
                            associatedFetishes.add(Fetish.FETISH_ORAL_RECEIVING);
                        }
                        break;
                    case NIPPLE:
                        if (characterPerformingAction.getBreastRawMilkStorageValue() > 0) {
                            associatedFetishes.add(Fetish.FETISH_LACTATION_SELF);
                        }
                        associatedFetishes.add(Fetish.FETISH_BREASTS_SELF);
                        break;
                    case URETHRA:
                        break;
                    case VAGINA:
                        associatedFetishes.add(Fetish.FETISH_VAGINAL_RECEIVING);
                        break;
                    case THIGHS:
                        associatedFetishes.add(Fetish.FETISH_STRUTTER);
                        break;
                }
            }
            if (isCharacterPerformingActionUsingPenetrationType) {
                switch(orificeBeingUsed) {
                    case ANUS:
                    case ASS:
                        associatedFetishes.add(Fetish.FETISH_ANAL_GIVING);
                        break;
                    case BREAST:
                        if (!isCharacterPerformingActionUsingOrificeType) {
                            associatedFetishes.add(Fetish.FETISH_BREASTS_OTHERS);
                        }
                        break;
                    case MOUTH:
                        associatedFetishes.add(Fetish.FETISH_ORAL_RECEIVING);
                        break;
                    case NIPPLE:
                        if (!isCharacterPerformingActionUsingOrificeType) {
                            if (characterTarget.getBreastRawMilkStorageValue() > 0) {
                                associatedFetishes.add(Fetish.FETISH_LACTATION_OTHERS);
                            }
                            associatedFetishes.add(Fetish.FETISH_BREASTS_OTHERS);
                        }
                        break;
                    case URETHRA:
                        break;
                    case VAGINA:
                        associatedFetishes.add(Fetish.FETISH_VAGINAL_GIVING);
                        break;
                    case THIGHS:
                        associatedFetishes.add(Fetish.FETISH_LEG_LOVER);
                        break;
                }
            }
            break;
        case TONGUE:
            if (isCharacterPerformingActionUsingOrificeType) {
                switch(orificeBeingUsed) {
                    case ANUS:
                    case ASS:
                        associatedFetishes.add(Fetish.FETISH_ANAL_RECEIVING);
                        associatedFetishes.add(Fetish.FETISH_ORAL_RECEIVING);
                        if (this.getParticipantType() == SexParticipantType.SELF) {
                            associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        }
                        break;
                    case BREAST:
                        associatedFetishes.add(Fetish.FETISH_BREASTS_SELF);
                        associatedFetishes.add(Fetish.FETISH_ORAL_RECEIVING);
                        if (this.getParticipantType() == SexParticipantType.SELF) {
                            associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        }
                        break;
                    case MOUTH:
                        break;
                    case NIPPLE:
                        if (characterPerformingAction.getBreastRawMilkStorageValue() > 0) {
                            associatedFetishes.add(Fetish.FETISH_LACTATION_SELF);
                        }
                        associatedFetishes.add(Fetish.FETISH_BREASTS_SELF);
                        associatedFetishes.add(Fetish.FETISH_ORAL_RECEIVING);
                        if (this.getParticipantType() == SexParticipantType.SELF) {
                            associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        }
                        break;
                    case URETHRA:
                        associatedFetishes.add(Fetish.FETISH_ORAL_RECEIVING);
                        if (this.getParticipantType() == SexParticipantType.SELF) {
                            associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        }
                        break;
                    case VAGINA:
                        associatedFetishes.add(Fetish.FETISH_VAGINAL_RECEIVING);
                        associatedFetishes.add(Fetish.FETISH_ORAL_RECEIVING);
                        if (this.getParticipantType() == SexParticipantType.SELF) {
                            associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        }
                        break;
                    case THIGHS:
                        associatedFetishes.add(Fetish.FETISH_STRUTTER);
                        break;
                }
            }
            if (isCharacterPerformingActionUsingPenetrationType) {
                switch(orificeBeingUsed) {
                    case ANUS:
                    case ASS:
                        associatedFetishes.add(Fetish.FETISH_ANAL_GIVING);
                        associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        break;
                    case BREAST:
                        if (!isCharacterPerformingActionUsingOrificeType) {
                            associatedFetishes.add(Fetish.FETISH_BREASTS_OTHERS);
                        }
                        associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        break;
                    case MOUTH:
                        associatedFetishes.add(Fetish.FETISH_ORAL_RECEIVING);
                        associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        break;
                    case NIPPLE:
                        if (!isCharacterPerformingActionUsingOrificeType) {
                            if (characterTarget.getBreastRawMilkStorageValue() > 0) {
                                associatedFetishes.add(Fetish.FETISH_LACTATION_OTHERS);
                            }
                            associatedFetishes.add(Fetish.FETISH_BREASTS_OTHERS);
                        }
                        associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        break;
                    case URETHRA:
                        associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        break;
                    case VAGINA:
                        associatedFetishes.add(Fetish.FETISH_VAGINAL_GIVING);
                        associatedFetishes.add(Fetish.FETISH_ORAL_GIVING);
                        break;
                    case THIGHS:
                        associatedFetishes.add(Fetish.FETISH_LEG_LOVER);
                        break;
                }
            }
            break;
    }
    if (!associatedFetishes.contains(Fetish.FETISH_MASTURBATION) && this.getParticipantType() == SexParticipantType.SELF) {
        associatedFetishes.add(Fetish.FETISH_MASTURBATION);
    }
    // Add opposite fetishes for partner:
    for (Fetish f : associatedFetishes) {
        switch(f) {
            case FETISH_ANAL_GIVING:
                associatedFetishesPartner.add(Fetish.FETISH_ANAL_RECEIVING);
                break;
            case FETISH_ANAL_RECEIVING:
                associatedFetishesPartner.add(Fetish.FETISH_ANAL_GIVING);
                break;
            case FETISH_BIMBO:
                break;
            case FETISH_BREASTS_OTHERS:
                associatedFetishesPartner.add(Fetish.FETISH_BREASTS_SELF);
                break;
            case FETISH_BREASTS_SELF:
                associatedFetishesPartner.add(Fetish.FETISH_BREASTS_OTHERS);
                break;
            case FETISH_LACTATION_OTHERS:
                associatedFetishesPartner.add(Fetish.FETISH_LACTATION_SELF);
                break;
            case FETISH_LACTATION_SELF:
                associatedFetishesPartner.add(Fetish.FETISH_LACTATION_OTHERS);
                break;
            case FETISH_BREEDER:
                break;
            case FETISH_BROODMOTHER:
                associatedFetishesPartner.add(Fetish.FETISH_SEEDER);
                break;
            case FETISH_CROSS_DRESSER:
                break;
            case FETISH_CUM_ADDICT:
                associatedFetishesPartner.add(Fetish.FETISH_CUM_STUD);
                break;
            case FETISH_CUM_STUD:
                associatedFetishesPartner.add(Fetish.FETISH_CUM_ADDICT);
                break;
            case FETISH_DEFLOWERING:
                break;
            case FETISH_DENIAL:
                associatedFetishesPartner.add(Fetish.FETISH_DENIAL_SELF);
                break;
            case FETISH_DENIAL_SELF:
                associatedFetishesPartner.add(Fetish.FETISH_DENIAL);
                break;
            case FETISH_DOMINANT:
                associatedFetishesPartner.add(Fetish.FETISH_SUBMISSIVE);
                break;
            case FETISH_EXHIBITIONIST:
                break;
            case FETISH_IMPREGNATION:
                associatedFetishesPartner.add(Fetish.FETISH_PREGNANCY);
                break;
            case FETISH_INCEST:
                associatedFetishesPartner.add(Fetish.FETISH_INCEST);
                break;
            case FETISH_LEG_LOVER:
                associatedFetishesPartner.add(Fetish.FETISH_STRUTTER);
                break;
            case FETISH_LUSTY_MAIDEN:
                break;
            case FETISH_MASOCHIST:
                associatedFetishesPartner.add(Fetish.FETISH_SADIST);
                break;
            case FETISH_MASTURBATION:
                associatedFetishesPartner.add(Fetish.FETISH_MASTURBATION);
                break;
            case FETISH_NON_CON_DOM:
                associatedFetishesPartner.add(Fetish.FETISH_NON_CON_SUB);
                break;
            case FETISH_NON_CON_SUB:
                associatedFetishesPartner.add(Fetish.FETISH_NON_CON_DOM);
                break;
            case FETISH_ORAL_GIVING:
                associatedFetishesPartner.add(Fetish.FETISH_ORAL_RECEIVING);
                break;
            case FETISH_ORAL_RECEIVING:
                associatedFetishesPartner.add(Fetish.FETISH_ORAL_GIVING);
                break;
            case FETISH_PREGNANCY:
                associatedFetishesPartner.add(Fetish.FETISH_IMPREGNATION);
                break;
            case FETISH_PURE_VIRGIN:
                break;
            case FETISH_SADIST:
                associatedFetishesPartner.add(Fetish.FETISH_MASOCHIST);
                break;
            case FETISH_SADOMASOCHIST:
                break;
            case FETISH_SEEDER:
                break;
            case FETISH_STRUTTER:
                associatedFetishesPartner.add(Fetish.FETISH_LEG_LOVER);
                break;
            case FETISH_SUBMISSIVE:
                associatedFetishesPartner.add(Fetish.FETISH_DOMINANT);
                break;
            case FETISH_SWITCH:
                break;
            case FETISH_TRANSFORMATION_GIVING:
                associatedFetishesPartner.add(Fetish.FETISH_TRANSFORMATION_RECEIVING);
                break;
            case FETISH_TRANSFORMATION_RECEIVING:
                associatedFetishesPartner.add(Fetish.FETISH_TRANSFORMATION_GIVING);
                break;
            case FETISH_VAGINAL_GIVING:
                associatedFetishesPartner.add(Fetish.FETISH_VAGINAL_RECEIVING);
                break;
            case FETISH_VAGINAL_RECEIVING:
                associatedFetishesPartner.add(Fetish.FETISH_VAGINAL_GIVING);
                break;
            case FETISH_VOYEURIST:
                break;
            case FETISH_KINK_GIVING:
                break;
            case FETISH_KINK_RECEIVING:
                break;
        }
    }
    if (characterPerformingActionFetishes) {
        return associatedFetishes;
    } else {
        return associatedFetishesPartner;
    }
}
Also used : Fetish(com.lilithsthrone.game.character.fetishes.Fetish) ArrayList(java.util.ArrayList) GameCharacter(com.lilithsthrone.game.character.GameCharacter)

Example 10 with GameCharacter

use of com.lilithsthrone.game.character.GameCharacter in project liliths-throne-public by Innoxia.

the class GenericOrgasms method getGenericVaginaOrgasmDescription.

private static String getGenericVaginaOrgasmDescription(GameCharacter characterOrgasming) {
    genericOrgasmSB.setLength(0);
    if (characterOrgasming.isPlayer()) {
        genericOrgasmSB.append("A desperate, shuddering heat suddenly crashes up from your [npc1.pussy+], and you let out a manic squeal as a blinding wave of pure ecstasy washes over you.");
    } else {
        genericOrgasmSB.append("A desperate, shuddering heat suddenly crashes up from [npc1.name]'s [npc1.pussy+], and [npc1.she] lets out a manic squeal as a blinding wave of pure ecstasy washes over [npc1.herHim].");
    }
    GameCharacter characterPenetrating = Sex.getPenetratingCharacterUsingOrifice(characterOrgasming, OrificeType.VAGINA);
    PenetrationType penetration = Sex.getPenetrationTypeInOrifice(characterOrgasming, OrificeType.VAGINA);
    if (characterPenetrating != null) {
        switch(penetration) {
            case FINGER:
                if (characterOrgasming.isPlayer()) {
                    if (characterPenetrating.isPlayer()) {
                        genericOrgasmSB.append(" You curl your fingers up deep inside your [npc1.pussy+], and, while desperately stroking in a 'come-hither' motion," + " you let out a series of high-pitched moans as your vaginal muscles grip and squeeze around your intruding digits.");
                    } else {
                        genericOrgasmSB.append(" [npc2.Name]'s fingers carry on pumping away at your [npc1.pussy+], and you let out a series of high-pitched moans as your vaginal muscles grip and squeeze around the intruding digits.");
                    }
                } else {
                    if (characterPenetrating.isPlayer()) {
                        genericOrgasmSB.append(" [npc1.Name]'s vaginal muscles grip and squeeze around your intruding digits," + " and you continue to stroke and tease [npc1.her] clit, drawing out a series of [npc1.moans+] from between [npc1.her] [npc1.lips+].");
                    } else {
                        genericOrgasmSB.append(" [npc1.Name]'s vaginal muscles grip and squeeze around [npc2.name]'s intruding digits," + " and [npc2.she] continues to stroke and tease [npc1.her] clit, drawing out a series of [npc1.moans+] from between [npc1.her] [npc1.lips+].");
                    }
                }
                break;
            case PENIS:
                if (characterOrgasming.isPlayer()) {
                    if (characterPenetrating.isPlayer()) {
                        genericOrgasmSB.append(" You carry on fucking yourself through your orgasm, letting out a series of high-pitched moans as your vaginal muscles grip and squeeze around your [npc1.cock+].");
                    } else {
                        genericOrgasmSB.append(" [npc2.Name] carries on fucking your [npc1.pussy+] through your orgasm, and you let out a series of high-pitched moans as your vaginal muscles grip and squeeze around [npc2.her] [npc2.penis+].");
                    }
                } else {
                    if (characterPenetrating.isPlayer()) {
                        genericOrgasmSB.append(" You carry on fucking [npc1.name] through [npc1.her] orgasm, causing [npc1.herHim] to let out a series of high-pitched moans as [npc1.her] vaginal muscles grip and squeeze around your [npc2.cock+].");
                    } else {
                        genericOrgasmSB.append(" [npc2.Name] carries on fucking [npc1.name]'s [npc1.pussy+] through [npc1.her] orgasm," + " causing [npc1.herHim] to let out a series of high-pitched moans as [npc1.her] vaginal muscles grip and squeeze around [npc2.her] [npc2.penis+].");
                    }
                }
                break;
            case TAIL:
                if (characterOrgasming.isPlayer()) {
                    if (characterPenetrating.isPlayer()) {
                        genericOrgasmSB.append(" You carry on tail-fucking yourself through your orgasm, letting out a series of high-pitched moans as your vaginal muscles grip and squeeze around the intruding object.");
                    } else {
                        genericOrgasmSB.append(" [npc2.Name] carries on tail-fucking your [npc1.pussy+] through your orgasm, and you let out a series of high-pitched moans as your vaginal muscles grip and squeeze around the intruding object.");
                    }
                } else {
                    if (characterPenetrating.isPlayer()) {
                        genericOrgasmSB.append(" You carry on tail-fucking [npc1.name] through [npc1.her] orgasm," + " causing [npc1.herHim] to let out a series of high-pitched moans as [npc1.her] vaginal muscles grip and squeeze around the intruding object.");
                    } else {
                        genericOrgasmSB.append(" [npc2.Name] carries on tail-fucking [npc1.name]'s [npc1.pussy+] through [npc1.her] orgasm," + " causing [npc1.herHim] to let out a series of high-pitched moans as [npc1.her] vaginal muscles grip and squeeze around the intruding object.");
                    }
                }
                break;
            case TONGUE:
                if (characterOrgasming.isPlayer()) {
                    if (characterPenetrating.isPlayer()) {
                        genericOrgasmSB.append(" You carry on licking and kissing your clit as you orgasm, letting out a series of high-pitched moans as you feel your vaginal muscles quiver and contract at the overwhelming sensation.");
                    } else {
                        genericOrgasmSB.append(" [npc2.Name] carries on licking and kissing at your clit while you orgasm," + " causing you to let out a series of high-pitched moans as you feel your vaginal muscles quiver and contract at the overwhelming sensation.");
                    }
                } else {
                    if (characterPenetrating.isPlayer()) {
                        genericOrgasmSB.append(" You carry on licking and kissing [npc1.name]'s clit as [npc1.she] orgasms," + " causing [npc1.herHim] to let out a series of high-pitched moans as [npc1.her] vaginal muscles quiver and contract at the overwhelming sensation.");
                    } else {
                        genericOrgasmSB.append(" [npc2.Name] carries on licking and kissing at [npc1.name]'s clit while [npc1.she] orgasms," + " causing [npc1.herHim] to let out a series of high-pitched moans as [npc1.her] vaginal muscles quiver and contract at the overwhelming sensation.");
                    }
                }
                break;
            case TENTACLE:
                break;
        }
    } else {
        // No penetration:
        if (characterOrgasming.isPlayer()) {
            genericOrgasmSB.append(" Your [npc1.pussy+] clenches down hard, and the wave of disappointment upon finding itself empty almost overwhelms the pleasure that radiates up through your groin.");
        } else {
            genericOrgasmSB.append(" [npc1.Name]'s [npc1.pussy+] clenches down hard, and the wave of disappointment upon finding itself empty almost overwhelms the pleasure that radiates up through [npc.her] groin.");
        }
    }
    if (characterOrgasming.isVaginaSquirter()) {
        if (characterOrgasming.isPlayer()) {
            genericOrgasmSB.append(" As your inner muscles spasm and quiver with delight, a huge spurt of female ejaculate squirts out from your [npc1.pussy+].");
        } else {
            genericOrgasmSB.append(" As [npc1.name]'s inner muscles spasm and quiver with delight, a huge spurt of female ejaculate squirts out from [npc1.her] [npc1.pussy+].");
        }
    }
    if (characterOrgasming.isPlayer()) {
        genericOrgasmSB.append(" With a deeply-satisfied sigh, your feminine climax starts to fade, and you take a few deep gasps of air as you seek to catch your breath.");
    } else {
        genericOrgasmSB.append(" With a deeply-satisfied sigh, [npc1.name]'s feminine climax starts to fade, and [npc1.she] takes a few deep gasps of air as [npc1.she] seeks to catch [npc1.her] breath.");
    }
    if (characterPenetrating != null) {
        return UtilText.parse(characterOrgasming, characterPenetrating, genericOrgasmSB.toString());
    } else {
        return UtilText.parse(characterOrgasming, genericOrgasmSB.toString());
    }
}
Also used : GameCharacter(com.lilithsthrone.game.character.GameCharacter) PenetrationType(com.lilithsthrone.game.sex.PenetrationType)

Aggregations

GameCharacter (com.lilithsthrone.game.character.GameCharacter)16 ArrayList (java.util.ArrayList)8 OrificeType (com.lilithsthrone.game.sex.OrificeType)4 Fetish (com.lilithsthrone.game.character.fetishes.Fetish)3 NPC (com.lilithsthrone.game.character.npc.NPC)3 TestNPC (com.lilithsthrone.game.character.npc.dominion.TestNPC)3 Response (com.lilithsthrone.game.dialogue.responses.Response)3 InventorySelectedItemEventListener (com.lilithsthrone.controller.eventListeners.InventorySelectedItemEventListener)2 InventoryTooltipEventListener (com.lilithsthrone.controller.eventListeners.InventoryTooltipEventListener)2 TooltipInformationEventListener (com.lilithsthrone.controller.eventListeners.TooltipInformationEventListener)2 Attribute (com.lilithsthrone.game.character.attributes.Attribute)2 CoverableArea (com.lilithsthrone.game.character.body.CoverableArea)2 Perk (com.lilithsthrone.game.character.effects.Perk)2 StatusEffect (com.lilithsthrone.game.character.effects.StatusEffect)2 GenericAndrogynousNPC (com.lilithsthrone.game.character.npc.GenericAndrogynousNPC)2 GenericFemaleNPC (com.lilithsthrone.game.character.npc.GenericFemaleNPC)2 GenericMaleNPC (com.lilithsthrone.game.character.npc.GenericMaleNPC)2 SpecialAttack (com.lilithsthrone.game.combat.SpecialAttack)2 Spell (com.lilithsthrone.game.combat.Spell)2 DialogueNodeOld (com.lilithsthrone.game.dialogue.DialogueNodeOld)2