diff --git a/Source/relay/TourGuide/Items of the Month/2015/Haunted Doghouse.ash b/Source/relay/TourGuide/Items of the Month/2015/Haunted Doghouse.ash
index 26d561ae..95612a54 100644
--- a/Source/relay/TourGuide/Items of the Month/2015/Haunted Doghouse.ash
+++ b/Source/relay/TourGuide/Items of the Month/2015/Haunted Doghouse.ash
@@ -5,7 +5,7 @@ void IOTMHauntedDoghouseGenerateResource(ChecklistEntry [int] resource_entries)
return;
if ($item[tennis ball].available_amount() > 0 && in_ronin() && $item[tennis ball].item_is_usable())
{
- resource_entries.listAppend(ChecklistEntryMake("__item tennis ball", "", ChecklistSubentryMake(pluralise($item[tennis ball]), "", "Free run/banish."), 6).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Haunted doghouse banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item tennis ball", "", ChecklistSubentryMake(pluralise($item[tennis ball]), "", "Free run/banish."), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Haunted doghouse banish"));
}
//I, um, hmm. I guess there's not much to say. Poor lonely file, nearly empty.
}
diff --git a/Source/relay/TourGuide/Items of the Month/2016/Time-Spinner.ash b/Source/relay/TourGuide/Items of the Month/2016/Time-Spinner.ash
index 1a7fb0ca..a03d5774 100644
--- a/Source/relay/TourGuide/Items of the Month/2016/Time-Spinner.ash
+++ b/Source/relay/TourGuide/Items of the Month/2016/Time-Spinner.ash
@@ -46,5 +46,5 @@ void IOTMTimeSpinnerGenerateResource(ChecklistEntry [int] resource_entries)
}
//Play a time prank - 1 minute, heart
- resource_entries.listAppend(ChecklistEntryMake("Hourglass", "inv_use.php?whichitem=9104&pwd=" + my_hash(), ChecklistSubentryMake(pluralise(minutes_left, "Time-Spinner minute", "Time-Spinner minutes"), "", description), 5).ChecklistEntrySetIDTag("Time-spinner resource"));
+ resource_entries.listAppend(ChecklistEntryMake("__item Time-Spinner", "inv_use.php?whichitem=9104&pwd=" + my_hash(), ChecklistSubentryMake(pluralise(minutes_left, "Time-Spinner minute", "Time-Spinner minutes"), "", description), 5).ChecklistEntrySetIDTag("Time-spinner resource"));
}
diff --git a/Source/relay/TourGuide/Items of the Month/2017/KGBriefcase.ash b/Source/relay/TourGuide/Items of the Month/2017/KGBriefcase.ash
index de51ea62..c4111aec 100644
--- a/Source/relay/TourGuide/Items of the Month/2017/KGBriefcase.ash
+++ b/Source/relay/TourGuide/Items of the Month/2017/KGBriefcase.ash
@@ -16,7 +16,7 @@ void IOTMKGBriefcaseGenerateResource(ChecklistEntry [int] resource_entries)
description.listAppend(HTMLGenerateSpanFont("Equip the briefcase first!", "red"));
entry.url = "inventory.php?ftext=kremlin";
}
- resource_entries.listAppend(ChecklistEntryMake("__item Kremlin's Greatest Briefcase", entry.url, ChecklistSubentryMake(pluralise(3 - get_property_int("_kgbTranquilizerDartUses"), "briefcase dart", "briefcase darts"), "", description)).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Kremlin Briefcase tranq dart banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item Kremlin's Greatest Briefcase", entry.url, ChecklistSubentryMake(pluralise(3 - get_property_int("_kgbTranquilizerDartUses"), "briefcase dart", "briefcase darts"), "", description),0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Kremlin Briefcase tranq dart banish"));
}
int clicks_remaining = clampi(22 - get_property_int("_kgbClicksUsed"), 0, 22);
if (!mafiaIsPastRevision(18110))
diff --git a/Source/relay/TourGuide/Items of the Month/2017/New You.ash b/Source/relay/TourGuide/Items of the Month/2017/New You.ash
index 5d1b1241..2e435689 100644
--- a/Source/relay/TourGuide/Items of the Month/2017/New You.ash
+++ b/Source/relay/TourGuide/Items of the Month/2017/New You.ash
@@ -46,7 +46,7 @@ void IOTMNewYouGenerateResource(ChecklistEntry [int] resource_entries)
}
else if (it == lookupItem("Daily Affirmation: Be a Mind Master"))
{
- resource_entries.listAppend(ChecklistEntryMake("__item " + it, "", subentry).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("New you affirmation mind master banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item " + it, "", subentry, 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("New you affirmation mind master banish"));
}
else
entry.subentries.listAppend(subentry);
diff --git a/Source/relay/TourGuide/Items of the Month/2017/Space Jellyfish.ash b/Source/relay/TourGuide/Items of the Month/2017/Space Jellyfish.ash
index 7c28d4dc..3c117d7e 100644
--- a/Source/relay/TourGuide/Items of the Month/2017/Space Jellyfish.ash
+++ b/Source/relay/TourGuide/Items of the Month/2017/Space Jellyfish.ash
@@ -89,7 +89,7 @@ void IOTMSpaceJellyfishGenerateResource(ChecklistEntry [int] resource_entries)
}
if ($item[hot jelly].available_amount() > 0 && in_ronin())
- resource_entries.listAppend(ChecklistEntryMake("__item hot jelly", "", ChecklistSubentryMake(pluralise($item[hot jelly]), "", "Chew for free run/banish.")).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Space jellyfish hot jelly banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item hot jelly", "", ChecklistSubentryMake(pluralise($item[hot jelly]), "", "Chew for free run/banish."), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Space jellyfish hot jelly banish"));
diff --git a/Source/relay/TourGuide/Items of the Month/2019/May Saber.ash b/Source/relay/TourGuide/Items of the Month/2019/May Saber.ash
index 24e6a937..5e49752a 100644
--- a/Source/relay/TourGuide/Items of the Month/2019/May Saber.ash
+++ b/Source/relay/TourGuide/Items of the Month/2019/May Saber.ash
@@ -70,7 +70,7 @@ void IOTMMaySaberGenerateResource(ChecklistEntry [int] resource_entries)
else
description.listAppend("Rollover runaway-like/banish");
- resource_entries.listAppend(ChecklistEntryMake("__item Fourth of May Cosplay Saber", "inventory.php?which=2", ChecklistSubentryMake("(up to) " + uses_remaining.pluralise("force banish", "forces banishes"), "", description)).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Fourth may saber force banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item Fourth of May Cosplay Saber", "inventory.php?which=2", ChecklistSubentryMake("(up to) " + uses_remaining.pluralise("force banish", "forces banishes"), "", description), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Fourth may saber force banish"));
}
}
}
\ No newline at end of file
diff --git a/Source/relay/TourGuide/Items of the Month/2021/Emotion Chip.ash b/Source/relay/TourGuide/Items of the Month/2021/Emotion Chip.ash
index f155da95..fce0e561 100644
--- a/Source/relay/TourGuide/Items of the Month/2021/Emotion Chip.ash
+++ b/Source/relay/TourGuide/Items of the Month/2021/Emotion Chip.ash
@@ -36,7 +36,7 @@ void IOTMEmotionChipGenerateResource(ChecklistEntry [int] resource_entries)
{
emotions.listAppend(emotionHatred + " Hatreds left. 50-turn banish.");
- resource_entries.listAppend(ChecklistEntryMake("__skill feel hatred", "", ChecklistSubentryMake(pluralise(emotionHatred, "Feel Hatred", "Feels Hatreds"), "", "Free run, 50-turn banish.")).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Emotion chip feel hatred banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__skill feel hatred", "", ChecklistSubentryMake(pluralise(emotionHatred, "Feel Hatred", "Feels Hatreds"), "", "Free run, 50-turn banish."), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Emotion chip feel hatred banish"));
}
int emotionLonely = clampi(3 - get_property_int("_feelLonelyUsed"), 0, 3);
if (emotionLonely > 0 && $skill[Feel Lonely].skill_is_usable())
diff --git a/Source/relay/TourGuide/Items of the Month/2021/Familiar Scrapbook.ash b/Source/relay/TourGuide/Items of the Month/2021/Familiar Scrapbook.ash
index d4a3eef6..1589abc2 100644
--- a/Source/relay/TourGuide/Items of the Month/2021/Familiar Scrapbook.ash
+++ b/Source/relay/TourGuide/Items of the Month/2021/Familiar Scrapbook.ash
@@ -24,6 +24,6 @@ void IOTMFamiliarScrapbookGenerateResource(ChecklistEntry [int] resource_entries
description.listAppend(HTMLGenerateSpanFont("Equip the familiar scrapbook first", "red"));
string url = invSearch("familiar scrapbook");
- resource_entries.listAppend(ChecklistEntryMake("__item familiar scrapbook", url, ChecklistSubentryMake(familiar_scraps / 100 + " scrapbook banishes available", "", description)).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Familiar scrapbook boring pictures banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item familiar scrapbook", url, ChecklistSubentryMake(familiar_scraps / 100 + " scrapbook banishes available", "", description), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Familiar scrapbook boring pictures banish"));
}
}
diff --git a/Source/relay/TourGuide/Items of the Month/2021/Underground Fireworks Shop.ash b/Source/relay/TourGuide/Items of the Month/2021/Underground Fireworks Shop.ash
index 85fc716b..e96111e7 100644
--- a/Source/relay/TourGuide/Items of the Month/2021/Underground Fireworks Shop.ash
+++ b/Source/relay/TourGuide/Items of the Month/2021/Underground Fireworks Shop.ash
@@ -40,7 +40,11 @@ void IOTMUndergroundFireworksShopGenerateTasks(ChecklistEntry [int] task_entries
RegisterResourceGenerationFunction("IOTMUndergroundFireworksShopGenerateResource");
void IOTMUndergroundFireworksShopGenerateResource(ChecklistEntry [int] resource_entries)
{
- if (my_path().id == PATH_G_LOVER) return; // none of this stuff has G in it
+ if (my_path().id == PATH_G_LOVER) return; // none of this stuff has G in it!
+
+ // Adding a way to get this to yank out the tile if you're in standard.
+ if (!lookupItem("fedora-mounted fountain").is_unrestricted()) return;
+
if (!get_property_boolean("_fireworksShopEquipmentBought") && available_amount($item[Clan VIP Lounge key]) > 0 && get_property("_fireworksShop").to_boolean() && my_path() != $path[Legacy of Loathing])
{
string [int] description;
diff --git a/Source/relay/TourGuide/Items of the Month/2021/Vampire Vintner.ash b/Source/relay/TourGuide/Items of the Month/2021/Vampire Vintner.ash
index 8179ee6f..eeac8c5d 100644
--- a/Source/relay/TourGuide/Items of the Month/2021/Vampire Vintner.ash
+++ b/Source/relay/TourGuide/Items of the Month/2021/Vampire Vintner.ash
@@ -3,6 +3,9 @@ RegisterTaskGenerationFunction("IOTMVampireVintnerGenerateTasks");
void IOTMVampireVintnerGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEntry [int] optional_task_entries, ChecklistEntry [int] future_task_entries)
{
if (!__misc_state["in run"] || !lookupFamiliar("vampire vintner").familiar_is_usable()) return;
+
+ // For some reason, Vintner leaked into subsequent standards. Unfortunately, the wine isn't standard, so...
+ if (!lookupItem("1950 vampire vintner wine").is_unrestricted()) return;
int vintnerFightsLeft = clampi(14 - get_property_int("vintnerCharge"), 0, 14);
int vintnerWineLevel = get_property_int("vintnerWineLevel");
diff --git a/Source/relay/TourGuide/Items of the Month/2022/Cosmic Bowling Ball.ash b/Source/relay/TourGuide/Items of the Month/2022/Cosmic Bowling Ball.ash
index ea3bbeb0..1ec936cf 100644
--- a/Source/relay/TourGuide/Items of the Month/2022/Cosmic Bowling Ball.ash
+++ b/Source/relay/TourGuide/Items of the Month/2022/Cosmic Bowling Ball.ash
@@ -53,7 +53,7 @@ void IOTMCosmicBowlingBallGenerateResource(ChecklistEntry [int] resource_entries
description.listAppend("Hit a strike! Knock the competition down a pin with your hole-y ball.");
description.listAppend("Give yourself an item/meat buff, gain stats in a zone, or banish for the next " + HTMLGenerateSpanOfClass(bowlingCooldown2, "r_bold") + " combats.");
- resource_entries.listAppend(ChecklistEntryMake("__item cosmic bowling ball", "", ChecklistSubentryMake("Cosmic bowling ball banish", "", "Has " + HTMLGenerateSpanOfClass(bowlingCooldown2, "r_bold") + " duration and cooldown.")).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Cosmic bowling ball banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item cosmic bowling ball", "", ChecklistSubentryMake("Bowl a Curveball with your Cosmic Bowling Ball", "", "Has " + HTMLGenerateSpanOfClass(bowlingCooldown2, "r_bold") + " duration and cooldown."), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Cosmic bowling ball banish"));
resource_entries.listAppend(ChecklistEntryMake("__item cosmic bowling ball", url, ChecklistSubentryMake("Cosmic bowling ball use available", "", description)).ChecklistEntrySetCombinationTag("special").ChecklistEntrySetIDTag("Cosmic bowling ball skills"));
}
if (bowlingCooldown > -1)
diff --git a/Source/relay/TourGuide/Items of the Month/2023/Book of Facts.ash b/Source/relay/TourGuide/Items of the Month/2023/Book of Facts.ash
index 7142835f..c4ff4b43 100644
--- a/Source/relay/TourGuide/Items of the Month/2023/Book of Facts.ash
+++ b/Source/relay/TourGuide/Items of the Month/2023/Book of Facts.ash
@@ -11,11 +11,24 @@ void IOTMBookofFactsGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEn
// If they have an eagle, remind them they can eagle-banish to make it easier to find the habitat guys
string eagleString = lookupFamiliar("Patriotic Eagle").familiar_is_usable() ? "; remember, you can phylum-banish with your Patriotic Eagle to make it easier!" : "." ;
+ phylum eaglePhylumBanished = $phylum[none];
+
+ if (get_property("banishedPhyla") != "")
+ eaglePhylumBanished = get_property("banishedPhyla").split_string(":")[1].to_phylum();
if (habitat_monster != $monster[none] && fights_left > 0)
{
description.listAppend("Neaaaar, faaaaaaar, wherever you spaaaaaaar, I believe that the heart does go onnnnn.");
description.listAppend("Appears as a wandering monster in any zone. Try a place with few competing monsters"+eagleString);
+
+ if (eaglePhylumBanished == habitat_monster.phylum) {
+ description.listAppend(HTMLGenerateSpanFont(`WARNING: {habitat_monster}'s phylum is banished!`, "red"));
+ }
+
+ if (habitat_monster.is_banished()) {
+ description.listAppend(HTMLGenerateSpanFont(`WARNING: {habitat_monster} is banished!`, "red"));
+ }
+
optional_task_entries.listAppend(ChecklistEntryMake("__monster " + habitat_monster, "", ChecklistSubentryMake("Fight " + pluralise(fights_left, "more non-native " + habitat_monster, "more non-native " + habitat_monster + "s"), "", description), -4));
}
@@ -63,12 +76,17 @@ void IOTMBookofFactsGenerateResource(ChecklistEntry [int] resource_entries)
BOFAdropsDescription.listAppend("" + BOFApocketwishes + " BOFA wishes available.");
}
- // Not going to remove this because I think it's valid right now but once mt_rand is
- // properly exposed it would be good to hide this if the user is in a seed where
- // they can't really access tatters...
- int BOFAtatters = clampi(11 - get_property_int("_bookOfFactsTatters"), 0, 11);
- if (get_property_int("_bookOfFactsTatters") < 11) {
- BOFAdropsDescription.listAppend("" + BOFAtatters + " BOFA tatters available.");
+ // NOTE: Altering as of 2024 ELG change, as tatters are 40 turns vs the 30 of spring shoes.
+ // There is a remote chance in some future standard context tatters will be the best option
+ // for a user with some odd IOTM configurations, which is why I didn't entirely extract
+ // this, but it at least shouldn't be present if they own the candles or the shoes.
+
+ if (!__iotms_usable[lookupItem("spring shoes")] && $item[roman candelabra].available_amount() == 0) {
+ int BOFAtatters = clampi(11 - get_property_int("_bookOfFactsTatters"), 0, 11);
+ if (get_property_int("_bookOfFactsTatters") < 11) {
+ BOFAdropsDescription.listAppend("" + BOFAtatters + " BOFA tatters available.");
+ }
}
+
resource_entries.listAppend(ChecklistEntryMake("__item book of facts", "", ChecklistSubentryMake(("Miscellaneous valuable BOFA drops"), "", BOFAdropsDescription), 8).ChecklistEntrySetIDTag("bofa tatters"));
}
diff --git a/Source/relay/TourGuide/Items of the Month/2023/Cursed Monkey Paw.ash b/Source/relay/TourGuide/Items of the Month/2023/Cursed Monkey Paw.ash
index e94a682d..4b59fa6d 100644
--- a/Source/relay/TourGuide/Items of the Month/2023/Cursed Monkey Paw.ash
+++ b/Source/relay/TourGuide/Items of the Month/2023/Cursed Monkey Paw.ash
@@ -345,4 +345,17 @@ void IOTMCursedMonkeysPawGenerateResource(ChecklistEntry [int] resource_entries)
if (monkeyWishesLeft > 0) {
resource_entries.listAppend(ChecklistEntryMake(imageName, url, ChecklistSubentryMake(pluralise(monkeyWishesLeft, "monkey's paw wish", `monkey's paw wishes`), "", description)).ChecklistEntrySetIDTag("Monkey wishes"));
}
+
+ // Banish combination tag for the monkey slap, if you've got it.
+ if (monkeyWishesLeft == 5) {
+ string [int] description;
+ string url;
+ url = "main.php";
+ description.listAppend("Turn-taking repeat-use banish. Lasts until you use it again!");
+ if ($item[cursed monkey's paw].equipped_amount() == 0) {
+ description.listAppend("Equip your cursed monkey paw first.");
+ url = "inventory.php?ftext=cursed+monkey";
+ }
+ resource_entries.listAppend(ChecklistEntryMake("__skill monkey slap", "", ChecklistSubentryMake("Monkey Slap usable", "", description), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Cursed monkey paw banish"));
+ }
}
diff --git a/Source/relay/TourGuide/Items of the Month/2023/Patriotic Eagle.ash b/Source/relay/TourGuide/Items of the Month/2023/Patriotic Eagle.ash
index ddafc1c3..24779392 100644
--- a/Source/relay/TourGuide/Items of the Month/2023/Patriotic Eagle.ash
+++ b/Source/relay/TourGuide/Items of the Month/2023/Patriotic Eagle.ash
@@ -38,6 +38,17 @@ void IOTMPatrioticEagleGenerateTasks(ChecklistEntry [int] task_entries, Checklis
if (fights_left > 0 && possible_appearance_locations.count() > 0)
optional_task_entries.listAppend(entry);
}
+
+ // Extra nag from TES re: setting your global pledge.
+ string [int] description2;
+
+ if (__misc_state["in run"] && ($effect[Citizen of a Zone].have_effect() == 0)) {
+ description2.listAppend("Haunted Kitchen: +100% init");
+ description2.listAppend("Haunted Library/Laundry: +30% item");
+ description2.listAppend("Batrat/Ninja Snowmen/Frat Battlefield: +50% meat");
+ task_entries.listAppend(ChecklistEntryMake("__familiar Patriotic Eagle", "familiar.php", ChecklistSubentryMake("Pledge to a zone!", description2), -5).ChecklistEntrySetIDTag("Patriotic Eagle familiar pledge reminder"));
+ }
+
}
RegisterResourceGenerationFunction("IOTMPatrioticEagleGenerateResource");
diff --git a/Source/relay/TourGuide/Items of the Month/2024/Everfull Dart Holster.ash b/Source/relay/TourGuide/Items of the Month/2024/Everfull Dart Holster.ash
new file mode 100644
index 00000000..2b8217dc
--- /dev/null
+++ b/Source/relay/TourGuide/Items of the Month/2024/Everfull Dart Holster.ash
@@ -0,0 +1,51 @@
+//Everfull Dart Holster via TES
+RegisterTaskGenerationFunction("IOTMEverfullDartsGenerateTasks");
+void IOTMEverfullDartsGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEntry [int] optional_task_entries, ChecklistEntry [int] future_task_entries)
+{
+ if (!__iotms_usable[$item[everfull dart holster]]) return;
+
+ string [int] description;
+ string url = "inventory.php?ftext=everfull+dart_holster";
+
+ if ($effect[everything looks red].have_effect() == 0) {
+ int dartCooldown = 50;
+ if (get_property("everfullDartPerks").contains_text("You are less impressed by bullseyes")) {
+ dartCooldown -= 10;
+ }
+ if (get_property("everfullDartPerks").contains_text("Bullseyes do not impress you much")) {
+ dartCooldown -= 10;
+ }
+ description.listAppend(HTMLGenerateSpanFont(`Shoot a bullseye! ({dartCooldown} ELR)`, "red"));
+ if (lookupItem("everfull dart holster").equipped_amount() == 0) {
+ description.listAppend(HTMLGenerateSpanFont("Equip the dart holster first.", "red"));
+ }
+ else {
+ description.listAppend(HTMLGenerateSpanFont("Dart holster equipped", "blue"));
+ }
+ task_entries.listAppend(ChecklistEntryMake("__item everfull dart holster", url, ChecklistSubentryMake("Everfull Darts free kill available!", "", description), -11));
+ }
+}
+
+RegisterResourceGenerationFunction("IOTMEverfullDartsGenerateResource");
+void IOTMEverfullDartsGenerateResource(ChecklistEntry [int] resource_entries)
+{
+ if (!__iotms_usable[$item[everfull dart holster]] || !__misc_state["in run"]) return;
+
+ string [int] description;
+ string url = "inventory.php?ftext=everfull+dart_holster";
+
+ int dartSkill = get_property_int("dartsThrown");
+ if (dartSkill < 401) {
+ int dartsNeededForNextPerk = floor(sqrt(dartSkill) + 1) ** 2 - dartSkill;
+ description.listAppend(`Current dart skill: {dartSkill}`);
+ description.listAppend(`{HTMLGenerateSpanFont(dartsNeededForNextPerk, "blue")} darts needed for next Perk`);
+
+ if (lookupItem("everfull dart holster").equipped_amount() == 0) {
+ description.listAppend(HTMLGenerateSpanFont("Equip the dart holster first.", "red"));
+ }
+ else {
+ description.listAppend(HTMLGenerateSpanFont("Dart holster equipped", "blue"));
+ }
+ resource_entries.listAppend(ChecklistEntryMake("__item everfull dart holster", url, ChecklistSubentryMake("🍑🎯 Everfull Dart Holster charging", "", description), 11));
+ }
+}
diff --git a/Source/relay/TourGuide/Items of the Month/2024/Mayam Calendar.ash b/Source/relay/TourGuide/Items of the Month/2024/Mayam Calendar.ash
index 9a9e40dd..0db314c6 100644
--- a/Source/relay/TourGuide/Items of the Month/2024/Mayam Calendar.ash
+++ b/Source/relay/TourGuide/Items of the Month/2024/Mayam Calendar.ash
@@ -21,6 +21,12 @@ void addToBothDescriptions(string [int] description1, string [int] description2,
RegisterResourceGenerationFunction("IOTMMayamCalendarGenerateResource");
void IOTMMayamCalendarGenerateResource(ChecklistEntry [int] resource_entries)
{
+ // Adding this prior to the check if the user has stinkbombs.
+ if ($item[stuffed yam stinkbomb].available_amount() > 0 )
+ {
+ resource_entries.listAppend(ChecklistEntryMake("__item stuffed yam stinkbomb", "", ChecklistSubentryMake(pluralise($item[stuffed yam stinkbomb]), "", "Free run/banish."), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Haunted doghouse banish"));
+ }
+
if (available_amount($item[mayam calendar]) < 1)
return;
diff --git a/Source/relay/TourGuide/Items of the Month/2024/Mini Kiwi.ash b/Source/relay/TourGuide/Items of the Month/2024/Mini Kiwi.ash
new file mode 100644
index 00000000..1cf6f97c
--- /dev/null
+++ b/Source/relay/TourGuide/Items of the Month/2024/Mini Kiwi.ash
@@ -0,0 +1,34 @@
+// Mini-Kiwi
+RegisterResourceGenerationFunction("IOTMMiniKiwiGenerateResource");
+void IOTMMiniKiwiGenerateResource(ChecklistEntry [int] resource_entries)
+{
+ if (!lookupFamiliar("Mini Kiwi").familiar_is_usable()) return;
+
+ // This familiar sucks. It's really bad. Still, fine to have a tile, I guess.
+ int miniKiwiCount = $item[mini kiwi].available_amount();
+ float kiwiWeight = effective_familiar_weight($familiar[Mini Kiwi]) + weight_adjustment();
+ float kiwiModifier = $item[aviator goggles].available_amount() > 0 ? 0.75 : 0.50;
+
+ // Calculating the chance of a kiwi per fight; weight * your modifier
+ int kiwiChance = to_int(min(kiwiWeight * kiwiModifier,100.0));
+ boolean kiwiSpiritsBought = get_property_boolean("_miniKiwiIntoxicatingSpiritsBought");
+ int miniKiwiBikiniCount = $item[mini kiwi bikini].available_amount();
+
+ // Tile setup stuff
+ string [int] description;
+ string url = "familiar.php"; // Could send to the kwiki mart, but don't care enough.
+ string header = pluralise(miniKiwiCount, "mini kiwi available", "mini kiwis available");
+
+ description.listAppend(`At {to_int(kiwiWeight)} weight, you have a {kiwiChance}% chance of a mini kiwi each fight.`);
+
+ if (!kiwiSpiritsBought) {
+ description.listAppend('|*Consider purchasing mini kiwi intoxicating spirits, for 3 kiwis.');
+ }
+
+ if (miniKiwiBikiniCount < 1 && get_property_int("zeppelinProtestors") < 80) {
+ description.listAppend('|*Consider purchasing mini kiwi bikinis, for the Zeppelin sleaze test.');
+ }
+
+ resource_entries.listAppend(ChecklistEntryMake("__familiar mini kiwi", url, ChecklistSubentryMake(header, "", description), 10));
+
+}
diff --git a/Source/relay/TourGuide/Items of the Month/2024/Roman Candelabra.ash b/Source/relay/TourGuide/Items of the Month/2024/Roman Candelabra.ash
index 3b7389b6..41e2a3f2 100644
--- a/Source/relay/TourGuide/Items of the Month/2024/Roman Candelabra.ash
+++ b/Source/relay/TourGuide/Items of the Month/2024/Roman Candelabra.ash
@@ -26,12 +26,12 @@ void IOTMRomanCandelabraGenerateTasks(ChecklistEntry [int] task_entries, Checkli
string [int] description;
if (lookupItem("Roman Candelabra").equipped_amount() == 0)
{
- description.listAppend(HTMLGenerateSpanFont("Equip the Roman Candelabra first.", "red"));
+ description.listAppend(HTMLGenerateSpanFont("Equip the Roman Candelabra, for your purple ray.", "red"));
}
else
{
- description.listAppend(HTMLGenerateSpanFont("Candelbra equipped", "purple"));
+ description.listAppend(HTMLGenerateSpanFont("Candelbra equipped, blow your purple candle!", "purple"));
}
- task_entries.listAppend(ChecklistEntryMake("__item Roman Candelabra", url, ChecklistSubentryMake("Roman Candelabra chain ready!", "", description), -11));
+ task_entries.listAppend(ChecklistEntryMake("__item Roman Candelabra", url, ChecklistSubentryMake("Roman Candelabra monster chain ready", "", description), -11));
}
}
diff --git a/Source/relay/TourGuide/Items of the Month/2024/Spring Shoes.ash b/Source/relay/TourGuide/Items of the Month/2024/Spring Shoes.ash
index 0f8ab53a..34567afb 100644
--- a/Source/relay/TourGuide/Items of the Month/2024/Spring Shoes.ash
+++ b/Source/relay/TourGuide/Items of the Month/2024/Spring Shoes.ash
@@ -34,7 +34,7 @@ void IOTMSpringShoesGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEn
void IOTMSpringShoesGenerateResource(ChecklistEntry [int] resource_entries)
{
- // Initialization. Do not generate iof you don't have spring shoes.
+ // Initialization. Do not generate if you don't have spring shoes.
if (!__iotms_usable[lookupItem("spring shoes")]) return;
string [int] banishDescription;
@@ -43,5 +43,5 @@ void IOTMSpringShoesGenerateResource(ChecklistEntry [int] resource_entries)
{
banishDescription.listAppend(HTMLGenerateSpanFont("Equip the spring shoes first.", "red"));
}
- resource_entries.listAppend(ChecklistEntryMake("__skill spring shoes", "", ChecklistSubentryMake("Spring Kick", "", banishDescription)).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Spring shoes spring kick banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__skill spring shoes", "", ChecklistSubentryMake("Spring Kick", "", banishDescription), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Spring shoes spring kick banish"));
}
\ No newline at end of file
diff --git a/Source/relay/TourGuide/Items of the Month/2024/Tearaway Pants.ash b/Source/relay/TourGuide/Items of the Month/2024/Tearaway Pants.ash
new file mode 100644
index 00000000..04f99b5c
--- /dev/null
+++ b/Source/relay/TourGuide/Items of the Month/2024/Tearaway Pants.ash
@@ -0,0 +1,29 @@
+// Tearaway Pants
+RegisterResourceGenerationFunction("IOTMTearawayPantsGenerateTask");
+void IOTMTearawayPantsGenerateTask(ChecklistEntry [int] optional_task_entries)
+{
+ // Don't show the tile if you don't have the pants.
+ if (!__iotms_usable[lookupItem("tearaway pants")]) return;
+
+ // Don't show the tile if you aren't a moxie class.
+ if (!($classes[disco bandit,accordion thief] contains my_class())) return;
+
+ // I can't believe I'm doing this. I have truly lost control of my life.
+ QuestState base_quest_state = __quest_state["Guild"];
+ if (base_quest_state.finished || !base_quest_state.startable || base_quest_state.mafia_internal_step == 2) return;
+
+ // Do you have the stupid pants equipped?
+ boolean havePantsEquipped = $slot[pants].equipped_item() == $item[tearaway pants];
+
+ string [int] description;
+
+ // If equipped, send user to the guild. If not, send them to the inventory.
+ string url = havePantsEquipped ? "guild.php" : "inventory.php?ftext=tearaway+pants";
+ string header = "Tear away your tearaway pants!";
+
+ if (havePantsEquipped) description.listAppend(`Visit the Department of Shadowy Arts and Crafts to unlock the guild!`);
+ if (!havePantsEquipped) description.listAppend(`Visit the Department of Shadowy Arts and Crafts with your pants equipped to unlock the guild!`);
+
+ optional_task_entries.listAppend(ChecklistEntryMake("__item tearaway pants", url, ChecklistSubentryMake(header, "", description), 0));
+
+}
\ No newline at end of file
diff --git a/Source/relay/TourGuide/Items of the Month/Items of the Month import.ash b/Source/relay/TourGuide/Items of the Month/Items of the Month import.ash
index 2f58c1cf..b483c720 100644
--- a/Source/relay/TourGuide/Items of the Month/Items of the Month import.ash
+++ b/Source/relay/TourGuide/Items of the Month/Items of the Month import.ash
@@ -147,6 +147,9 @@ import "relay/TourGuide/Items of the Month/2023/Candy Cane Sword Cane.ash";
// 2024
import "relay/TourGuide/Items of the Month/2024/Chest Mimic.ash";
import "relay/TourGuide/Items of the Month/2024/Spring Shoes.ash";
+import "relay/TourGuide/Items of the Month/2024/Everfull Dart Holster.ash";
import "relay/TourGuide/Items of the Month/2024/Apriling Band Helmet.ash";
import "relay/TourGuide/Items of the Month/2024/Mayam Calendar.ash";
import "relay/TourGuide/Items of the Month/2024/Roman Candelabra.ash";
+import "relay/TourGuide/Items of the Month/2024/Mini Kiwi.ash";
+import "relay/TourGuide/Items of the Month/2024/Tearaway Pants.ash";
\ No newline at end of file
diff --git a/Source/relay/TourGuide/Paths/Avatar of West of Loathing.ash b/Source/relay/TourGuide/Paths/Avatar of West of Loathing.ash
index 553c5837..f3900aa4 100644
--- a/Source/relay/TourGuide/Paths/Avatar of West of Loathing.ash
+++ b/Source/relay/TourGuide/Paths/Avatar of West of Loathing.ash
@@ -113,7 +113,7 @@ void PathAvatarOfWestOfLoathingGenerateResource(ChecklistEntry [int] resource_en
string title = pluralise(banish_count, "beancannon banish", "beancannon banishes");
if (!in_ronin())
title = "Beancannon banishes";
- resource_entries.listAppend(ChecklistEntryMake("__skill beancannon", url, ChecklistSubentryMake(title, "", description), 8).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("West Loathing path beancannon banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__skill beancannon", url, ChecklistSubentryMake(title, "", description), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("West Loathing path beancannon banish"));
}
}
diff --git a/Source/relay/TourGuide/Quests/Level 13.ash b/Source/relay/TourGuide/Quests/Level 13.ash
index 3200bb70..0c675d6d 100644
--- a/Source/relay/TourGuide/Quests/Level 13.ash
+++ b/Source/relay/TourGuide/Quests/Level 13.ash
@@ -1134,6 +1134,8 @@ void QLevel13GenerateTasks(ChecklistEntry [int] task_entries, ChecklistEntry [in
}
if (my_mp() < $skill[saucegeyser].mp_cost() * 4.0)
subentry.entries.listAppend(HTMLGenerateSpanFont("Restore some MP first.", "red"));
+ if (__iotms_usable[lookupItem("candy cane sword cane")])
+ subentry.entries.listAppend("Also, consider using your Candy Cane Sword Cane's surprisingly sweet slash to cut the wall's HP by 75%!");
if (need_modifier_output)
{
subentry.modifiers.listAppend("mysticality");
diff --git a/Source/relay/TourGuide/Sections/Location Bar Popup.ash b/Source/relay/TourGuide/Sections/Location Bar Popup.ash
index 350d8419..33ce6898 100644
--- a/Source/relay/TourGuide/Sections/Location Bar Popup.ash
+++ b/Source/relay/TourGuide/Sections/Location Bar Popup.ash
@@ -1003,7 +1003,33 @@ buffer generateLocationPopup(float bottom_coordinates, boolean location_bar_loca
fl_entry_width_weight[fl_entries.count() - 1] = width_weight;
}
-
+ // ----------- NEW BIT FROM SCOTCH ABOUT BOFA -------------
+ if (true)
+ {
+ if ($skill[just the facts].have_skill()) {
+ string bofaText;
+ string bofaEffect = m.fact_type();
+ string factAppend;
+
+ // TODO: Bunch of stuff, this is a first implementation. Goals:
+ // - Try to figure out a nicer way to format this.
+ // - Filter out the "junk" BOFA results.
+ if (bofaEffect == "item") factAppend = HTMLGenerateSpanFont(m.item_fact().name,"red");
+ if (bofaEffect == "effect") factAppend = HTMLGenerateSpanFont(`{m.effect_fact().name} ({m.numeric_fact()})`,"blue");
+ bofaText = `{factAppend}`;
+
+ // I tried to put this a few places. First I tried in the stats
+ // sidebar, then I tried under the name, then I tried as an
+ // appended item. I ended up preferring having it generate in
+ // visibly in large zones with cutoff entries. I am pretty sure
+ // the "best" solution is a more elegant way to add it to the
+ // item list, but this initial implementation is good enough for
+ // now, I think.
+
+ fl_entries.listAppend(bofaText);
+ fl_entry_styles[fl_entries.count() - 1] = "text-align:left;font-size:0.8em";
+ }
+ }
//FIXME handle canceling NC
buffer rate_buffer;
diff --git a/Source/relay/TourGuide/Sets/Familiars.ash b/Source/relay/TourGuide/Sets/Familiars.ash
index a0c1a86d..cbed9d17 100644
--- a/Source/relay/TourGuide/Sets/Familiars.ash
+++ b/Source/relay/TourGuide/Sets/Familiars.ash
@@ -306,7 +306,7 @@ void SFamiliarsGenerateResource(ChecklistEntry [int] resource_entries)
if (__misc_state["have muscle class combat skill"])
{
if (tag_with_banish_tag)
- resource_entries.listAppend(ChecklistEntryMake("__familiar nanorhino", "", ChecklistSubentryMake("Nanorhino Banish", "", description_banish)).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Nanorhino familiar banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__familiar nanorhino", "", ChecklistSubentryMake("Nanorhino Banish", "", description_banish), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Nanorhino familiar banish"));
else
subentries.listAppend(ChecklistSubentryMake("Nanorhino Banish", "", description_banish));
}
diff --git a/Source/relay/TourGuide/Sets/Misc Items.ash b/Source/relay/TourGuide/Sets/Misc Items.ash
index 46b3e2b7..36ab2929 100644
--- a/Source/relay/TourGuide/Sets/Misc Items.ash
+++ b/Source/relay/TourGuide/Sets/Misc Items.ash
@@ -163,7 +163,7 @@ void SMiscItemsGenerateResource(ChecklistEntry [int] resource_entries)
if ($item[pantsgiving].equipped_amount() == 0)
tasks.listAppend("equip pantsgiving");
tasks.listAppend("cast talk about politics");
- resource_entries.listAppend(ChecklistEntryMake("__item pantsgiving", url, ChecklistSubentryMake(pluralise(banishes_available, "Pantsgiving banish", "Pantsgiving banishes"), "", tasks.listJoinComponents(", ").capitaliseFirstLetter() + ".")).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Pantsgiving banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item pantsgiving", url, ChecklistSubentryMake(pluralise(banishes_available, "Pantsgiving banish", "Pantsgiving banishes"), "", tasks.listJoinComponents(", ").capitaliseFirstLetter() + "."), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Pantsgiving banish"));
}
@@ -325,12 +325,12 @@ void SMiscItemsGenerateResource(ChecklistEntry [int] resource_entries)
if (in_run) {
if (7014.to_item().available_amount() > 0) //Louder than bomb
- resource_entries.listAppend(ChecklistEntryMake("__item " + 7014.to_item().to_string(), "", ChecklistSubentryMake(pluralise(7014.to_item()), "", "Free run, 20-turn banish."), importance_level_item).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Louder than bomb banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item " + 7014.to_item().to_string(), "", ChecklistSubentryMake(pluralise(7014.to_item()), "", "Free run, 20-turn banish."), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Louder than bomb banish"));
if ($item[crystal skull].available_amount() > 0)
- resource_entries.listAppend(ChecklistEntryMake("__item crystal skull", "", ChecklistSubentryMake(pluralise($item[crystal skull]), "", "Takes a turn, 20-turn banish."), importance_level_item).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Crystal skull banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item crystal skull", "", ChecklistSubentryMake(pluralise($item[crystal skull]), "", "Takes a turn, 20-turn banish."), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Crystal skull banish"));
if ($item[harold's bell].available_amount() > 0 && $item[harold's bell].item_is_usable())
- resource_entries.listAppend(ChecklistEntryMake("__item harold's bell", "", ChecklistSubentryMake(pluralise($item[harold's bell]), "", "Takes a turn, 20-turn banish."), importance_level_item).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Harold's bell banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item harold's bell", "", ChecklistSubentryMake(pluralise($item[harold's bell]), "", "Takes a turn, 20-turn banish."), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Harold's bell banish"));
if ($item[lost key].available_amount() > 0 && $item[lost key].item_is_usable()){
string [int] details;
@@ -448,7 +448,7 @@ void SMiscItemsGenerateResource(ChecklistEntry [int] resource_entries)
}
}
if ($item[divine champagne popper].available_amount() > 0 && in_run) {
- resource_entries.listAppend(ChecklistEntryMake("__item divine champagne popper", "", ChecklistSubentryMake(pluralise($item[divine champagne popper]), "", "Free run, 5-turn banish."), importance_level_unimportant_item).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Champagne popper banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item divine champagne popper", "", ChecklistSubentryMake(pluralise($item[divine champagne popper]), "", "Free run, 5-turn banish."), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Champagne popper banish"));
}
if (__misc_state["need to level"]) {
if ($item[dance card].available_amount() > 0 && my_primestat() == $stat[moxie] && in_ronin()) {
@@ -612,10 +612,10 @@ void SMiscItemsGenerateResource(ChecklistEntry [int] resource_entries)
resource_entries.listAppend(ChecklistEntryMake("__item vitachoconutriment capsule", "inventory.php?ftext=vitachoconutriment+capsule", ChecklistSubentryMake(pluralise($item[vitachoconutriment capsule]), "", line), importance_level_unimportant_item).ChecklistEntrySetIDTag("Vitachoconutriment capsule"));
}
if (in_run && lookupItem("tryptophan dart").available_amount() > 0 && in_ronin() && lookupItem("tryptophan dart").item_is_usable()) {
- resource_entries.listAppend(ChecklistEntryMake("__item tryptophan dart", "", ChecklistSubentryMake(pluralise(lookupItem("tryptophan dart")), "", "Free run/banish."), 6).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Tryptophan dart banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item tryptophan dart", "", ChecklistSubentryMake(pluralise(lookupItem("tryptophan dart")), "", "Non-free all-day banish."), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Tryptophan dart banish"));
}
if (in_run && __misc_state["free runs usable"] && get_property_int("_humanMuskUses") < 3 && lookupItem("human musk").available_amount() > 0 && lookupItem("human musk") != $item[none]) {
- resource_entries.listAppend(ChecklistEntryMake("__item human musk", "", ChecklistSubentryMake(MIN(lookupItem("human musk").available_amount(), 3 - get_property_int("_humanMuskUses")).pluralise("human musk", "human musks"), "", "Free run/banish. Consumes item."), 6).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Human musk banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item human musk", "", ChecklistSubentryMake(MIN(lookupItem("human musk").available_amount(), 3 - get_property_int("_humanMuskUses")).pluralise("human musk", "human musks"), "", "Free run/banish. Consumes item."), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Human musk banish"));
}
if ($item[drum machine].available_amount() > 0 && in_run && (my_adventures() <= 1 || (availableDrunkenness() < 0 && availableDrunkenness() > -4 && my_adventures() >= 1)) && __quest_state["Level 11 Desert"].state_boolean["Desert Explored"] && $item[drum machine].item_is_usable()) {
@@ -629,7 +629,7 @@ void SMiscItemsGenerateResource(ChecklistEntry [int] resource_entries)
if ($items[stinky cheese sword,stinky cheese diaper,stinky cheese wheel,stinky cheese eye,Staff of Queso Escusado].available_amount() > 0) {
if (!get_property_boolean("_stinkyCheeseBanisherUsed"))
- resource_entries.listAppend(ChecklistEntryMake("__item stinky cheese eye", "", ChecklistSubentryMake("Stinky cheese eye banish", "", "Free run.")).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Stinky cheese banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item stinky cheese eye", "", ChecklistSubentryMake("Stinky cheese eye banish", "", "Free run."), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Stinky cheese banish"));
int stinky_cheese_charge = min(100, get_property_int("_stinkyCheeseCount"));
string title;
@@ -660,7 +660,8 @@ void SMiscItemsGenerateResource(ChecklistEntry [int] resource_entries)
}
if (in_run) {
- if ($item[tattered scrap of paper].available_amount() > 0 && __misc_state["free runs usable"] && $item[tattered scrap of paper].item_is_usable()) {
+ // As of the ELG change, tatters are worse than other options. Only show if the user doesn't have those options.
+ if ($item[tattered scrap of paper].available_amount() > 0 && __misc_state["free runs usable"] && $item[tattered scrap of paper].item_is_usable() && !__iotms_usable[lookupItem("spring shoes")] && !__iotms_usable[lookupItem("spring shoes")] && $item[roman candelabra].available_amount() == 0) {
string [int] description;
description.listAppend(($item[tattered scrap of paper].available_amount() / 2.0).roundForOutput(1) + " free runs.");
if (in_bad_moon())
@@ -830,7 +831,7 @@ void SMiscItemsGenerateResource(ChecklistEntry [int] resource_entries)
if ($item[smoke grenade].available_amount() > 0 && in_run) {
string description = "Turn-costing banish. (lasts 20 turns, no stats, no items, no meat)";
- resource_entries.listAppend(ChecklistEntryMake("__item smoke grenade", "", ChecklistSubentryMake(pluralise($item[Smoke grenade]), "", description), importance_level_unimportant_item).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Smoke grenade banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item smoke grenade", "", ChecklistSubentryMake(pluralise($item[Smoke grenade]), "", description), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Smoke grenade banish"));
}
if ($item[pile of ashes].available_amount() > 0 && in_run) {
@@ -1062,7 +1063,7 @@ void SMiscItemsGenerateResource(ChecklistEntry [int] resource_entries)
else
line += "30 MP";
description.listAppend(line + ".");
- resource_entries.listAppend(ChecklistEntryMake("__item V for Vivala mask", url, ChecklistSubentryMake("Creepy Grin usable", "", description), importance_level_item).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Vivala mask banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item V for Vivala mask", url, ChecklistSubentryMake("Creepy Grin usable", "", description), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Vivala mask banish"));
}
if (get_property_int("_vmaskAdv") < 10) {
string url;
@@ -1237,7 +1238,7 @@ void SMiscItemsGenerateResource(ChecklistEntry [int] resource_entries)
}
if ($item[mafia middle finger ring].available_amount() > 0 && !get_property_boolean("_mafiaMiddleFingerRingUsed")) {
- resource_entries.listAppend(ChecklistEntryMake("__item mafia middle finger ring", ($item[mafia middle finger ring].equipped_amount() == 0 ? $item[mafia middle finger ring].invSearch() : ""), ChecklistSubentryMake("Mafia middle finger ring banish/free run", "", "Once/day, 60 turn duration." + ($item[mafia middle finger ring].equipped_amount() == 0 ? " Equip first." : "")), 10).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Mafia middle finger ring banish"));
+ resource_entries.listAppend(ChecklistEntryMake("__item mafia middle finger ring", ($item[mafia middle finger ring].equipped_amount() == 0 ? $item[mafia middle finger ring].invSearch() : ""), ChecklistSubentryMake("Mafia middle finger ring banish/free run", "", "Once/day, 60 turn duration." + ($item[mafia middle finger ring].equipped_amount() == 0 ? " Equip first." : "")), 0).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Mafia middle finger ring banish"));
}
diff --git a/Source/relay/TourGuide/Sets/Sneaks.ash b/Source/relay/TourGuide/Sets/Sneaks.ash
index f02b0b30..ff807e79 100644
--- a/Source/relay/TourGuide/Sets/Sneaks.ash
+++ b/Source/relay/TourGuide/Sets/Sneaks.ash
@@ -40,8 +40,9 @@ void SocialDistanceGenerator(ChecklistEntry [int] resource_entries)
// usable if we have pill keeper plus free sneaks or spleen sneaks available
final.sneakCondition = __iotms_usable[lookupItem("Eight Days a Week Pill Keeper")] && (freeSneakLeft + spleenSneaks > 0);
+ // never noticed I didn't explicitly say this was pillkeeper in the tile lol
final.sneakCount = freeSneakLeft + spleenSneaks;
- final.tileDescription = get_property_boolean("_freePillKeeperUsed") ? "" : `1x free sneak, `;
+ final.tileDescription = get_property_boolean("_freePillKeeperUsed") ? "" : `1x PillKeeper free sneak, `;
final.tileDescription = final.tileDescription + `{spleenSneaks}x sneaks for 3 spleen each`;
return final;
}
diff --git a/Source/relay/TourGuide/Settings.ash b/Source/relay/TourGuide/Settings.ash
index 6ad6e269..cee0dec9 100644
--- a/Source/relay/TourGuide/Settings.ash
+++ b/Source/relay/TourGuide/Settings.ash
@@ -1,5 +1,5 @@
//These settings are for development. Don't worry about editing them.
-string __version = "2.2.1"; // pushed to 2.2.1 on jill/leaves tiles
+string __version = "2.2.2"; // pushed to 2.2.1 on jill/leaves tiles
//Path and name of the .js file. In case you change either.
string __javascript = "TourGuide/TourGuide.js";
diff --git a/Source/relay/TourGuide/State.ash b/Source/relay/TourGuide/State.ash
index b6239063..2cf5ef47 100644
--- a/Source/relay/TourGuide/State.ash
+++ b/Source/relay/TourGuide/State.ash
@@ -338,7 +338,7 @@ void setUpState()
blank_outs_usable = false;
__misc_state["blank outs usable"] = free_runs_usable;
-
+ // TODO: reconfig this whole state thing re: free runs.
boolean free_runs_available = false;
if (familiar_is_usable($familiar[pair of stomping boots]) || ($skill[the ode to booze].skill_is_usable() && familiar_is_usable($familiar[Frumious Bandersnatch])))
free_runs_available = true;
diff --git a/Source/relay/TourGuide/Support/IOTMs.ash b/Source/relay/TourGuide/Support/IOTMs.ash
index aa29d3d3..c8f8e42c 100644
--- a/Source/relay/TourGuide/Support/IOTMs.ash
+++ b/Source/relay/TourGuide/Support/IOTMs.ash
@@ -138,8 +138,13 @@ void initialiseIOTMsUsable()
if (lookupItem("cosmic bowling ball").available_amount() > 0 || get_property_int("_cosmicBowlingSkillsUsed") > 0) //Jan 2022
// change to use tracking property if/when mafia adds one from coolitems.php
__iotms_usable[lookupItem("cosmic bowling ball")] = true;
- if (lookupItem("unbreakable umbrella").available_amount() > 0) //Mar 2021
+
+ if (lookupItem("unbreakable umbrella").available_amount() > 0) //Mar 2022
__iotms_usable[lookupItem("unbreakable umbrella")] = true;
+
+ if (available_amount($item[jurassic parka]) > 0) // adding because of a strange issue w/ Sneaks.ash...
+ __iotms_usable[$item[jurassic parka]] = true;
+
if ($item[Clan VIP Lounge key].item_amount() > 0)
{
//FIXME all
@@ -150,9 +155,24 @@ void initialiseIOTMsUsable()
if (lookupItem("candy cane sword cane").available_amount() > 0) //Dec 2023
__iotms_usable[lookupItem("candy cane sword cane")] = true;
- if (lookupItem("spring shoes").available_amount() > 0) //Feb 2023
+ if (lookupItem("spring shoes").available_amount() > 0) //Feb 2024
__iotms_usable[lookupItem("spring shoes")] = true;
+ if (lookupItem("everfull dart holster").available_amount() > 0) //Mar 2024
+ __iotms_usable[lookupItem("everfull dart holster")] = true;
+
+ if (lookupItem("apriling band helmet").available_amount() > 0) //Apr 2024
+ __iotms_usable[lookupItem("apriling band helmet")] = true;
+
+ if (lookupItem("mayam calendar").available_amount() > 0) //May 2024
+ __iotms_usable[lookupItem("mayam calendar")] = true;
+
+ if (lookupItem("roman candelabra").available_amount() > 0) //Jun 2024
+ __iotms_usable[lookupItem("roman candelabra")] = true;
+
+ if (lookupItem("tearaway pants").available_amount() > 0) //Aug 2024
+ __iotms_usable[lookupItem("tearaway pants")] = true;
+
//Can't use many things in G-Lover
if (my_path().id == PATH_G_LOVER) //Path 33
{
@@ -285,8 +305,12 @@ void initialiseIOTMsUsable()
replicaCheck("2002 Mr. Store Catalog"); # handled in own tile
replicaCheck("August Scepter"); # handled in own tile
- // Swap parka to false if you aren't torso aware.
- if (!__misc_state["Torso aware"])
+ // Swap parka to false if you aren't torso aware. You cannot use the __misc_state
+ // shortcuts here, because this comes before it in execution. That's a sad
+ // disadvantage of all our bundling, did not remotely realize state wasn't
+ // instantiated before this. That means the parka stuff hasn't shown up since
+ // Legacy of Loathing lmao.
+ if (!$skill[12].have_skill())
{
__iotms_usable[lookupItem("Jurassic Parka")] = false;
}