Feature - Implemented Basement monsters exact stats

Raijinili

Member
Spaded this over the past week. Basement monsters have no variance.

Except at very low levels (I don't know why, but the level 1 monster has base ML 4, and possibly a few others below 15), this formula has been working (exactly) for everything I've encountered.

Atk = 2*ceil(floor^1.4) + bonusML
Def = ceil(Atk*.90)
HP = ceil(1.7*HPModifier*ceil(floor^1.4)) + bonusML

HPModifier = .25 for Ghost, .5 for Stone Golem, and 1 for everything else.

Also, yes, these work for even negative bonus ML.

Notes on specific monsters:
- Ears: (none)
- Eyes: Always gets jump
- Stone: 50% Physical Resistance; 50% HP (effectively: takes double from elemental damage)
- Hydra: Has Elemental attacks
- Ghost: 100% Physical Resistance; 25% HP
- Beer Golem: Blocks most spells
- Horror: Immune (probably) to weapon attacks and weapon skills; never gets jump

Also, if it matters, everyone except Eyes and Horror have 70 initiative, according to recent spading on the wiki.
 

Bale

Minion
Here's a related bug that was reported regarding Basement monsters. It's worth mentioning here because the value of adding those stats is limited unless the following bug is attended to.

Basement monsters -- checking last_monster() returns $monster[none].

The real problem is that basement monsters won't match a consult script. All of the monsters in the basement have related values in $monsters[], but KoLmafia won't recognize anything in the basement as matching those $monster[] values:

$monster[the beast with n ears]
$monster[the beast with n eyes]
$monster[a n-headed hydra]
$monster[n bottles of beer on a golem]
$monster[a n-dimensional horror]
 

Theraze

Active member
So this is what I've updated my local copy of monsters.txt to, based on the spading:
# Fernswarthy's Basement
The Beast with n Ears HP: [1.7*ceil(BL^1.4)+ML] Def: [1.8*ceil(BL^1.4)+ML] Atk: [2*ceil(BL^1.4)+ML] Init: 70
The Beast with n Eyes HP: [1.7*ceil(BL^1.4)+ML] Def: [1.8*ceil(BL^1.4)+ML] Atk: [2*ceil(BL^1.4)+ML] Init: 100
A n Stone Golem HP: [0.85*ceil(BL^1.4)+ML] Def: [1.8*ceil(BL^1.4)+ML] Atk: [2*ceil(BL^1.4)+ML] Init: 70 Phys: 50
A n-Headed Hydra HP: [1.7*ceil(BL^1.4)+ML] Def: [1.8*ceil(BL^1.4)+ML] Atk: [2*ceil(BL^1.4)+ML] Init: 70
The Ghost of Fernswarthy's n great-grandfather HP: [0.425*ceil(BL^1.4)+ML] Def: [1.8*ceil(BL^1.4)+ML] Atk: [2*ceil(BL^1.4)+ML] Init: 70 Phys: 100
n Bottles of Beer on a Golem HP: [1.7*ceil(BL^1.4)+ML] Def: [1.8*ceil(BL^1.4)+ML] Atk: [2*ceil(BL^1.4)+ML] Init: 70 Spell: 90
A n-Dimensional Horror HP: [1.7*ceil(BL^1.4)+ML] Def: [1.8*ceil(BL^1.4)+ML] Atk: [2*ceil(BL^1.4)+ML] Init: 0 Phys: 90
Looks right?
 

Raijinili

Member
Def=ceil(1.8*(ceil(BL^1.4)+ML)), actually. Def is 90% of buffed attack. I think this is usually the case for monsters in the Kingdom.

Also, everything is ceil'd, if that matters. Since there's no variance, these numbers would be exact.
 

Theraze

Active member
Well, defense gets dropped 10% after the calculations are done... for non-scaling, at least. Not sure (anymore) if scaling monsters have 90% defence post-scaling, or if it's 100% defence post-scaling...

Edit: Yeah, scaling monsters don't drop again.

Def=ceil(1.8*(ceil(BL^1.4)+ML)), actually.
Not really... that makes ML be 90% higher than it should be. Sec, I'll work through it properly...
This should be more right for the defense:
ceil(0.9*(2*ceil(BL^1.4)+ML))
 
Last edited:
When did you do this and what monsters does it apply to?
The formula for basement monsters isn't exactly right, but unless it's changed very recently, they definitely vary. I don't think that's in dispute. Are you sure about this?
 

Raijinili

Member
In the past week or two. No variance whatsoever. Dwarvish war uniform returns the same exact stats each time, and precisely matches the formula.

HP was tested with the mattock, and then spicing until the number changes (since it rounds up to the nearest multiple of seven).

p.x = predicted x based off floor
d.x = difference between actual and predicted.

Code:
level	monster	def	atk	hp	p.atk	d.atk	p.def	d.def	p.hp	d.hp
1	stone	4	4	2	2	2	2	2	1	1
16	horror	89	98	84	98	0	89	0	84	0
17	hydra	96	106	91	106	0	96	0	91	0
18	eyes	105	116	99	116	0	105	0	99	0
19	ghost	112	124	27	124	0	112	0	27	0
22	horror	137	152	130	152	0	137	0	130	0
23	eyes	146	162	138	162	0	146	0	138	0
27	ears	182	202	172	202	0	182	0	172	0
28	horror	193	214	182	214	0	193	0	182	0
38	ears	294	326	278	326	0	294	0	278	0
43	ghost	350	388	83	388	0	350	0	83	0
44	beer	360	400	340	400	0	360	0	340	0
46	hydra	384	426	363	426	0	384	0	363	0
51	stone	443	492	210	492	0	443	0	210	0
 

Veracity

Developer
Staff member
The real problem is that basement monsters won't match a consult script. All of the monsters in the basement have related values in $monsters[], but KoLmafia won't recognize anything in the basement as matching those $monster[] values:

$monster[the beast with n ears]
$monster[the beast with n eyes]
$monster[a n-headed hydra]
$monster[n bottles of beer on a golem]
$monster[a n-dimensional horror]
And "a n-stone golem" and "the ghost of fernswarthy's n great-grandfather".

Revision 10233 should fix this.
 
Last edited:
Top