diff --git a/Source/relay/TourGuide/Items of the Month/2023/Candy Cane Sword Cane b/Source/relay/TourGuide/Items of the Month/2023/Candy Cane Sword Cane
deleted file mode 100644
index d2c224a5..00000000
--- a/Source/relay/TourGuide/Items of the Month/2023/Candy Cane Sword Cane
+++ /dev/null
@@ -1,68 +0,0 @@
-//candy cane sword cane
-RegisterTaskGenerationFunction("IOTMCandyCaneSwordGenerateTasks");
-void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEntry [int] optional_task_entries, ChecklistEntry [int] future_task_entries)
-{
- if (!__iotms_usable[lookupItem("candy cane sword cane")]) return;
- string [int] description;
- string [int] description2;
- string [int] options;
- if (__misc_state["in run"] && my_path().id != PATH_COMMUNITY_SERVICE)
- {
- string url = "inventory.php?ftext=candy+cane+sword+cane";
- description2.listAppend(HTMLGenerateSpanFont("You're", "red") + " " + HTMLGenerateSpanFont("in a", "green") + " " + HTMLGenerateSpanFont("candy", "red") + " " + HTMLGenerateSpanFont("cane", "green") + " " + HTMLGenerateSpanFont("sword", "red") + " " + HTMLGenerateSpanFont("cane", "green") + " " + HTMLGenerateSpanFont("noncom", "red") + " " + HTMLGenerateSpanFont("zone!", "green"));
- //this supernag will only appear while lastadv is in a cane zone AND the option has not been taken already
- //candy cane advs
- if (!get_property_boolean("_candyCaneSwordLyle")) {
- options.listAppend(HTMLGenerateSpanOfClass("Bonus:", "r_bold") + " Lyle monorail +40% init buff");
- }
- if (!get_property_boolean("candyCaneSwordBlackForest")) {
- options.listAppend(HTMLGenerateSpanOfClass("Bonus:", "r_bold") + " Black Forest +8 exploration");
- if (($locations[The Black Forest] contains __last_adventure_location)) {
- task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake("Equip the candy cane sword cane", "", description2), -11));
- }
- }
- if (!get_property_boolean("candyCaneSwordDailyDungeon")) {
- options.listAppend(HTMLGenerateSpanOfClass("Bonus:", "r_bold") + " Daily Dungeon +1 fat loot token");
- if (($locations[The Daily Dungeon] contains __last_adventure_location)) {
- task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake("Equip the candy cane sword cane", "", description2), -11));
- }
- }
- if (!get_property_boolean("candyCaneSwordApartmentBuilding")) {
- options.listAppend(HTMLGenerateSpanOfClass("Bonus:", "r_bold") + " Hidden Apartment +1 Curse");
- if (($locations[The Hidden Apartment Building] contains __last_adventure_location)) {
- task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake("Equip the candy cane sword cane", "", description2), -11));
- }
- }
- if (!get_property_boolean("candyCaneSwordBowlingAlley")) {
- options.listAppend(HTMLGenerateSpanOfClass("Bonus:", "r_bold") + " Hidden Bowling Alley +1 bowlo");
- if (($locations[The Hidden Bowling Alley] contains __last_adventure_location)) {
- task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake("Equip the candy cane sword cane", "", description2), -11));
- }
- }
- if (!get_property_boolean("candyCaneSwordShore")) {
- options.listAppend(HTMLGenerateSpanOfClass("Alternate:", "r_bold") + " Shore: +2 scrips");
- if (($locations[The Shore\, Inc. Travel Agency] contains __last_adventure_location)) {
- task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake("Equip the candy cane sword cane", "", description2), -11));
- }
- }
- if (locationAvailable($location[The Battlefield (Frat Uniform)]) == false) {
- options.listAppend(HTMLGenerateSpanOfClass("Alternate:", "r_bold") + " Hippy Camp: Redirect to war start");
- if (($locations[Wartime Hippy Camp,Wartime Frat House] contains __last_adventure_location)) {
- task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake("Equip the candy cane sword cane", "", description2), -11));
- }
- }
- if (locationAvailable($location[The Red Zeppelin]) == true) {
- options.listAppend(HTMLGenerateSpanOfClass("Alternate: ", "r_bold") + "Zeppelin Protesters: " + HTMLGenerateSpanFont("double Sleaze", "purple"));
- if (($locations[A Mob of Zeppelin Protesters] contains __last_adventure_location)) {
- task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake("Equip the candy cane sword cane", "", description2), -11));
- }
- }
- if (options.count() > 0)
- description.listAppend("Candy cane sword noncoms:" + options.listJoinComponents("
").HTMLGenerateIndentedText());
-
- if (lookupItem("candy cane sword cane").equipped_amount() == 0) {
- description.listAppend(HTMLGenerateSpanFont("Equip the candy cane sword", "red"));
- }
- optional_task_entries.listAppend(ChecklistEntryMake("__item Candy cane sword cane", url, ChecklistSubentryMake("Candy cane sword cane noncombats", description)).ChecklistEntrySetCombinationTag("CCSC tasks").ChecklistEntrySetIDTag("CCSC"));
- }
-}
diff --git a/Source/relay/TourGuide/Items of the Month/2023/Candy Cane Sword Cane.ash b/Source/relay/TourGuide/Items of the Month/2023/Candy Cane Sword Cane.ash
new file mode 100644
index 00000000..54fb9157
--- /dev/null
+++ b/Source/relay/TourGuide/Items of the Month/2023/Candy Cane Sword Cane.ash
@@ -0,0 +1,100 @@
+//candy cane sword cane
+RegisterTaskGenerationFunction("IOTMCandyCaneSwordGenerateTasks");
+void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEntry [int] optional_task_entries, ChecklistEntry [int] future_task_entries)
+{
+ // Initialization. Good use of "lookupItem" for backwards compatibility reasons.
+ if (!__iotms_usable[lookupItem("candy cane sword cane")]) return;
+ string [int] description;
+ string [int] describeSupernag;
+ string [int] options;
+
+ // Added a check for all paths where you do not want the supernag:
+ // - Community Service & Grey Goo: irrelevant
+ // - Avatar of Boris: cannot wield a weapon other than trusty
+ boolean pathCheck = true;
+ pathCheck = my_path().id == PATH_COMMUNITY_SERVICE ? false : true;
+ pathCheck = my_path().id == PATH_GREY_GOO ? false : true;
+ pathCheck = my_path().id == PATH_AVATAR_OF_BORIS ? false : true;
+
+ // __misc_state["in run"] &&
+ if (pathCheck)
+ {
+ string url = "inventory.php?ftext=candy+cane+sword+cane";
+ // This is the description for the supernag. The supernag is in the task_entries, buried within conditional ifs and only shows up if you're in the zone.
+ describeSupernag.listAppend(HTMLGenerateSpanFont("You're", "red") + " " + HTMLGenerateSpanFont("in a", "green") + " " + HTMLGenerateSpanFont("candy", "red") + " " + HTMLGenerateSpanFont("cane", "green") + " " + HTMLGenerateSpanFont("sword", "red") + " " + HTMLGenerateSpanFont("cane", "green") + " " + HTMLGenerateSpanFont("noncom", "red") + " " + HTMLGenerateSpanFont("zone!", "green"));
+
+ // This enumerates the useful CCSC adventures.
+
+ if (!get_property_boolean("_candyCaneSwordLyle")) {
+ options.listAppend(HTMLGenerateSpanOfClass("Bonus:", "r_bold") + " Lyle's Monorail Buff (+40% init)");
+ }
+
+ // Added a check for if they are past black forest
+ if (!get_property_boolean("candyCaneSwordBlackForest") && __quest_state["Level 11"].mafia_internal_step < 2) {
+ options.listAppend(HTMLGenerateSpanOfClass("Bonus:", "r_bold") + " The Black Forest (+8 exploration)");
+ if (($locations[The Black Forest] contains __last_adventure_location)) {
+ task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake("Equip the candy cane sword cane", "", describeSupernag), -11));
+ }
+ }
+
+ // Added a check for if they need the loot token.
+ if (!get_property_boolean("candyCaneSwordDailyDungeon") && __misc_state_int["fat loot tokens needed"] > 0) {
+ options.listAppend(HTMLGenerateSpanOfClass("Bonus:", "r_bold") + " Daily Dungeon (+1 fat loot token)");
+ if (($locations[The Daily Dungeon] contains __last_adventure_location)) {
+ task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake("Equip the candy cane sword cane", "", describeSupernag), -11));
+ }
+ }
+
+ // Added a check for if they need a curse
+ if (!get_property_boolean("candyCaneSwordApartmentBuilding") && get_property_int("hiddenApartmentProgress") < 8) {
+ options.listAppend(HTMLGenerateSpanOfClass("Bonus:", "r_bold") + " Hidden Apartment (+1 Curse)");
+ if (($locations[The Hidden Apartment Building] contains __last_adventure_location)) {
+ task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake("Equip the candy cane sword cane", "", describeSupernag), -11));
+ }
+ }
+
+ // Added a check for if they need bowling alley access by checking the bowling alley progress var
+ if (!get_property_boolean("candyCaneSwordBowlingAlley") && get_property_int("hiddenBowlingAlleyProgress") < 7) {
+ options.listAppend(HTMLGenerateSpanOfClass("Bonus:", "r_bold") + " Hidden Bowling Alley (+1 free bowl)");
+ if (($locations[The Hidden Bowling Alley] contains __last_adventure_location)) {
+ task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake("Equip the candy cane sword cane", "", describeSupernag), -11));
+ }
+ }
+
+ // Added a check for if they need shore access
+ if (!get_property_boolean("candyCaneSwordShore") && !__misc_state["mysterious island available"]) {
+ options.listAppend(HTMLGenerateSpanOfClass("Alternate:", "r_bold") + " Shore (2 scrips for the price of 1)");
+ if (($locations[The Shore\, Inc. Travel Agency] contains __last_adventure_location)) {
+ task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake("Equip the candy cane sword cane", "", describeSupernag), -11));
+ }
+ }
+
+ // Added a check for if war is finished
+ if (locationAvailable($location[The Battlefield (Frat Uniform)]) == false && !__quest_state["Level 12"].finished) {
+ options.listAppend(HTMLGenerateSpanOfClass("Alternate:", "r_bold") + " Hippy Camp (Redirect to the War Start NC)");
+ if (($locations[Wartime Hippy Camp,Wartime Frat House] contains __last_adventure_location)) {
+ task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake("Equip the candy cane sword cane", "", describeSupernag), -11));
+ }
+ }
+
+ // Changed condition to <80 protestors check
+ if (get_property_int("zeppelinProtestors") < 80) {
+ options.listAppend(HTMLGenerateSpanOfClass("Alternate: ", "r_bold") + "Zeppelin Protesters " + HTMLGenerateSpanFont("(double Sleaze damage!)", "purple"));
+ if (($locations[A Mob of Zeppelin Protesters] contains __last_adventure_location)) {
+ task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake("Equip the candy cane sword cane", "", describeSupernag), -11));
+ }
+ }
+
+ if (options.count() > 0) {
+ description.listAppend("Ensure your CCSC is equipped for these useful NCs:" + options.listJoinComponents("
").HTMLGenerateIndentedText());
+ }
+
+ if (lookupItem("candy cane sword cane").equipped_amount() == 0) {
+ description.listAppend(HTMLGenerateSpanFont("(Equip the candy cane sword cane -- it's not equipped!)", "red"));
+ }
+ // Only generate the tile if there are actual options.
+ if (options.count() > 0) {
+ optional_task_entries.listAppend(ChecklistEntryMake("__item Candy cane sword cane", url, ChecklistSubentryMake("Candy cane sword cane noncombats", description)).ChecklistEntrySetCombinationTag("CCSC tasks").ChecklistEntrySetIDTag("CCSC"));
+ }
+ }
+}
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 f8245501..1a642c5c 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
@@ -141,4 +141,5 @@ import "relay/TourGuide/Items of the Month/2023/Patriotic Eagle.ash";
import "relay/TourGuide/Items of the Month/2023/August Scepter.ash";
import "relay/TourGuide/Items of the Month/2023/Book of Facts.ash";
import "relay/TourGuide/Items of the Month/2023/Jill of all Trades.ash";
-import "relay/TourGuide/Items of the Month/2023/A Guide to Burning Leaves.ash";
\ No newline at end of file
+import "relay/TourGuide/Items of the Month/2023/A Guide to Burning Leaves.ash";
+import "relay/TourGuide/Items of the Month/2023/Candy Cane Sword Cane.ash";
\ No newline at end of file