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

DNA support #224

Closed
Closed
135 changes: 129 additions & 6 deletions src/dailies.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import {
availableAmount,
booleanModifier,
buy,
changeMcd,
cliExecute,
equip,
getCampground,
getClanLounge,
getWorkshed,
haveEffect,
haveSkill,
itemAmount,
mallPrice,
Expand Down Expand Up @@ -38,21 +41,24 @@ import {
$stat,
$thrall,
adventureMacro,
get,
have,
Macro,
property,
SongBoom,
SourceTerminal,
} from "libram";
import { globalOptions } from ".";
import { Macro, withMacro } from "./combat";
import { horseradish } from "./diet";
import { meatFamiliar } from "./familiar";
import { ensureEffect, findRun, questStep, trueValue, tryFeast } from "./lib";
import { ensureEffect, findRun, FreeRun, questStep, trueValue, tryFeast } from "./lib";
import { baseMeat } from "./mood";
import { freeFightOutfit } from "./outfit";
import { withStash } from "./clan";
import { withChoices } from "libram/dist/property";
import { get, withChoices } from "libram/dist/property";
import { freeFightFamiliar, meatFamiliar } from "./familiar";
import {
familiarWaterBreathingEquipment,
freeFightOutfit,
waterBreathingEquipment,
} from "./outfit";

export function voterSetup(): void {
if (have($item`"I Voted!" sticker`) || !(get("voteAlways") || get("_voteToday"))) return;
Expand Down Expand Up @@ -491,3 +497,120 @@ export function jellyfish(): void {
}
}
}

function isIntrinsic(effect: Effect) {
return haveEffect(effect) === 2147483547;
}

export function hybridizeFish(): boolean {
if (
getWorkshed() !== $item`Little Geneticist DNA-Splicing Lab` ||
isIntrinsic($effect`Human-Fish Hybrid`) ||
isIntrinsic($effect`Human-Constellation Hybrid`)
) {
return true;
}

if (get("dnaSyringe") !== "fish") {
if (!have($effect`Fishy`) && get("_fishyPipeUsed") && have($item`fishy pipe`))
use($item`fishy pipe`);
if (!have($effect`Fishy`)) return false;

const runSource =
findRun(false) ||
new FreeRun(
() => retrieveItem($item`Louder Than Bomb`),
() => retrieveItem($item`Louder Than Bomb`),
Macro.item("louder than bomb")
);

setAutoAttack(0);
freeFightOutfit();

if (!booleanModifier("Adventure Underwater")) {
const breathe = waterBreathingEquipment.find((gear) => have(gear));
if (breathe) equip(breathe);
else return false;
}

useFamiliar(freeFightFamiliar());
if (!booleanModifier("Underwater Familiar")) {
const familiarbreathe = familiarWaterBreathingEquipment.find((gear) => have(gear));
if (familiarbreathe) equip(familiarbreathe);
else useFamiliar($familiar`none`);
}

runSource.prepare();
adventureMacro(
$location`The Briny Deeps`,
Macro.tryItem($item`DNA extraction syringe`).step(runSource.macro)
);
if (isIntrinsic($effect`Human-Fish Hybrid`)) return false;
}
if (get("dnaSyringe") === "fish") cliExecute("camp dnainject");
return isIntrinsic($effect`Human-Fish Hybrid`);
}

export function hybridizeConstellation(): boolean {
if (
getWorkshed() !== $item`Little Geneticist DNA-Splicing Lab` ||
isIntrinsic($effect`Human-Fish Hybrid`) ||
isIntrinsic($effect`Human-Constellation Hybrid`)
) {
return true;
}

if (get("dnaSyringe") !== "constellation") {
const constellationFamiliar = have($familiar`Robortender`)
? $familiar`Robortender`
: freeFightFamiliar();
if (have($item`steam-powered model rocketship`)) {
const runSource =
findRun(false) ||
new FreeRun(
() => retrieveItem($item`Louder Than Bomb`),
() => retrieveItem($item`Louder Than Bomb`),
Macro.item("louder than bomb")
);

//useFamiliar(constellationFamiliar); -- removed temporarily because we run, rather than killing
useFamiliar(freeFightFamiliar());

runSource.prepare();
adventureMacro(
$location`The Hole in the Sky`,
Macro.tryItem($item`DNA extraction syringe`).step(runSource.macro)
);
} else if (
have($item`Cargo Cultist Shorts`) &&
!get("_cargoPocketEmptied") &&
!(get("cargoPocketsEmptied").includes("317") && get("cargoPocketsEmptied").includes("383"))
) {
useFamiliar(constellationFamiliar);
freeFightOutfit();

const pocketPick = get("cargoPocketsEmptied").includes("317") ? 383 : 317;
withMacro(Macro.tryItem($item`DNA extraction syringe`).meatKill(), () => {
cliExecute(`cargo pocket ${pocketPick}`);
});
}
}
if (get("dnaSyringe") === "constellation") cliExecute("camp dnainject");
return isIntrinsic($effect`Human-Constellation Hybrid`);
}

export function dna(): void {
if (
getWorkshed() !== $item`Little Geneticist DNA-Splicing Lab` ||
isIntrinsic($effect`Human-Fish Hybrid`) ||
isIntrinsic($effect`Human-Constellation Hybrid`)
)
return;
if (numericModifier(meatFamiliar(), "Leprechaun", 1, $item`none`) > 1.9) {
if (hybridizeFish()) return;
hybridizeConstellation();
} else {
if (hybridizeConstellation()) return;
hybridizeFish();
}
}
2 changes: 2 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ import {
configureGear,
configureMisc,
dailyBuffs,
dna,
gaze,
gin,
horse,
Expand Down Expand Up @@ -99,6 +100,7 @@ function dailySetup() {
latte();
prepFamiliars();
jellyfish();
dna();
dailyBuffs();
configureMisc();
volcanoDailies();
Expand Down