New Content Dark Gyffte

Freeing King and not choosing a class (trying to go to main.php for example) makes mafia get stuck in an infinite loop of checking stash contents.
 
Some items and monsters:
Code:
--------------------
10180	Booke of Vampyric Knowledge	352913194	book4.gif	usable		0
# Item Booke of Vampyric Knowledge: Grants one of several Vampyric skills
--------------------
10182	red money bag	326697784	moneybag2.gif	none	d	3000
# Item red money bag
--------------------
10183	blue money bag	938341934	moneybag2.gif	none	d	5000
# Item blue money bag
--------------------
10184	Thwaitgold mosquito statuette	626054918	thwaitsquito.gif	none		0
# Item Thwaitgold mosquito statuette
--------------------
Monsters:
Code:
Monster #2106 has name 'Ricardo Belmont' but Manuel calls it 'Ricardo %belmont%'
New monster #2107 found in Manuel with name 'Jayden %belmont%' image 'jaydenbelmont.gif' attributes ='Atk: 100 Def: 100 HP: 150 Init: 200 P: dude'
New monster #2108 found in Manuel with name 'Travis %belmont%' image 'travisbelmont.gif' attributes ='Atk: 200 Def: 200 HP: 250 Init: 250 P: dude'
New monster #2109 found in Manuel with name 'Greg Dagreasy' image 'gregdagreasy.gif' attributes ='Atk: 200 Def: 300 HP: 200 Init: 250 P: dude'
New monster #2110 found in Manuel with name 'Sylvia Belgrande' image 'sylviabelgrande.gif' attributes ='Atk: 200 Def: 200 HP: 200 Init: 250 P: dude'
New monster #2111 found in Manuel with name 'Sharona' image 'sharona.gif' attributes ='Atk: 150 Def: 150 HP: 250 Init: 150 P: dude'
New monster #2112 found in Manuel with name 'Jake Norris' image 'jakenorris.gif' attributes ='Atk: 250 Def: 250 HP: 2000 Init: 300 P: dude'
New monster #2114 found in Manuel with name '%alucard%' image 'reyalpeht.gif' attributes ='Atk: 300 Def: 300 HP: 1000 Init: 10000 P: dude'
New monster #2115 found in Manuel with name 'Your Lack of Reflection' image 'towermirror.gif' attributes ='Atk: 100 Def: 100 HP: 3000 Init: -10000 P: horror'

Steve is probably the same as Ricardo, but I managed to skip his fight last run.
 
There seems to be a typo with darkGyfftePoints vs darkGifftePoints, with darkGifftePoints representing how many you've gained from ascension and darkGyfftePoints representing how many you've acquired from fun ruiners. I think, anyway.
 
There seems to be a typo with darkGyfftePoints vs darkGifftePoints, with darkGifftePoints representing how many you've gained from ascension and darkGyfftePoints representing how many you've acquired from fun ruiners. I think, anyway.

19107 changes all instances to darkGyfftePoints.
 
It appears api.php is returning non-zero for mp and maxmp so my_mp() & my_maxmp() is returning these values. I submitted a kol bug report, but you know!
 
modifiers.txt has a slight typo for Cloak of Shadows (an extra space after Effect).

Also, if the wiki is to be believed, it is -15% combat rate

Is:
Code:
Effect 	Cloak of Shadows	Combat Rate: -5

Should be:
Code:
Effect	Cloak of Shadows	Combat Rate: -15
 
I believe this is sufficient for tracking the banisher, or at least it has been working with me (unless I missed some of the code in my svn diff check):

Code:
Index: src/net/sourceforge/kolmafia/request/FightRequest.java
===================================================================
--- src/net/sourceforge/kolmafia/request/FightRequest.java  (revision 19119)
+++ src/net/sourceforge/kolmafia/request/FightRequest.java  (working copy)
@@ -9346,6 +9372,14 @@
            }
            break;

+       case SkillPool.BALEFUL_HOWL:
+           if ( responseText.contains( "spooked by its balefulness" ) || skillSuccess )
+           {
+               BanishManager.banishMonster( monsterName, "baleful howl" );
+               Preferences.increment( "_balefulHowlUsed" );
+           }
+           break;
+
        }
    }

