diff --git a/iotmcargo b/iotmcargo new file mode 100644 index 00000000..147d4cf4 --- /dev/null +++ b/iotmcargo @@ -0,0 +1,30 @@ +// Cargo cultist shorts +RegisterResourceGenerationFunction("IOTMCargoCultistShortsGenerateResource"); +void IOTMCargoCultistShortsGenerateResource(ChecklistEntry [int] resource_entries) +{ + if (!get_property_boolean("_cargoPocketEmptied")) { + string image_name = "__item cargo cultist shorts"; + string description = "Pick a pocket for something useful! Too many to list!"; + + string [int] options; + if (__misc_state["in run"] && my_path_id() != PATH_COMMUNITY_SERVICE) + { + if (!locationAvailable($location[The royal guard Chamber])) + { + options.listAppend("Stink like a filthworm drone"); + } + if (!locationAvailable($location[The eXtreme Slope]) == false) + { + options.listAppend("Mountain Man, YR for 2x ore"); + } + if ($location[The Battlefield (Frat Uniform)].turns_spent < 100) + { + options.listAppend("Green Ops Soldier, olfact for funny meme strategies"); + } + } + if (options.count() > 0) + options.listAppend("Possible pockets:
" + options.listJoinComponents("
").HTMLGenerateIndentedText()); + + resource_entries.listAppend(ChecklistEntryMake("__item cargo cultist shorts", "inventory.php?action=pocket", ChecklistSubentryMake("Cargo shorts pocket openable", "", description), 1).ChecklistEntrySetIDTag("Cargo shorts resource")); + } +} diff --git a/iotmcrystalball b/iotmcrystalball new file mode 100644 index 00000000..06111841 --- /dev/null +++ b/iotmcrystalball @@ -0,0 +1,21 @@ +//Miniature Crystal ball + +RegisterTaskGenerationFunction("IOTMCrystalBallGenerateTasks"); +void IOTMCrystalBallGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEntry [int] optional_task_entries, ChecklistEntry [int] future_task_entries) +{ + string title; + title = "Miniature crystal ball monster prediction"; + monster crystalBallPrediction = (get_property_monster("crystalBallMonster")); + location crystalBallZone = (get_property_location("crystalBallLocation")); + string [int] description; + if (!lookupItem("miniature crystal ball").equipped()) + { + description.listAppend("Next fight in " + HTMLGenerateSpanFont(crystalBallZone, "blue") + " will be: " + HTMLGenerateSpanFont(crystalBallPrediction, "blue")); + optional_task_entries.listAppend(ChecklistEntryMake("__item miniature crystal ball", "url", ChecklistSubentryMake(title, description))); + } + else + { + description.listAppend("Next fight in " + HTMLGenerateSpanFont(crystalBallZone, "blue") + " will be: " + HTMLGenerateSpanFont(crystalBallPrediction, "blue")); + task_entries.listAppend(ChecklistEntryMake("__item miniature crystal ball", "url", ChecklistSubentryMake(title, description), -11)); + } +} diff --git a/iotmemotionchip b/iotmemotionchip new file mode 100644 index 00000000..4d5c2f57 --- /dev/null +++ b/iotmemotionchip @@ -0,0 +1,87 @@ +//Emotion Chip +RegisterResourceGenerationFunction("IOTMEmotionChipGenerateResource"); +void IOTMEmotionChipGenerateResource(ChecklistEntry [int] resource_entries) +{ + if (!lookupSkill("Emotionally Chipped").have_skill()) + return; + ChecklistSubentry getEmotions() { + // Title + string main_title = "Emotion chip feelings"; + // Entries + string [int] description; + string [int] emotions; + + int emotionDisappointed = clampi(3 - get_property_int("_feelDisappointedUsed"), 0, 3); + if (emotionDisappointed > 0) + { + emotions.listAppend(emotionDisappointed + " Disappointments left. This must be the 'your parents' emotion chip."); + } + int emotionExcitement = clampi(3 - get_property_int("_feelExcitementUsed"), 0, 3); + if (emotionExcitement > 0) + { + emotions.listAppend(emotionExcitement + " Excitement left. 20 advs of +25 Mus/Mys/Mox."); + } + int emotionLonely = clampi(3 - get_property_int("_feelLonelyUsed"), 0, 3); + if (emotionLonely > 0) + { + emotions.listAppend(emotionLonely + " Lonelys left. 20 advs of -5% Combat."); + } + int emotionLost = clampi(3 - get_property_int("_feelLostUsed"), 0, 3); + if (emotionLost > 0) + { + emotions.listAppend(emotionLost + " Losts left. 20 advs of weird Teleportitis buff."); + } + int emotionNervous = clampi(3 - get_property_int("_feelNervousUsed"), 0, 3); + if (emotionNervous > 0) + { + emotions.listAppend(emotionNervous + " Nervouses left. 20 avs of passive damage."); + } + int emotionPeaceful = clampi(3 - get_property_int("_feelPeacefulUsed"), 0, 3); + if (emotionPeaceful > 0) + { + emotions.listAppend(emotionPeaceful + " Peacefuls left. 20 advs of +2 elemental resist."); + } + int emotionPride = clampi(3 - get_property_int("_feelPrideUsed"), 0, 3); + if (emotionPride > 0) + { + emotions.listAppend(emotionPride + " Prides left. Triple stat gain from current fight."); + } + int emotionHatred = clampi(3 - get_property_int("_feelHatredUsed"), 0, 3); + if (emotionHatred > 0) + { + emotions.listAppend(emotionHatred + " Hatreds left. 50-turn banish."); + + resource_entries.listAppend(ChecklistEntryMake("__skill feel hatred", "", ChecklistSubentryMake(pluralise(emotionHatred, "Feel Hatred", "Feels Hatreds"), "", "Cast Feel Hatred. Free run/banish.")).ChecklistEntrySetCombinationTag("banish").ChecklistEntrySetIDTag("Emotion chip feel hatred banish")); + } + int emotionEnvy = clampi(3 - get_property_int("_feelEnvyUsed"), 0, 3); + if (emotionEnvy > 0) + { + emotions.listAppend(emotionEnvy + " Envys left. Black Ray."); + } + int emotionNostalgic = clampi(3 - get_property_int("_feelNostalgicUsed"), 0, 3); + monster nostalgicMonster = (get_property_monster("feelNostalgicMonster")); + if (emotionNostalgic > 0) + { + emotions.listAppend(emotionNostalgic + " Nostalgias left. Item copying. Can currently feel nostalgic for: " + HTMLGenerateSpanFont(nostalgicMonster, "blue")); + } + int emotionSuperior = clampi(3 - get_property_int("_feelSuperiorUsed"), 0, 3); + if (emotionSuperior > 0) + { + emotions.listAppend(emotionSuperior + " Superiors left. +1 PvP Fight if used as killshot."); + } + return ChecklistSubentryMake(main_title, description, emotions); + } + + ChecklistEntry entry; + entry.image_lookup_name = "__item emotion chip"; + entry.tags.id = "emotion chip resource"; + + ChecklistSubentry emotions = getEmotions(); + if (emotions.entries.count() > 0) { + entry.subentries.listAppend(emotions); + } + + if (entry.subentries.count() > 0) { + resource_entries.listAppend(entry); + } +} diff --git a/iotmmaps b/iotmmaps new file mode 100644 index 00000000..e2e49770 --- /dev/null +++ b/iotmmaps @@ -0,0 +1,84 @@ +//experimental cartography code +RegisterResourceGenerationFunction("IOTMCartographyMapsGenerateResource"); +void IOTMCartographyMapsGenerateResource(ChecklistEntry [int] resource_entries) +{ + if (!(__misc_state["in run"] && in_ronin())) return; + + int maps_left = clampi(3 - get_property_int("_monstersMapped"), 0, 3); + if (maps_left > 0 && my_path_id() != PATH_POCKET_FAMILIARS) + { + string [int] description; + description.listAppend("Map the monsters you want to fight!"); + description.listAppend("This IotM also gives you a special noncom in the following zones:"); + string [int] options; + if (!__quest_state["cc_spookyravennecklace"].finished) + { + options.listAppend("The Haunted Billiards Room"); + } + if (!__quest_state["cc_friars"].finished) + { + options.listAppend("The Dark Neck of the Woods"); + } + if (get_property_int("cyrptNookEvilness") > 25) + { + options.listAppend("The Defiled Nook"); + } + if (get_property_int("twinPeakProgress") != 15) + { + options.listAppend(HTMLGenerateSpanOfClass("First adv", "r_bold") + " A-Boo Peak: gives Twin Peak noncom"); + } + if (!__quest_state["cc_castletop"].finished) + { + options.listAppend("Castle Top Floor"); + } + if (!__quest_state["warProgress"].started) + { + options.listAppend("The Hippy Camp (Verge of War)"); + } + string [int] monsterMaps; + if (!__quest_state["Level 11 Ron"].finished) + { + monsterMaps.listAppend("Red Butler, 30% free kill item and 15% fun drop item. Combine with Olfaction/Use the Force?"); + } + if (get_property_int("twinPeakProgress") < 15 && $item[rusty hedge trimmers].available_amount() < 4) + { + monsterMaps.listAppend("hedge beast, 15% quest progress item. Possibly Spit."); + } + if (__quest_state["Level 9"].state_int["a-boo peak hauntedness"] > 0) + { + monsterMaps.listAppend("Whatsian Commander Ghost, 15% free runaway item. Possibly Spit."); + } + if ($item[star chart].available_amount() < 1 || $item[richard's star key].available_amount() < 1) + { + monsterMaps.listAppend("Astronomer"); + } + if (!__quest_state["Level 12"].state_boolean["Lighthouse Finished"] && $item[barrel of gunpowder].available_amount() < 5) + { + monsterMaps.listAppend("Lobsterfrogman, probably a weak option. Combine with Use the Force?"); + } + if ($location[The Battlefield (Frat Uniform)].turns_spent < 100) + { + monsterMaps.listAppend("Green Ops Soldier. Combine with Olfaction/Use the Force and Spit and Explodinal pills."); + } + + if (options.count() > 0) + description.listAppend("Noncoms of interest:|*-" + options.listJoinComponents("|*-")); + if (monsterMaps.count() > 0) + description.listAppend("Monsters to map:|*-" + monsterMaps.listJoinComponents("|*-")); + + resource_entries.listAppend(ChecklistEntryMake("__item Comprehensive Cartographic Compendium", "", ChecklistSubentryMake(pluralise(maps_left, "Cartography skill use", "Cartography skill uses"), "", description), 5).ChecklistEntrySetIDTag("Cartography skills resource")); + } +} + +RegisterTaskGenerationFunction("IOTMCartographyMapsGenerateTasks"); +void IOTMCartographyMapsGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEntry [int] optional_task_entries, ChecklistEntry [int] future_task_entries) +{ + { + string [int] description; + string title = "Your mapping senses are activated!"; + description.listAppend(HTMLGenerateSpanFont("Pick your monster!", "blue")); + if (!get_property_boolean("mappingMonsters") == false) { + task_entries.listAppend(ChecklistEntryMake("__item Comprehensive Cartographic Compendium", "url", ChecklistSubentryMake(title, description), -11)); + } + } +} diff --git a/iotmpocketprof b/iotmpocketprof new file mode 100644 index 00000000..a28042a0 --- /dev/null +++ b/iotmpocketprof @@ -0,0 +1,32 @@ + if ($familiar[pocket professor].familiar_is_usable()); + { + int lectures_used = get_property_int("_pocketProfessorLectures"); + string name = lectures_used + " Pocket Professor lectures used"; + string [int] description; + string image_name = ""; + + description.listAppend("Sausage goblins, ninja snowman assassin, ghosts, or something else...?"); + + string url = ""; + + if ($familiar[pocket professor].familiar_is_usable()) + { + image_name = "pocket professor"; + } + + if (!($familiars[Frumious Bandersnatch, pocket professor] contains my_familiar())) + url = "familiar.php"; + + resource_entries.listAppend(ChecklistEntryMake(image_name, url, ChecklistSubentryMake(name, "", description))); + + if (!get_property_boolean("_thesisDelivered")) + { + string [int] description; + description.listAppend("+8 advs from a 256+ HP monster"); + description.listAppend("+10 advs from a 625+ HP monster"); + description.listAppend("+11 advs from a 1,296+ HP monster"); + + resource_entries.listAppend(ChecklistEntryMake("__familiar Pocket Professor", "", ChecklistSubentryMake("Deliver your Thesis!", "", description), 0).ChecklistEntryTagEntry("+11 Adventures")); + + } + } diff --git a/iotmpowerglove b/iotmpowerglove new file mode 100644 index 00000000..bf3a4333 --- /dev/null +++ b/iotmpowerglove @@ -0,0 +1,20 @@ +RegisterResourceGenerationFunction("IOTMPowerfulGloveGenerateResource"); +void IOTMPowerfulGloveGenerateResource(ChecklistEntry [int] resource_entries) +{ + if (lookupItem("Powerful Glove").available_amount() == 0) return; + if (get_property_int("_powerfulGloveBatteryPowerUsed") < 100) + { + int uses_remaining = clampi(100 - get_property_int("_powerfulGloveBatteryPowerUsed"), 0, 100); + string url = ""; + if (!lookupItem("Powerful Glove").equipped()) + url = "inventory.php?which=2"; + string [int] description; + description.listAppend("Use CHEAT CODES, which let you:"); + description.listAppend("Get +200% stats - 5% battery"); + description.listAppend("Get -10% combat frequency - 5% battery"); + description.listAppend("Shrink the target - 5% battery"); + description.listAppend("Replace the target - 10% battery"); + //description.listAppend("Choose one of:|*" + options.listJoinComponents("|*")); + resource_entries.listAppend(ChecklistEntryMake("__item powerful glove", url, ChecklistSubentryMake(pluralise(uses_remaining, "% Powerful Glove battery", "% Powerful Glove battery"), "", description), 0)); + } +} diff --git a/iotmshroom b/iotmshroom new file mode 100644 index 00000000..eeee9bff --- /dev/null +++ b/iotmshroom @@ -0,0 +1,25 @@ +RegisterResourceGenerationFunction("IOTMMushroomGardenGenerateResource"); +void IOTMMushroomGardenGenerateResource(ChecklistEntry [int] resource_entries) +{ + int mushroom_growth = (get_property_int("mushroomGardenCropLevel")); + int total_piranha_fights_available = 1; + if (my_path_id() == PATH_OF_THE_PLUMBER) + total_piranha_fights_available = 5; + int piranha_fights_remaining = clampi(total_piranha_fights_available - get_property_int("_mushroomGardenFights"), 0, total_piranha_fights_available); + + if (get_property_int("_mushroomGardenFights") < total_piranha_fights_available) + { + string url = ""; + string [int] description; + description.listAppend("5 free fights if you are a Plumber."); + description.listAppend("Only 1 free fight if you aren't a Plumber."); + description.listAppend("Harvest a mushroom, or fertilize it to make it grow bigger."); + description.listAppend("Current growth level: " + mushroom_growth + "/5"); + description.listAppend("4 days: 1 mushroom slab"); + description.listAppend("5 days: 2 mushroom slabs"); + description.listAppend("10 days: 1 mushroom house (tradable, but still bad)"); + description.listAppend("Mushrooms give good-tier food, awesome-tier booze, or a 1-spleen +com/ML buff."); + + resource_entries.listAppend(ChecklistEntryMake("__item spanish fly trap", url, ChecklistSubentryMake(pluralise(piranha_fights_remaining, "piranha plant fight", "piranha plant fights"), "", description), 0)); + } +} diff --git a/iotmsnapper b/iotmsnapper new file mode 100644 index 00000000..aa16796e --- /dev/null +++ b/iotmsnapper @@ -0,0 +1,56 @@ +RegisterResourceGenerationFunction("IOTMRedNosedSnapperResource"); +void IOTMRedNosedSnapperResource(ChecklistEntry [int] resource_entries) +{ + ChecklistSubentry getPhylumRewards() { + // Title + string redSnapperPhylum = get_property("redSnapperPhylum"); + int redSnapperProgress = get_property_int("redSnapperProgress"); + string main_title = redSnapperProgress + "/11 fights until next Snapper drop"; + + // Subtitle + string subtitle = ""; + + // Entries + string [int] description; + if (redSnapperPhylum != "") + { + description.listAppend("Tracked phylum gains +2 copies per monster."); + string snapperPhylum = get_property("redSnapperPhylum"); + description.listAppend(HTMLGenerateSpanFont("Currently tracking " + redSnapperPhylum + "-type.", "blue")); + description.listAppend("Red Zeppelin - track Dudes."); + description.listAppend("The Palindrome - track Dudes."); + description.listAppend("Twin Peak - track Beasts."); + description.listAppend("Whitey's Grove - track Beasts."); + description.listAppend("The Haunted Laundry Room - track Undead"); + description.listAppend("The Haunted Wine Cellar - track Constructs."); + description.listAppend(HTMLGenerateSpanFont("WARNING: changing phylum resets progress.", "red")); + description.listAppend(HTMLGenerateSpanOfClass("Dudes:", "r_bold") + " Free banish item"); + description.listAppend(HTMLGenerateSpanOfClass("Goblins:", "r_bold") + " 3-size " + HTMLGenerateSpanOfClass("awesome", "r_element_awesome") + " food"); + description.listAppend(HTMLGenerateSpanOfClass("Orcs:", "r_bold") + " 3-size " + HTMLGenerateSpanOfClass("awesome", "r_element_awesome") + " booze"); + description.listAppend(HTMLGenerateSpanOfClass("Undead:", "r_bold") + " +5 " + HTMLGenerateSpanOfClass("spooky", "r_element_spooky") + " res potion"); + description.listAppend(HTMLGenerateSpanOfClass("Constellations:", "r_bold") + " Yellow ray"); + } + + return ChecklistSubentryMake(main_title, subtitle, description); + } + + if (!lookupFamiliar("Red Nosed Snapper").familiar_is_usable()) return; + + int muskBanishes_left = clampi(3 - get_property_int("_humanMuskUses"), 0, 3); + if ($item[human musk].available_amount() > 0 && in_ronin() && $item[human musk].item_is_usable()) + { + resource_entries.listAppend(ChecklistEntryMake("__item human musk", "", ChecklistSubentryMake(pluralise($item[human musk]), "", "" + muskBanishes_left + " free uses left today."), 6).ChecklistEntryTagEntry("banish")); + } + + ChecklistEntry entry; + entry.image_lookup_name = "__familiar red-nosed snapper"; + + ChecklistSubentry rewards = getPhylumRewards(); + if (rewards.entries.count() > 0) { + entry.subentries.listAppend(rewards); + } + + if (entry.subentries.count() > 0) { + resource_entries.listAppend(entry); + } +} diff --git a/iotmsongboom b/iotmsongboom new file mode 100644 index 00000000..e9fe7181 --- /dev/null +++ b/iotmsongboom @@ -0,0 +1,41 @@ +RegisterTaskGenerationFunction("IOTMBoomBoxGenerateTasks"); +void IOTMBoomBoxGenerateTasks(ChecklistEntry [int] task_entries, ChecklistEntry [int] optional_task_entries, ChecklistEntry [int] future_task_entries) +{ + if (lookupItem("SongBoom™ BoomBox").available_amount() == 0) return; + + string song = get_property("boomBoxSong"); + int changes_left = get_property_int("_boomBoxSongsLeft"); //the boys are back in town, eleven times. everyone will love it + + int boomboxProgress = get_property_int("_boomBoxFights"); + string [int] description; + { + description.listAppend("Currently playing " + song + ", the soundtrack of your life!"); + description.listAppend("Currently " + boomboxProgress + "/11 fights until next drop."); + if (boomboxProgress == 9) + { + description.listAppend(HTMLGenerateSpanFont("Boombox drop soon", "blue")); + task_entries.listAppend(ChecklistEntryMake("__item SongBoom™ BoomBox", "inv_use.php?pwd=" + my_hash() + "&whichitem=9919", ChecklistSubentryMake("Boombox song stuff", "", description), -11)); + } + description.listAppend("" + changes_left + " song changes left today."); + + if (boomboxProgress == 10) + { + description.listAppend(HTMLGenerateSpanFont("Boombox drop next fight", "red")); + task_entries.listAppend(ChecklistEntryMake("__item SongBoom™ BoomBox", "inv_use.php?pwd=" + my_hash() + "&whichitem=9919", ChecklistSubentryMake("Boombox song stuff", "", description), -11)); + } + optional_task_entries.listAppend(ChecklistEntryMake("__item SongBoom™ BoomBox", "inv_use.php?pwd=" + my_hash() + "&whichitem=9919", ChecklistSubentryMake("Boombox song stuff", "", description), 8)); + } + + if (song == "" && changes_left > 0) + { + string [int] description; + if (!__quest_state["Level 7"].finished && my_path_id() != PATH_COMMUNITY_SERVICE) + description.listAppend("Eye of the Giger: Nightmare Fuel for the cyrpt."); + if (fullness_limit() > 0) + description.listAppend("Food Vibrations: extra adventures from food" + (__misc_state["in run"] ? ", +30% food drop" : "") + "."); + description.listAppend("Total Eclipse of Your Meat: extra meat, +30% meat."); + + optional_task_entries.listAppend(ChecklistEntryMake("__item SongBoom™ BoomBox", "inv_use.php?pwd=" + my_hash() + "&whichitem=9919", ChecklistSubentryMake("Set BoomBox song", "", description), 8)); + } + +} diff --git a/iotmvampcloake b/iotmvampcloake new file mode 100644 index 00000000..7cb7abac --- /dev/null +++ b/iotmvampcloake @@ -0,0 +1,19 @@ +RegisterResourceGenerationFunction("IOTMVampireCloakGenerateResource"); +void IOTMVampireCloakGenerateResource(ChecklistEntry [int] resource_entries) +{ + if (!$item[vampyric cloake].have()) + return; + + int uses_left = clampi(10 - get_property_int("_vampyreCloakeFormUses"), 0, 10); + if (uses_left > 0 && my_path_id() != PATH_POCKET_FAMILIARS) + { + string [int] skills; + skills.listAppend("Wolf: +50% muscle, +50% meat"); + skills.listAppend("Mist: +2 all resistance"); + skills.listAppend("Bat: +50% items"); + + string [int] description; + description.listAppend("Imitate the form of a powerful vampyre for 1 adventure:|*" + skills.listJoinComponents("|*")); + resource_entries.listAppend(ChecklistEntryMake("__item vampyric cloake", "", ChecklistSubentryMake(pluralise(uses_left, "Vampyric cloake skill use", "Vampyric cloake skill uses"), "", description), 5)); + } +}