New Content - Implemented The return of formerly extinct monsters

ckb

Minion
Staff member
Code:
New monster #324 found in Manuel with name 'Dopey, the Reindeer' image 'reindeer.gif' attributes ='Atk: 0 Def: 0 HP: 0 Init: -10000 P: beast'
 

Darzil

Developer
Looking at MonsterData, it looks like cap and floor are the maximum and minimum values that attack, defense, hp, and experience can take. If we want to have 10000 be the default cap and 10 be the default floor, then we do this:

We have caps above 10000, in the new areas for one, and floors below 10 (as low as 1). We also have far more lower capped monsters than 'default' uncapped.
 

Veracity

Developer
Staff member
That's fine. But if KoL has a default, we can have the same default, and only specify caps and floors that differ from the default. You know, non-default values. :)
 

Darzil

Developer
I have no problem in principle.

Can we add notation for not completely spaded, then, as it'd be nice to know what is known and what isn't, which we (other than uncapped/unfloored) can tell now. Doesn't have to do anthing, just some way of knowing. I guess we can add comments above the line if it comes to it

(edit - and not sure there is anything uncapped and unfloored - I think at present anything with Scale but not Cap or Floor is unspaded)
 

Darzil

Developer
I'm sort of tempted just to support a Scale: ? notation to show this. Maybe we add new scaling monsters as Scale: ?, Cap: ? Floor: ? and consider the ? to be 0, 10000, 10 in code, with an unspaded note in Area Combat Data and monster stats, til the figures are firmed up.
 

Magus_Prime

Well-known member
As of r16177:

Code:
New monster #321 found in Manuel with name 'Striking Stocking-Stuffer Elf' image 'crimboelf.gif' attributes ='Atk: 0 Def: 0 HP: 0 Init: -10000 P: elf'
 

Veracity

Developer
Staff member
I'm sort of tempted just to support a Scale: ? notation to show this. Maybe we add new scaling monsters as Scale: ?, Cap: ? Floor: ? and consider the ? to be 0, 10000, 10 in code, with an unspaded note in Area Combat Data and monster stats, til the figures are firmed up.
That seems perfectly reasonable.
 

Veracity

Developer
Staff member
As of revision 16179 (which adds a lot of monster IDs from the Wiki; if it is wrong, we'll detect it and log it), these are the monsters currently in Faustbot with monster IDs that KoLmafia doesn't have yet:

cookie-baking Thing from Beyond Time
Sneezy, the Reindeer
gift-wrapping vampire
Arc-Welding Elfborg

I'm especially thrilled to see the first one, since I attempted to pull it from the deck many times, assuming it was a Horror. I'll find out tomorrow what its monster ID is and whether it really is a Horror - and what its insanity-inducing factoids are. :)
 

Veracity

Developer
Staff member
I'm sort of tempted just to support a Scale: ? notation to show this. Maybe we add new scaling monsters as Scale: ?, Cap: ? Floor: ? and consider the ? to be 0, 10000, 10 in code, with an unspaded note in Area Combat Data and monster stats, til the figures are firmed up.
I've thought about this. Here is what I think would do this for you:

- In monsters.txt, allow Scale: ? Cap: ? and Floor: ?
- When we read that, it remains as part of the Attributes string (visible in the .attributes proxy field of the $monster object) but is translated to the DEFAULT values when registering the monster; I see no reason to do that translation every time we look up base HP, for example.
- When we see a monster in Manuel, If Attack is ?, then generate Scale: ?, Cap: ?, and Floor: ? in the attributes string which we use to register the monster. That will be handled as above.
- (When I am faxing in monsters and see a scaling monster, I determine the scale factor - and, perhaps, the cap, if it is low - and will submit Scale: X Cap: ? and Floor: ? into monsters.txt)
- And all those monsters that used to have default scale and floor in monsters.txt that I removed? Yeah. Those are spaded, so can remain as they are and will use the default. But every OTHER scaling monster which was not spaded should be updated to have Cap: ? Floor: ?.
- Near as I can tell, if you are looking for Unspaded scaling monsters, that's all the info you need; why would you need an "UNSPADED" keyword in the monster stats, when the "?" means the same thing?
 

Darzil

