Program: 171398
Project: 171398
Buggy source:
private void weaponTooltip(AbstractWeapon absWep){
  int yIncrease=0;
  if (absWep.getAttributeModifiers().size() > absWep.getSpells().size())   yIncrease=absWep.getAttributeModifiers().size();
 else   yIncrease=absWep.getSpells().size() - 1;
  if (Main.game.getDialogueFlags().tradePartner != null)   yIncrease+=2;
  Main.mainController.setTooltipSize(360,336 + (yIncrease * 20));
  tooltipSB.setLength(0);
  tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(absWep.getDisplayName(true)) + "String_Node_Str"+ "String_Node_Str"+ Util.capitaliseSentence(absWep.getDamageType().getName())+ "String_Node_Str"+ (absWep.getWeaponType().getSlot() == InventorySlot.WEAPON_MAIN ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str"+ "String_Node_Str");
  if (equippedToCharacter != null)   tooltipSB.append("String_Node_Str" + Attack.getMinimumDamage(owner,null,Attack.MAIN) + "String_Node_Str"+ Attack.getMaximumDamage(owner,null,Attack.MAIN)+ "String_Node_Str"+ "String_Node_Str"+ absWep.getDamageType().getMultiplierAttribute().getColour().toWebHexString()+ "String_Node_Str"+ Util.capitaliseSentence(absWep.getDamageType().getName())+ "String_Node_Str");
 else   tooltipSB.append("String_Node_Str" + Attack.getMinimumDamage(Main.game.getPlayer(),null,Attack.MAIN) + "String_Node_Str"+ Attack.getMaximumDamage(Main.game.getPlayer(),null,Attack.MAIN)+ "String_Node_Str"+ "String_Node_Str"+ absWep.getDamageType().getMultiplierAttribute().getColour().toWebHexString()+ "String_Node_Str"+ Util.capitaliseSentence(absWep.getDamageType().getName())+ "String_Node_Str");
  tooltipSB.append("String_Node_Str" + "String_Node_Str" + UtilText.parse(absWep.getWeaponType().getDescription()) + "String_Node_Str");
  tooltipSB.append("String_Node_Str");
  if (absWep.getAttributeModifiers().isEmpty())   tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
 else {
    tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(absWep.getCoreEnchantment().getPositiveEnchantment()) + "String_Node_Str");
    for (    Entry<Attribute,Integer> e : absWep.getAttributeModifiers().entrySet())     tooltipSB.append("String_Node_Str" + e.getValue() + "String_Node_Str"+ e.getKey().getColour().toWebHexString()+ "String_Node_Str"+ Util.capitaliseSentence(e.getKey().getAbbreviatedName())+ "String_Node_Str");
  }
  tooltipSB.append("String_Node_Str");
  tooltipSB.append("String_Node_Str");
  if (absWep.getSpells().isEmpty())   tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
 else {
    tooltipSB.append("String_Node_Str");
    for (    Spell s : absWep.getSpells())     tooltipSB.append("String_Node_Str" + s.getDamageType().getMultiplierAttribute().getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(s.getName())+ "String_Node_Str");
  }
  tooltipSB.append("String_Node_Str");
  tooltipSB.append("String_Node_Str" + "String_Node_Str" + com.base.utils.Colour.CURRENCY.toWebHexString() + "String_Node_Str"+ Main.game.getCurrencySymbol()+ "String_Node_Str"+ absWep.getValue()+ "String_Node_Str"+ "String_Node_Str");
  if (Main.game.getDialogueFlags().tradePartner != null) {
    if (owner.isPlayer()) {
      if (Main.game.getDialogueFlags().tradePartner.willBuy(absWep))       tooltipSB.append("String_Node_Str" + Main.game.getDialogueFlags().tradePartner.getName("String_Node_Str") + "String_Node_Str"+ "String_Node_Str"+ com.base.utils.Colour.CURRENCY.toWebHexString()+ "String_Node_Str"+ Main.game.getCurrencySymbol()+ "String_Node_Str"+ ((int)(Main.game.getDialogueFlags().tradePartner.getBuyModifier() * absWep.getValue()))+ "String_Node_Str"+ "String_Node_Str");
 else       tooltipSB.append("String_Node_Str" + "String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str"+ Main.game.getDialogueFlags().tradePartner.getName("String_Node_Str")+ "String_Node_Str"+ "String_Node_Str");
    }
 else {
      tooltipSB.append("String_Node_Str" + Main.game.getDialogueFlags().tradePartner.getName("String_Node_Str") + "String_Node_Str"+ "String_Node_Str"+ com.base.utils.Colour.CURRENCY.toWebHexString()+ "String_Node_Str"+ Main.game.getCurrencySymbol()+ "String_Node_Str"+ ((int)(Main.game.getDialogueFlags().tradePartner.getSellModifier() * absWep.getValue()))+ "String_Node_Str"+ "String_Node_Str");
    }
  }
  Main.mainController.setTooltipContent(tooltipSB.toString());
}

