From 313c528855999143dad682b82cc45c41e4ea7eea Mon Sep 17 00:00:00 2001
From: Verdant Purple <239105017+VerdantPurple@users.noreply.github.com>
Date: Sat, 20 Jun 2026 10:08:29 -0700
Subject: [PATCH] show stat/level changes from bcz casts
---
.../2025/Blood Cubic Zirconia.ash | 82 ++++++++++++-------
1 file changed, 54 insertions(+), 28 deletions(-)
diff --git a/Source/relay/TourGuide/Items of the Month/2025/Blood Cubic Zirconia.ash b/Source/relay/TourGuide/Items of the Month/2025/Blood Cubic Zirconia.ash
index 956a5061..812a702b 100644
--- a/Source/relay/TourGuide/Items of the Month/2025/Blood Cubic Zirconia.ash
+++ b/Source/relay/TourGuide/Items of the Month/2025/Blood Cubic Zirconia.ash
@@ -1,4 +1,30 @@
//blood cubic zirconia
+Record StatCost {
+ int stats;
+ stat type;
+};
+
+string bczStatChange(StatCost cost) {
+ int substats = my_basestat(cost.type);
+ int mainstats = floor(square_root(substats));
+ int newMainstats = floor(square_root(substats - cost.stats));
+ int newLevel = floor(square_root(newMainstats - 4) + 1);
+
+ buffer statChange;
+ if (newMainstats < mainstats){
+ statChange.append(HTMLGenerateSpanFont("" + newMainstats + "", "crimson"));
+ }
+ if ((my_primesubstat() == cost.type) && (newLevel < my_level())) {
+ statChange.append(", L" + HTMLGenerateSpanFont("" + newLevel + "", "crimson"));
+ }
+
+ if (statChange.length() > 0) {
+ return(", (to " + statChange + ")");
+ } else {
+ return "";
+ }
+}
+
RegisterTaskGenerationFunction("IOTMBloodCubicZirconiaGenerateTasks");
void IOTMBloodCubicZirconiaGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEntry [int] optional_task_entries, ChecklistEntry [int] future_task_entries)
{
@@ -21,19 +47,19 @@ void IOTMBloodCubicZirconiaGenerateTasks(ChecklistEntry [int] task_entries, Chec
5:370, 6:1100, 7:2300, 8:3700, 9:11000,
10:23000, 11:37000, 12:420000, 13:1100000, 14:2300000,
15:3700000};
- int refractCost = bloodCast[min(bczRefracts, 15)];
- int bulletCost = bloodCast[min(bczBullets, 15)];
- int equityCost = bloodCast[min(bczEquitys, 15)];
+ StatCost refractCost = new StatCost(bloodCast[min(bczRefracts, 15)], $stat[submysticality]);
+ StatCost bulletCost = new StatCost(bloodCast[min(bczBullets, 15)], $stat[submoxie]);
+ StatCost equityCost = new StatCost(bloodCast[min(bczEquitys, 15)], $stat[submoxie]);
if (gemstoneInCodpiece(lookupItem("blood cubic zirconia"))) description.listAppend("Currently in Eternity Codpiece");
if (gemstoneEquipped(lookupItem("blood cubic zirconia")))
{
if (bczRefracts < 13) {
- description.listAppend("Next Refract costs " + HTMLGenerateSpanFont(refractCost + "", "red") + " mys");
+ description.listAppend("Next Refract costs " + HTMLGenerateSpanFont(refractCost.stats + "", "red") + " mys" + bczStatChange(refractCost));
}
else if (bczRefracts >= 13) {
- description.listAppend(HTMLGenerateSpanFont("Next Refract costs " + refractCost + " mys. EXPENSIVE!", "red") + "");
+ description.listAppend(HTMLGenerateSpanFont("Next Refract costs " + refractCost.stats + " mys. EXPENSIVE!", "red") + bczStatChange(refractCost));
}
if (lookupItem("monodent of the sea").equipped_amount() == 0)
{
@@ -44,16 +70,16 @@ void IOTMBloodCubicZirconiaGenerateTasks(ChecklistEntry [int] task_entries, Chec
description.listAppend(HTMLGenerateSpanFont("Seadent FLEESH ok!", "blue"));
}
if (bczBullets < 13) {
- description.listAppend("Next Bullet costs " + HTMLGenerateSpanFont(bulletCost + "", "red") + " mox");
+ description.listAppend("Next Bullet costs " + HTMLGenerateSpanFont(bulletCost.stats + "", "red") + " mox" + bczStatChange(bulletCost));
}
else if (bczBullets >= 13) {
- description.listAppend(HTMLGenerateSpanFont("Next Bullet costs " + bulletCost + " mox. EXPENSIVE!", "red") + "");
+ description.listAppend(HTMLGenerateSpanFont("Next Bullet costs " + bulletCost.stats + " mox. EXPENSIVE!", "red") + bczStatChange(bulletCost));
}
if (bczEquitys < 13) {
- description.listAppend("Next Equity costs " + HTMLGenerateSpanFont(equityCost + "", "red") + " mox");
+ description.listAppend("Next Equity costs " + HTMLGenerateSpanFont(equityCost.stats + "", "red") + " mox" + bczStatChange(equityCost));
}
else if (bczEquitys >= 13) {
- description.listAppend(HTMLGenerateSpanFont("Next Equity costs " + equityCost + " mox. EXPENSIVE!", "red") + "");
+ description.listAppend(HTMLGenerateSpanFont("Next Equity costs " + equityCost.stats + " mox. EXPENSIVE!", "red") + bczStatChange(equityCost));
}
// This was originally a supernag but I simply will not let this be -always- on my screen.
task_entries.listAppend(ChecklistEntryMake("__item blood cubic zirconia", url, ChecklistSubentryMake(HTMLGenerateSpanFont("BCZ: Blood Cubic Zirconia skills", "brown"), description), 11).ChecklistEntrySetIDTag("bcz important skills"));
@@ -81,28 +107,28 @@ void IOTMBloodCubicZirconiaGenerateResource(ChecklistEntry [int] resource_entrie
5:370, 6:1100, 7:2300, 8:3700, 9:11000,
10:23000, 11:37000, 12:420000, 13:1100000, 14:2300000,
15:3700000};
- int bathCost = bloodCast[min(bczBaths, 15)];
- int thinnerCost = bloodCast[min(bczThinners, 15)];
- int dialCost = bloodCast[min(bczDials, 15)];
- int pheromoneCost = bloodCast[min(bczPheromones, 15)];
- int tapasCost = bloodCast[min(bczSpinalTapas, 15)];
- int geyserCost = bloodCast[min(bczGeysers, 15)];
- int refractCost = bloodCast[min(bczRefracts, 15)];
- int bulletCost = bloodCast[min(bczBullets, 15)];
- int equityCost = bloodCast[min(bczEquitys, 15)];
+ StatCost bathCost = new StatCost(bloodCast[min(bczBaths, 15)], $stat[submuscle]);
+ StatCost thinnerCost = new StatCost(bloodCast[min(bczThinners, 15)], $stat[submuscle]);
+ StatCost dialCost = new StatCost(bloodCast[min(bczDials, 15)], $stat[submysticality]);
+ StatCost pheromoneCost = new StatCost(bloodCast[min(bczPheromones, 15)], $stat[submoxie]);
+ StatCost tapasCost = new StatCost(bloodCast[min(bczSpinalTapas, 15)], $stat[submysticality]);
+ StatCost geyserCost = new StatCost(bloodCast[min(bczGeysers, 15)], $stat[submuscle]);
+ StatCost refractCost = new StatCost(bloodCast[min(bczRefracts, 15)], $stat[submysticality]);
+ StatCost bulletCost = new StatCost(bloodCast[min(bczBullets, 15)], $stat[submoxie]);
+ StatCost equityCost = new StatCost(bloodCast[min(bczEquitys, 15)], $stat[submoxie]);
if (gemstoneInCodpiece(lookupItem("blood cubic zirconia"))) description.listAppend("Currently in Eternity Codpiece");
- description.listAppend("Next Refract costs " + HTMLGenerateSpanFont(refractCost + "", "red") + " mys");
- description.listAppend("Next Bullet costs " + HTMLGenerateSpanFont(bulletCost + "", "red") + " mox");
- description.listAppend("Next Equity costs " + HTMLGenerateSpanFont(equityCost + "", "red") + " mox");
+ description.listAppend("Next Refract costs " + HTMLGenerateSpanFont(refractCost.stats + "", "red") + " mys" + bczStatChange(refractCost));
+ description.listAppend("Next Bullet costs " + HTMLGenerateSpanFont(bulletCost.stats + "", "red") + " mox" + bczStatChange(bulletCost));
+ description.listAppend("Next Equity costs " + HTMLGenerateSpanFont(equityCost.stats + "", "red") + " mox" + bczStatChange(equityCost));
- description.listAppend("Next Geyser costs " + HTMLGenerateSpanFont(geyserCost + "", "brown") + " mus");
- description.listAppend("Next Bath costs " + HTMLGenerateSpanFont(bathCost + "", "brown") + " mus");
- description.listAppend("Next Dial costs " + HTMLGenerateSpanFont(dialCost + "", "brown") + " mys");
- description.listAppend("Next Thinner costs " + HTMLGenerateSpanFont(thinnerCost + "", "brown") + " mus");
- description.listAppend("Next Tapas costs " + HTMLGenerateSpanFont(tapasCost + "", "brown") + " mys");
- description.listAppend("Next Pheromone costs " + HTMLGenerateSpanFont(pheromoneCost + "", "brown") + " mox");
+ description.listAppend("Next Geyser costs " + HTMLGenerateSpanFont(geyserCost.stats + "", "brown") + " mus" + bczStatChange(geyserCost));
+ description.listAppend("Next Bath costs " + HTMLGenerateSpanFont(bathCost.stats + "", "brown") + " mus" + bczStatChange(bathCost));
+ description.listAppend("Next Dial costs " + HTMLGenerateSpanFont(dialCost.stats + "", "brown") + " mys" + bczStatChange(dialCost));
+ description.listAppend("Next Thinner costs " + HTMLGenerateSpanFont(thinnerCost.stats + "", "brown") + " mus" + bczStatChange(thinnerCost));
+ description.listAppend("Next Tapas costs " + HTMLGenerateSpanFont(tapasCost.stats + "", "brown") + " mys" + bczStatChange(tapasCost));
+ description.listAppend("Next Pheromone costs " + HTMLGenerateSpanFont(pheromoneCost.stats + "", "brown") + " mox" + bczStatChange(pheromoneCost));
resource_entries.listAppend(ChecklistEntryMake("__item blood cubic zirconia", url, ChecklistSubentryMake(HTMLGenerateSpanFont("BCZ: Blood Cubic Zirconia skills", "brown"), description), 11).ChecklistEntrySetIDTag("bcz important skills"));
@@ -120,7 +146,7 @@ void IOTMBloodCubicZirconiaGenerateResource(ChecklistEntry [int] resource_entrie
if (bczBullets > 0) subtitle= "have used "+pluralise(bczBullets,"bullet","bullets")+" today";
bulletDesc.listAppend("Win a fight without taking a turn.");
- bulletDesc.listAppend("Next bullet costs "+bulletCost+" moxie substats");
+ bulletDesc.listAppend("Next bullet costs "+bulletCost.stats+" moxie substats");
if (!gemstoneEquipped(lookupItem("blood cubic zirconia")))
bulletDesc.listAppend(HTMLGenerateSpanFont("Equip the Blood Cubic Zirconia first", "red"));