From 76b80660e7b45b107a444ab45410d8e5af72d622 Mon Sep 17 00:00:00 2001 From: uthuluc <58225812+uthuluc@users.noreply.github.com> Date: Tue, 6 Jan 2026 15:16:03 -0500 Subject: [PATCH 1/6] Create Legendary seal-clubbing club.ash --- .../2026/Legendary seal-clubbing club.ash | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Source/relay/TourGuide/Items of the Month/2026/Legendary seal-clubbing club.ash 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")); +} From 65fd1a316183dcda69faf753161167556db998b4 Mon Sep 17 00:00:00 2001 From: uthuluc <58225812+uthuluc@users.noreply.github.com> Date: Tue, 10 Feb 2026 19:27:41 -0500 Subject: [PATCH 2/6] Update crimboskeleton.ash added knuck rates for easy access --- .../Items of the Month/2025/crimboskeleton.ash | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Source/relay/TourGuide/Items of the Month/2025/crimboskeleton.ash b/Source/relay/TourGuide/Items of the Month/2025/crimboskeleton.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/crimboskeleton.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)); } From f9813d00a5324b8669b17d68cff56b3bcd340990 Mon Sep 17 00:00:00 2001 From: uthuluc <58225812+uthuluc@users.noreply.github.com> Date: Tue, 10 Feb 2026 19:31:56 -0500 Subject: [PATCH 3/6] Create Shrunken Head --- .../Items of the Month/2025/Shrunken Head | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Source/relay/TourGuide/Items of the Month/2025/Shrunken Head diff --git a/Source/relay/TourGuide/Items of the Month/2025/Shrunken Head b/Source/relay/TourGuide/Items of the Month/2025/Shrunken Head new file mode 100644 index 00000000..75bbe0a3 --- /dev/null +++ b/Source/relay/TourGuide/Items of the Month/2025/Shrunken Head @@ -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")); + } +} From 684df6fb9f2594b7c16320346677436b282da733 Mon Sep 17 00:00:00 2001 From: uthuluc <58225812+uthuluc@users.noreply.github.com> Date: Tue, 10 Feb 2026 19:32:22 -0500 Subject: [PATCH 4/6] Rename crimboskeleton.ash to Skeleton of Crimbo Past.ash --- .../2025/{crimboskeleton.ash => Skeleton of Crimbo Past.ash} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Source/relay/TourGuide/Items of the Month/2025/{crimboskeleton.ash => Skeleton of Crimbo Past.ash} (100%) 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 100% 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 From 5c77f4d18969a7daded5153f37ddcd70ddf2aa63 Mon Sep 17 00:00:00 2001 From: uthuluc <58225812+uthuluc@users.noreply.github.com> Date: Tue, 10 Feb 2026 19:32:36 -0500 Subject: [PATCH 5/6] Rename Shrunken Head to Shrunken Head.ash --- .../Items of the Month/2025/{Shrunken Head => Shrunken Head.ash} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Source/relay/TourGuide/Items of the Month/2025/{Shrunken Head => Shrunken Head.ash} (100%) diff --git a/Source/relay/TourGuide/Items of the Month/2025/Shrunken Head b/Source/relay/TourGuide/Items of the Month/2025/Shrunken Head.ash similarity index 100% rename from Source/relay/TourGuide/Items of the Month/2025/Shrunken Head rename to Source/relay/TourGuide/Items of the Month/2025/Shrunken Head.ash From dab0a2ebb4d5695cc4631ea4fb05a21d0494ed71 Mon Sep 17 00:00:00 2001 From: uthuluc <58225812+uthuluc@users.noreply.github.com> Date: Tue, 10 Feb 2026 19:33:04 -0500 Subject: [PATCH 6/6] Update Blood Cubic Zirconia.ash add banish tracker --- .../2025/Blood Cubic Zirconia.ash | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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")); + } }