Fixed version (ground truth):
private void weaponTooltip(AbstractWeapon absWep){
  int yIncrease=0;
  if (absWep.getAttributeModifiers().size() > absWep.getSpells().size())   yIncrease=absWep.getAttributeModifiers().size();
 else   yIncrease=absWep.getSpells().size() - 1;
  if (Main.game.getDialogueFlags().tradePartner != null)   yIncrease+=2;
  Main.mainController.setTooltipSize(360,336 + (yIncrease * 20));
  tooltipSB.setLength(0);
  tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(absWep.getDisplayName(true)) + "String_Node_Str"+ "String_Node_Str"+ Util.capitaliseSentence(absWep.getDamageType().getName())+ "String_Node_Str"+ (absWep.getWeaponType().getSlot() == InventorySlot.WEAPON_MAIN ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str"+ "String_Node_Str");
  if (equippedToCharacter != null)   tooltipSB.append("String_Node_Str" + Attack.getMinimumDamage(owner,null,Attack.MAIN) + "String_Node_Str"+ Attack.getMaximumDamage(owner,null,Attack.MAIN)+ "String_Node_Str"+ "String_Node_Str"+ absWep.getDamageType().getMultiplierAttribute().getColour().toWebHexString()+ "String_Node_Str"+ Util.capitaliseSentence(absWep.getDamageType().getName())+ "String_Node_Str");
 else   tooltipSB.append("String_Node_Str" + Attack.getMinimumDamage(Main.game.getPlayer(),null,Attack.MAIN) + "String_Node_Str"+ Attack.getMaximumDamage(Main.game.getPlayer(),null,Attack.MAIN)+ "String_Node_Str"+ "String_Node_Str"+ absWep.getDamageType().getMultiplierAttribute().getColour().toWebHexString()+ "String_Node_Str"+ Util.capitaliseSentence(absWep.getDamageType().getName())+ "String_Node_Str");
  tooltipSB.append("String_Node_Str" + "String_Node_Str" + UtilText.parse(absWep.getWeaponType().getDescription()) + "String_Node_Str");
  tooltipSB.append("String_Node_Str");
  if (absWep.getAttributeModifiers().isEmpty())   tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
 else {
    tooltipSB.append("String_Node_Str" + Util.capitaliseSentence(absWep.getCoreEnchantment().getPositiveEnchantment()) + "String_Node_Str");
    for (    Entry<Attribute,Integer> e : absWep.getAttributeModifiers().entrySet())     tooltipSB.append("String_Node_Str" + e.getValue() + "String_Node_Str"+ e.getKey().getColour().toWebHexString()+ "String_Node_Str"+ Util.capitaliseSentence(e.getKey().getAbbreviatedName())+ "String_Node_Str");
  }
  tooltipSB.append("String_Node_Str");
  tooltipSB.append("String_Node_Str");
  if (absWep.getSpells().isEmpty())   tooltipSB.append("String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str");
 else {
    tooltipSB.append("String_Node_Str");
    for (    Spell s : absWep.getSpells())     tooltipSB.append("String_Node_Str" + s.getDamageType().getMultiplierAttribute().getColour().toWebHexString() + "String_Node_Str"+ Util.capitaliseSentence(s.getName())+ "String_Node_Str");
  }
  tooltipSB.append("String_Node_Str");
  tooltipSB.append("String_Node_Str" + "String_Node_Str" + com.base.utils.Colour.CURRENCY.toWebHexString() + "String_Node_Str"+ Main.game.getCurrencySymbol()+ "String_Node_Str"+ absWep.getValue()+ "String_Node_Str"+ "String_Node_Str");
  if (Main.game.getDialogueFlags().tradePartner != null) {
    if (owner.isPlayer()) {
      if (Main.game.getDialogueFlags().tradePartner.willBuy(absWep))       tooltipSB.append("String_Node_Str" + Main.game.getDialogueFlags().tradePartner.getName("String_Node_Str") + "String_Node_Str"+ "String_Node_Str"+ com.base.utils.Colour.CURRENCY.toWebHexString()+ "String_Node_Str"+ Main.game.getCurrencySymbol()+ "String_Node_Str"+ absWep.getPrice(Main.game.getDialogueFlags().tradePartner.getBuyModifier())+ "String_Node_Str"+ "String_Node_Str");
 else       tooltipSB.append("String_Node_Str" + "String_Node_Str" + Colour.TEXT_GREY.toWebHexString() + "String_Node_Str"+ Main.game.getDialogueFlags().tradePartner.getName("String_Node_Str")+ "String_Node_Str"+ "String_Node_Str");
    }
 else {
      if (InventoryDialogue.isBuyback()) {
        tooltipSB.append("String_Node_Str" + Main.game.getDialogueFlags().tradePartner.getName("String_Node_Str") + "String_Node_Str"+ "String_Node_Str"+ com.base.utils.Colour.CURRENCY.toWebHexString()+ "String_Node_Str"+ Main.game.getCurrencySymbol()+ "String_Node_Str"+ getBuybackPriceFor(absWep)+ "String_Node_Str"+ "String_Node_Str");
      }
 else {
        tooltipSB.append("String_Node_Str" + Main.game.getDialogueFlags().tradePartner.getName("String_Node_Str") + "String_Node_Str"+ "String_Node_Str"+ com.base.utils.Colour.CURRENCY.toWebHexString()+ "String_Node_Str"+ Main.game.getCurrencySymbol()+ "String_Node_Str"+ absWep.getPrice(Main.game.getDialogueFlags().tradePartner.getSellModifier())+ "String_Node_Str"+ "String_Node_Str");
      }
    }
  }
  Main.mainController.setTooltipContent(tooltipSB.toString());
}