My personal Meat farming script

Veracity

Developer
Staff member
Revision 18659 of KoLmafia fixes a small parsing bug in record initialization in ASH.

Revision 97 of VeracityMeatFarm adds functions to choose a booze from a proffered set of items which will be most "profitable" to drink.

Using the value an adventure (as calculated by your historical Meat yield using this script, if you've used the script, valueOfAdventure, otherwise), "profit" is defined to be (expected Meat yield from the average adventures generated by the booze) - (mall cost of the booze).

I have experimental code which will look at ALL booze of a given size and calculate that value. Try this, for example:

Code:
[color=green]ash import <VeracityMeatFarm.ash>; find_profitable_booze( 3 ).name[/color]

ice-cold fotie (100 cost; 5111 expected_profit) is better than none (0)
salty dog (247 cost; 9306 expected_profit) is better than ice-cold fotie (5111)
screwdriver (130 cost; 9423 expected_profit) is better than salty dog (9306)
extra-spicy bloody mary (470 cost; 12557 expected_profit) is better than screwdriver (9423)
white lightning (101 cost; 12926 expected_profit) is better than extra-spicy bloody mary (12557)
stinky mushroom wine (1999 cost; 18845 expected_profit) is better than white lightning (12926)
pointy mushroom wine (1850 cost; 18994 expected_profit) is better than stinky mushroom wine (18845)
knob mushroom wine (1800 cost; 19044 expected_profit) is better than pointy mushroom wine (18994)
spooky mushroom wine (1797 cost; 19047 expected_profit) is better than knob mushroom wine (19044)
shining goblet (3773 cost; 22282 expected_profit) is better than spooky mushroom wine (19047)
perfect cosmopolitan (3300 cost; 28834 expected_profit) is better than shining goblet (22282)
perfect mimosa (3290 cost; 28844 expected_profit) is better than perfect cosmopolitan (28834)
perfect old-fashioned (3250 cost; 28884 expected_profit) is better than perfect mimosa (28844)
Returned: perfect old-fashioned
to find the best 3-drunk booze, for example. (The first time you run that, there will be lots of mall searches, which are cached.)

Rather than looking at ALL boozes, for now, the code to drink up will select from:

"perfect" 3-drunk booze
"happy medium" 2-drunk booze
"robortender" 1-drunk booze

since those general categories are cost effective awesome or EPIC boozes.

I may build on this later to be willing to look at all boozes, although that is verbose and time consuming.

In any case, this release will now use your mime army shotglass to drink a robortender drink, if you haven't used it already.

I have to investigate the Stooper a bit. I can certainly use the code I just committed to handle it, but I am unclear on the mechanics. The Wiki says "gives you one extra liver while you have it equipped".

If I have the Stooper equipped and drink a one-drunk drink:
- Is it like the mime army shotglass: it does not actually increase my drunkenness, but the Stooper is now "used" for the day?
- Does it actually raise my max-drunk by one - allowing me to drink an extra drink and actually increasing my drunkenness - but if I equip another familiar, does my max-drunk drop again, possibly leaving me overdrunk?

If it's like the mime army shotglass, I could use it as part of drinking up to generate adventures which will be used at Barf Mountain, say.

But if you actually have to have the Stooper equipped while you adventure, I should probably treat it as part of your nightcap:

After all adventures are done:
- equip Stooper
- drink a one-drunk drink
- drink nightcap

I.e., save the extra adventures for tomorrow, when they can be used more profitably with a different familiar.

Perhaps I will have time to experiment with a multi tomorrow and submit whichever of those approaches is correct.

Regarding the boombox clips, I should probably activate my boombox and see how it works, one of these days. No opinions yet.
 
Stooper increases max drunkenness by one so if you max at 20 then equip the stooper you max is 21, but i you drink to 21 then unequip stooper your max drops to 20 and your overdrunk for the day so using for nightcap is the best option in my opinion
 

Veracity

Developer
Staff member
Revision 98 does this:

- use Stooper as part of your nightcap routine
- auto-use Gathered Meat-Clips, if you have any
 

Veracity

Developer
Staff member
Regarding the BoomBox:

1) One of the songs gives you extra Meat - and Meat Clips. I suppose I should make the song-of-your-choice configurable - defaulting to that song.
2) It looks like "singing along" may double the speed at which you go through the lyrics of the song, and hence makes the special drop come twice as fast? If that is true, then I should probably add "sing along" to the combat filter, along with extract, etc.
 