Developer
- Near as I can tell, if you are looking for Unspaded scaling monsters, that's all the info you need; why would you need an "UNSPADED" keyword in the monster stats, when the "?" means the same thing?
Absolutely, I was by that time talking about the Location Details that come from AreaCombatData, and the monster stats that show in the relay browser. Definitely doesn't need them in monsters.txt.
 

Veracity

Developer
Staff member
In revision 16184:
Code:
Duplicate monster ID 632 : (warty pirate,golden ring)
Revision 16185

I've thought about this. Here is what I think would do this for you:

- In monsters.txt, allow Scale: ? Cap: ? and Floor: ?
- When we read that, it remains as part of the Attributes string (visible in the .attributes proxy field of the $monster object) but is translated to the DEFAULT values when registering the monster
- When we see a monster in Manuel, If Attack is ?, then generate Scale: ?, Cap: ?, and Floor: ? in the attributes string which we use to register the monster. That will be handled as above.
Revision 16186
 

Yendor

Member
Monster #639 has name 'death ray in a pair tree' but Manuel calls it 'death ray in a pear tree'
Monster #440 has name 'Decal-applying Elfborg' but Manuel calls it 'Decal-Applying Elfborg'

Death ray is a construct, zero stats like the other monsters in the zone.
 

Veracity

Developer
Staff member
Revision 16189 parses all the monster stats from Manuel entries when we look at a page and logs discrepancies with what we have in monsters.txt. If Manuel says that a monster has Atk "?", we require that we have a "scale" - even if it is "?" for that monster.

That worked fine except for the wandering bees. None of those are listed as "scaling" - but all of them have formulas that look sort of like scaling formulas, but with weird multipliers.

Where did these come from? They clearly scale, but why do these, of all scaling monsters in the game, have to be expressed in non-standard formulae?

Code:
beebee gunners	1077	beebeegunner.gif	WANDERER HP: [ceil((max(min(MUS,10000)+ML,10))*15/28)] Def: [ceil((max(min(MUS,10000)+ML,10))*5/7)] Atk: [ceil((max(min(MOX,10000)+ML,10))*5/7)] Exp: [ceil(5/7*(max(min(STAT,10000),10)/4+ML/3))] Init: -10000 P: bug	handful of honey (0)
moneybee	1076	moneybee.gif	WANDERER HP: [ceil((max(min(MUS,10000)+ML,10))*.625)] Def: [ceil((max(min(MUS,10000)+ML,10))*5/6)] Atk: [ceil((max(min(MOX,10000)+ML,10))*5/6)] Exp: [ceil(5/6*(max(min(STAT,10000),10)/4+ML/3))] Init: -10000 P: bug	handful of honey (0)
mumblebee	1075	mumblebee.gif	WANDERER HP: [ceil((max(min(MUS,10000)+ML,10))*15/28)] Def: [ceil((max(min(MUS,10000)+ML,10))*5/7)] Atk: [ceil((max(min(MOX,10000)+ML,10))*5/7)] Exp: [ceil(5/7*(max(min(STAT,10000),10)/4+ML/3))] Init: -10000 P: bug	handful of honey (0)
beebee queue	1080	beebeequeue.gif	WANDERER HP: [ceil((max(min(MUS+20,10000)+ML,10))*15/28)] Def: [ceil((max(min(MUS+20,10000)+ML,10))*5/7)] Atk: [ceil((max(min(MOX+20,10000)+ML,10))*5/7)] Exp: [ceil(5/7*(max(min(STAT+20,10000),10)/4+ML/3))] Init: -10000 P: bug	handful of honey (0)	handful of honey (0)
bee swarm	1079	beeswarm.gif	WANDERER HP: [ceil((max(min(MUS+20,10000)+ML,10))*.625)] Def: [ceil((max(min(MUS+20,10000)+ML,10))*5/6)] Atk: [ceil((max(min(MOX+20,10000)+ML,10))*5/6)] Exp: [ceil(5/6*(max(min(STAT+20,10000),10)/4+ML/3))] Init: -10000 P: bug	handful of honey (0)	handful of honey (0)
buzzerker	1078	buzzerker.gif	WANDERER HP: [ceil((max(min(MUS+20,10000)+ML,10))*.625)] Def: [ceil((max(min(MUS+20,10000)+ML,10))*5/6)] Atk: [ceil((max(min(MOX+20,10000)+ML,10))*5/6)] Exp: [ceil(5/6*(max(min(STAT+20,10000),10)/4+ML/3))] Init: -10000 P: bug	handful of honey (0)	handful of honey (0)
Beebee King	1082	beebeeking.gif	WANDERER HP: [ceil((max(min(MUS+40,10000)+ML,10))*15/28)] Def: [ceil((max(min(MUS+40,10000)+ML,10))*5/7)] Atk: [ceil((max(min(MOX+40,10000)+ML,10))*5/7)] Exp: [ceil(5/7*(max(min(STAT+40,10000),10)/4+ML/3))] Init: -10000 Phys: 50 P: bug	handful of honey (0)	handful of honey (0)	handful of honey (0)
bee thoven	1081	beethoven.gif	WANDERER HP: [ceil((max(min(MUS+40,10000)+ML,10))*.625)] Def: [ceil((max(min(MUS+40,10000)+ML,10))*5/6)] Atk: [ceil((max(min(MOS+40,10000)+ML,10))*5/6)] Exp: [ceil(5/6*(max(min(STAT+40,10000),10)/4+ML/3))] Init: -10000 Phys: 50 P: bug	handful of honey (0)	handful of honey (0)	handful of honey (0)
Queen Bee	1083	beequeen.gif	WANDERER HP: [ceil((max(min(MUS+40,10000)+ML,10))*.625)] Def: [ceil((max(min(MUS+40,10000)+ML,10))*5/6)] Atk: [ceil((max(min(MOX+40,10000)+ML,10))*5/6)] Exp: [ceil(5/6*(max(min(STAT+40,10000),10)/4+ML/3))] Init: -10000 Phys: 50 P: bug	handful of honey (0)	handful of honey (0)	handful of honey (0)
 

