Feature - Implemented Improvements to appearance_rates()

zarqon

Well-known member
For the most part, appearance_rates() quite accurately reflects your actual chances of encountering a given monster in a zone, even accounting for Olfaction and banished monsters. It is a very useful function for all kinds of things. But there are a few places where more special handling would be appreciated:

  • In the Oil Peak, not all the monsters are available; only one is, depending on your +ML.
  • In the X-est Adventurer Contests, when you have only 1 contestant remaining, it's going to be the boss.
  • At The Nemesis' Lair, only one class's minion will be available in the zone before fighting the boss.

The first one is particularly relevant to Crimbo scripts currently circulating, as well as my own. Thank you.
 

Darzil

Developer
Sounds reasonable. When I was first updating this stuff I made a list of around 40-50 zones that would need special handling that I've never got around to adding, mostly in out of the way areas, so good to see some high profile ones.
 

heeheehee

Developer
Staff member
I fought 4 daft punks this run. Does it vary? Do you have to win combats? I can check this, I guess.
 

heeheehee

Developer
Staff member
Answer to 1, yes; answer to 2, unknown. Of my past logs, I have the following for daft punks: 4, 5, 5, 5, 7 (sorted). I'll check for other classes.

edit: hellseal guardian: 4, 4
warehouse worker: 6
evil spaghetti cult zealot: 4, 5
security slime: 4, 4
mariachi bruiser: 5

Totals: 4: 6, 5: 5, 6: 1, 7: 1.
 
Last edited:

Darzil

Developer
I am pretty sure I have at least once used free runaways to progress, so am guessing it is just normal delay.

Edit: Not sure if there is a cap beyond which you only encounter the boss, also.
 

heeheehee

Developer
Staff member
Anyways, it looks like 4-turn delay, based on my dozen or so datapoints. I evidently don't nemesis that often, so if anyone has more data, that'd be useful, too. I'm currently getting a multi to that stage of the quest, so I'll hopefully have more data on boss encounter rate etc later.
 

Darzil

Developer
r16543

Have done bosses based on being a normal monster encounter with delay of 4, but may be something more complex.

Lightly tested.
 

zarqon

Well-known member
Thanks for the incredibly fast response! Curious what the others on your list are. I seem to recall some other times when BatMan RE's combat queue was incorrect, but these three are the only ones I specially noted.

Came across another: the Overgrown Shrines and the Massive Ziggurat still show a 100% appearance rate for dense lianas, even after they've been cleared away.
 
Last edited:

Darzil

