Program: 171393
Project: 171393
Buggy source:
/** 
 * @param owner
 * @param playerKnowledgeOfThroat
 * @param playerKnowledgeOfBreasts
 * @param playerKnowledgeOfGroin
 * @return
 */
public String getDescription(GameCharacter owner){
}

Fixed version (ground truth):
/** 
 * @param owner
 * @param playerKnowledgeOfThroat
 * @param playerKnowledgeOfBreasts
 * @param playerKnowledgeOfGroin
 * @return
 */
public String getDescription(GameCharacter owner){
  StringBuilder sb=new StringBuilder();
  if (owner.isPlayer()) {
    sb.append("String_Node_Str" + "String_Node_Str" + getGender().getColour().toWebHexString() + "String_Node_Str"+ owner.getAppearsAsGenderDescription()+ "String_Node_Str");
  }
 else {
    if (owner.getPlayerKnowsAreasMap().get(CoverableArea.PENIS) && owner.getPlayerKnowsAreasMap().get(CoverableArea.VAGINA)) {
      sb.append("String_Node_Str" + "String_Node_Str" + getGender().getColour().toWebHexString() + "String_Node_Str"+ owner.getAppearsAsGenderDescription()+ "String_Node_Str");
    }
 else {
      if (Main.game.getPlayer().hasPerk(Perk.OBSERVANT)) {
        sb.append("String_Node_Str" + "String_Node_Str" + getGender().getColour().toWebHexString() + "String_Node_Str"+ owner.getAppearsAsGenderDescription()+ "String_Node_Str");
      }
 else {
        sb.append("String_Node_Str" + "String_Node_Str" + owner.getAppearsAsGenderDescription() + "String_Node_Str");
      }
    }
  }
  sb.append("String_Node_Str");
  if (owner.isPlayer()) {
    sb.append("String_Node_Str" + "String_Node_Str");
  }
 else {
    sb.append("String_Node_Str" + "String_Node_Str");
  }
  if (Femininity.valueOf(femininity) == Femininity.MASCULINE_STRONG) {
    sb.append(UtilText.returnStringAtRandom("String_Node_Str" + Colour.MASCULINE_PLUS.toWebHexString() + "String_Node_Str","String_Node_Str" + Colour.MASCULINE_PLUS.toWebHexString() + "String_Node_Str"));
  }
 else   if (Femininity.valueOf(femininity) == Femininity.MASCULINE) {
    sb.append(UtilText.returnStringAtRandom("String_Node_Str" + Colour.MASCULINE.toWebHexString() + "String_Node_Str","String_Node_Str" + Colour.MASCULINE.toWebHexString() + "String_Node_Str"));
  }
 else   if (Femininity.valueOf(femininity) == Femininity.ANDROGYNOUS) {
    sb.append("String_Node_Str" + Colour.ANDROGYNOUS.toWebHexString() + "String_Node_Str");
  }
 else   if (Femininity.valueOf(femininity) == Femininity.FEMININE) {
    sb.append(UtilText.returnStringAtRandom("String_Node_Str" + Colour.FEMININE.toWebHexString() + "String_Node_Str","String_Node_Str" + Colour.FEMININE.toWebHexString() + "String_Node_Str","String_Node_Str" + Colour.FEMININE.toWebHexString() + "String_Node_Str"));
  }
 else {
    sb.append(UtilText.returnStringAtRandom("String_Node_Str" + Colour.FEMININE_PLUS.toWebHexString() + "String_Node_Str","String_Node_Str" + Colour.FEMININE_PLUS.toWebHexString() + "String_Node_Str","String_Node_Str" + Colour.FEMININE_PLUS.toWebHexString() + "String_Node_Str"));
  }
switch (face.getType()) {
case HUMAN:
    sb.append("String_Node_Str");
  break;
case ANGEL:
sb.append("String_Node_Str");
break;
case DEMON_COMMON:
sb.append("String_Node_Str");
break;
case DOG_MORPH:
sb.append("String_Node_Str");
break;
case LYCAN:
sb.append("String_Node_Str");
break;
case CAT_MORPH:
sb.append("String_Node_Str");
break;
case COW_MORPH:
sb.append("String_Node_Str");
break;
case SQUIRREL_MORPH:
sb.append("String_Node_Str");
break;
case HORSE_MORPH:
sb.append("String_Node_Str");
break;
case SLIME:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case HARPY:
sb.append("String_Node_Str");
break;
}
if (owner.getBlusher().getPrimaryColour() != Colour.COVERING_NONE) {
if (owner.isPlayer()) {
sb.append("String_Node_Str" + owner.getBlusher().getColourDescriptor(true) + "String_Node_Str");
}
 else {
sb.append("String_Node_Str" + owner.getBlusher().getColourDescriptor(true) + "String_Node_Str");
}
}
if (owner.isPlayer() && hair.getRawLengthValue() == 0) {
sb.append("String_Node_Str");
}
 else if (!owner.isPlayer() && hair.getRawLengthValue() == 0) {
sb.append("String_Node_Str");
}
 else {
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
switch (hair.getType()) {
case HUMAN:
sb.append("String_Node_Str");
break;
case DEMON_COMMON:
sb.append("String_Node_Str");
break;
case ANGEL:
sb.append("String_Node_Str");
break;
case DOG_MORPH:
sb.append("String_Node_Str");
break;
case LYCAN:
sb.append("String_Node_Str");
break;
case CAT_MORPH:
sb.append("String_Node_Str");
break;
case COW_MORPH:
sb.append("String_Node_Str");
break;
case SQUIRREL_MORPH:
sb.append("String_Node_Str");
break;
case HORSE_MORPH:
sb.append("String_Node_Str");
break;
case SLIME:
sb.append("String_Node_Str");
break;
case HARPY:
sb.append("String_Node_Str");
break;
}
switch (hair.getStyle()) {
case BRAIDED:
sb.append("String_Node_Str" + (hair.getType().isDefaultPlural() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case CURLY:
sb.append("String_Node_Str" + (hair.getType().isDefaultPlural() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case LOOSE:
sb.append("String_Node_Str" + (hair.getType().isDefaultPlural() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case NONE:
sb.append("String_Node_Str" + (hair.getType().isDefaultPlural() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case PONYTAIL:
sb.append("String_Node_Str" + (hair.getType().isDefaultPlural() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case STRAIGHT:
sb.append("String_Node_Str" + (hair.getType().isDefaultPlural() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case TWIN_TAILS:
sb.append("String_Node_Str" + (hair.getType().isDefaultPlural() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case WAVY:
sb.append("String_Node_Str" + (hair.getType().isDefaultPlural() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case MOHAWK:
sb.append("String_Node_Str" + (hair.getType().isDefaultPlural() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case SIDECUT:
sb.append("String_Node_Str" + (hair.getType().isDefaultPlural() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
}
}
switch (horn.getType()) {
case NONE:
sb.append("String_Node_Str");
break;
case DEMON_COMMON_MALE:
if (owner.isPlayer()) sb.append("String_Node_Str" + Util.capitaliseSentence(horn.getDeterminer(owner)) + "String_Node_Str");
 else sb.append("String_Node_Str" + Util.capitaliseSentence(horn.getDeterminer(owner)) + "String_Node_Str");
break;
case DEMON_COMMON_FEMALE:
if (owner.isPlayer()) sb.append("String_Node_Str" + Util.capitaliseSentence(horn.getDeterminer(owner)) + "String_Node_Str");
 else sb.append("String_Node_Str" + Util.capitaliseSentence(horn.getDeterminer(owner)) + "String_Node_Str");
break;
case BOVINE_MALE:
if (owner.isPlayer()) sb.append("String_Node_Str" + Util.capitaliseSentence(horn.getDeterminer(owner)) + "String_Node_Str");
 else sb.append("String_Node_Str" + Util.capitaliseSentence(horn.getDeterminer(owner)) + "String_Node_Str");
break;
case BOVINE_FEMALE:
if (owner.isPlayer()) sb.append("String_Node_Str" + Util.capitaliseSentence(horn.getDeterminer(owner)) + "String_Node_Str");
 else sb.append("String_Node_Str" + Util.capitaliseSentence(horn.getDeterminer(owner)) + "String_Node_Str");
break;
default :
if (owner.isPlayer()) sb.append("String_Node_Str");
 else sb.append("String_Node_Str");
}
switch (antenna.getType()) {
case NONE:
sb.append("String_Node_Str");
break;
default :
if (owner.isPlayer()) sb.append("String_Node_Str");
 else sb.append("String_Node_Str");
}
if (face.isPiercedNose()) {
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
}
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
switch (eye.getType()) {
case ANGEL:
sb.append("String_Node_Str");
break;
case CAT_MORPH:
sb.append("String_Node_Str");
break;
case COW_MORPH:
sb.append("String_Node_Str");
break;
case DEMON_COMMON:
sb.append("String_Node_Str");
break;
case DOG_MORPH:
sb.append("String_Node_Str");
break;
case HARPY:
sb.append("String_Node_Str");
break;
case HORSE_MORPH:
sb.append("String_Node_Str");
break;
case HUMAN:
sb.append("String_Node_Str");
break;
case LYCAN:
sb.append("String_Node_Str");
break;
case SLIME:
sb.append("String_Node_Str");
break;
case SQUIRREL_MORPH:
sb.append("String_Node_Str");
break;
}
if (owner.isPlayer()) {
if (owner.getEyeIrisCovering().getPattern() == CoveringPattern.EYE_IRISES_HETEROCHROMATIC) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
if (owner.getEyePupilCovering().getPattern() == CoveringPattern.EYE_PUPILS_HETEROCHROMATIC) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
}
 else {
if (owner.getEyeIrisCovering().getPattern() == CoveringPattern.EYE_IRISES_HETEROCHROMATIC) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
if (owner.getEyePupilCovering().getPattern() == CoveringPattern.EYE_PUPILS_HETEROCHROMATIC) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
}
if (owner.getEyeLiner().getPrimaryColour() != Colour.COVERING_NONE) {
if (owner.isPlayer()) {
sb.append("String_Node_Str" + owner.getEyeLiner().getColourDescriptor(true) + "String_Node_Str");
}
 else {
sb.append("String_Node_Str" + owner.getEyeLiner().getColourDescriptor(true) + "String_Node_Str");
}
}
if (owner.getEyeShadow().getPrimaryColour() != Colour.COVERING_NONE) {
if (owner.isPlayer()) {
sb.append("String_Node_Str" + owner.getEyeShadow().getColourDescriptor(true) + "String_Node_Str");
}
 else {
sb.append("String_Node_Str" + owner.getEyeShadow().getColourDescriptor(true) + "String_Node_Str");
}
}
switch (ear.getType()) {
case HUMAN:
if (owner.isPlayer()) sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
 else sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case DEMON_COMMON:
if (owner.isPlayer()) sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
 else sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case DOG_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
 else sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case LYCAN:
if (owner.isPlayer()) sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
 else sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case CAT_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
 else sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case COW_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
 else sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case SQUIRREL_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
 else sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case HORSE_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
 else sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case SLIME:
if (owner.isPlayer()) sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
 else sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str");
break;
case HARPY:
if (owner.isPlayer()) sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str"));
 else sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str"));
break;
default :
if (owner.isPlayer()) {
sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str"));
}
 else {
sb.append("String_Node_Str" + (ear.isPierced() ? "String_Node_Str" : "String_Node_Str"));
}
}
sb.append("String_Node_Str" + "String_Node_Str");
if (Main.game.isFacialHairEnabled()) {
if (owner.isPlayer()) {
switch (owner.getFacialHair()) {
case NONE:
if (!owner.isFeminine()) {
sb.append("String_Node_Str" + owner.getFacialHairType().getName(owner,true) + "String_Node_Str");
}
break;
case MANICURED:
sb.append("String_Node_Str" + owner.getFacialHairType().getFullDescription(owner,true) + "String_Node_Str");
break;
case TRIMMED:
sb.append("String_Node_Str" + owner.getFacialHairType().getFullDescription(owner,true) + "String_Node_Str");
break;
case BUSHY:
sb.append("String_Node_Str" + owner.getFacialHairType().getFullDescription(owner,true) + "String_Node_Str");
break;
}
}
 else {
switch (owner.getFacialHair()) {
case NONE:
if (!owner.isFeminine()) {
sb.append("String_Node_Str" + owner.getFacialHairType().getName(owner,true) + "String_Node_Str");
}
break;
case MANICURED:
sb.append("String_Node_Str" + owner.getFacialHairType().getFullDescription(owner,true) + "String_Node_Str");
break;
case TRIMMED:
sb.append("String_Node_Str" + owner.getFacialHairType().getFullDescription(owner,true) + "String_Node_Str");
break;
case BUSHY:
sb.append("String_Node_Str" + owner.getFacialHairType().getFullDescription(owner,true) + "String_Node_Str");
break;
}
}
}
if (owner.isPlayer()) {
sb.append("String_Node_Str");
if (owner.getLipstick().getPrimaryColour() != Colour.COVERING_NONE) {
sb.append((owner.isPiercedLip() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str" + owner.getLipstick().getColourDescriptor(true)+ "String_Node_Str");
}
 else {
sb.append((owner.isPiercedLip() ? "String_Node_Str" : "String_Node_Str"));
}
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
if (owner.getLipstick().getPrimaryColour() != Colour.COVERING_NONE) {
sb.append((owner.isPiercedLip() ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str" + owner.getLipstick().getColourDescriptor(true)+ "String_Node_Str");
}
 else {
sb.append((owner.isPiercedLip() ? "String_Node_Str" : "String_Node_Str"));
}
sb.append("String_Node_Str");
}
for (OrificeModifier om : OrificeModifier.values()) {
if (owner.hasFaceOrificeModifier(om)) {
if (owner.isPlayer()) {
switch (om) {
case PUFFY:
sb.append("String_Node_Str");
break;
case MUSCLE_CONTROL:
sb.append("String_Node_Str");
break;
case RIBBED:
sb.append("String_Node_Str");
break;
case TENTACLED:
sb.append("String_Node_Str");
break;
}
}
 else {
switch (om) {
case PUFFY:
sb.append("String_Node_Str");
break;
case MUSCLE_CONTROL:
sb.append("String_Node_Str");
break;
case RIBBED:
sb.append("String_Node_Str");
break;
case TENTACLED:
sb.append("String_Node_Str");
break;
}
}
}
}
if (owner.isPlayer()) {
sb.append("String_Node_Str" + (face.getTongue().isPierced() ? "String_Node_Str" : "String_Node_Str"));
}
 else {
sb.append("String_Node_Str" + (face.getTongue().isPierced() ? "String_Node_Str" : "String_Node_Str"));
}
for (TongueModifier tm : TongueModifier.values()) {
if (owner.hasTongueModifier(tm)) {
if (owner.isPlayer()) {
switch (tm) {
case RIBBED:
sb.append("String_Node_Str");
break;
case TENTACLED:
sb.append("String_Node_Str");
break;
case BIFURCATED:
sb.append("String_Node_Str");
break;
}
}
 else {
switch (tm) {
case RIBBED:
sb.append("String_Node_Str");
break;
case TENTACLED:
sb.append("String_Node_Str");
break;
case BIFURCATED:
sb.append("String_Node_Str");
break;
}
}
}
}
if (owner.isPlayer()) {
if (face.getMouth().getOrificeMouth().isVirgin()) {
sb.append("String_Node_Str" + Colour.GENERIC_SEX.toWebHexString() + "String_Node_Str");
}
 else {
switch (face.getMouth().getOrificeMouth().getCapacity().getMaximumSizeComfortableWithLube()) {
case ZERO_MICROSCOPIC:
sb.append("String_Node_Str");
break;
case ONE_TINY:
sb.append("String_Node_Str");
break;
case TWO_AVERAGE:
sb.append("String_Node_Str");
break;
case THREE_LARGE:
sb.append("String_Node_Str");
break;
case FOUR_HUGE:
sb.append("String_Node_Str");
break;
case FIVE_ENORMOUS:
sb.append("String_Node_Str");
break;
case SIX_GIGANTIC:
sb.append("String_Node_Str");
break;
case SEVEN_STALLION:
sb.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str");
break;
default :
break;
}
for (PenetrationType pt : PenetrationType.values()) {
if (Main.game.getPlayer().getVirginityLoss(new SexType(pt,OrificeType.MOUTH_PLAYER)) != null) {
sb.append("String_Node_Str" + Colour.GENERIC_ARCANE.toWebHexString() + "String_Node_Str"+ Main.game.getPlayer().getVirginityLoss(new SexType(pt,OrificeType.MOUTH_PLAYER))+ "String_Node_Str");
}
}
}
}
 else {
if (owner.getPlayerKnowsAreasMap().get(CoverableArea.MOUTH)) {
if (face.getMouth().getOrificeMouth().isVirgin()) {
sb.append("String_Node_Str" + Colour.GENERIC_SEX.toWebHexString() + "String_Node_Str");
}
 else {
switch (face.getMouth().getOrificeMouth().getCapacity().getMaximumSizeComfortableWithLube()) {
case ZERO_MICROSCOPIC:
sb.append("String_Node_Str" + Colour.GENERIC_SEX.toWebHexString() + "String_Node_Str");
break;
case ONE_TINY:
sb.append("String_Node_Str" + Colour.GENERIC_SEX.toWebHexString() + "String_Node_Str");
break;
case TWO_AVERAGE:
sb.append("String_Node_Str" + Colour.GENERIC_SEX.toWebHexString() + "String_Node_Str");
break;
case THREE_LARGE:
sb.append("String_Node_Str" + Colour.GENERIC_SEX.toWebHexString() + "String_Node_Str");
break;
case FOUR_HUGE:
sb.append("String_Node_Str" + Colour.GENERIC_SEX.toWebHexString() + "String_Node_Str");
break;
case FIVE_ENORMOUS:
sb.append("String_Node_Str" + Colour.GENERIC_SEX.toWebHexString() + "String_Node_Str");
break;
case SIX_GIGANTIC:
sb.append("String_Node_Str" + Colour.GENERIC_SEX.toWebHexString() + "String_Node_Str");
break;
case SEVEN_STALLION:
sb.append("String_Node_Str" + Colour.GENERIC_SEX.toWebHexString() + "String_Node_Str"+ "String_Node_Str"+ Colour.GENERIC_EXCELLENT.toWebHexString()+ "String_Node_Str"+ "String_Node_Str"+ Colour.GENERIC_SEX.toWebHexString()+ "String_Node_Str"+ "String_Node_Str");
break;
default :
break;
}
}
}
 else {
sb.append("String_Node_Str" + Colour.GENERIC_SEX.toWebHexString() + "String_Node_Str");
}
}
sb.append("String_Node_Str");
sb.append("String_Node_Str");
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
if (femininity <= Femininity.MASCULINE_STRONG.getMaximumFemininity()) {
sb.append(UtilText.returnStringAtRandom("String_Node_Str" + Colour.MASCULINE_PLUS.toWebHexString() + "String_Node_Str","String_Node_Str" + Colour.MASCULINE_PLUS.toWebHexString() + "String_Node_Str"));
}
 else if (femininity <= Femininity.MASCULINE.getMaximumFemininity()) {
sb.append(UtilText.returnStringAtRandom("String_Node_Str" + Colour.MASCULINE.toWebHexString() + "String_Node_Str","String_Node_Str" + Colour.MASCULINE.toWebHexString() + "String_Node_Str"));
}
 else if (femininity <= Femininity.ANDROGYNOUS.getMaximumFemininity()) {
sb.append(UtilText.returnStringAtRandom("String_Node_Str" + Colour.ANDROGYNOUS.toWebHexString() + "String_Node_Str"));
}
 else if (femininity <= Femininity.FEMININE.getMaximumFemininity()) {
sb.append(UtilText.returnStringAtRandom("String_Node_Str" + Colour.FEMININE.toWebHexString() + "String_Node_Str","String_Node_Str" + Colour.FEMININE.toWebHexString() + "String_Node_Str"));
}
 else {
sb.append(UtilText.returnStringAtRandom("String_Node_Str" + Colour.FEMININE_PLUS.toWebHexString() + "String_Node_Str","String_Node_Str" + Colour.FEMININE_PLUS.toWebHexString() + "String_Node_Str","String_Node_Str" + Colour.FEMININE_PLUS.toWebHexString() + "String_Node_Str"));
}
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
if (owner.isPlayer()) {
sb.append("String_Node_Str" + owner.getBodySize().getColour().toWebHexString() + "String_Node_Str"+ "String_Node_Str"+ owner.getMuscle().getColour().toWebHexString()+ "String_Node_Str"+ "String_Node_Str"+ owner.getBodyShape().toWebHexStringColour()+ "String_Node_Str");
}
 else {
sb.append("String_Node_Str" + BodySize.valueOf(getBodySize()).getColour().toWebHexString() + "String_Node_Str"+ BodySize.valueOf(getBodySize()).getName(true)+ "String_Node_Str"+ "String_Node_Str"+ Muscle.valueOf(getMuscle()).getColour().toWebHexString()+ "String_Node_Str"+ Muscle.valueOf(getMuscle()).getName(false)+ "String_Node_Str"+ "String_Node_Str"+ owner.getBodyShape().toWebHexStringColour()+ "String_Node_Str");
}
if (owner.hasStatusEffect(StatusEffect.PREGNANT_1)) {
if (owner.isPlayer()) sb.append("String_Node_Str" + Colour.GENERIC_ARCANE.toWebHexString() + "String_Node_Str");
 else sb.append("String_Node_Str" + Colour.GENERIC_ARCANE.toWebHexString() + "String_Node_Str");
}
 else if (owner.hasStatusEffect(StatusEffect.PREGNANT_2)) {
if (owner.isPlayer()) sb.append("String_Node_Str" + Colour.GENERIC_ARCANE.toWebHexString() + "String_Node_Str");
 else sb.append("String_Node_Str" + Colour.GENERIC_ARCANE.toWebHexString() + "String_Node_Str");
}
 else if (owner.hasStatusEffect(StatusEffect.PREGNANT_3)) {
if (owner.isPlayer()) sb.append("String_Node_Str" + "String_Node_Str" + Colour.GENERIC_ARCANE.toWebHexString() + "String_Node_Str");
 else sb.append("String_Node_Str" + "String_Node_Str" + Colour.GENERIC_ARCANE.toWebHexString() + "String_Node_Str");
}
sb.append("String_Node_Str");
sb.append("String_Node_Str");
if (owner.isPlayer()) {
if (breast.getRawSizeValue() > 0) {
sb.append("String_Node_Str" + Util.intToString(breast.getRows()) + "String_Node_Str"+ (breast.getRows() == 1 ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str");
switch (breast.getRows()) {
case 1:
sb.append("String_Node_Str");
if (breast.getSize() == CupSize.TRAINING) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case 2:
sb.append("String_Node_Str");
if (breast.getSize() == CupSize.TRAINING) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
if (breast.getSize().getMeasurement() - 1 == 0) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
if (CupSize.getCupSizeFromInt(breast.getSize().getMeasurement() - 1) == CupSize.TRAINING) {
sb.append("String_Node_Str");
}
 else {
String cupSize=CupSize.getCupSizeFromInt(breast.getSize().getMeasurement() - 1).getCupSizeName();
sb.append(UtilText.generateSingularDeterminer(cupSize) + "String_Node_Str" + cupSize+ "String_Node_Str");
}
}
break;
case 3:
sb.append("String_Node_Str");
if (breast.getSize() == CupSize.TRAINING) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
if (breast.getSize().getMeasurement() - 1 == 0) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
if (CupSize.getCupSizeFromInt(breast.getSize().getMeasurement() - 1) == CupSize.TRAINING) {
sb.append("String_Node_Str");
}
 else {
String cupSize=CupSize.getCupSizeFromInt(breast.getSize().getMeasurement() - 1).getCupSizeName();
sb.append(UtilText.generateSingularDeterminer(cupSize) + "String_Node_Str" + cupSize+ "String_Node_Str");
}
if (breast.getSize().getMeasurement() - 2 == 0) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
if (CupSize.getCupSizeFromInt(breast.getSize().getMeasurement() - 2) == CupSize.TRAINING) {
sb.append("String_Node_Str");
}
 else {
String cupSize=CupSize.getCupSizeFromInt(breast.getSize().getMeasurement() - 2).getCupSizeName();
sb.append(UtilText.generateSingularDeterminer(cupSize) + "String_Node_Str" + cupSize+ "String_Node_Str");
}
}
}
break;
default :
break;
}
}
 else {
sb.append("String_Node_Str");
switch (breast.getRows()) {
case 1:
sb.append("String_Node_Str");
break;
case 2:
sb.append("String_Node_Str");
break;
case 3:
sb.append("String_Node_Str");
break;
default :
break;
}
}
}
 else {
if (breast.getRawSizeValue() > 0) {
sb.append("String_Node_Str" + Util.intToString(breast.getRows()) + "String_Node_Str"+ (breast.getRows() == 1 ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str");
switch (breast.getRows()) {
case 1:
sb.append("String_Node_Str");
if (breast.getSize() == CupSize.TRAINING) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case 2:
sb.append("String_Node_Str");
if (breast.getSize() == CupSize.TRAINING) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
if (breast.getSize().getMeasurement() - 1 == 0) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
if (CupSize.getCupSizeFromInt(breast.getSize().getMeasurement() - 1) == CupSize.TRAINING) {
sb.append("String_Node_Str");
}
 else {
String cupSize=CupSize.getCupSizeFromInt(breast.getSize().getMeasurement() - 1).getCupSizeName();
sb.append(UtilText.generateSingularDeterminer(cupSize) + "String_Node_Str" + cupSize+ "String_Node_Str");
}
}
break;
case 3:
sb.append("String_Node_Str");
if (breast.getSize() == CupSize.TRAINING) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
if (breast.getSize().getMeasurement() - 1 == 0) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
if (CupSize.getCupSizeFromInt(breast.getSize().getMeasurement() - 1) == CupSize.TRAINING) {
sb.append("String_Node_Str");
}
 else {
String cupSize=CupSize.getCupSizeFromInt(breast.getSize().getMeasurement() - 1).getCupSizeName();
sb.append(UtilText.generateSingularDeterminer(cupSize) + "String_Node_Str" + cupSize+ "String_Node_Str");
}
if (breast.getSize().getMeasurement() - 2 == 0) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
if (CupSize.getCupSizeFromInt(breast.getSize().getMeasurement() - 2) == CupSize.TRAINING) {
sb.append("String_Node_Str");
}
 else {
String cupSize=CupSize.getCupSizeFromInt(breast.getSize().getMeasurement() - 2).getCupSizeName();
sb.append(UtilText.generateSingularDeterminer(cupSize) + "String_Node_Str" + cupSize+ "String_Node_Str");
}
}
}
break;
default :
break;
}
}
 else {
sb.append("String_Node_Str");
switch (breast.getRows()) {
case 1:
sb.append("String_Node_Str");
break;
case 2:
sb.append("String_Node_Str");
break;
case 3:
sb.append("String_Node_Str");
break;
default :
break;
}
}
}
sb.append("String_Node_Str" + getBreastDescription(owner));
sb.append("String_Node_Str");
sb.append("String_Node_Str");
String armDeterminer="String_Node_Str";
if (arm.getArmRows() == 3) {
armDeterminer="String_Node_Str";
}
 else if (arm.getArmRows() == 2) {
armDeterminer="String_Node_Str";
}
switch (arm.getType()) {
case HUMAN:
if (owner.isPlayer()) sb.append("String_Node_Str" + armDeterminer + "String_Node_Str");
 else sb.append("String_Node_Str" + armDeterminer + "String_Node_Str");
break;
case ANGEL:
if (owner.isPlayer()) sb.append("String_Node_Str" + armDeterminer + "String_Node_Str");
 else sb.append("String_Node_Str" + armDeterminer + "String_Node_Str");
break;
case DEMON_COMMON:
if (owner.isPlayer()) sb.append("String_Node_Str" + armDeterminer + "String_Node_Str");
 else sb.append("String_Node_Str" + armDeterminer + "String_Node_Str");
break;
case DOG_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + armDeterminer + "String_Node_Str"+ "String_Node_Str");
 else sb.append("String_Node_Str" + armDeterminer + "String_Node_Str"+ "String_Node_Str");
break;
case LYCAN:
if (owner.isPlayer()) sb.append("String_Node_Str" + armDeterminer + "String_Node_Str"+ "String_Node_Str");
 else sb.append("String_Node_Str" + armDeterminer + "String_Node_Str"+ "String_Node_Str");
break;
case CAT_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + armDeterminer + "String_Node_Str"+ "String_Node_Str");
 else sb.append("String_Node_Str" + armDeterminer + "String_Node_Str"+ "String_Node_Str");
break;
case COW_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + armDeterminer + "String_Node_Str"+ "String_Node_Str");
 else sb.append("String_Node_Str" + armDeterminer + "String_Node_Str"+ "String_Node_Str");
break;
case SQUIRREL_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + armDeterminer + "String_Node_Str"+ "String_Node_Str");
 else sb.append("String_Node_Str" + armDeterminer + "String_Node_Str"+ "String_Node_Str");
break;
case HORSE_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + armDeterminer + "String_Node_Str"+ "String_Node_Str");
 else sb.append("String_Node_Str" + armDeterminer + "String_Node_Str"+ "String_Node_Str");
break;
case SLIME:
if (owner.isPlayer()) sb.append("String_Node_Str");
 else sb.append("String_Node_Str");
break;
case HARPY:
if (owner.isPlayer()) sb.append("String_Node_Str" + armDeterminer + "String_Node_Str"+ "String_Node_Str");
 else sb.append("String_Node_Str" + armDeterminer + "String_Node_Str"+ "String_Node_Str");
break;
default :
break;
}
if (owner.isPlayer()) {
if (owner.getHandNailPolish().getPrimaryColour() != Colour.COVERING_NONE) {
if (owner.getArmType() == ArmType.HARPY) {
sb.append("String_Node_Str" + owner.getCovering(BodyCoveringType.MAKEUP_NAIL_POLISH_HANDS).getFullDescription(owner,true) + "String_Node_Str");
}
 else {
sb.append("String_Node_Str" + owner.getCovering(BodyCoveringType.MAKEUP_NAIL_POLISH_HANDS).getFullDescription(owner,true) + "String_Node_Str");
}
}
}
 else {
if (owner.getHandNailPolish().getPrimaryColour() != Colour.COVERING_NONE) {
if (owner.getArmType() == ArmType.HARPY) {
sb.append("String_Node_Str" + owner.getCovering(BodyCoveringType.MAKEUP_NAIL_POLISH_HANDS).getFullDescription(owner,true) + "String_Node_Str");
}
 else {
sb.append("String_Node_Str" + owner.getCovering(BodyCoveringType.MAKEUP_NAIL_POLISH_HANDS).getFullDescription(owner,true) + "String_Node_Str");
}
}
}
if (Main.game.isBodyHairEnabled()) {
if (owner.isPlayer()) {
switch (owner.getUnderarmHair()) {
case NONE:
sb.append("String_Node_Str" + owner.getUnderarmHairType().getName(owner) + "String_Node_Str");
break;
case MANICURED:
sb.append("String_Node_Str" + owner.getUnderarmHairType().getFullDescription(owner,true) + "String_Node_Str");
break;
case TRIMMED:
sb.append("String_Node_Str" + owner.getUnderarmHairType().getFullDescription(owner,true) + "String_Node_Str");
break;
case BUSHY:
sb.append("String_Node_Str" + owner.getUnderarmHairType().getFullDescription(owner,true) + "String_Node_Str");
break;
}
}
 else {
switch (owner.getUnderarmHair()) {
case NONE:
sb.append("String_Node_Str" + owner.getUnderarmHairType().getName(owner,true) + "String_Node_Str");
break;
case MANICURED:
sb.append("String_Node_Str" + owner.getUnderarmHairType().getFullDescription(owner,true) + "String_Node_Str");
break;
case TRIMMED:
sb.append("String_Node_Str" + owner.getUnderarmHairType().getFullDescription(owner,true) + "String_Node_Str");
break;
case BUSHY:
sb.append("String_Node_Str" + owner.getUnderarmHairType().getFullDescription(owner,true) + "String_Node_Str");
break;
}
}
}
sb.append("String_Node_Str");
switch (leg.getType()) {
case HUMAN:
if (owner.isPlayer()) sb.append("String_Node_Str");
 else sb.append("String_Node_Str");
break;
case ANGEL:
if (owner.isPlayer()) sb.append("String_Node_Str");
 else sb.append("String_Node_Str");
break;
case DEMON_COMMON:
if (owner.isPlayer()) sb.append("String_Node_Str");
 else sb.append("String_Node_Str");
break;
case DOG_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + "String_Node_Str");
 else sb.append("String_Node_Str" + "String_Node_Str");
break;
case LYCAN:
if (owner.isPlayer()) sb.append("String_Node_Str" + "String_Node_Str");
 else sb.append("String_Node_Str" + "String_Node_Str");
break;
case CAT_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + "String_Node_Str");
 else sb.append("String_Node_Str" + "String_Node_Str");
break;
case SQUIRREL_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + "String_Node_Str");
 else sb.append("String_Node_Str" + "String_Node_Str");
break;
case HORSE_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + "String_Node_Str");
 else sb.append("String_Node_Str" + "String_Node_Str");
break;
case COW_MORPH:
if (owner.isPlayer()) sb.append("String_Node_Str" + "String_Node_Str");
 else sb.append("String_Node_Str" + "String_Node_Str");
break;
case SLIME:
if (owner.isPlayer()) sb.append("String_Node_Str");
 else sb.append("String_Node_Str");
break;
case HARPY:
if (owner.isPlayer()) sb.append("String_Node_Str" + "String_Node_Str");
 else sb.append("String_Node_Str" + "String_Node_Str");
break;
default :
break;
}
if (owner.isPlayer()) {
if (owner.getFootNailPolish().getPrimaryColour() != Colour.COVERING_NONE) {
if (owner.getLegType() == LegType.HARPY) {
sb.append("String_Node_Str" + owner.getCovering(BodyCoveringType.MAKEUP_NAIL_POLISH_FEET).getFullDescription(owner,true) + "String_Node_Str");
}
 else if (owner.getLegType() == LegType.HORSE_MORPH) {
sb.append("String_Node_Str" + owner.getCovering(BodyCoveringType.MAKEUP_NAIL_POLISH_FEET).getFullDescription(owner,true) + "String_Node_Str");
}
 else if (owner.getLegType() == LegType.COW_MORPH) {
sb.append("String_Node_Str" + owner.getCovering(BodyCoveringType.MAKEUP_NAIL_POLISH_FEET).getFullDescription(owner,true) + "String_Node_Str");
}
 else {
sb.append("String_Node_Str" + owner.getCovering(BodyCoveringType.MAKEUP_NAIL_POLISH_FEET).getFullDescription(owner,true) + "String_Node_Str");
}
}
}
 else {
if (owner.getFootNailPolish().getPrimaryColour() != Colour.COVERING_NONE) {
if (owner.getLegType() == LegType.HARPY) {
sb.append("String_Node_Str" + owner.getCovering(BodyCoveringType.MAKEUP_NAIL_POLISH_FEET).getFullDescription(owner,true) + "String_Node_Str");
}
 else if (owner.getLegType() == LegType.HORSE_MORPH) {
sb.append("String_Node_Str" + owner.getCovering(BodyCoveringType.MAKEUP_NAIL_POLISH_FEET).getFullDescription(owner,true) + "String_Node_Str");
}
 else if (owner.getLegType() == LegType.COW_MORPH) {
sb.append("String_Node_Str" + owner.getCovering(BodyCoveringType.MAKEUP_NAIL_POLISH_FEET).getFullDescription(owner,true) + "String_Node_Str");
}
 else {
sb.append("String_Node_Str" + owner.getCovering(BodyCoveringType.MAKEUP_NAIL_POLISH_FEET).getFullDescription(owner,true) + "String_Node_Str");
}
}
}
sb.append("String_Node_Str");
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
if (femininity <= Femininity.MASCULINE_STRONG.getMaximumFemininity()) {
sb.append(UtilText.returnStringAtRandom("String_Node_Str" + Colour.MASCULINE_PLUS.toWebHexString() + "String_Node_Str"));
}
 else if (femininity <= Femininity.MASCULINE.getMaximumFemininity()) {
sb.append(UtilText.returnStringAtRandom("String_Node_Str" + Colour.MASCULINE.toWebHexString() + "String_Node_Str"));
}
 else if (femininity <= Femininity.ANDROGYNOUS.getMaximumFemininity()) {
sb.append("String_Node_Str" + Colour.ANDROGYNOUS.toWebHexString() + "String_Node_Str");
}
 else if (femininity <= Femininity.FEMININE.getMaximumFemininity()) {
sb.append(UtilText.returnStringAtRandom("String_Node_Str" + Colour.FEMININE.toWebHexString() + "String_Node_Str"));
}
 else {
sb.append(UtilText.returnStringAtRandom("String_Node_Str" + Colour.FEMININE_PLUS.toWebHexString() + "String_Node_Str"));
}
sb.append("String_Node_Str");
if (wing.getType() != WingType.NONE || tail.getType() != TailType.NONE) {
sb.append("String_Node_Str");
switch (wing.getType()) {
case DEMON_COMMON:
if (owner.isPlayer()) sb.append("String_Node_Str");
 else sb.append("String_Node_Str");
break;
case ANGEL:
if (owner.isPlayer()) sb.append("String_Node_Str");
 else sb.append("String_Node_Str");
break;
default :
break;
}
if (tail.getType() != TailType.NONE) {
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
}
if (owner.getTailCount() == 1) {
switch (owner.getTailType()) {
case CAT_MORPH:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case DEMON_COMMON:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case DOG_MORPH:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case HARPY:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case HORSE_MORPH:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case COW_MORPH:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case LYCAN:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case SQUIRREL_MORPH:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case NONE:
break;
}
}
 else {
sb.append(Util.intToString(owner.getTailCount()) + "String_Node_Str");
switch (owner.getTailType()) {
case CAT_MORPH:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case DEMON_COMMON:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case DOG_MORPH:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case HARPY:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case HORSE_MORPH:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case COW_MORPH:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case LYCAN:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case SQUIRREL_MORPH:
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
break;
case NONE:
break;
}
}
sb.append("String_Node_Str");
}
sb.append("String_Node_Str");
if (owner.isPlayer()) {
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str");
}
if (owner.getPlayerKnowsAreasMap().get(CoverableArea.ANUS)) {
sb.append("String_Node_Str" + getAssDescription(owner));
sb.append("String_Node_Str");
}
 else {
sb.append("String_Node_Str" + Colour.GENERIC_SEX.toWebHexString() + "String_Node_Str");
sb.append("String_Node_Str");
}
if (owner.getPlayerKnowsAreasMap().get(CoverableArea.VAGINA) && owner.getPlayerKnowsAreasMap().get(CoverableArea.PENIS)) {
if (vagina.getType() == VaginaType.NONE && penis.getType() == PenisType.NONE) {
sb.append("String_Node_Str" + getMoundDescription(owner) + "String_Node_Str");
}
}
if (owner.getPlayerKnowsAreasMap().get(CoverableArea.PENIS)) {
if (penis.getType() != PenisType.NONE) {
sb.append("String_Node_Str" + getPenisDescription(owner) + "String_Node_Str");
}
}
 else {
sb.append("String_Node_Str" + "String_Node_Str" + Colour.GENERIC_SEX.toWebHexString() + "String_Node_Str"+ "String_Node_Str");
}
if (owner.getPlayerKnowsAreasMap().get(CoverableArea.VAGINA)) {
if (vagina.getType() != VaginaType.NONE) {
sb.append("String_Node_Str" + getVaginaDescription(owner) + "String_Node_Str");
}
}
 else {
sb.append("String_Node_Str" + "String_Node_Str" + Colour.GENERIC_SEX.toWebHexString() + "String_Node_Str"+ "String_Node_Str");
}
if (!owner.isPlayer()) {
sb.append(getSexDetails(owner));
sb.append(getPregnancyDetails(owner));
}
return UtilText.parse(owner,sb.toString());
}