Brenno

New member
First off, thanks for the great script. I am loving it :)

That said, any way to make it get an amulet coin daily if you have a cornbeefadon?
 

Veracity

Developer
Staff member
Any way to make it get an amulet coin daily if you have a cornbeefadon?
You get that every 5 turns in the arena, right? It never occurred to me to farm for a familiar item. That gives +10 familiar weight and +50% meat drop, so it would have to be worth 5 * (500 + MPA) to be worth the arena turns. That might be worth it. Certainly very character specific (familiar, location, MPA value, etc.), so it would have to be a preference.

Although KoLmafia does have a familiar trainer, I don't think there is any ASH access to it. Until/unless that is added, I don't see adding this. Sorry!
 

Veracity

Developer
Staff member
Revision 100 adds Support for the SongBoom™ BoomBox.

Code:
// Which song to play
//
// <keyword>		<Song Name>: <passive effect> / <Sing Along> / Item dropped every 11 combats
//
// spooky		Eye of the Giger: +<level> spooky damage / lose 5% max HP worth of HP & MP, gain 2-3 extra substats / Nightmare Fuel
// food			Food Vibrations: Food Drop +30, 3-5 MP regen / next speall deals more damage / Special Seasoning
// defense		Remainin' Alive: +<level> DR / delevel by 15% / Shielding Potion
// offense		Thse Fists Were Made for Punchin': +<level> Weapon Damage / deal <level> prismatic damage)/ Punching Potion
// meat			Total Eclipse of your Meat: Meat Drop +30 / increase  base meat drop by 25 / Gathered Meat-Clip
// none			Silence

string boombox_song = define_property( "VMF.BoomBoxSong", "string", "meat" ).to_string();
string_set boombox_sing_along_songs = define_property( "VMF.BoomBoxSingAlong", "string", "meat", "set" ).to_set_of_string();
The default is to play the "meat" song - Total Eclipse of Your Meat - and to cast "Sing Along" during combat when the "meat" song is active.

You might want to play a different song, if you want to farm up Special Seasoning, say, but, in my opinion, Sing Along is not especially useful in a farming script except for the "meat" song, since doing so with other songs just makes combat a bit easier. But, the choice is yours:

set VMF.BoomBoxSingAlong="meat|spooky"

will sing along to either of those two songs.
 

Veracity

Developer
Staff member
Revision 101 supports using Familiar Jacks with a Cornbeefadon to get an amulet coin.

boolean get_amulet_coin = define_property( "VMF.GetAmuletCoin", "boolean", "false" ).to_boolean();

Default is false - do not do this. But you can set it to true to enable it:

set VMF.GetAmuletCoin=true

I bought a Cornbeefadon (10,000 Meat or less) for each of my multis to experiment. It works. I had mixed results. I have not calculated what the break-even point is for a Hobo Monkey with an extra 5 lb. of weight and a general Meat Drop +50, given that a box of Familiar Jacks currently costs about 10,000 Meat.

- If you have a Tot, we will not get an amulet coin, regardless of this setting, since weight does not help and a pirate costume is better
- If you selected a Robortender, we also do not get an amulet coin (or use the universal item in VMF.GetAmuletCoin), since you likely want to use a familiar-specific familiar item. That might be debatable, but I suspect that using a Robortender with this script is an uncommon specialized usage.
- If you don't have a Cornbeefadon, we ignore this setting.
 
