Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

august updates; kiwi + tearaway + darts and more! #232

Merged
merged 15 commits into from
Aug 20, 2024
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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.
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
}
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
2 changes: 1 addition & 1 deletion Source/relay/TourGuide/Items of the Month/2017/New You.ash
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"));



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
30 changes: 24 additions & 6 deletions Source/relay/TourGuide/Items of the Month/2023/Book of Facts.ash
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}

Expand Down Expand Up @@ -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"));
}
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
//Everfull Dart Holster via TES
ajcoppa marked this conversation as resolved.
Show resolved Hide resolved
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));
}
}
34 changes: 34 additions & 0 deletions Source/relay/TourGuide/Items of the Month/2024/Mini Kiwi.ash
Original file line number Diff line number Diff line change
@@ -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 {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));

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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"));
}
Loading
Loading