From 1fa6130f700849d64c9ee8804c399dab54430c79 Mon Sep 17 00:00:00 2001
From: uthuluc <58225812+uthuluc@users.noreply.github.com>
Date: Sat, 9 Dec 2023 23:56:46 -0500
Subject: [PATCH 01/10] Create Candy Cane Sword Cane
untested
---
.../2023/Candy Cane Sword Cane | 67 +++++++++++++++++++
1 file changed, 67 insertions(+)
create mode 100644 Source/relay/TourGuide/Items of the Month/2023/Candy Cane Sword Cane
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
new file mode 100644
index 00000000..d4b1e3ea
--- /dev/null
+++ b/Source/relay/TourGuide/Items of the Month/2023/Candy Cane Sword Cane
@@ -0,0 +1,67 @@
+//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"));
+ //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 home of the future] 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"));
+ }
+}
From 64613cad59921aa045b46576e88dc1497cf41908 Mon Sep 17 00:00:00 2001
From: uthuluc <58225812+uthuluc@users.noreply.github.com>
Date: Sat, 9 Dec 2023 23:57:40 -0500
Subject: [PATCH 02/10] Update Candy Cane Sword Cane
---
.../TourGuide/Items of the Month/2023/Candy Cane Sword Cane | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
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
index d4b1e3ea..2e44086e 100644
--- 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
@@ -10,13 +10,14 @@ void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, Checklis
{
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 home of the future] contains __last_adventure_location)) {
+ 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));
}
}
From 5456e3af203e21e36a1b99924ca58e2a5c335b30 Mon Sep 17 00:00:00 2001
From: uthuluc <58225812+uthuluc@users.noreply.github.com>
Date: Sun, 10 Dec 2023 00:00:56 -0500
Subject: [PATCH 03/10] Update Candy Cane Sword Cane
---
.../TourGuide/Items of the Month/2023/Candy Cane Sword Cane | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
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
index 2e44086e..d2c224a5 100644
--- 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
@@ -2,7 +2,7 @@
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;
+ if (!__iotms_usable[lookupItem("candy cane sword cane")]) return;
string [int] description;
string [int] description2;
string [int] options;
From 0f3f04c1c057726979c353abfbc5e5d880c55bcd Mon Sep 17 00:00:00 2001
From: Aaron McGuire
Date: Sat, 2 Mar 2024 10:50:40 -0500
Subject: [PATCH 04/10] adding a few new conditions, testing
---
.../2023/Candy Cane Sword Cane | 68 ------------
.../2023/Candy Cane Sword Cane.ash | 100 ++++++++++++++++++
.../Items of the Month import.ash | 3 +-
3 files changed, 102 insertions(+), 69 deletions(-)
delete mode 100644 Source/relay/TourGuide/Items of the Month/2023/Candy Cane Sword Cane
create mode 100644 Source/relay/TourGuide/Items of the Month/2023/Candy Cane Sword Cane.ash
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
From 95b903755bc7e364c747d7774c2b75da6a152f4c Mon Sep 17 00:00:00 2001
From: Aaron McGuire
Date: Sat, 2 Mar 2024 11:00:19 -0500
Subject: [PATCH 05/10] trying to get the damn tile to actually show on bundle
---
.../2023/Candy Cane Sword Cane.ash | 29 +++++++++----------
1 file changed, 14 insertions(+), 15 deletions(-)
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
index 54fb9157..bfb02fb2 100644
--- 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
@@ -1,4 +1,4 @@
-//candy cane sword cane
+// Candy Cane Sword Cane
RegisterTaskGenerationFunction("IOTMCandyCaneSwordGenerateTasks");
void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEntry [int] optional_task_entries, ChecklistEntry [int] future_task_entries)
{
@@ -8,23 +8,22 @@ void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, Checklis
string [int] describeSupernag;
string [int] options;
- // Added a check for all paths where you do not want the supernag:
+ // Added a check for all paths where you do not want the tile at all:
// - Community Service & Grey Goo: irrelevant
- // - Avatar of Boris: cannot wield a weapon other than trusty
+ // - Avatar of Boris: cannot wield a weapon other than trusty or use a familiar
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)
+ // __misc_state["in run"] && pathCheck
+ if (true)
{
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.
-
+ // This enumerates the useful CCSC adventures
if (!get_property_boolean("_candyCaneSwordLyle")) {
options.listAppend(HTMLGenerateSpanOfClass("Bonus:", "r_bold") + " Lyle's Monorail Buff (+40% init)");
}
@@ -87,14 +86,14 @@ void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, Checklis
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"));
+ }
+
+ optional_task_entries.listAppend(ChecklistEntryMake("__item Candy cane sword cane", url, ChecklistSubentryMake("Candy cane sword cane noncombats", description)).ChecklistEntrySetCombinationTag("CCSC tasks").ChecklistEntrySetIDTag("CCSC"));
}
- 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"));
- }
- }
+ }
}
+
From 37e42930b26c067354441b436476877751905e74 Mon Sep 17 00:00:00 2001
From: Aaron McGuire
Date: Sat, 2 Mar 2024 11:06:26 -0500
Subject: [PATCH 06/10] ...oh, yeah, adding it to IOTMS.ash would do it
---
.../Items of the Month/2023/Candy Cane Sword Cane.ash | 4 ++--
Source/relay/TourGuide/Support/IOTMs.ash | 6 +++++-
2 files changed, 7 insertions(+), 3 deletions(-)
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
index bfb02fb2..864673c9 100644
--- 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
@@ -16,8 +16,8 @@ void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, Checklis
pathCheck = my_path().id == PATH_GREY_GOO ? false : true;
pathCheck = my_path().id == PATH_AVATAR_OF_BORIS ? false : true;
- // __misc_state["in run"] && pathCheck
- if (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.
diff --git a/Source/relay/TourGuide/Support/IOTMs.ash b/Source/relay/TourGuide/Support/IOTMs.ash
index 90853563..63f37457 100644
--- a/Source/relay/TourGuide/Support/IOTMs.ash
+++ b/Source/relay/TourGuide/Support/IOTMs.ash
@@ -50,7 +50,7 @@ void initialiseIOTMsUsable()
if (__campground[lookupItem("Little Geneticist DNA-Splicing Lab")] > 0)
__iotms_usable[lookupItem("Little Geneticist DNA-Splicing Lab")] = true;
if (__campground[lookupItem("Replica Little Geneticist DNA-Splicing Lab")] > 0)
- __iotms_usable[lookupItem("Little Geneticist DNA-Splicing Lab")] = true;
+ __[lookupItem("Little Geneticist DNA-Splicing Lab")] = true;
// __iotms_usable for gardens tracks whether the user has the garden installed.
// Gardens start returning 0 instead of 1 when the items are picked, so checking
@@ -145,6 +145,10 @@ void initialiseIOTMsUsable()
__iotms_usable[lookupItem("Clan Carnival Game")] = true;
__iotms_usable[$item[clan floundry]] = true;
}
+
+ if (lookupItem("candy cane sword cane").available_amount() > 0) //Mar 2021
+ __iotms_usable[lookupItem("candy cane sword cane")] = true;
+
//Can't use many things in G-Lover
if (my_path().id == PATH_G_LOVER) //Path 33
{
From cb6dbfd27322a7d8e72e034fc20596a6157fdef0 Mon Sep 17 00:00:00 2001
From: Aaron McGuire
Date: Sat, 2 Mar 2024 11:10:24 -0500
Subject: [PATCH 07/10] accidental copy/paste error
---
Source/relay/TourGuide/Support/IOTMs.ash | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/Source/relay/TourGuide/Support/IOTMs.ash b/Source/relay/TourGuide/Support/IOTMs.ash
index 63f37457..f1409968 100644
--- a/Source/relay/TourGuide/Support/IOTMs.ash
+++ b/Source/relay/TourGuide/Support/IOTMs.ash
@@ -50,7 +50,7 @@ void initialiseIOTMsUsable()
if (__campground[lookupItem("Little Geneticist DNA-Splicing Lab")] > 0)
__iotms_usable[lookupItem("Little Geneticist DNA-Splicing Lab")] = true;
if (__campground[lookupItem("Replica Little Geneticist DNA-Splicing Lab")] > 0)
- __[lookupItem("Little Geneticist DNA-Splicing Lab")] = true;
+ __iotms_usable[lookupItem("Little Geneticist DNA-Splicing Lab")] = true;
// __iotms_usable for gardens tracks whether the user has the garden installed.
// Gardens start returning 0 instead of 1 when the items are picked, so checking
@@ -145,8 +145,8 @@ void initialiseIOTMsUsable()
__iotms_usable[lookupItem("Clan Carnival Game")] = true;
__iotms_usable[$item[clan floundry]] = true;
}
-
- if (lookupItem("candy cane sword cane").available_amount() > 0) //Mar 2021
+
+ if (lookupItem("candy cane sword cane").available_amount() > 0) //Dec 2023
__iotms_usable[lookupItem("candy cane sword cane")] = true;
//Can't use many things in G-Lover
From 12f906544a9f96510be4b3af932c5d529685c83c Mon Sep 17 00:00:00 2001
From: Aaron McGuire
Date: Sat, 2 Mar 2024 11:19:06 -0500
Subject: [PATCH 08/10] a few last logic changes
---
.../2023/Candy Cane Sword Cane.ash | 23 +++++++++++--------
1 file changed, 13 insertions(+), 10 deletions(-)
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
index 864673c9..a6786d81 100644
--- 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
@@ -4,6 +4,8 @@ void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, Checklis
{
// Initialization. Good use of "lookupItem" for backwards compatibility reasons.
if (!__iotms_usable[lookupItem("candy cane sword cane")]) return;
+ int ccscEquipped = lookupItem("candy cane sword cane").equipped_amount();
+ string ccscEquipStatement = ccscEquipped > 0 ? "Keep your Candy Cane Sword Cane equipped!" : "Equip your Candy Cane Sword Cane!";
string [int] description;
string [int] describeSupernag;
string [int] options;
@@ -32,7 +34,7 @@ void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, Checklis
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));
+ task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake(ccscEquipStatement, "", describeSupernag), -11));
}
}
@@ -40,7 +42,7 @@ void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, Checklis
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));
+ task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake(ccscEquipStatement, "", describeSupernag), -11));
}
}
@@ -48,7 +50,7 @@ void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, Checklis
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));
+ task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake(ccscEquipStatement, "", describeSupernag), -11));
}
}
@@ -56,7 +58,7 @@ void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, Checklis
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));
+ task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake(ccscEquipStatement, "", describeSupernag), -11));
}
}
@@ -64,7 +66,7 @@ void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, Checklis
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));
+ task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake(ccscEquipStatement, "", describeSupernag), -11));
}
}
@@ -72,7 +74,7 @@ void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, Checklis
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));
+ task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake(ccscEquipStatement, "", describeSupernag), -11));
}
}
@@ -80,18 +82,19 @@ void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, Checklis
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));
+ task_entries.listAppend(ChecklistEntryMake("__item candy cane sword cane", url, ChecklistSubentryMake(ccscEquipStatement, "", describeSupernag), -11));
}
}
if (options.count() > 0) {
- description.listAppend("Ensure your CCSC is equipped for these useful NCs:" + options.listJoinComponents("
").HTMLGenerateIndentedText());
+ description.listAppend("Ensure your CCSC is equipped for useful NCs:" + options.listJoinComponents("
").HTMLGenerateIndentedText());
+ // Darkened from bright red to maroon as it will be irrelevant for many parts of the run.
if (lookupItem("candy cane sword cane").equipped_amount() == 0) {
- description.listAppend(HTMLGenerateSpanFont("(Equip the candy cane sword cane -- it's not equipped!)", "red"));
+ description.listAppend(HTMLGenerateSpanFont("Equip the Candy Cane Sword Cane!", "maroon"));
}
- optional_task_entries.listAppend(ChecklistEntryMake("__item Candy cane sword cane", url, ChecklistSubentryMake("Candy cane sword cane noncombats", description)).ChecklistEntrySetCombinationTag("CCSC tasks").ChecklistEntrySetIDTag("CCSC"));
+ optional_task_entries.listAppend(ChecklistEntryMake("__item Candy cane sword cane", url, ChecklistSubentryMake("Candy Cane Sword Cane NCs", description)).ChecklistEntrySetCombinationTag("CCSC tasks").ChecklistEntrySetIDTag("CCSC"));
}
}
From 2a764e1a9a4be269975e9c812a92c712d6588e47 Mon Sep 17 00:00:00 2001
From: Aaron McGuire
Date: Sat, 2 Mar 2024 11:23:03 -0500
Subject: [PATCH 09/10] add back in-run check for final main push
---
.../Items of the Month/2023/Candy Cane Sword Cane.ash | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
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
index a6786d81..6f00c1c1 100644
--- 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
@@ -18,8 +18,8 @@ void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, Checklis
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)
+ // Only show when in run, for obvious reasons.
+ if (__misc_state["in run"] && 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.
@@ -97,6 +97,7 @@ void IOTMCandyCaneSwordGenerateTasks(ChecklistEntry [int] task_entries, Checklis
optional_task_entries.listAppend(ChecklistEntryMake("__item Candy cane sword cane", url, ChecklistSubentryMake("Candy Cane Sword Cane NCs", description)).ChecklistEntrySetCombinationTag("CCSC tasks").ChecklistEntrySetIDTag("CCSC"));
}
- }
+ }
+
}
From 180b54fc4c9e2118b63dce8a24abcc5c0f817ef9 Mon Sep 17 00:00:00 2001
From: Aaron McGuire
Date: Sat, 2 Mar 2024 11:36:59 -0500
Subject: [PATCH 10/10] small spring shoes changes
---
.../Items of the Month/2024/Spring Shoes.ash | 19 +++++++++++++++++--
Source/relay/TourGuide/Support/IOTMs.ash | 3 +++
Source/relay/TourGuide/Support/Statics.ash | 4 ++++
3 files changed, 24 insertions(+), 2 deletions(-)
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 8b739f80..0f8ab53a 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
@@ -4,13 +4,25 @@ RegisterResourceGenerationFunction("IOTMSpringShoesGenerateResource");
void IOTMSpringShoesGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEntry [int] optional_task_entries, ChecklistEntry [int] future_task_entries)
{
- if (__misc_state["in run"] && available_amount($item[spring shoes]) > 0 && my_path().id != PATH_COMMUNITY_SERVICE)
+ // Initialization. Do not generate if you don't have spring shoes.
+ if (!__iotms_usable[lookupItem("spring shoes")]) return;
+
+ // Added a check for all paths where you do not want the tile at all:
+ // - Community Service: irrelevant
+ // - WereProfessor: is not a free run.
+
+ boolean pathCheck = true;
+ pathCheck = my_path().id == PATH_COMMUNITY_SERVICE ? false : true;
+ pathCheck = my_path().id == PATH_WEREPROFESSOR ? false : true;
+
+ // Technically, the available_amount here precludes the need for the initialization up top.
+ if (__misc_state["in run"] && available_amount($item[spring shoes]) > 0 && pathCheck)
{
if ($effect[everything looks green].have_effect() == 0)
{
string [int] description;
string url = "inventory.php?ftext=spring+shoes";
- description.listAppend(HTMLGenerateSpanFont("Run away from your problems!", "green"));
+ description.listAppend(HTMLGenerateSpanFont("Free-run away from your problems with the Spring Away skill!", "green"));
if (lookupItem("spring shoes").equipped_amount() == 0)
{
description.listAppend(HTMLGenerateSpanFont("Equip the spring shoes first.", "red"));
@@ -22,6 +34,9 @@ void IOTMSpringShoesGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEn
void IOTMSpringShoesGenerateResource(ChecklistEntry [int] resource_entries)
{
+ // Initialization. Do not generate iof you don't have spring shoes.
+ if (!__iotms_usable[lookupItem("spring shoes")]) return;
+
string [int] banishDescription;
banishDescription.listAppend("All day banish, doesn't end combat");
if (lookupItem("spring shoes").equipped_amount() == 0)
diff --git a/Source/relay/TourGuide/Support/IOTMs.ash b/Source/relay/TourGuide/Support/IOTMs.ash
index f1409968..ffb4b98f 100644
--- a/Source/relay/TourGuide/Support/IOTMs.ash
+++ b/Source/relay/TourGuide/Support/IOTMs.ash
@@ -148,6 +148,9 @@ 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
+ __iotms_usable[lookupItem("spring shoes")] = true;
//Can't use many things in G-Lover
if (my_path().id == PATH_G_LOVER) //Path 33
diff --git a/Source/relay/TourGuide/Support/Statics.ash b/Source/relay/TourGuide/Support/Statics.ash
index 0e0d7798..19bef736 100644
--- a/Source/relay/TourGuide/Support/Statics.ash
+++ b/Source/relay/TourGuide/Support/Statics.ash
@@ -56,6 +56,10 @@ static {
int PATH_JOURNEYMAN = 45;
int PATH_FALL_OF_THE_DINOSAURS = 46;
int PATH_AVATAR_OF_SHADOWS_OVER_LOATHING = 47;
+ int PATH_LEGACY_OF_LOATHING = 48;
+ int PATH_SMOL = 49; // easier to type
+ int PATH_A_SHRUNKEN_ADVENTURER_AM_I = 49;
+ int PATH_WEREPROFESSOR = 50;
}
float numeric_modifier_replacement(item it, string modifier_string) {