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 347f105c..c86fadde 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 @@ -26,6 +26,14 @@ void IOTMBloodCubicZirconiaGenerateTasks(ChecklistEntry [int] task_entries, Chec else if (bczRefracts >= 13) { description.listAppend(HTMLGenerateSpanFont("Next Refract costs " + refractCost + " mys. EXPENSIVE!", "red") + ""); } + if (lookupItem("monodent of the sea").equipped_amount() == 0) + { + description.listAppend(HTMLGenerateSpanFont("Seadent not equipped", "red")); + } + else if (lookupItem("monodent of the sea").equipped_amount() > 0) + { + description.listAppend(HTMLGenerateSpanFont("Seadent FLEESH ok!", "blue")); + } if (bczBullets < 13) { description.listAppend("Next Bullet costs " + HTMLGenerateSpanFont(bulletCost + "", "red") + " mox"); } @@ -85,4 +93,14 @@ void IOTMBloodCubicZirconiaGenerateResource(ChecklistEntry [int] resource_entrie description.listAppend("Next Pheromone costs " + HTMLGenerateSpanFont(pheromoneCost + "", "brown") + " mox"); resource_entries.listAppend(ChecklistEntryMake("__item blood cubic zirconia", url, ChecklistSubentryMake(HTMLGenerateSpanFont("BCZ: Blood Cubic Zirconia skills", "brown"), description), 11).ChecklistEntrySetIDTag("bcz important skills")); + + + + int pheromoneBlasts = get_property_int("markYourTerritoryCharges"); + if (pheromoneBlasts > 0) + { + string [int] description2; + description2.listAppend("Instakill no items/meat"); + resource_entries.listAppend(ChecklistEntryMake("__skill mark your territory", "", ChecklistSubentryMake(pluralise(pheromoneBlasts, "BCZ pheromone", "BCZ pheromones"), "", description2), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("BCZ pheromone banish")); + } } diff --git a/Source/relay/TourGuide/Items of the Month/2025/Shrunken Head.ash b/Source/relay/TourGuide/Items of the Month/2025/Shrunken Head.ash new file mode 100644 index 00000000..75bbe0a3 --- /dev/null +++ b/Source/relay/TourGuide/Items of the Month/2025/Shrunken Head.ash @@ -0,0 +1,22 @@ +//shrunken head +RegisterTaskGenerationFunction("IOTMShrunkenHeadGenerateTasks"); +void IOTMShrunkenHeadGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEntry [int] optional_task_entries, ChecklistEntry [int] future_task_entries) +{ + if ($item[shrunken head].available_amount() == 0) return; + string url = "inventory.php?ftext=shrunken+head"; + string [int] description; + + if (lookupItem("shrunken head").equipped_amount() > 0) + { + description.listAppend("Targets:"); + description.listAppend("Baa sheep 25%"); + description.listAppend("Banshee librarian 10%"); + description.listAppend("Mountain man 40%"); + description.listAppend("Pygmy janitor 20%"); + description.listAppend("Pygmy bowler 40%"); + description.listAppend("Nook skeleton 20%"); + description.listAppend("Smut orc 10%"); + description.listAppend("Dairy goat 40%"); + task_entries.listAppend(ChecklistEntryMake("__item shrunken head", url, ChecklistSubentryMake(HTMLGenerateSpanFont("Shrunken head equipped", "blue"), description), -11).ChecklistEntrySetIDTag("shrunken head")); + } +} diff --git a/Source/relay/TourGuide/Items of the Month/2025/crimboskeleton.ash b/Source/relay/TourGuide/Items of the Month/2025/Skeleton of Crimbo Past.ash similarity index 79% rename from Source/relay/TourGuide/Items of the Month/2025/crimboskeleton.ash rename to Source/relay/TourGuide/Items of the Month/2025/Skeleton of Crimbo Past.ash index 0b515d86..d832ce87 100644 --- a/Source/relay/TourGuide/Items of the Month/2025/crimboskeleton.ash +++ b/Source/relay/TourGuide/Items of the Month/2025/Skeleton of Crimbo Past.ash @@ -8,7 +8,7 @@ void IOTMSkeletonOfCrimboPastGenerateTasks(ChecklistEntry [int] task_entries, Ch int fightKnucklebones = get_property_int("_knuckleboneDrops"); int restKnucklebones = get_property_int("_knuckleboneRests"); - int totalKnucklebonesLeft = clampi(100 - (fightKnucklebones + restKnucklebones), 0, 100); + int totalKnucklebonesLeft = clampi(100 - (fightKnucklebones), 0, 100); description.listAppend(5 - restKnucklebones + " rest knucklebones available."); if (totalKnucklebonesLeft == 0 && my_familiar() == lookupFamiliar("skeleton of crimbo past")) { @@ -29,7 +29,7 @@ void IOTMSkeletonOfCrimboPastGenerateResource(ChecklistEntry [int] resource_entr int fightKnucklebones = get_property_int("_knuckleboneDrops"); int restKnucklebones = get_property_int("_knuckleboneRests"); - int totalKnucklebonesLeft = clampi(100 - (fightKnucklebones + restKnucklebones), 0, 100); + int totalKnucklebonesLeft = clampi(100 - (fightKnucklebones), 0, 100); description.listAppend(5 - restKnucklebones + " rest knucklebones available."); @@ -38,6 +38,13 @@ void IOTMSkeletonOfCrimboPastGenerateResource(ChecklistEntry [int] resource_entr } else if (totalKnucklebonesLeft > 0) { title = (HTMLGenerateSpanFont(totalKnucklebonesLeft + " knucklebone drops left", "green")); + description.listAppend("90% - skeleton"); + description.listAppend("70% - orc / pirate"); + description.listAppend("50% - dude / elf / hobo"); + description.listAppend("30% - beast / demon / goblin / humanoid / undead"); + description.listAppend("20% - fish / penguin / weird"); + description.listAppend("10% - construct / bug"); + description.listAppend("0% - constellation / elemental / hippy / horror / mer-kin / plant / slime"); } resource_entries.listAppend(ChecklistEntryMake("__familiar skeleton of crimbo past", url, ChecklistSubentryMake(title, description), 11)); } diff --git a/Source/relay/TourGuide/Items of the Month/2026/Legendary seal-clubbing club.ash b/Source/relay/TourGuide/Items of the Month/2026/Legendary seal-clubbing club.ash new file mode 100644 index 00000000..1b2f3fd2 --- /dev/null +++ b/Source/relay/TourGuide/Items of the Month/2026/Legendary seal-clubbing club.ash @@ -0,0 +1,100 @@ +//legendary seal-clubbing club +RegisterTaskGenerationFunction("IOTMLegendaryClubGenerateTasks"); +void IOTMLegendaryClubGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEntry [int] optional_task_entries, ChecklistEntry [int] future_task_entries) +{ + if ($item[legendary seal-clubbing club].available_amount() == 0) return; + string url = "inventory.php?ftext=legendary+seal-clubbing+club"; + string [int] description; + string title; + + { int nextWeekTurn = get_property_int("clubEmNextWeekMonsterTurn") + 8; + int nextWeekTimer = (nextWeekTurn - total_turns_played()); + + string image_name = get_property("clubEmNextWeekMonster"); + string [int] description; + string [int] warnings; + + // Adding a few warnings for the sake of it + boolean [string] holidayTracker = getHolidaysToday(); + + if (holidayTracker["El Dia de Los Muertos Borrachos"] == true || holidayTracker["Feast of Boris"] == true) { + warnings[1] = 'Be careful -- Borrachos & Feast of Boris wanderers can show up instead of your Legendary club wanderer!'; + } + + if (nextWeekTurn <= total_turns_played() && (image_name != "")) + { + description.listAppend(HTMLGenerateSpanFont("Wandering monster", "orange")); + + // Only show warnings if it's right about to happen + foreach i, warning in warnings { + description.listAppend(HTMLGenerateSpanFont("|* ➾ "+warning, "red")); + } + task_entries.listAppend(ChecklistEntryMake("__monster " + image_name, "", ChecklistSubentryMake("Legendary club: " + get_property("clubEmNextWeekMonster") + HTMLGenerateSpanFont(" now", "red"), "", description), -11)); + } + else if (nextWeekTurn -1 == total_turns_played() && (image_name != "")) + { + description.listAppend(HTMLGenerateSpanFont("Wandering monster", "orange")); + task_entries.listAppend(ChecklistEntryMake("__monster " + image_name, "", ChecklistSubentryMake("Legendary club: " + get_property("clubEmNextWeekMonster") + HTMLGenerateSpanFont(" in 1 more adv", "blue"), "", description), -11)); + } + else if (image_name != "") + { + description.listAppend(nextWeekTimer + " advs until Next Week fight."); + optional_task_entries.listAppend(ChecklistEntryMake("__monster " + image_name, "", ChecklistSubentryMake("Legendary club: " + get_property("clubEmNextWeekMonster") + "", "", description), 10)); + } + } + + if (lookupItem("legendary seal-clubbing club").equipped_amount() > 0) + { + int clubBattlefieldsLeft = clampi(5 - get_property_int("_clubEmBattlefieldUsed"), 0, 5); + int clubNextWeeksLeft = clampi(5 - get_property_int("_clubEmNextWeekUsed"), 0, 5); + int clubBackwardsLeft = clampi(5 - get_property_int("_clubEmTimeUsed"), 0, 5); + + if (clubBattlefieldsLeft == 0) { + description.listAppend(HTMLGenerateSpanFont("No Battlefield Clubs left.", "red")); + } else { + description.listAppend(clubBattlefieldsLeft + " Battlefield Clubs. Weird Saber Force."); + } + if (clubNextWeeksLeft == 0) { + description.listAppend(HTMLGenerateSpanFont("No Next Week Clubs left.", "red")); + } else { + description.listAppend(clubNextWeeksLeft + " Next Week Clubs. 7-turn Wanderer."); + } + if (clubBackwardsLeft == 0) { + description.listAppend(HTMLGenerateSpanFont("No Backwards Clubs left.", "red")); + } else { + description.listAppend(clubBackwardsLeft + " Backwards Clubs. Free kill NO ITEMS."); + } + task_entries.listAppend(ChecklistEntryMake("__item legendary seal-clubbing club", url, ChecklistSubentryMake(HTMLGenerateSpanFont("Legendary seal-clubbing club skills", "orange"), description), -11).ChecklistEntrySetIDTag("LSSC skills")); + } +} + +RegisterResourceGenerationFunction("IOTMLegendaryClubGenerateResource"); +void IOTMLegendaryClubGenerateResource(ChecklistEntry [int] resource_entries) +{ + if ($item[legendary seal-clubbing club].available_amount() == 0) return; + string url = "inventory.php?ftext=legendary+seal-clubbing+club"; + string [int] description; + string title; + + int clubBattlefieldsLeft = clampi(5 - get_property_int("_clubEmBattlefieldUsed"), 0, 5); + int clubNextWeeksLeft = clampi(5 - get_property_int("_clubEmNextWeekUsed"), 0, 5); + int clubBackwardsLeft = clampi(5 - get_property_int("_clubEmTimeUsed"), 0, 5); + + if (clubBattlefieldsLeft == 0) { + description.listAppend(HTMLGenerateSpanFont("No Battlefield Clubs left.", "red")); + } else { + description.listAppend(clubBattlefieldsLeft + " Battlefield Clubs. Weird Saber Force."); + } + if (clubNextWeeksLeft == 0) { + description.listAppend(HTMLGenerateSpanFont("No Next Week Clubs left.", "red")); + } else { + description.listAppend(clubNextWeeksLeft + " Next Week Clubs. 7-turn Wanderer."); + } + if (clubBackwardsLeft == 0) { + description.listAppend(HTMLGenerateSpanFont("No Backwards Clubs left.", "red")); + } else { + description.listAppend(clubBackwardsLeft + " Backwards Clubs. Free kill NO ITEMS."); + } + + resource_entries.listAppend(ChecklistEntryMake("__item legendary seal-clubbing club", url, ChecklistSubentryMake(HTMLGenerateSpanFont("Legendary seal-clubbing club skills", "orange"), description), 1).ChecklistEntrySetIDTag("LSSC skills")); +}