Developer
Here are my notes from September last year:
Code:
A Crater Full of Space Beasts = Space Beast Matriarch, until defeated, after 11 or more space beast kills
A Massive Ziggurat = Dense liana, until 3 kills
Overgrown Shrines = Dense liana, until 3 kills
Anger Man's Level = Anger Man, until defeated, every 8 adventures after You're Freaking Kidding Me completed successfully
Burnbarrel Blvd. = Ol' Scratch, until defeated, when image at 10 or non-combat Home, Home in the Range or Too Hot To Handle encountered 
Chinatown Shops = yakuza courier, until defeated (non-combat rate chance? rate unknown)
Chinatown Tenement = Server, until , With 30+ gold pieces (non-combat rate chance? rate unknown)
Doubt Man's Level = Doubt Man, until defeated, every 8 adventures after Slings and Arrows completed successfully
Dreadsylvanian Castle/Village/Woods = 50/50 chance of each boss, until defeated, when final non-combat encountered, til defeated, as we don't track. Fix it when one found, until defeated.
Elf Alley = Uncle Hobo until defeated, when image at 10 or non-combat Clear and Present Danger  or There's Already Somebody On That Lap  encountered
Exposure Esplanade = Frosty, until defeated, when image at 10 or non-combat Bumpity Bump Bump or Snow, Man encountered
Fear Man's Level = Fear Man, until defeated, every 8 adventures after So... Many... Skulls... completed successfully
The "Fun" House = The Clownlord Beelzebozo, until defeated, after 11? turns in zone (non-combat rate chance? rate unknown)
Guano Junction = screambat, 9th adventure, then every 8 (counts turns in Guano Junction, Batrat and Ratbat Burrow and Beanbat Chamber
Hobopolis Town Square = Hodgman, The Hoboverlord, until defeated, wen image at 25 or non-combat Enter The Hoboverlord or Not Now! encountered
Lair of the Ninja Snowmen = ninja snowman assassin, chance = Combat Rate / 2 + Adventures spent in zone * 1.5, 100% on turn 11, 21, 31 etc
Lair of the Ninja Snowmen = Frozen Solid Snake, until defeated, on right stage of quest, after 5? adventures in zone since getting, timer starts when you get sent there
Mer-kin Colosseum = which monster is based on current round, which we check
Neckback Crick = Uneathed Monstrosity, until defeated, blackberry galoshes worn (non-combat rate chance? rate unknown)
Nemesis Cave = based on class
Oil Peak = based on ML
Post-Cyrpt Cemetary = Skelter Butleton, the Butler Skeleton, until defeated, 100% chance after 5 adventures in the zone since using half a memo
Post-Cyrpt Cemetary = Snakeleton, until defeated, on right stage of quest, after 5? adventures in zone since getting, timer starts when you get sent there
Pre-Cyrpt Cemetary = Snakeleton, until defeated, on right stage of quest, after 5? adventures in zone since getting, timer starts when you get sent there
Professor Jacking's Huge-A-Ma-tron = Fearsome Wacken, until defeated, 100% chance with a dance upon the palate effect
Regret Man's Level = Regret Man, until defeated, every 8 adventures after The Wall of Wailing completed successfully
Seaside Megalopolis = cyborg policeman, with multi-pass, quest not completed
Seaside Megalopolis = obese tourist, after boarding cruise ship
Seaside Megalopolis = terrifying robot, after boarding cruise ship
Shivering Timbers = Underworld Tree, until defeated, with Ax of L'rose equipped
The Smut Orc Logging Camp = smut orc pervert, 21st adventure, then every 20 adventures
Swamp Beaver Territory = conservationist hippy, with shrunken navigator head (non-combat rate chance? rate unknown)
 

heeheehee

Developer
Staff member
If you're including pervert and forced assassins, then you should also consider the forced lobsterfrogmen. Also possibly the forced noncombats (e.g. spooky forest), in a similar vein.
 

Darzil

Developer
Yeah, there's loads of possible stuff, much involving adding additional tracking. Just realising today there are a few underwater monsters unlocked in various ways that I think we don't track.
 

Ezandora

Member
r16545

The ASH function appearance_rates() seems to not take into account these adjustments:

Code:
> ash my_ascensions()

Returned: 73

> prefref relocate

relocatePygmyJanitor(user, now '73', default -1)
relocatePygmyLawyer(user, now '3', default -1)

> ash $location[the hidden park].appearance_rates()

Returned: aggregate float [monster]
none => -1.0
pygmy assault squad => 20.0
pygmy blowgunner => 20.0
boaraffe => 20.0
pygmy janitor => 20.0
pygmy witch lawyer => 20.0

> ash $location[the hidden apartment building].appearance_rates()

Returned: aggregate float [monster]
none => -1.0
ancient protector spirit (The Hidden Apartment Building) => 0.0
pygmy janitor => 25.0
pygmy shaman => 25.0
pygmy witch accountant => 25.0
pygmy witch lawyer => 25.0

> ash $location[the hidden park].appearance_rates(true)

Returned: aggregate float [monster]
none => -1.0
pygmy assault squad => 12.5
pygmy blowgunner => 12.5
boaraffe => 12.5
pygmy janitor => 12.5
pygmy witch lawyer => 50.0

> ash $location[the hidden apartment building].appearance_rates(true)

Returned: aggregate float [monster]
none => -1.0
ancient protector spirit (The Hidden Apartment Building) => 0.0
pygmy janitor => 57.142857142857146
pygmy shaman => 14.285714285714286
pygmy witch accountant => 14.285714285714286
pygmy witch lawyer => 14.285714285714286

> ash monster_level_adjustment()

Returned: 21

> ash $location[oil peak].appearance_rates(false)

Returned: aggregate float [monster]
none => 0.0
oil slick => 25.0
oil tycoon => 25.0
oil baron => 25.0
oil cartel => 25.0

> ash $location[oil peak].appearance_rates(true)

Returned: aggregate float [monster]
none => 0.0
oil slick => 7.6923076923076925
oil tycoon => 30.76923076923077
oil baron => 30.76923076923077
oil cartel => 30.76923076923077

There's code in AreaCombatData.java in adjustConditionalWeighting() that seems to alter them? But debugging it, it never gets called when using appearance_rates(). Possibly in appearance_rates() in RuntimeLibrary.java, call recalculate() on AreaCombatData data?
 

Crowther

Active member
It's cool that these are being found and fixed. I noticed today that the meat blobs are reversed.
Code:
combats.txt:The Haunted Pantry  80      possessed can of tomatoes       fiendish can of asparagus       flame-broiled meat blob: 1o     overdone flame-broiled meat blob: 1e    undead elbow macaroni
 

zarqon

Well-known member
A couple more I found today, neither of which appear in the above list:

  • In the F'c'le, only one of the clingy pirates will appear, not both.
  • In the Throne Room, the Knob Goblin King will not appear after defeating him.
 
Top