New Content - Implemented Miniature Crystal Ball tracking post January 10th 2022 changes

Malibu Stacey

Active member
I prefixed this with "Bug" but it's not really a bug.(thanks bmaher)
KoL changed the behaviour of an IotM more than a year since release to remove a ridiculous uncapped free fight farming method which would have caused hyper-meat-inflation and the entire kingdom to become tatter farmers to support it.

The text announcing the change from /trivial is

January 10 - The miniature crystal ball now allows you to ponder it, viewing all applicable predictions that have been made. That said, a prediction coming true now moves you into a mirror dimension where any other predictions are no longer true.

So the way it works now is much simpler than it was previously. There's basically 3 rules to it.

1. Adventuring with it equipped without a prediction for the current zone = you get a prediction for the current zone
2. Adventuring with it equipped with a prediction for the current zone = you get the predicted encounter and all predictions are wiped (you will also get a new prediction for the zone since you have it equipped due to #1 above).
3. Adventuring without it equipped = all predictions for zones other than the current zone are wiped if the encounter cost you an adventure (or you hit 2 or more free encounters). "zoneless" encounters don't appear to trigger this (tested with the chateau painting encounter and combat lover's locket encounters both costing a turn). It's likely only adv.php locations that trigger this as those are the only places you get predictions.

I think the bolded sections highlight what was changed from the previous implementation. I'll attempt to show the current behaviour and highlight where changes are needed to the tracking property.

Rule 1. Equip & fight to get a prediction
Code:
Putting on miniature crystal ball...
Equipment changed.
Preference    nextAdventure changed from Noob Cave to The Dire Warren
Preference    lastAdventure changed from Noob Cave to The Dire Warren

[772037]    The Dire Warren
Preference lastEncounter changed from crate to Knob    Goblin Embezzler
Encounter: Knob Goblin Embezzler
Preference    _lastCombatStarted changed from 20220311185428 to 20220311185502
Preference    beGregariousFightsLeft changed from 1 to 0
Round 0: Malibu Stacey wins    initiative!
Preference crystalBallPredictions changed from to    772036:The Dire Warren:fluffy bunny
Preference    cosmicBowlingBallReturnCombats changed from 1 to 0
Round 1: Robo'Shea    looks into their crystal ball and tugs on your sleeve. "Look out, there's    a fluffy bunny right around the next corner," they tell you.
Round    1: Malibu Stacey executes a macro!
Round 1: Malibu Stacey tries to    steal an item!
Ponder agrees with crystalBallPredictions.
What the Future Holds
You gaze into your familiar's miniature crystal ball and ponder all the possible futures it has shown:

a fluffy bunny in The Dire Warren

Rule 3. Unequip, fight in zone where we don't have a prediction
Code:
Putting on amulet coin...
Equipment changed.
Preference nextAdventure changed from The Dire Warren to The Penultimate Fantasy Airship
Preference lastAdventure changed from The Dire Warren to The Penultimate Fantasy Airship

[772038] The Penultimate Fantasy Airship
Preference lastEncounter changed from Knob Goblin Embezzler to Spunky Princess
Encounter: Spunky Princess
Preference _lastCombatStarted changed from 20220311185502 to 20220311185718
Round 0: Malibu Stacey wins initiative!
Preference cosmicBowlingBallReturnCombats changed from 0 to -1
You acquire an item: cosmic bowling ball
Round 1: Malibu Stacey tries to steal an item!
<combat snipped. I backed up to an Embezzler so it cost a turn intentionally>

crystalBallPredictions still (incorrectly) contains the prediction for the Dire Warren. Ponder now disagrees with crystalBallPredictions and it is updated upon Pondering.
What the Future Holds
You see no future in your familiar's miniature crystal ball.
Code:
Preference crystalBallPredictions changed from 772037:The Dire Warren:fluffy bunny to

Rule 1. Equip & fight to get a prediction again
Code:
Putting on miniature crystal ball...
Equipment changed.
Preference nextAdventure changed from The Penultimate Fantasy Airship to The Dire Warren
Preference lastAdventure changed from The Penultimate Fantasy Airship to The Dire Warren

[772041] The Dire Warren
Encounter: Knob Goblin Embezzler
Preference _lastCombatStarted changed from 20220311190331 to 20220311190406
Preference beGregariousFightsLeft changed from 2 to 1
Round 0: Malibu Stacey wins initiative!
Preference crystalBallPredictions changed from to 772040:The Dire Warren:Knob Goblin Embezzler
Preference cosmicBowlingBallReturnCombats changed from 3 to 2
Round 1: "Hey look," Robo'Shea says, pointing at their crystal ball. "There's a little you fighting a little Knob Goblin Embezzler. Ooh, you're getting your little ass kicked." "Aw man," you say. "Come on, little me! You can do it!"