Im a little perplexed after your statement Veracity is the robor not the best choice? Is the tot the better choice? Because right now I am making 5500 to 5900 MPA
 

Veracity

Developer
Staff member
Is it the best choice? My minor experimentation when I added support for it did not show me that. Perhaps I did it wrong.

I'll try again after I'm done with G-lover runs.
 
Robortender depends a lot on what equipments and other 'free' resources you have available. Tot is an easy 300% with one combat of effort, but if you have some of the higher end gear and skill perms and such, you can get a 70 pound robortender easily. (I could maintain a 90 pound one economically, for just over 550% meat drop).
That said, some of that is from equipment, which means you would have to take into account the meat lost from those, but equips don't go higher than 25% or 30% meat per slot, while you can get 10 pounds (which is worth somewhere between 50 and 60%) pretty easily. And that doesn't account for the cost of the drinks yet, which means it would also depend on the number of turns you're spending each day. So maybe leave the choice of familiar open for everyone, but I would put the amulet coin on for everyone using the robortender, since the only reason not to would be a personal, external factor: pvp. (The bounce switch is good if you do put a high-ish value on fights. The bartend switch is not going to make up the difference, since the drinks you can get from barf mountain are the ones everyone is getting, and thus getting a few extra over the course of the day isn't worth much.)
 

Veracity

Developer
Staff member
As coded, you have the following familiar related options available:

string farm_type = define_property( "VMF.FarmType", "string", "meat" );

"meat" or "items".

familiar meat_familiar = define_property( "VMF.MeatFamiliar", "familiar", "none" ).to_familiar();
familiar item_familiar = define_property( "VMF.ItemFamiliar", "familiar", "none" ).to_familiar();

"none" means "we'll pick for you based on what you have". Otherwise, we'll use the one you specify. This is how you'd get a Robortender.
Note that you need an "item" familiar even you are farming Meat, for eldritch tentacles, and perhaps a few other special things we do.

item default_famequip = define_property( "VMF.FamiliarEquipment", "item", "ittah bittah hookah" ).to_item();

This is the "universal" equipment your familiar should wear. If "none", we leave your familiars equipped as you manually equipped them.
It is hardcoded to ignore this setting for Tot or Robortender. Perhaps it should not ignore it for Robortender.

boolean get_amulet_coin = define_property( "VMF.GetAmuletCoin", "boolean", "false" ).to_boolean();

If "true", this overrides the default familiar equipment and gets an amulet coin. If it fails (probably only because the box of Familiar Jacks exceeds your autoBuyPriceLimit), it will use the default item. Again, it ignores it for Tot and Robortender.

And for the Robortender:

item_set robortender_drinks = define_property( "VMF.RoboDrinks", "item", "", "set" ).to_set_of_item();

This can contain up to five phyla worth of drinks. If you specify more than five drinks, it will prefer the "strong" drink over the "weak" drink for a particular phylum, and will keep only the first five phyla. Unlikely that you'd do anything like that, but, error resiliance. :)

Code:
// double entendre		(Constellations) +0.5 Fairy
// single entendre		(Constellations) +1.0 Fairy
// piscatini		        (Penguins) +0.5 Leprechaun
// drive-by shooting		(Penguins) +1.0 Leprechaun
These seem like likely choices. My main has been faxing and puttying Black Crayon Penguins for quite a while, Just In Case.

I'll consider your recommendation: "put an amulet coin on everyone using a Robortender". Perhaps "only if it is not manually equipped with a bounce switch".

It will probably be next weekend before I have time to work out exactly how I want to handle this.

Thanks the advice!
 

zarqon

Well-known member
Just popping in to say, this script has been a big help for burning turns in aftercore as I'm sticking around to farm Rubees. But I have found a little bug: the script can enter an infinite loop attempting to get the lil' pirate costume if for whatever reason you don't have pirate fledges.
 
Top