heeheehee

Developer
Staff member
Some monsters are hardcoded in fight.php, such as Wormwood monsters (I recall seeing this in one of the twitch streams). I'm not sure if Bees are also hardcoded.
 

Veracity

Developer
Staff member
Interesting. Manuel says that the Ancient Mariner has Atk 0 Def 0 HP 0 - just like a lot of the obsolete monsters that we are seeing again through Manuel but which (used to be) scaling. I bet that all scaling monsters used to be hardcoded - and Manuel shows such monsters as 0/0/0 - before they came up with a regularized way to do scaling monsters - which show up as ?/?/?.
 

Darzil

Developer
That worked fine except for the wandering bees. None of those are listed as "scaling" - but all of them have formulas that look sort of like scaling formulas, but with weird multipliers.

Where did these come from? They clearly scale, but why do these, of all scaling monsters in the game, have to be expressed in non-standard formulae?

In a Bee run, all the other monsters are affected by number of B's, and made 20% harder, including scaling monsters. Wandering B's are not, so these adjustments reduce the stats so that when Mafia takes into account the number of B's, it gives the right values.

I guess we could handle it other ways, but that would make the code more complex rather than the expressions in monsters.txt. They could be made into standard scaling monsters if we hard code skipping the 20% B adjustment for the stats/experience for them.
 

Veracity

Developer
Staff member
They could be made into standard scaling monsters if we hard code skipping the 20% B adjustment for the stats/experience for them.
Since Manuel shows them as "?" monsters - i.e., "modern" scaling monsters - I'd prefer if we listed them as "Scale: 10" (or whatever), and did not apply the B adjustment to those monsters in particular. The B adjustment is already special hardcoding for us for this path only. I assume we could add a keyword - NOBEE, say - which would say "don't do it for this monster".

I'd like it if KoL would go and retrofit all the hardcoded monsters to use their standard "scaling" variables. They could remove a bunch of code, and it would presumably apply to all the obsolete-but-newly-available-again scaling monsters that no longer scale. Both you and I submitted bug reports about this. I have had no response whatsoever to mine. Perhaps you were luckier!
 

Bale

Minion
I'd like it if KoL would go and retrofit all the hardcoded monsters to use their standard "scaling" variables.

LoL! Ha-ha, hee hee hee, hoooooo-hoo, ha! Oh yeah! LoL! There' no way in hell that they'll do that.

Seriously though, Jick isn't a programmer so he is incapable of understanding the elegance of fixing code that already works just so that it is easier to maintain and works uniformly with future changes. That's one way that non-programmers are different from us.
 
Top