Ponder agrees as expected.
What the Future Holds
You gaze into your familiar's miniature crystal ball and ponder all the possible futures it has shown:

a Knob Goblin Embezzler in The Dire Warren

Rule 3. Unequip, fight in the same zone
Code:
Putting on amulet coin...
Equipment changed.

[772042] The Dire Warren
Encounter: Knob Goblin Embezzler
Preference _lastCombatStarted changed from 20220311190406 to 20220311190553
Preference beGregariousFightsLeft changed from 1 to 0
Round 0: Malibu Stacey wins initiative!
Preference cosmicBowlingBallReturnCombats changed from 2 to 1
Round 1: Malibu Stacey executes a macro!
Round 1: Malibu Stacey tries to steal an item!

Ponder agrees but updates the (unnecessary) turn counter in crystalBallPredictions
What the Future Holds
You gaze into your familiar's miniature crystal ball and ponder all the possible futures it has shown:

a Knob Goblin Embezzler in The Dire Warren
Code:
Preference crystalBallPredictions changed from 772041:The Dire Warren:Knob Goblin Embezzler to 772042:The Dire Warren:Knob Goblin Embezzler

Rule 2: Equip and fight in a zone where we have a prediction
Code:
equip familiar miniature crystal ball

[772043] The Dire Warren
Encounter: Knob Goblin Embezzler
Preference _lastCombatStarted changed from 20220311190553 to 20220311191011
Preference crystalBallPredictions changed from 772042:The Dire Warren:Knob Goblin Embezzler to
Round 0: Malibu Stacey wins initiative!
Preference crystalBallPredictions changed from  to 772042:The Dire Warren:fluffy bunny
Preference cosmicBowlingBallReturnCombats changed from 1 to 0
Round 1: Robo'Shea looks into the crystal ball, and predicts that the next monster in this zone is going to be a fluffy bunny.
Preference banishedMonsters changed from fluffy bunny:Bowl a Curveball:772038 to
Round 1: Malibu Stacey executes a macro!
Round 1: Malibu Stacey tries to steal an item!

I didn't bother Pondering after this combat as it's the same as the first example above (correctly tracks the new prediction).

I forgot to load a prediction for another zone into it when doing the above to show all predictions being wiped when encountering any prediction. Will attempt to spade that on a subsequent day.
 
Last edited:
3. Adventuring without it equipped = all predictions for zones other than the current zone are wiped if the encounter cost you an adventure (or you hit 2 or more free encounters). "zoneless" encounters don't appear to trigger this (tested with the chateau painting encounter and combat lover's locket encounters both costing a turn). It's likely only adv.php locations that trigger this as those are the only places you get predictions.

I think the bolded sections highlight what was changed from the previous implementation. I'll attempt to show the current behaviour and highlight where changes are needed to the tracking property.
this part is not changed from the previous implementation, and like before it still has to take 2 turns if the fight that gave the prediction was ended with a free banish,
(or you hit 2 or more free encounters)
is incorrect. Adventuring with it equipped and 2 or more free encounters will wipe predictions on the basis of rule 2 2. Adventuring with it equipped with a prediction for the current zone = you get the predicted encounter and all predictions are wiped
but Adventuring without it equipped and 2 or more free encounters does not wipe predictions for any zones
 

Malibu Stacey

Active member
this part is not changed from the previous implementation, and like before it still has to take 2 turns if the fight that gave the prediction was ended with a free banish,

is incorrect. Adventuring with it equipped and 2 or more free encounters will wipe predictions on the basis of rule 2 2. Adventuring with it equipped with a prediction for the current zone = you get the predicted encounter and all predictions are wiped
but Adventuring without it equipped and 2 or more free encounters does not wipe predictions for any zones

Equipped, got a prediction.
Code:
equip familiar miniature crystal ball

[774034] The Dire Warren
Preference lastEncounter changed from crate to Knob Goblin Embezzler
Encounter: Knob Goblin Embezzler
Preference _lastCombatStarted changed from 20220314190600 to 20220314190749
Preference beGregariousFightsLeft changed from 2 to 1
Round 0: Malibu Stacey wins initiative!
Preference crystalBallPredictions changed from  to 774033:The Dire Warren:Knob Goblin Embezzler
Round 1: "Hmm," Robo'Shea says, looking into their crystal ball. "How do you feel about fighting a Knob Goblin Embezzler? Coz that's gonna happen soon, unless you go somewhere else."
Round 1: Malibu Stacey executes a macro!