Index: src/net/sourceforge/kolmafia/session/BanishManager.java
===================================================================
--- src/net/sourceforge/kolmafia/session/BanishManager.java (revision 19119)
+++ src/net/sourceforge/kolmafia/session/BanishManager.java (working copy)
@@ -114,6 +114,7 @@
    // whether banish is turn free, type of reset.
    private static final Banisher[] BANISHER = new Banisher[]
    {
+       new Banisher( "baleful howl", -1, 1, true, Reset.ROLLOVER_RESET ),
        new Banisher( "banishing shout", -1, 3, false, Reset.AVATAR_RESET ),
        new Banisher( "batter up!", -1, 1, false, Reset.ROLLOVER_RESET ),
        new Banisher( "Be a Mind Master", 80, 1, true, Reset.TURN_RESET ),
 
That looks good, added in 19120. I changed it slightly to _balefulHowlUses since that sounds more like an int than a boolean.
 
Code:
# Dark Gyffte
bloodstick	COOK	blood bag	wad of dough
actual blood sausage	COOK	blood bag	batgut
actual blood sausage	COOK	blood bag	ratgut
blood snowcone	COOK	blood bag	plain snowcone
blood roll-up	COOK	blood bag	blackberry
blood-soaked sponge cake	COOK	blood bag	gauze garter
blood-soaked sponge cake	COOK	blood bag	filthy poultice
bottle of Sanguiovese	MIX	blood bag	fermenting powder
mulled blood	MIX	blood bag	spices
Red Russian	MIX	blood bag	glass of goat's milk
dusty bottle of blood	MIX	blood bag	dusty bottle of Merlot
dusty bottle of blood	MIX	blood bag	dusty bottle of Port
dusty bottle of blood	MIX	blood bag	dusty bottle of Pinot Noir
dusty bottle of blood	MIX	blood bag	dusty bottle of Zinfandel
dusty bottle of blood	MIX	blood bag	dusty bottle of Marsala
dusty bottle of blood	MIX	blood bag	dusty bottle of Muscat
vampagne	MIX	blood bag	Monstar energy beverage
vampagne	MIX	blood bag	carbonated soy milk
Yeah. This would be a great time to figure out how to have multiple recipes for a concoction.
There is built-in code to support {catsup, ketchup}.
If I recall, sort of kludgey, but perhaps we could adapt it here.
Although {ratgut, batgut} are not otherwise interchangeable.
 
There's also support for *umbrella -> gatorskin, as well as various cola and beer recipes.

I don't think this switch statement scales, though:
Code:
                for ( int i = 0; i < ingredients.length; ++i )
                {
                        switch ( ingredients[ i ].getItemId() )
                        {
                        case ItemPool.SCHLITZ:
                        case ItemPool.WILLER:
                                ingredients[ i ] = ConcoctionDatabase.getBetterIngredient(
                                        ItemPool.SCHLITZ, ItemPool.WILLER, availableIngredients );
                                break;

                        case ItemPool.KETCHUP:
                        case ItemPool.CATSUP:
                                ingredients[ i ] = ConcoctionDatabase.getBetterIngredient(
                                        ItemPool.KETCHUP, ItemPool.CATSUP, availableIngredients );
                                break;

                        case ItemPool.DYSPEPSI_COLA:
                        case ItemPool.CLOACA_COLA:
                                ingredients[ i ] = ConcoctionDatabase.getBetterIngredient(
                                        ItemPool.DYSPEPSI_COLA, ItemPool.CLOACA_COLA, availableIngredients );
                                break;

                        case ItemPool.TITANIUM_UMBRELLA:
                        case ItemPool.GOATSKIN_UMBRELLA:
                                ingredients[ i ] = ConcoctionDatabase.getBetterIngredient(
                                        ItemPool.TITANIUM_UMBRELLA, ItemPool.GOATSKIN_UMBRELLA, availableIngredients );
                                break;
                        }
                }

It looks like the core logic is in getBetterIngredient, which (in brief) compares the available counts of A and B; if they're equal, uses mall price as a tiebreaker.
 
And yeah, as you point out, some of the new recipes involve ingredients that aren't otherwise interchangeable (blackberry / plain snowcone seems to be the other one).

One shortcoming of the current code as I read it is that it'll only use one item or the other. If you have, say, 50 of each kind of beer and want to make 100 green beers, I expect that it'll buy 50 of whichever is cheaper in the mall. That might just be an acceptable tradeoff.

If I were to design this from scratch, instead of passing around a single ingredients list, I'd use the full set of possible recipes, although that might get computationally expensive quickly.

(incidentally, it seems that the recipes for humpty dumplings, loaf of soda bread, and warbear hoverbelt appear twice verbatim in concoctions.txt.)
 
Items with multiple creation mechanisms, per concoctions.txt:
Code:
[2325]Staff of Ed
actual blood sausage
blood-soaked sponge cake
bloody beer
cold wad
crappy Mer-kin mask
dripping meat crossbow
dripping meat staff
dripping meat sword
dusty bottle of blood
gatorskin umbrella
green beer
hot wad
Humpty Dumplings
loaf of soda bread
magical baguette
makeshift SCUBA gear
meatloaf helmet
pebblebräu
plain pizza
pr0n cocktail
rocky road ice cream
rum and cola
sleaze wad
spooky wad
standard-issue cupcake
stench wad
sticky meat kilt
vampagne
vial of amber slime
vial of brown slime
vial of chartreuse slime
vial of green slime
vial of indigo slime
vial of orange slime
vial of purple slime
vial of teal slime
vial of vermilion slime
vial of violet slime
whiskey and cola

Of these: we have... duplicates (madness bakery stuff, and a few others listed previously), mutually exclusive (often based off quest items, e.g. crappy merkin mask), multiple creation mechanisms (e.g. malus / wad transmutation), slime potions (which we probably want to keep separate), and substitutions. Duplicates can be removed; separate creation mechanisms probably can be ignored; mutually exclusive doesn't really matter.
 
It would be helpful to track the monster currently "sniffed" with the use of the skill 'Perceive Soul'
 
Has the effect been spaded? +3 copies with no rejection like most other Avatar paths?

I don't know... Mostly I am hoping that the tracked monster would be set so I know if I need to cast is over again.
That is, set a property perceiveSoulMonster=$monster[something]
 
Does it stick around after rollover? Does it have a duration?

(These are both pretty easy to check. Sniff + banish in a zone with conditional monsters, look for tumbleweeds.)

IMO there's a base level of spading that needs to happen for any source of queue manipulation, especially if it's not tracked via an effect.
 
Back
Top