Program: 171282
Project: 171282
Buggy source:
@Override public void handleEvent(Event event){
  Main.mainController.setTooltipSize(360,180);
  Main.mainController.setTooltipContent("String_Node_Str");
  if (statusEffect != null) {
    int yIncrease=(statusEffect.getModifiersAsStringList(owner).size() > 4 ? statusEffect.getModifiersAsStringList(owner).size() - 4 : 0) + (owner.hasStatusEffect(statusEffect) ? (owner.getStatusEffectDuration(statusEffect) == -1 ? 0 : 2) : 0);
    Main.mainController.setTooltipSize(360,284 + (yIncrease * LINE_HEIGHT));
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + "String_Node_Str" + Util.capitaliseSentence(statusEffect.getName(owner)) + "String_Node_Str");
    tooltipSB.append("String_Node_Str");
    if (!statusEffect.getModifiersAsStringList(owner).isEmpty()) {
      int i=0;
      for (      String s : statusEffect.getModifiersAsStringList(owner)) {
        tooltipSB.append((i != 0 ? "String_Node_Str" : "String_Node_Str") + s);
        i++;
      }
    }
 else {
      tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
    }
    tooltipSB.append("String_Node_Str");
    tooltipSB.append("String_Node_Str" + statusEffect.getSVGString(owner) + "String_Node_Str"+ "String_Node_Str"+ statusEffect.getDescription(owner)+ "String_Node_Str");
    if (owner.hasStatusEffect(statusEffect))     if (owner.getStatusEffectDuration(statusEffect) != -1) {
      if (statusEffect.isCombatEffect()) {
        tooltipSB.append("String_Node_Str" + owner.getStatusEffectDuration(statusEffect) + "String_Node_Str");
      }
 else {
        int timerHeight=(int)((owner.getStatusEffectDuration(statusEffect) / (60 * 6f)) * 100);
        Colour timerColour=Colour.STATUS_EFFECT_TIME_HIGH;
        if (timerHeight > 100) {
          timerHeight=100;
          timerColour=Colour.STATUS_EFFECT_TIME_OVERFLOW;
        }
 else         if (timerHeight < 15) {
          timerColour=Colour.STATUS_EFFECT_TIME_LOW;
        }
 else         if (timerHeight < 50) {
          timerColour=Colour.STATUS_EFFECT_TIME_MEDIUM;
        }
        tooltipSB.append("String_Node_Str" + "String_Node_Str" + timerColour.toWebHexString() + "String_Node_Str"+ (owner.getStatusEffectDuration(statusEffect) / 60)+ "String_Node_Str"+ String.format("String_Node_Str",(owner.getStatusEffectDuration(statusEffect) % 60))+ "String_Node_Str"+ "String_Node_Str");
      }
    }
    tooltipSB.append("String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (perk != null) {
    int yIncrease=(perk.getModifiersAsStringList().size() > 4 ? perk.getModifiersAsStringList().size() - 4 : 0);
    Main.mainController.setTooltipSize(360,324 + (yIncrease * LINE_HEIGHT));
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(perk.getName(owner)) + "String_Node_Str");
    if (perk.isMajor()) {
      tooltipSB.append("String_Node_Str" + Colour.TRAIT.toWebHexString() + "String_Node_Str");
    }
 else {
      tooltipSB.append("String_Node_Str" + Colour.PERK.toWebHexString() + "String_Node_Str");
    }
    tooltipSB.append("String_Node_Str");
    if (!perk.getModifiersAsStringList().isEmpty()) {
      int i=0;
      for (      String s : perk.getModifiersAsStringList()) {
        tooltipSB.append((i != 0 ? "String_Node_Str" : "String_Node_Str") + s);
        i++;
      }
    }
 else     tooltipSB.append("String_Node_Str" + Colour.PERK.toWebHexString() + "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str");
    tooltipSB.append("String_Node_Str");
    tooltipSB.append("String_Node_Str" + perk.getSVGString() + "String_Node_Str");
    tooltipSB.append("String_Node_Str" + perk.getDescription(owner) + "String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (levelUpPerk != null) {
    int yIncrease=(levelUpPerk.getModifiersAsStringList().size() > 4 ? levelUpPerk.getModifiersAsStringList().size() - 4 : 0);
    Main.mainController.setTooltipSize(360,352 + (yIncrease * LINE_HEIGHT));
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(levelUpPerk.getName(owner)) + "String_Node_Str");
    if (levelUpPerk.isMajor()) {
      tooltipSB.append("String_Node_Str" + Colour.TRAIT.toWebHexString() + "String_Node_Str");
    }
 else {
      tooltipSB.append("String_Node_Str" + Colour.PERK.toWebHexString() + "String_Node_Str");
    }
    tooltipSB.append("String_Node_Str");
    if (!levelUpPerk.getModifiersAsStringList().isEmpty()) {
      int i=0;
      for (      String s : levelUpPerk.getModifiersAsStringList()) {
        tooltipSB.append((i != 0 ? "String_Node_Str" : "String_Node_Str") + s);
        i++;
      }
    }
 else {
      tooltipSB.append("String_Node_Str" + Colour.PERK.toWebHexString() + "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str");
    }
    tooltipSB.append("String_Node_Str");
    tooltipSB.append("String_Node_Str" + levelUpPerk.getSVGString() + "String_Node_Str");
    tooltipSB.append("String_Node_Str" + levelUpPerk.getDescription(Main.game.getPlayer()) + "String_Node_Str");
    if (levelUpPerk.isMajor()) {
      if (levelUpPerk.getPerkCategory() == PerkCategory.JOB) {
        tooltipSB.append("String_Node_Str" + Colour.TRAIT.toWebHexString() + "String_Node_Str");
      }
 else {
        if (!owner.hasPerkInTree(perkRow,levelUpPerk)) {
          if (!PerkManager.MANAGER.isPerkAvailable(perkRow,levelUpPerk)) {
            tooltipSB.append("String_Node_Str" + Colour.GENERIC_BAD.toWebHexString() + "String_Node_Str");
          }
 else {
            tooltipSB.append("String_Node_Str" + Colour.GENERIC_MINOR_GOOD.toWebHexString() + "String_Node_Str");
          }
        }
 else {
          if (owner.getTraits().contains(levelUpPerk)) {
            tooltipSB.append("String_Node_Str" + Colour.GENERIC_MINOR_BAD.toWebHexString() + "String_Node_Str");
          }
 else {
            if (owner.getTraits().size() == GameCharacter.MAX_TRAITS) {
              tooltipSB.append("String_Node_Str" + Colour.GENERIC_BAD.toWebHexString() + "String_Node_Str");
            }
 else {
              tooltipSB.append("String_Node_Str" + Colour.TRAIT.toWebHexString() + "String_Node_Str");
            }
          }
        }
      }
    }
 else {
      if (!owner.hasPerkInTree(perkRow,levelUpPerk)) {
        if (!PerkManager.MANAGER.isPerkAvailable(perkRow,levelUpPerk)) {
          tooltipSB.append("String_Node_Str" + Colour.GENERIC_BAD.toWebHexString() + "String_Node_Str");
        }
 else {
          tooltipSB.append("String_Node_Str" + Colour.GENERIC_MINOR_GOOD.toWebHexString() + "String_Node_Str");
        }
      }
 else {
        tooltipSB.append("String_Node_Str" + Colour.PERK.toWebHexString() + "String_Node_Str");
      }
    }
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (desire != null) {
    Main.mainController.setTooltipSize(360,264);
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + desire.getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(desire.getName())+ "String_Node_Str");
    tooltipSB.append("String_Node_Str");
    int i=0;
    for (    String s : desire.getModifiersAsStringList()) {
      tooltipSB.append((i != 0 ? "String_Node_Str" : "String_Node_Str") + s);
      i++;
    }
    tooltipSB.append("String_Node_Str");
    tooltipSB.append("String_Node_Str" + desire.getSVGImage() + "String_Node_Str");
    if (owner.hasFetish(fetish) && desire != FetishDesire.FOUR_LOVE) {
      tooltipSB.append("String_Node_Str" + FetishDesire.FOUR_LOVE.getColour().toWebHexString() + "String_Node_Str"+ FetishDesire.FOUR_LOVE.getName()+ "String_Node_Str"+ "String_Node_Str"+ fetish.getName(owner)+ "String_Node_Str");
      tooltipSB.append("String_Node_Str");
    }
 else {
      tooltipSB.append("String_Node_Str" + fetish.getFetishDesireDescription(owner,desire) + "String_Node_Str");
      if (owner.getBaseFetishDesire(fetish) == desire) {
        tooltipSB.append("String_Node_Str");
      }
 else {
        tooltipSB.append("String_Node_Str" + (FetishDesire.getCostToChange() == 0 ? "String_Node_Str" : "String_Node_Str" + FetishDesire.getCostToChange() + "String_Node_Str"+ (FetishDesire.getCostToChange() > 1 ? "String_Node_Str" : "String_Node_Str")) + "String_Node_Str");
      }
    }
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (fetish != null) {
    if (fetishExperience) {
      Main.mainController.setTooltipSize(420,156);
      tooltipSB.setLength(0);
      tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(fetish.getName(owner)) + "String_Node_Str");
      FetishLevel level=FetishLevel.getFetishLevelFromValue(owner.getFetishExperience(fetish));
      tooltipSB.append("String_Node_Str" + level.getNumeral() + "String_Node_Str"+ level.getColour().toWebHexString()+ "String_Node_Str"+ Util.capitaliseSentence(level.getName())+ "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str"+ owner.getFetishExperience(fetish)+ "String_Node_Str"+ level.getMaximumExperience()+ "String_Node_Str"+ "String_Node_Str");
      tooltipSB.append("String_Node_Str");
      Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
    }
 else {
      int yIncrease=(fetish.getModifiersAsStringList(owner).size() > 4 ? fetish.getModifiersAsStringList(owner).size() - 4 : 0) + fetish.getFetishesForAutomaticUnlock().size();
      Main.mainController.setTooltipSize(360,(fetish.getFetishesForAutomaticUnlock().isEmpty() ? 350 : 360) + (yIncrease * LINE_HEIGHT));
      tooltipSB.setLength(0);
      tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(fetish.getName(owner)) + "String_Node_Str");
      FetishLevel level=FetishLevel.getFetishLevelFromValue(owner.getFetishExperience(fetish));
      tooltipSB.append("String_Node_Str" + level.getNumeral() + "String_Node_Str"+ level.getColour().toWebHexString()+ "String_Node_Str"+ Util.capitaliseSentence(level.getName())+ "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str"+ owner.getFetishExperience(fetish)+ "String_Node_Str"+ level.getMaximumExperience()+ "String_Node_Str"+ "String_Node_Str");
      if (!fetish.getFetishesForAutomaticUnlock().isEmpty()) {
        tooltipSB.append("String_Node_Str");
        for (        Fetish f : fetish.getFetishesForAutomaticUnlock())         tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(f.getName(Main.game.getPlayer())) + "String_Node_Str");
        tooltipSB.append("String_Node_Str");
      }
      tooltipSB.append("String_Node_Str");
      if (!fetish.getModifiersAsStringList(owner).isEmpty()) {
        int i=0;
        for (        String s : fetish.getModifiersAsStringList(owner)) {
          tooltipSB.append((i != 0 ? "String_Node_Str" : "String_Node_Str") + s);
          i++;
        }
      }
 else {
        tooltipSB.append("String_Node_Str" + Colour.FETISH.toWebHexString() + "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str");
      }
      tooltipSB.append("String_Node_Str");
      tooltipSB.append("String_Node_Str" + fetish.getSVGString() + "String_Node_Str");
      tooltipSB.append("String_Node_Str" + fetish.getDescription(owner) + "String_Node_Str");
      if (fetish.getFetishesForAutomaticUnlock().isEmpty()) {
        if (owner.hasBaseFetish(fetish)) {
          tooltipSB.append("String_Node_Str");
        }
 else {
          tooltipSB.append("String_Node_Str" + fetish.getCost() + "String_Node_Str");
        }
      }
      Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
    }
  }
 else   if (specialAttack != null) {
    int yIncrease=(specialAttack.getStatusEffects().size() > 2 ? specialAttack.getStatusEffects().size() - 2 : 0);
    Main.mainController.setTooltipSize(360,324 + (yIncrease * LINE_HEIGHT));
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(specialAttack.getName()) + "String_Node_Str");
    tooltipSB.append("String_Node_Str" + "String_Node_Str" + Colour.SPECIAL_ATTACK.toWebHexString() + "String_Node_Str"+ "String_Node_Str"+ Attack.getMinimumSpecialAttackDamage(owner,null,specialAttack.getDamageType(),specialAttack.getDamage(),specialAttack.getDamageVariance())+ "String_Node_Str"+ Attack.getMaximumSpecialAttackDamage(owner,null,specialAttack.getDamageType(),specialAttack.getDamage(),specialAttack.getDamageVariance())+ "String_Node_Str"+ "String_Node_Str"+ specialAttack.getDamageType().getMultiplierAttribute().getColour().toWebHexString()+ "String_Node_Str"+ specialAttack.getDamageType().getName()+ "String_Node_Str");
    tooltipSB.append("String_Node_Str" + Colour.SPECIAL_ATTACK.toWebHexString() + "String_Node_Str");
    if (!specialAttack.getStatusEffects().isEmpty()) {
      for (      Entry<StatusEffect,Integer> e : specialAttack.getStatusEffects().entrySet())       tooltipSB.append("String_Node_Str" + e.getKey().getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(e.getKey().getName(owner))+ "String_Node_Str"+ e.getValue()+ "String_Node_Str"+ (e.getValue() > 1 ? "String_Node_Str" : "String_Node_Str"));
    }
 else     tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
    tooltipSB.append("String_Node_Str");
    tooltipSB.append("String_Node_Str" + specialAttack.getSVGString() + "String_Node_Str");
    tooltipSB.append("String_Node_Str" + specialAttack.getDescription(owner) + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ (specialAttack.getCooldown())+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ (Main.game.isInCombat() ? (Combat.getCooldown(owner,specialAttack) == 0 ? "String_Node_Str" : "String_Node_Str" + Combat.getCooldown(owner,specialAttack)) : "String_Node_Str")+ "String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (spell != null) {
    int yIncrease=(spell.getStatusEffects().size() > 2 ? spell.getStatusEffects().size() - 2 : 0);
    Main.mainController.setTooltipSize(360,324 + (yIncrease * LINE_HEIGHT));
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(spell.getName()) + "String_Node_Str");
    tooltipSB.append("String_Node_Str" + "String_Node_Str" + Colour.GENERIC_ARCANE.toWebHexString() + "String_Node_Str");
    if (spell.isBeneficial()) {
      tooltipSB.append("String_Node_Str" + Colour.GENERIC_GOOD.toWebHexString() + "String_Node_Str"+ spell.getDamageType().getMultiplierAttribute().getColour().toWebHexString()+ "String_Node_Str"+ spell.getDamageType().getName()+ "String_Node_Str");
    }
 else {
      tooltipSB.append("String_Node_Str" + Attack.getMinimumSpellDamage(owner,null,spell.getDamageType(),spell.getDamage(),spell.getDamageVariance()) + "String_Node_Str"+ Attack.getMaximumSpellDamage(owner,null,spell.getDamageType(),spell.getDamage(),spell.getDamageVariance())+ "String_Node_Str"+ "String_Node_Str"+ spell.getDamageType().getMultiplierAttribute().getColour().toWebHexString()+ "String_Node_Str"+ spell.getDamageType().getName()+ "String_Node_Str");
    }
    tooltipSB.append("String_Node_Str" + Colour.GENERIC_ARCANE.toWebHexString() + "String_Node_Str");
    if (!spell.getStatusEffects().isEmpty()) {
      for (      Entry<StatusEffect,Integer> e : spell.getStatusEffects().entrySet()) {
        tooltipSB.append("String_Node_Str" + e.getKey().getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(e.getKey().getName(owner))+ "String_Node_Str"+ e.getValue()+ "String_Node_Str"+ (e.getValue() > 1 ? "String_Node_Str" : "String_Node_Str"));
      }
    }
 else {
      tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
    }
    tooltipSB.append("String_Node_Str");
    tooltipSB.append("String_Node_Str" + spell.getSVGString() + "String_Node_Str");
    tooltipSB.append("String_Node_Str" + spell.getDescription(owner,spellLevel) + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ Colour.GENERIC_BAD.toWebHexString()+ "String_Node_Str"+ (spell.getModifiedCost(owner))+ "String_Node_Str"+ "String_Node_Str"+ Colour.ATTRIBUTE_MANA.toWebHexString()+ "String_Node_Str"+ "String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (attribute != null) {
    if (attribute == Attribute.MAJOR_PHYSIQUE || attribute == Attribute.MAJOR_ARCANE || attribute == Attribute.MAJOR_CORRUPTION || attribute == Attribute.AROUSAL || attribute == Attribute.LUST) {
      StatusEffect currentAttributeStatusEffect=null;
      int minimumLevelValue=0, maximumLevelValue=0;
      if (attribute == Attribute.MAJOR_PHYSIQUE) {
        currentAttributeStatusEffect=PhysiqueLevel.getPhysiqueLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_PHYSIQUE)).getRelatedStatusEffect();
        minimumLevelValue=PhysiqueLevel.getPhysiqueLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_PHYSIQUE)).getMinimumValue();
        maximumLevelValue=PhysiqueLevel.getPhysiqueLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_PHYSIQUE)).getMaximumValue();
      }
 else       if (attribute == Attribute.MAJOR_ARCANE) {
        currentAttributeStatusEffect=IntelligenceLevel.getIntelligenceLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_ARCANE)).getRelatedStatusEffect();
        minimumLevelValue=IntelligenceLevel.getIntelligenceLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_ARCANE)).getMinimumValue();
        maximumLevelValue=IntelligenceLevel.getIntelligenceLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_ARCANE)).getMaximumValue();
      }
 else       if (attribute == Attribute.MAJOR_CORRUPTION) {
        currentAttributeStatusEffect=CorruptionLevel.getCorruptionLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_CORRUPTION)).getRelatedStatusEffect();
        minimumLevelValue=CorruptionLevel.getCorruptionLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_CORRUPTION)).getMinimumValue();
        maximumLevelValue=CorruptionLevel.getCorruptionLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_CORRUPTION)).getMaximumValue();
      }
 else       if (attribute == Attribute.AROUSAL) {
        currentAttributeStatusEffect=ArousalLevel.getArousalLevelFromValue(owner.getAttributeValue(Attribute.AROUSAL)).getRelatedStatusEffect();
        minimumLevelValue=ArousalLevel.getArousalLevelFromValue(owner.getAttributeValue(Attribute.AROUSAL)).getMinimumValue();
        maximumLevelValue=ArousalLevel.getArousalLevelFromValue(owner.getAttributeValue(Attribute.AROUSAL)).getMaximumValue();
      }
 else       if (attribute == Attribute.LUST) {
        currentAttributeStatusEffect=LustLevel.getLustLevelFromValue(owner.getAttributeValue(Attribute.LUST)).getRelatedStatusEffect();
        minimumLevelValue=LustLevel.getLustLevelFromValue(owner.getAttributeValue(Attribute.LUST)).getMinimumValue();
        maximumLevelValue=LustLevel.getLustLevelFromValue(owner.getAttributeValue(Attribute.LUST)).getMaximumValue();
      }
      int yIncrease=(currentAttributeStatusEffect.getModifiersAsStringList(owner).size() > 4 ? currentAttributeStatusEffect.getModifiersAsStringList(owner).size() - 4 : 0) + (owner.hasStatusEffect(currentAttributeStatusEffect) ? (owner.getStatusEffectDuration(currentAttributeStatusEffect) == -1 ? 0 : 2) : 0);
      Main.mainController.setTooltipSize(360,460 + (yIncrease * LINE_HEIGHT));
      tooltipSB.setLength(0);
      tooltipSB.append("String_Node_Str" + attribute.getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(attribute.getName())+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str"+ (owner.getBaseAttributeValue(attribute) > 0 ? "String_Node_Str" + Colour.GENERIC_EXCELLENT.getShades()[1] + "String_Node_Str" : "String_Node_Str")+ String.format("String_Node_Str",owner.getBaseAttributeValue(attribute))+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str"+ ((owner.getBonusAttributeValue(attribute)) > 0 ? "String_Node_Str" + Colour.GENERIC_GOOD.getShades()[1] + "String_Node_Str" : ((owner.getBonusAttributeValue(attribute)) == 0 ? "String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str" : "String_Node_Str" + Colour.GENERIC_BAD.getShades()[1] + "String_Node_Str"))+ String.format("String_Node_Str",owner.getBonusAttributeValue(attribute))+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ attribute.getColour().toWebHexString()+ "String_Node_Str"+ String.format("String_Node_Str",owner.getAttributeValue(attribute))+ "String_Node_Str"+ "String_Node_Str");
      tooltipSB.append("String_Node_Str" + attribute.getDescription(owner) + "String_Node_Str");
      tooltipSB.append("String_Node_Str" + "String_Node_Str" + currentAttributeStatusEffect.getColour().toWebHexString() + "String_Node_Str"+ currentAttributeStatusEffect.getName(owner)+ "String_Node_Str"+ minimumLevelValue+ "String_Node_Str"+ maximumLevelValue+ "String_Node_Str"+ "String_Node_Str");
      tooltipSB.append("String_Node_Str");
      if (!currentAttributeStatusEffect.getModifiersAsStringList(owner).isEmpty()) {
        int i=0;
        for (        String s : currentAttributeStatusEffect.getModifiersAsStringList(owner)) {
          if (i != 0) {
            tooltipSB.append("String_Node_Str");
          }
          tooltipSB.append(s);
          i++;
        }
      }
 else {
        tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
      }
      tooltipSB.append("String_Node_Str");
      tooltipSB.append("String_Node_Str" + currentAttributeStatusEffect.getSVGString(owner) + "String_Node_Str");
      tooltipSB.append("String_Node_Str" + currentAttributeStatusEffect.getDescription(owner) + "String_Node_Str");
      Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
    }
 else     if (attribute == Attribute.EXPERIENCE) {
      if (owner.isRaceConcealed()) {
        Main.mainController.setTooltipSize(420,64);
        tooltipSB.setLength(0);
        tooltipSB.append("String_Node_Str" + Colour.RACE_UNKNOWN.toWebHexString() + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
      }
 else {
        Main.mainController.setTooltipSize(420,508);
        tooltipSB.setLength(0);
        tooltipSB.append("String_Node_Str" + owner.getRace().getColour().toWebHexString() + "String_Node_Str"+ (owner.getRaceStage().getName() != "String_Node_Str" ? "String_Node_Str" + owner.getRaceStage().getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(owner.getRaceStage().getName())+ "String_Node_Str" : "String_Node_Str")+ "String_Node_Str"+ owner.getRace().getColour().toWebHexString()+ "String_Node_Str"+ (owner.isFeminine() ? Util.capitaliseSentence(owner.getSubspecies().getSingularFemaleName()) : Util.capitaliseSentence(owner.getSubspecies().getSingularMaleName()))+ "String_Node_Str"+ "String_Node_Str");
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getFaceRace(),owner.getFaceType().getBodyCoveringType()));
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getSkinRace(),owner.getSkinType().getBodyCoveringType()));
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getArmRace(),owner.getArmType().getBodyCoveringType()));
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getLegRace(),owner.getLegType().getBodyCoveringType()));
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getHairRace(),owner.getHairType().getBodyCoveringType()));
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getEyeRace(),owner.getEyeType().getBodyCoveringType()));
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getEarRace(),owner.getEarType().getBodyCoveringType()));
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getTongueRace(),owner.getTongueType().getBodyCoveringType()));
        if (owner.getHornType() != HornType.NONE) {
          tooltipSB.append(getBodyPartDiv((owner.hasHorns() ? Util.capitaliseSentence(owner.getHornName()) : "String_Node_Str"),owner.getHornRace(),owner.getHornType().getBodyCoveringType()));
        }
 else {
          tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
        }
        if (owner.getAntennaType() != AntennaType.NONE) {
          tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getAntennaRace(),owner.getAntennaType().getBodyCoveringType()));
        }
 else {
          tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
        }
        if (owner.getWingType() != WingType.NONE) {
          tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getWingRace(),owner.getWingType().getBodyCoveringType()));
        }
 else {
          tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
        }
        if (owner.getTailType() != TailType.NONE) {
          tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getTailRace(),owner.getTailType().getBodyCoveringType()));
        }
 else {
          tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
        }
        if (!owner.isPlayer() && !owner.getPlayerKnowsAreas().contains(CoverableArea.VAGINA)) {
          tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
        }
 else {
          if (owner.getVaginaType() != VaginaType.NONE) {
            tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getVaginaRace(),owner.getVaginaType().getBodyCoveringType()));
          }
 else {
            tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
          }
        }
        if (!owner.isPlayer() && !owner.getPlayerKnowsAreas().contains(CoverableArea.PENIS)) {
          tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
        }
 else {
          if (owner.getPenisType() != PenisType.NONE) {
            tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getPenisRace(),owner.getPenisType().getBodyCoveringType()));
          }
 else {
            tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
          }
        }
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getAssRace(),owner.getAssType().getBodyCoveringType()));
        tooltipSB.append(getBodyPartDiv(owner.hasBreasts() ? "String_Node_Str" : "String_Node_Str",owner.getBreastRace(),owner.getBreastType().getBodyCoveringType()));
      }
      Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
    }
 else {
      Main.mainController.setTooltipSize(360,234);
      Main.mainController.setTooltipContent(UtilText.parse("String_Node_Str" + attribute.getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(attribute.getName())+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str"+ (owner.getBaseAttributeValue(attribute) > 0 ? "String_Node_Str" + Colour.GENERIC_EXCELLENT.getShades()[1] + "String_Node_Str" : "String_Node_Str")+ String.format("String_Node_Str",owner.getBaseAttributeValue(attribute))+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str"+ ((owner.getBonusAttributeValue(attribute)) > 0 ? "String_Node_Str" + Colour.GENERIC_GOOD.getShades()[1] + "String_Node_Str" : ((owner.getBonusAttributeValue(attribute)) == 0 ? "String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str" : "String_Node_Str" + Colour.GENERIC_BAD.getShades()[1] + "String_Node_Str"))+ String.format("String_Node_Str",owner.getBonusAttributeValue(attribute))+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ attribute.getColour().toWebHexString()+ "String_Node_Str"+ String.format("String_Node_Str",owner.getAttributeValue(attribute))+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ attribute.getDescription(owner)+ "String_Node_Str"));
    }
  }
 else   if (extraAttributes) {
    Main.mainController.setTooltipSize(360,520);
    tooltipSB.setLength(0);
    tooltipSB.append(UtilText.parse(owner,"String_Node_Str" + Femininity.valueOf(owner.getFemininityValue()).getColour().toWebHexString() + "String_Node_Str"+ (owner.getName().length() == 0 ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str"+ "String_Node_Str"+ owner.getLevel()+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str"+ owner.getExperience()+ "String_Node_Str"+ (10 * owner.getLevel())+ "String_Node_Str"+ extraAttributeBonus(owner,Attribute.CRITICAL_CHANCE)+ extraAttributeBonus(owner,Attribute.CRITICAL_DAMAGE)+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ extraAttributeTableRow(owner,"String_Node_Str",Attribute.DAMAGE_PHYSICAL,Attribute.RESISTANCE_PHYSICAL)+ extraAttributeTableRow(owner,"String_Node_Str",Attribute.DAMAGE_FIRE,Attribute.RESISTANCE_FIRE)+ extraAttributeTableRow(owner,"String_Node_Str",Attribute.DAMAGE_ICE,Attribute.RESISTANCE_ICE)+ extraAttributeTableRow(owner,"String_Node_Str",Attribute.DAMAGE_POISON,Attribute.RESISTANCE_POISON)+ extraAttributeTableRow(owner,"String_Node_Str",Attribute.DAMAGE_LUST,Attribute.RESISTANCE_LUST)+ extraAttributeTableRow(owner,"String_Node_Str",Attribute.DAMAGE_SPELLS,Attribute.RESISTANCE_SPELLS)+ extraAttributeBonus(owner,Attribute.FERTILITY)+ extraAttributeBonus(owner,Attribute.VIRILITY)+ extraAttributeBonus(owner,Attribute.SPELL_COST_MODIFIER)));
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (weather) {
    Main.mainController.setTooltipSize(360,100);
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + "String_Node_Str" + Main.game.getCurrentWeather().getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(Main.game.getCurrentWeather().getName())+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ ((Main.game.getWeatherTimeRemaining() / 60) + 1)+ "String_Node_Str"+ (((Main.game.getWeatherTimeRemaining() / 60) + 1) > 1 ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (protection) {
    Main.mainController.setTooltipSize(360,100);
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + "String_Node_Str" + (owner.isWearingCondom() ? "String_Node_Str" + Colour.GENERIC_GOOD.toWebHexString() + "String_Node_Str" : "String_Node_Str" + Colour.GENERIC_BAD.toWebHexString() + "String_Node_Str") + "String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (tattoo) {
    Main.mainController.setTooltipSize(360,100);
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (copyInformation) {
    Main.mainController.setTooltipSize(360,170);
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + (Main.game.getCurrentDialogueNode().getLabel() == "String_Node_Str" || Main.game.getCurrentDialogueNode().getLabel() == null ? "String_Node_Str" : Main.game.getCurrentDialogueNode().getLabel()) + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ Colour.ANDROGYNOUS.toWebHexString()+ "String_Node_Str"+ Main.game.getCurrentDialogueNode().getAuthor()+ "String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else {
    if (description == null || description.isEmpty()) {
      Main.mainController.setTooltipSize(360,64);
      Main.mainController.setTooltipContent(UtilText.parse("String_Node_Str" + title + "String_Node_Str"));
    }
 else {
      Main.mainController.setTooltipSize(360,175);
      Main.mainController.setTooltipContent(UtilText.parse("String_Node_Str" + title + "String_Node_Str"+ "String_Node_Str"+ description+ "String_Node_Str"));
    }
  }
  (new Thread(new TooltipUpdateThread())).start();
}

Fixed version (ground truth):
@Override public void handleEvent(Event event){
  Main.mainController.setTooltipSize(360,180);
  Main.mainController.setTooltipContent("String_Node_Str");
  if (statusEffect != null) {
    int yIncrease=(statusEffect.getModifiersAsStringList(owner).size() > 4 ? statusEffect.getModifiersAsStringList(owner).size() - 4 : 0) + (owner.hasStatusEffect(statusEffect) ? (owner.getStatusEffectDuration(statusEffect) == -1 ? 0 : 2) : 0);
    Main.mainController.setTooltipSize(360,284 + (yIncrease * LINE_HEIGHT));
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + "String_Node_Str" + Util.capitaliseSentence(statusEffect.getName(owner)) + "String_Node_Str");
    tooltipSB.append("String_Node_Str");
    if (!statusEffect.getModifiersAsStringList(owner).isEmpty()) {
      int i=0;
      for (      String s : statusEffect.getModifiersAsStringList(owner)) {
        tooltipSB.append((i != 0 ? "String_Node_Str" : "String_Node_Str") + s);
        i++;
      }
    }
 else {
      tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
    }
    tooltipSB.append("String_Node_Str");
    tooltipSB.append("String_Node_Str" + statusEffect.getSVGString(owner) + "String_Node_Str"+ "String_Node_Str"+ statusEffect.getDescription(owner)+ "String_Node_Str");
    if (owner.hasStatusEffect(statusEffect))     if (owner.getStatusEffectDuration(statusEffect) != -1) {
      if (statusEffect.isCombatEffect()) {
        tooltipSB.append("String_Node_Str" + owner.getStatusEffectDuration(statusEffect) + "String_Node_Str");
      }
 else {
        int timerHeight=(int)((owner.getStatusEffectDuration(statusEffect) / (60 * 6f)) * 100);
        Colour timerColour=Colour.STATUS_EFFECT_TIME_HIGH;
        if (timerHeight > 100) {
          timerHeight=100;
          timerColour=Colour.STATUS_EFFECT_TIME_OVERFLOW;
        }
 else         if (timerHeight < 15) {
          timerColour=Colour.STATUS_EFFECT_TIME_LOW;
        }
 else         if (timerHeight < 50) {
          timerColour=Colour.STATUS_EFFECT_TIME_MEDIUM;
        }
        tooltipSB.append("String_Node_Str" + "String_Node_Str" + timerColour.toWebHexString() + "String_Node_Str"+ (owner.getStatusEffectDuration(statusEffect) / 60)+ "String_Node_Str"+ String.format("String_Node_Str",(owner.getStatusEffectDuration(statusEffect) % 60))+ "String_Node_Str"+ "String_Node_Str");
      }
    }
    tooltipSB.append("String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (perk != null) {
    int yIncrease=(perk.getModifiersAsStringList().size() > 4 ? perk.getModifiersAsStringList().size() - 4 : 0);
    Main.mainController.setTooltipSize(360,324 + (yIncrease * LINE_HEIGHT));
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(perk.getName(owner)) + "String_Node_Str");
    if (perk.isMajor()) {
      tooltipSB.append("String_Node_Str" + Colour.TRAIT.toWebHexString() + "String_Node_Str");
    }
 else {
      tooltipSB.append("String_Node_Str" + Colour.PERK.toWebHexString() + "String_Node_Str");
    }
    tooltipSB.append("String_Node_Str");
    if (!perk.getModifiersAsStringList().isEmpty()) {
      int i=0;
      for (      String s : perk.getModifiersAsStringList()) {
        tooltipSB.append((i != 0 ? "String_Node_Str" : "String_Node_Str") + s);
        i++;
      }
    }
 else     tooltipSB.append("String_Node_Str" + Colour.PERK.toWebHexString() + "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str");
    tooltipSB.append("String_Node_Str");
    tooltipSB.append("String_Node_Str" + perk.getSVGString() + "String_Node_Str");
    tooltipSB.append("String_Node_Str" + perk.getDescription(owner) + "String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (levelUpPerk != null) {
    int yIncrease=(levelUpPerk.getModifiersAsStringList().size() > 4 ? levelUpPerk.getModifiersAsStringList().size() - 4 : 0);
    Main.mainController.setTooltipSize(360,352 + (yIncrease * LINE_HEIGHT));
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(levelUpPerk.getName(owner)) + "String_Node_Str");
    if (levelUpPerk.isMajor()) {
      tooltipSB.append("String_Node_Str" + Colour.TRAIT.toWebHexString() + "String_Node_Str");
    }
 else {
      tooltipSB.append("String_Node_Str" + Colour.PERK.toWebHexString() + "String_Node_Str");
    }
    tooltipSB.append("String_Node_Str");
    if (!levelUpPerk.getModifiersAsStringList().isEmpty()) {
      int i=0;
      for (      String s : levelUpPerk.getModifiersAsStringList()) {
        tooltipSB.append((i != 0 ? "String_Node_Str" : "String_Node_Str") + s);
        i++;
      }
    }
 else {
      tooltipSB.append("String_Node_Str" + Colour.PERK.toWebHexString() + "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str");
    }
    tooltipSB.append("String_Node_Str");
    tooltipSB.append("String_Node_Str" + levelUpPerk.getSVGString() + "String_Node_Str");
    tooltipSB.append("String_Node_Str" + levelUpPerk.getDescription(Main.game.getPlayer()) + "String_Node_Str");
    if (levelUpPerk.isMajor()) {
      if (levelUpPerk.getPerkCategory() == PerkCategory.JOB) {
        tooltipSB.append("String_Node_Str" + Colour.TRAIT.toWebHexString() + "String_Node_Str");
      }
 else {
        if (!owner.hasPerkInTree(perkRow,levelUpPerk)) {
          if (!PerkManager.MANAGER.isPerkAvailable(perkRow,levelUpPerk)) {
            tooltipSB.append("String_Node_Str" + Colour.GENERIC_BAD.toWebHexString() + "String_Node_Str");
          }
 else {
            tooltipSB.append("String_Node_Str" + Colour.GENERIC_MINOR_GOOD.toWebHexString() + "String_Node_Str");
          }
        }
 else {
          if (owner.getTraits().contains(levelUpPerk)) {
            tooltipSB.append("String_Node_Str" + Colour.GENERIC_MINOR_BAD.toWebHexString() + "String_Node_Str");
          }
 else {
            if (owner.getTraits().size() == GameCharacter.MAX_TRAITS) {
              tooltipSB.append("String_Node_Str" + Colour.GENERIC_BAD.toWebHexString() + "String_Node_Str");
            }
 else {
              tooltipSB.append("String_Node_Str" + Colour.TRAIT.toWebHexString() + "String_Node_Str");
            }
          }
        }
      }
    }
 else {
      if (!owner.hasPerkInTree(perkRow,levelUpPerk)) {
        if (!PerkManager.MANAGER.isPerkAvailable(perkRow,levelUpPerk)) {
          tooltipSB.append("String_Node_Str" + Colour.GENERIC_BAD.toWebHexString() + "String_Node_Str");
        }
 else {
          tooltipSB.append("String_Node_Str" + Colour.GENERIC_MINOR_GOOD.toWebHexString() + "String_Node_Str");
        }
      }
 else {
        tooltipSB.append("String_Node_Str" + Colour.PERK.toWebHexString() + "String_Node_Str");
      }
    }
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (desire != null) {
    Main.mainController.setTooltipSize(360,264);
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + desire.getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(desire.getName())+ "String_Node_Str");
    tooltipSB.append("String_Node_Str");
    int i=0;
    for (    String s : desire.getModifiersAsStringList()) {
      tooltipSB.append((i != 0 ? "String_Node_Str" : "String_Node_Str") + s);
      i++;
    }
    tooltipSB.append("String_Node_Str");
    tooltipSB.append("String_Node_Str" + desire.getSVGImage() + "String_Node_Str");
    if (owner.hasFetish(fetish) && desire != FetishDesire.FOUR_LOVE) {
      tooltipSB.append("String_Node_Str" + FetishDesire.FOUR_LOVE.getColour().toWebHexString() + "String_Node_Str"+ FetishDesire.FOUR_LOVE.getName()+ "String_Node_Str"+ "String_Node_Str"+ fetish.getName(owner)+ "String_Node_Str");
      tooltipSB.append("String_Node_Str");
    }
 else {
      tooltipSB.append("String_Node_Str" + fetish.getFetishDesireDescription(owner,desire) + "String_Node_Str");
      if (owner.getBaseFetishDesire(fetish) == desire) {
        tooltipSB.append("String_Node_Str");
      }
 else {
        tooltipSB.append("String_Node_Str" + (FetishDesire.getCostToChange() == 0 ? "String_Node_Str" : "String_Node_Str" + FetishDesire.getCostToChange() + "String_Node_Str"+ (FetishDesire.getCostToChange() > 1 ? "String_Node_Str" : "String_Node_Str")) + "String_Node_Str");
      }
    }
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (fetish != null) {
    if (fetishExperience) {
      Main.mainController.setTooltipSize(420,156);
      tooltipSB.setLength(0);
      tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(fetish.getName(owner)) + "String_Node_Str");
      FetishLevel level=FetishLevel.getFetishLevelFromValue(owner.getFetishExperience(fetish));
      tooltipSB.append("String_Node_Str" + level.getNumeral() + "String_Node_Str"+ level.getColour().toWebHexString()+ "String_Node_Str"+ Util.capitaliseSentence(level.getName())+ "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str"+ owner.getFetishExperience(fetish)+ "String_Node_Str"+ level.getMaximumExperience()+ "String_Node_Str"+ "String_Node_Str");
      tooltipSB.append("String_Node_Str");
      Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
    }
 else {
      int yIncrease=(fetish.getModifiersAsStringList(owner).size() > 4 ? fetish.getModifiersAsStringList(owner).size() - 4 : 0) + fetish.getFetishesForAutomaticUnlock().size();
      Main.mainController.setTooltipSize(360,(fetish.getFetishesForAutomaticUnlock().isEmpty() ? 350 : 360) + (yIncrease * LINE_HEIGHT));
      tooltipSB.setLength(0);
      tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(fetish.getName(owner)) + "String_Node_Str");
      FetishLevel level=FetishLevel.getFetishLevelFromValue(owner.getFetishExperience(fetish));
      tooltipSB.append("String_Node_Str" + level.getNumeral() + "String_Node_Str"+ level.getColour().toWebHexString()+ "String_Node_Str"+ Util.capitaliseSentence(level.getName())+ "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str"+ owner.getFetishExperience(fetish)+ "String_Node_Str"+ level.getMaximumExperience()+ "String_Node_Str"+ "String_Node_Str");
      if (!fetish.getFetishesForAutomaticUnlock().isEmpty()) {
        tooltipSB.append("String_Node_Str");
        for (        Fetish f : fetish.getFetishesForAutomaticUnlock())         tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(f.getName(Main.game.getPlayer())) + "String_Node_Str");
        tooltipSB.append("String_Node_Str");
      }
      tooltipSB.append("String_Node_Str");
      if (!fetish.getModifiersAsStringList(owner).isEmpty()) {
        int i=0;
        for (        String s : fetish.getModifiersAsStringList(owner)) {
          tooltipSB.append((i != 0 ? "String_Node_Str" : "String_Node_Str") + s);
          i++;
        }
      }
 else {
        tooltipSB.append("String_Node_Str" + Colour.FETISH.toWebHexString() + "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str");
      }
      tooltipSB.append("String_Node_Str");
      tooltipSB.append("String_Node_Str" + fetish.getSVGString() + "String_Node_Str");
      tooltipSB.append("String_Node_Str" + fetish.getDescription(owner) + "String_Node_Str");
      if (fetish.getFetishesForAutomaticUnlock().isEmpty()) {
        if (owner.hasBaseFetish(fetish)) {
          tooltipSB.append("String_Node_Str");
        }
 else {
          tooltipSB.append("String_Node_Str" + fetish.getCost() + "String_Node_Str");
        }
      }
      Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
    }
  }
 else   if (specialAttack != null) {
    int yIncrease=(specialAttack.getStatusEffects().size() > 2 ? specialAttack.getStatusEffects().size() - 2 : 0);
    Main.mainController.setTooltipSize(360,324 + (yIncrease * LINE_HEIGHT));
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(specialAttack.getName()) + "String_Node_Str");
    tooltipSB.append("String_Node_Str" + "String_Node_Str" + Colour.SPECIAL_ATTACK.toWebHexString() + "String_Node_Str"+ "String_Node_Str"+ Attack.getMinimumSpecialAttackDamage(owner,null,specialAttack.getDamageType(),specialAttack.getDamage(),specialAttack.getDamageVariance())+ "String_Node_Str"+ Attack.getMaximumSpecialAttackDamage(owner,null,specialAttack.getDamageType(),specialAttack.getDamage(),specialAttack.getDamageVariance())+ "String_Node_Str"+ "String_Node_Str"+ specialAttack.getDamageType().getMultiplierAttribute().getColour().toWebHexString()+ "String_Node_Str"+ specialAttack.getDamageType().getName()+ "String_Node_Str");
    tooltipSB.append("String_Node_Str" + Colour.SPECIAL_ATTACK.toWebHexString() + "String_Node_Str");
    if (!specialAttack.getStatusEffects().isEmpty()) {
      for (      Entry<StatusEffect,Integer> e : specialAttack.getStatusEffects().entrySet())       tooltipSB.append("String_Node_Str" + e.getKey().getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(e.getKey().getName(owner))+ "String_Node_Str"+ e.getValue()+ "String_Node_Str"+ (e.getValue() > 1 ? "String_Node_Str" : "String_Node_Str"));
    }
 else     tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
    tooltipSB.append("String_Node_Str");
    tooltipSB.append("String_Node_Str" + specialAttack.getSVGString() + "String_Node_Str");
    tooltipSB.append("String_Node_Str" + specialAttack.getDescription(owner) + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ (specialAttack.getCooldown())+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ (Main.game.isInCombat() ? (Combat.getCooldown(owner,specialAttack) == 0 ? "String_Node_Str" : "String_Node_Str" + Combat.getCooldown(owner,specialAttack)) : "String_Node_Str")+ "String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (spell != null) {
    int yIncrease=(spell.getStatusEffects().size() > 2 ? spell.getStatusEffects().size() - 2 : 0);
    Main.mainController.setTooltipSize(360,324 + (yIncrease * LINE_HEIGHT));
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(spell.getName()) + "String_Node_Str");
    tooltipSB.append("String_Node_Str" + "String_Node_Str" + Colour.GENERIC_ARCANE.toWebHexString() + "String_Node_Str");
    if (spell.isBeneficial()) {
      tooltipSB.append("String_Node_Str" + Colour.GENERIC_GOOD.toWebHexString() + "String_Node_Str"+ spell.getDamageType().getMultiplierAttribute().getColour().toWebHexString()+ "String_Node_Str"+ spell.getDamageType().getName()+ "String_Node_Str");
    }
 else {
      tooltipSB.append("String_Node_Str" + Attack.getMinimumSpellDamage(owner,null,spell.getDamageType(),spell.getDamage(),spell.getDamageVariance()) + "String_Node_Str"+ Attack.getMaximumSpellDamage(owner,null,spell.getDamageType(),spell.getDamage(),spell.getDamageVariance())+ "String_Node_Str"+ "String_Node_Str"+ spell.getDamageType().getMultiplierAttribute().getColour().toWebHexString()+ "String_Node_Str"+ spell.getDamageType().getName()+ "String_Node_Str");
    }
    tooltipSB.append("String_Node_Str" + Colour.GENERIC_ARCANE.toWebHexString() + "String_Node_Str");
    if (!spell.getStatusEffects().isEmpty()) {
      for (      Entry<StatusEffect,Integer> e : spell.getStatusEffects().entrySet()) {
        tooltipSB.append("String_Node_Str" + e.getKey().getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(e.getKey().getName(owner))+ "String_Node_Str"+ e.getValue()+ "String_Node_Str"+ (e.getValue() > 1 ? "String_Node_Str" : "String_Node_Str"));
      }
    }
 else {
      tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
    }
    tooltipSB.append("String_Node_Str");
    tooltipSB.append("String_Node_Str" + spell.getSVGString() + "String_Node_Str");
    tooltipSB.append("String_Node_Str" + spell.getDescription(owner,spellLevel) + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ Colour.GENERIC_BAD.toWebHexString()+ "String_Node_Str"+ (spell.getModifiedCost(owner))+ "String_Node_Str"+ "String_Node_Str"+ Colour.ATTRIBUTE_MANA.toWebHexString()+ "String_Node_Str"+ "String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (attribute != null) {
    if (attribute == Attribute.MAJOR_PHYSIQUE || attribute == Attribute.MAJOR_ARCANE || attribute == Attribute.MAJOR_CORRUPTION || attribute == Attribute.AROUSAL || attribute == Attribute.LUST) {
      StatusEffect currentAttributeStatusEffect=null;
      int minimumLevelValue=0, maximumLevelValue=0;
      if (attribute == Attribute.MAJOR_PHYSIQUE) {
        currentAttributeStatusEffect=PhysiqueLevel.getPhysiqueLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_PHYSIQUE)).getRelatedStatusEffect();
        minimumLevelValue=PhysiqueLevel.getPhysiqueLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_PHYSIQUE)).getMinimumValue();
        maximumLevelValue=PhysiqueLevel.getPhysiqueLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_PHYSIQUE)).getMaximumValue();
      }
 else       if (attribute == Attribute.MAJOR_ARCANE) {
        currentAttributeStatusEffect=IntelligenceLevel.getIntelligenceLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_ARCANE)).getRelatedStatusEffect();
        minimumLevelValue=IntelligenceLevel.getIntelligenceLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_ARCANE)).getMinimumValue();
        maximumLevelValue=IntelligenceLevel.getIntelligenceLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_ARCANE)).getMaximumValue();
      }
 else       if (attribute == Attribute.MAJOR_CORRUPTION) {
        currentAttributeStatusEffect=CorruptionLevel.getCorruptionLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_CORRUPTION)).getRelatedStatusEffect();
        minimumLevelValue=CorruptionLevel.getCorruptionLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_CORRUPTION)).getMinimumValue();
        maximumLevelValue=CorruptionLevel.getCorruptionLevelFromValue(owner.getAttributeValue(Attribute.MAJOR_CORRUPTION)).getMaximumValue();
      }
 else       if (attribute == Attribute.AROUSAL) {
        currentAttributeStatusEffect=ArousalLevel.getArousalLevelFromValue(owner.getAttributeValue(Attribute.AROUSAL)).getRelatedStatusEffect();
        minimumLevelValue=ArousalLevel.getArousalLevelFromValue(owner.getAttributeValue(Attribute.AROUSAL)).getMinimumValue();
        maximumLevelValue=ArousalLevel.getArousalLevelFromValue(owner.getAttributeValue(Attribute.AROUSAL)).getMaximumValue();
      }
 else       if (attribute == Attribute.LUST) {
        currentAttributeStatusEffect=LustLevel.getLustLevelFromValue(owner.getAttributeValue(Attribute.LUST)).getRelatedStatusEffect();
        minimumLevelValue=LustLevel.getLustLevelFromValue(owner.getAttributeValue(Attribute.LUST)).getMinimumValue();
        maximumLevelValue=LustLevel.getLustLevelFromValue(owner.getAttributeValue(Attribute.LUST)).getMaximumValue();
      }
      int yIncrease=(currentAttributeStatusEffect.getModifiersAsStringList(owner).size() > 4 ? currentAttributeStatusEffect.getModifiersAsStringList(owner).size() - 4 : 0) + (owner.hasStatusEffect(currentAttributeStatusEffect) ? (owner.getStatusEffectDuration(currentAttributeStatusEffect) == -1 ? 0 : 2) : 0);
      Main.mainController.setTooltipSize(360,460 + (yIncrease * LINE_HEIGHT));
      tooltipSB.setLength(0);
      tooltipSB.append("String_Node_Str" + attribute.getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(attribute.getName())+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str"+ (owner.getBaseAttributeValue(attribute) > 0 ? "String_Node_Str" + Colour.GENERIC_EXCELLENT.getShades()[1] + "String_Node_Str" : "String_Node_Str")+ String.format("String_Node_Str",owner.getBaseAttributeValue(attribute))+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str"+ ((owner.getBonusAttributeValue(attribute)) > 0 ? "String_Node_Str" + Colour.GENERIC_GOOD.getShades()[1] + "String_Node_Str" : ((owner.getBonusAttributeValue(attribute)) == 0 ? "String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str" : "String_Node_Str" + Colour.GENERIC_BAD.getShades()[1] + "String_Node_Str"))+ String.format("String_Node_Str",owner.getBonusAttributeValue(attribute))+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ attribute.getColour().toWebHexString()+ "String_Node_Str"+ String.format("String_Node_Str",owner.getAttributeValue(attribute))+ "String_Node_Str"+ "String_Node_Str");
      tooltipSB.append("String_Node_Str" + attribute.getDescription(owner) + "String_Node_Str");
      tooltipSB.append("String_Node_Str" + "String_Node_Str" + currentAttributeStatusEffect.getColour().toWebHexString() + "String_Node_Str"+ currentAttributeStatusEffect.getName(owner)+ "String_Node_Str"+ minimumLevelValue+ "String_Node_Str"+ maximumLevelValue+ "String_Node_Str"+ "String_Node_Str");
      tooltipSB.append("String_Node_Str");
      if (!currentAttributeStatusEffect.getModifiersAsStringList(owner).isEmpty()) {
        int i=0;
        for (        String s : currentAttributeStatusEffect.getModifiersAsStringList(owner)) {
          if (i != 0) {
            tooltipSB.append("String_Node_Str");
          }
          tooltipSB.append(s);
          i++;
        }
      }
 else {
        tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
      }
      tooltipSB.append("String_Node_Str");
      tooltipSB.append("String_Node_Str" + currentAttributeStatusEffect.getSVGString(owner) + "String_Node_Str");
      tooltipSB.append("String_Node_Str" + currentAttributeStatusEffect.getDescription(owner) + "String_Node_Str");
      Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
    }
 else     if (attribute == Attribute.EXPERIENCE) {
      if (owner.isRaceConcealed()) {
        Main.mainController.setTooltipSize(420,64);
        tooltipSB.setLength(0);
        tooltipSB.append("String_Node_Str" + Colour.RACE_UNKNOWN.toWebHexString() + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
      }
 else {
        Main.mainController.setTooltipSize(420,508);
        tooltipSB.setLength(0);
        tooltipSB.append("String_Node_Str" + owner.getRace().getColour().toWebHexString() + "String_Node_Str"+ (owner.getRaceStage().getName() != "String_Node_Str" ? "String_Node_Str" + owner.getRaceStage().getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(owner.getRaceStage().getName())+ "String_Node_Str" : "String_Node_Str")+ "String_Node_Str"+ owner.getRace().getColour().toWebHexString()+ "String_Node_Str"+ (owner.isFeminine() ? Util.capitaliseSentence(owner.getSubspecies().getSingularFemaleName()) : Util.capitaliseSentence(owner.getSubspecies().getSingularMaleName()))+ "String_Node_Str"+ "String_Node_Str");
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getFaceRace(),owner.getFaceType().getBodyCoveringType(owner)));
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getSkinRace(),owner.getSkinType().getBodyCoveringType(owner)));
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getArmRace(),owner.getArmType().getBodyCoveringType(owner)));
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getLegRace(),owner.getLegType().getBodyCoveringType(owner)));
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getHairRace(),owner.getHairType().getBodyCoveringType(owner)));
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getEyeRace(),owner.getEyeType().getBodyCoveringType(owner)));
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getEarRace(),owner.getEarType().getBodyCoveringType(owner)));
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getTongueRace(),owner.getTongueType().getBodyCoveringType(owner)));
        if (owner.getHornType() != HornType.NONE) {
          tooltipSB.append(getBodyPartDiv((owner.hasHorns() ? Util.capitaliseSentence(owner.getHornName()) : "String_Node_Str"),owner.getHornRace(),owner.getHornType().getBodyCoveringType(owner)));
        }
 else {
          tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
        }
        if (owner.getAntennaType() != AntennaType.NONE) {
          tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getAntennaRace(),owner.getAntennaType().getBodyCoveringType(owner)));
        }
 else {
          tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
        }
        if (owner.getWingType() != WingType.NONE) {
          tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getWingRace(),owner.getWingType().getBodyCoveringType(owner)));
        }
 else {
          tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
        }
        if (owner.getTailType() != TailType.NONE) {
          tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getTailRace(),owner.getTailType().getBodyCoveringType(owner)));
        }
 else {
          tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
        }
        if (!owner.isPlayer() && !owner.getPlayerKnowsAreas().contains(CoverableArea.VAGINA)) {
          tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
        }
 else {
          if (owner.getVaginaType() != VaginaType.NONE) {
            tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getVaginaRace(),owner.getVaginaType().getBodyCoveringType(owner)));
          }
 else {
            tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
          }
        }
        if (!owner.isPlayer() && !owner.getPlayerKnowsAreas().contains(CoverableArea.PENIS)) {
          tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
        }
 else {
          if (owner.getPenisType() != PenisType.NONE) {
            tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getPenisRace(),owner.getPenisType().getBodyCoveringType(owner)));
          }
 else {
            tooltipSB.append(getEmptyBodyPartDiv("String_Node_Str","String_Node_Str"));
          }
        }
        tooltipSB.append(getBodyPartDiv("String_Node_Str",owner.getAssRace(),owner.getAssType().getBodyCoveringType(owner)));
        tooltipSB.append(getBodyPartDiv(owner.hasBreasts() ? "String_Node_Str" : "String_Node_Str",owner.getBreastRace(),owner.getBreastType().getBodyCoveringType(owner)));
      }
      Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
    }
 else {
      Main.mainController.setTooltipSize(360,234);
      Main.mainController.setTooltipContent(UtilText.parse("String_Node_Str" + attribute.getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(attribute.getName())+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str"+ (owner.getBaseAttributeValue(attribute) > 0 ? "String_Node_Str" + Colour.GENERIC_EXCELLENT.getShades()[1] + "String_Node_Str" : "String_Node_Str")+ String.format("String_Node_Str",owner.getBaseAttributeValue(attribute))+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str"+ ((owner.getBonusAttributeValue(attribute)) > 0 ? "String_Node_Str" + Colour.GENERIC_GOOD.getShades()[1] + "String_Node_Str" : ((owner.getBonusAttributeValue(attribute)) == 0 ? "String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str" : "String_Node_Str" + Colour.GENERIC_BAD.getShades()[1] + "String_Node_Str"))+ String.format("String_Node_Str",owner.getBonusAttributeValue(attribute))+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ attribute.getColour().toWebHexString()+ "String_Node_Str"+ String.format("String_Node_Str",owner.getAttributeValue(attribute))+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ attribute.getDescription(owner)+ "String_Node_Str"));
    }
  }
 else   if (extraAttributes) {
    Main.mainController.setTooltipSize(360,520);
    tooltipSB.setLength(0);
    tooltipSB.append(UtilText.parse(owner,"String_Node_Str" + Femininity.valueOf(owner.getFemininityValue()).getColour().toWebHexString() + "String_Node_Str"+ (owner.getName().length() == 0 ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str"+ "String_Node_Str"+ owner.getLevel()+ "String_Node_Str"+ Colour.TEXT_GREY.toWebHexString()+ "String_Node_Str"+ owner.getExperience()+ "String_Node_Str"+ (10 * owner.getLevel())+ "String_Node_Str"+ extraAttributeBonus(owner,Attribute.CRITICAL_CHANCE)+ extraAttributeBonus(owner,Attribute.CRITICAL_DAMAGE)+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ extraAttributeTableRow(owner,"String_Node_Str",Attribute.DAMAGE_PHYSICAL,Attribute.RESISTANCE_PHYSICAL)+ extraAttributeTableRow(owner,"String_Node_Str",Attribute.DAMAGE_FIRE,Attribute.RESISTANCE_FIRE)+ extraAttributeTableRow(owner,"String_Node_Str",Attribute.DAMAGE_ICE,Attribute.RESISTANCE_ICE)+ extraAttributeTableRow(owner,"String_Node_Str",Attribute.DAMAGE_POISON,Attribute.RESISTANCE_POISON)+ extraAttributeTableRow(owner,"String_Node_Str",Attribute.DAMAGE_LUST,Attribute.RESISTANCE_LUST)+ extraAttributeTableRow(owner,"String_Node_Str",Attribute.DAMAGE_SPELLS,Attribute.RESISTANCE_SPELLS)+ extraAttributeBonus(owner,Attribute.FERTILITY)+ extraAttributeBonus(owner,Attribute.VIRILITY)+ extraAttributeBonus(owner,Attribute.SPELL_COST_MODIFIER)));
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (weather) {
    Main.mainController.setTooltipSize(360,100);
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + "String_Node_Str" + Main.game.getCurrentWeather().getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(Main.game.getCurrentWeather().getName())+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ ((Main.game.getWeatherTimeRemaining() / 60) + 1)+ "String_Node_Str"+ (((Main.game.getWeatherTimeRemaining() / 60) + 1) > 1 ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (protection) {
    Main.mainController.setTooltipSize(360,100);
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + "String_Node_Str" + (owner.isWearingCondom() ? "String_Node_Str" + Colour.GENERIC_GOOD.toWebHexString() + "String_Node_Str" : "String_Node_Str" + Colour.GENERIC_BAD.toWebHexString() + "String_Node_Str") + "String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (tattoo) {
    Main.mainController.setTooltipSize(360,100);
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else   if (copyInformation) {
    Main.mainController.setTooltipSize(360,170);
    tooltipSB.setLength(0);
    tooltipSB.append("String_Node_Str" + (Main.game.getCurrentDialogueNode().getLabel() == "String_Node_Str" || Main.game.getCurrentDialogueNode().getLabel() == null ? "String_Node_Str" : Main.game.getCurrentDialogueNode().getLabel()) + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str"+ Colour.ANDROGYNOUS.toWebHexString()+ "String_Node_Str"+ Main.game.getCurrentDialogueNode().getAuthor()+ "String_Node_Str");
    Main.mainController.setTooltipContent(UtilText.parse(tooltipSB.toString()));
  }
 else {
    if (description == null || description.isEmpty()) {
      Main.mainController.setTooltipSize(360,64);
      Main.mainController.setTooltipContent(UtilText.parse("String_Node_Str" + title + "String_Node_Str"));
    }
 else {
      Main.mainController.setTooltipSize(360,175);
      Main.mainController.setTooltipContent(UtilText.parse("String_Node_Str" + title + "String_Node_Str"+ "String_Node_Str"+ description+ "String_Node_Str"));
    }
  }
  (new Thread(new TooltipUpdateThread())).start();
}