Unequipped, fight in same zone
Code:
equip familiar amulet coin

[774035] The Dire Warren
Encounter: Knob Goblin Embezzler
Preference _lastCombatStarted changed from 20220314190749 to 20220314190800
Preference beGregariousFightsLeft changed from 1 to 0
Round 0: Malibu Stacey wins initiative!
Round 1: Malibu Stacey executes a macro!
No change to predictions as expected

Adventure once in another zone without it equipped (actually switched familiars but same difference since the other familiar doesn't have it equipped, it has the Ittah Bittah Hookah)
Code:
familiar Fist Turkey (83 lbs)

equip acc2 "I Voted!" sticker

Preference nextAdventure changed from The Dire Warren to The Toxic Teacups
Preference lastAdventure changed from The Dire Warren to The Toxic Teacups

[774036] The Toxic Teacups
Preference lastEncounter changed from Knob Goblin Embezzler to terrible mutant
Encounter: terrible mutant
Preference crystalBallPredictions changed from 774033:The Dire Warren:Knob Goblin Embezzler to
Preference _lastCombatStarted changed from 20220314190800 to 20220314190815
Preference _voteFreeFights changed from 2 to 3
Preference lastVoteMonsterTurn changed from 1244409 to 1244420
Preference relayCounters changed from 774041:Latte Monster loc=*:snout.gif:774035:Vote Monster:absballot.gif:774060:Digitize Monster loc=* type=wander:watch.gif to 774041:Latte Monster loc=*:snout.gif:774060:Digitize Monster loc=* type=wander:watch.gif
Round 0: Malibu Stacey wins initiative!
Round 1: Malibu Stacey executes a macro!
Even though the encounter is free, the prediction is wiped both by KoL and by mafia

Code:
familiar Robortender (118 lbs)

equip familiar miniature crystal ball

Preference lastAdventure changed from The Toxic Teacups to The Dire Warren
Preference nextAdventure changed from The Toxic Teacups to The Dire Warren

[774036] The Dire Warren
Preference lastEncounter changed from terrible mutant to fluffy bunny
Encounter: fluffy bunny
Preference _lastCombatStarted changed from 20220314190815 to 20220314190826
Round 0: Malibu Stacey wins initiative!
Preference crystalBallPredictions changed from  to 774035:The Dire Warren:fluffy bunny
Round 1: Robo'Shea looks into their crystal ball and tugs on your sleeve. "Look out, there's a fluffy bunny right around the next corner," they tell you.

Ergo I don't think the rule of "2 of more free adventures" actually applies. I don't think it cares about whether adventures are free or not any more. Hitting an adv.php zone without it equipped when you have no prediction for the zone appears to wipe all predictions regardless whether the encounter cost you an adventure or not.
 
Hitting an adv.php zone without it equipped when you have no prediction for the zone appears to wipe all predictions regardless whether the encounter cost you an adventure or not.
this seems like it may instead be a property of wanderering monsters which would be a change from before, I think they only did not give predictions, now they do not give predictions and can also wipe them from other zones?
no that is not correct either, but I had the following results earlier, fighting wanderers without removing the crystal ball
Code:
equip crystal ball
adventure in The Smut Orc Logging Camp: fight and get prediction
adventure in The Smut Orc Logging Camp: Blech House
free wanderer in The Castle in the Clouds in the Sky (Ground Floor)
ponder: no prediction

Code:
adventure in The Smut Orc Logging Camp: fight and get prediction
free wanderer in The Arid, Extra-Dry Desert
ponder: no prediction
 
Last edited:
"adv.php" requirement to clear predictions was also changed or there are exceptions, have seen a fresh prediction get cleared on next turn spent in cellar.php, occasional observations seem to yield inconsistent results
and like before it still has to take 2 turns if the fight that gave the prediction was ended with a free banish,
also not always true, the apparent exception may have involved a visit to The Shore, Inc. shop, but could not reproduce it
 
My understanding of toastergazing (visiting The Shore) is that the only thing it actually enables is resetting your orb predictions with zoneless encounters that otherwise wouldn't do so.
 
Then maybe something like turtle tamer adventures could also explain clearing predictions in cellar.php exceptionally
 

Irrat

Member
Replying to this thread instead of making a new one.

So I've taken it as a personal offense that crystal ball tracking isn't as reliable as it should be, and made a PR here

So the real question is, what should we do with ambiguous monster names?
I'm actually referring to specifically these three monsters. [1] [2] [3]
Another example is gremlin tool monsters.

They are all called Ninja Snowman by KoL. But mafia knows them as Ninja Snowman (Chopsticks) etc.
Unfortunately crystal ball predictions do not give the monster ID, only the monster name.

So there's several solutions here.

1. We simply ignore it, the prediction does not exist.
2. We find the first monster that could be called by that name knowing that we will probably be wrong. This will give the majority of support desired.
3. We handle it without turning it into a valid name, knowing that any script attempting to parse the predictions and find said monster may error for no fault of their own.

For now, unless someone expresses an opinion otherwise. I'll be doing 2.
 
Replying to this thread instead of making a new one.

So I've taken it as a personal offense that crystal ball tracking isn't as reliable as it should be, and made a PR here

So the real question is, what should we do with ambiguous monster names?
I'm actually referring to specifically these three monsters. [1] [2] [3]
Another example is gremlin tool monsters.

They are all called Ninja Snowman by KoL. But mafia knows them as Ninja Snowman (Chopsticks) etc.
Unfortunately crystal ball predictions do not give the monster ID, only the monster name.

So there's several solutions here.

1. We simply ignore it, the prediction does not exist.
2. We find the first monster that could be called by that name knowing that we will probably be wrong. This will give the majority of support desired.
3. We handle it without turning it into a valid name, knowing that any script attempting to parse the predictions and find said monster may error for no fault of their own.

For now, unless someone expresses an opinion otherwise. I'll be doing 2.
For what it's worth, I don't see much wrong with option 3. Unless this is a meaningful divergence from current behavior (which I don't think it is, but I've been wrong before), someone trying to parse that text directly into a monster will error from time to time, but it won't be "for no fault of their own." I think replacing it with a specific monster/name that it doesn't necessarily refer to is bad behavior because it implies a level of certainty that we don't guarantee, and I think ignoring the prediction is similarly bad because it doesn't present information that is conceivably useful.
 

Irrat

Member
For what it's worth, I don't see much wrong with option 3. Unless this is a meaningful divergence from current behavior (which I don't think it is, but I've been wrong before), someone trying to parse that text directly into a monster will error from time to time, but it won't be "for no fault of their own." I think replacing it with a specific monster/name that it doesn't necessarily refer to is bad behavior because it implies a level of certainty that we don't guarantee, and I think ignoring the prediction is similarly bad because it doesn't present information that is conceivably useful.
I went with 2, ultimately it should give the majority of support needed.

If you have an ambiguous monster, just parse the monster and get the monster manuel name to find out what monster was actually predicted.

So if you see `Ninja Snowman (Hilt)` then you know `Ninja Snowman` was predicted.
It invalidates the prediction if you hit `Ninja Snowman (Chopsticks)` as normal. Seeing as that might've been the actual prediction.
 

Erosion

Member
There seems to be a new issue with the mafia queue tracking. The more times you visit [ponder], the more times mafia thinks your zone queue gets filled with the predicted monster.

> queue the haunted bedroom

Returned: Wardröb nightstand; Wardröb nightstand; Wardröb nightstand; animated mahogany nightstand; animated ornate nightstand

[ponder]

> queue the haunted bedroom

Returned: Wardröb nightstand; Wardröb nightstand; animated mahogany nightstand; animated ornate nightstand; animated ornate nightstand

[ponder]

> queue the haunted bedroom

Returned: Wardröb nightstand; animated mahogany nightstand; animated ornate nightstand; animated ornate nightstand; animated ornate nightstand

[ponder]

> queue the haunted bedroom

Returned: animated mahogany nightstand; animated ornate nightstand; animated ornate nightstand; animated ornate nightstand; animated ornate nightstand

and so on.
 

Irrat

Member
There seems to be a new issue with the mafia queue tracking. The more times you visit [ponder], the more times mafia thinks your zone queue gets filled with the predicted monster.

> queue the haunted bedroom

Returned: Wardröb nightstand; Wardröb nightstand; Wardröb nightstand; animated mahogany nightstand; animated ornate nightstand

[ponder]

> queue the haunted bedroom

Returned: Wardröb nightstand; Wardröb nightstand; animated mahogany nightstand; animated ornate nightstand; animated ornate nightstand

[ponder]

> queue the haunted bedroom

Returned: Wardröb nightstand; animated mahogany nightstand; animated ornate nightstand; animated ornate nightstand; animated ornate nightstand

[ponder]

> queue the haunted bedroom

Returned: animated mahogany nightstand; animated ornate nightstand; animated ornate nightstand; animated ornate nightstand; animated ornate nightstand

and so on.
Oh, that's a thing? Huh.


 
Last edited:
Top