<a name='mon177'></a><table width=95%><tr><td colspan=6 height=1 bgcolor=black></td></tr><tr><td rowspan=4 valign=top width=100><img src=/images/adventureimages/barrel.gif width=100></td><td width=30><img src=/images/itemimages/nicesword.gif width=30 height=30 alt="Attack Power (approximate)" title="Attack Power (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>15</font></b></td><td width=30><img src=/images/itemimages/weirdflavor.gif alt="This monster is Weird" title="This monster is Weird" width=30 height=30></td><td rowspan=4 width=10></td><td rowspan=4 valign=top class=small><b><font size=+2>mimic</font></b><ul><li>You should hear the mimic's Goblin King impersonation; it really nails that weird Goblin accent.<li>Mimics can only mimic things of the same mass as they are. Which means, unfortunately, when they mimic a swarm of bees, it's a HUUUGE swarm.<li>No one's ever seen a mimic in its natural form, but scientist speculate it looks kind of like a duck crossed with a buffalo.</ul></td></tr><tr><td width=30><img src=/images/itemimages/whiteshield.gif width=30 height=30 alt="Defense (approximate)" title="Defense (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>13</font></b></td><td width=30><img src=/images/itemimages/circle.gif width=30 height=30 alt="This monster has no particular elemental alignment." title="This monster has no particular elemental alignment."></td></tr><tr><td width=30><img src=/images/itemimages/hp.gif width=30 height=30 alt="Hit Points (approximate)" title="Hit Points (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>25</font></b></td><td width=30><img src=/images/itemimages/watch.gif alt="Initiative +90%" title="Initiative +90%" width=30 height=30></td></tr><tr><td></td><td></td></tr></table><a name='mon283'></a><table width=95%><tr><td colspan=6 height=1 bgcolor=black></td></tr><tr><td rowspan=4 valign=top width=100><img src=/images/adventureimages/lowerm.gif width=100></td><td width=30><img src=/images/itemimages/nicesword.gif width=30 height=30 alt="Attack Power (approximate)" title="Attack Power (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>45</font></b></td><td width=30><img src=/images/itemimages/weirdflavor.gif alt="This monster is Weird" title="This monster is Weird" width=30 height=30></td><td rowspan=4 width=10></td><td rowspan=4 valign=top class=small><b><font size=+2>mimic</font></b><ul><li>A mimic in its natural form kind of looks like an upside-down squirrel with tentacles.<li>The only thing a mimic can't mimic is itself. Think about that, man.<li>Like all shapeshifters, mimics store their extra mass in a pocket dimension when they mimic something smaller than they are.</ul></td></tr><tr><td width=30><img src=/images/itemimages/whiteshield.gif width=30 height=30 alt="Defense (approximate)" title="Defense (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>40</font></b></td><td width=30><img src=/images/itemimages/circle.gif width=30 height=30 alt="This monster has no particular elemental alignment." title="This monster has no particular elemental alignment."></td></tr><tr><td width=30><img src=/images/itemimages/hp.gif width=30 height=30 alt="Hit Points (approximate)" title="Hit Points (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>50</font></b></td><td width=30><img src=/images/itemimages/watch.gif alt="Initiative +70%" title="Initiative +70%" width=30 height=30></td></tr><tr><td></td><td></td></tr></table><a name='mon287'></a><table width=95%><tr><td colspan=6 height=1 bgcolor=black></td></tr><tr><td rowspan=4 valign=top width=100><img src=/images/adventureimages/barrel.gif width=100></td><td width=30><img src=/images/itemimages/nicesword.gif width=30 height=30 alt="Attack Power (approximate)" title="Attack Power (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>15</font></b></td><td width=30><img src=/images/itemimages/weirdflavor.gif alt="This monster is Weird" title="This monster is Weird" width=30 height=30></td><td rowspan=4 width=10></td><td rowspan=4 valign=top class=small><b><font size=+2>mimic</font></b><ul><li>Mimic eggs greatly resemble gold coins. When newly-hatched, the larva are flat and leathery, and look like lost wallets.<li>The largest mimic on record was a bank vault belonging to King Gerald IX. Weirdly, nobody ever noticed.<li>Besides treasure chests and barrels, mimics have also been discovered in the shape of crates, end-tables, trash cans, and toilets.</ul></td></tr><tr><td width=30><img src=/images/itemimages/whiteshield.gif width=30 height=30 alt="Defense (approximate)" title="Defense (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>13</font></b></td><td width=30><img src=/images/itemimages/circle.gif width=30 height=30 alt="This monster has no particular elemental alignment." title="This monster has no particular elemental alignment."></td></tr><tr><td width=30><img src=/images/itemimages/hp.gif width=30 height=30 alt="Hit Points (approximate)" title="Hit Points (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>25</font></b></td><td width=30><img src=/images/itemimages/watch.gif alt="Initiative +90%" title="Initiative +90%" width=30 height=30></td></tr><tr><td></td><td></td></tr></table><a name='mon288'></a><table width=95%><tr><td colspan=6 height=1 bgcolor=black></td></tr><tr><td rowspan=4 valign=top width=100><img src=/images/adventureimages/barrel.gif width=100></td><td width=30><img src=/images/itemimages/nicesword.gif width=30 height=30 alt="Attack Power (approximate)" title="Attack Power (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>25</font></b></td><td width=30><img src=/images/itemimages/weirdflavor.gif alt="This monster is Weird" title="This monster is Weird" width=30 height=30></td><td rowspan=4 width=10></td><td rowspan=4 valign=top class=small><b><font size=+2>mimic</font></b><ul><li>The least pleasant part of being a barrel-mimicing mimic is when someone fills you full of wine.<li>Okay, that's actually pretty pleasant. The least pleasant part is when some poor person tries to wear you.<li>Barrel-mimicing mimics frequently spend a dozen years hibernating, pleasantly full of scotch.</ul></td></tr><tr><td width=30><img src=/images/itemimages/whiteshield.gif width=30 height=30 alt="Defense (approximate)" title="Defense (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>22</font></b></td><td width=30><img src=/images/itemimages/circle.gif width=30 height=30 alt="This monster has no particular elemental alignment." title="This monster has no particular elemental alignment."></td></tr><tr><td width=30><img src=/images/itemimages/hp.gif width=30 height=30 alt="Hit Points (approximate)" title="Hit Points (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>35</font></b></td><td width=30><img src=/images/itemimages/watch.gif alt="Initiative +90%" title="Initiative +90%" width=30 height=30></td></tr><tr><td></td><td></td></tr></table><a name='mon289'></a><table width=95%><tr><td colspan=6 height=1 bgcolor=black></td></tr><tr><td rowspan=4 valign=top width=100><img src=/images/adventureimages/barrel.gif width=100></td><td width=30><img src=/images/itemimages/nicesword.gif width=30 height=30 alt="Attack Power (approximate)" title="Attack Power (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>35</font></b></td><td width=30><img src=/images/itemimages/weirdflavor.gif alt="This monster is Weird" title="This monster is Weird" width=30 height=30></td><td rowspan=4 width=10></td><td rowspan=4 valign=top class=small><b><font size=+2>mimic</font></b><ul><li>The only thing a mimic can't mimic is another mimic mimicking a mime!<li>One downside to mimicking a barrel is that broke people try to use you for clothing.<li>If you force the mimic to assume a shape you find amusing, your laughter will really hurt its feelings.</ul></td></tr><tr><td width=30><img src=/images/itemimages/whiteshield.gif width=30 height=30 alt="Defense (approximate)" title="Defense (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>31</font></b></td><td width=30><img src=/images/itemimages/circle.gif width=30 height=30 alt="This monster has no particular elemental alignment." title="This monster has no particular elemental alignment."></td></tr><tr><td width=30><img src=/images/itemimages/hp.gif width=30 height=30 alt="Hit Points (approximate)" title="Hit Points (approximate)"></td><td width=50 valign=center align=left><b><font size=+2>45</font></b></td><td width=30><img src=/images/itemimages/watch.gif alt="Initiative +90%" title="Initiative +90%" width=30 height=30></td></tr><tr><td></td><td></td></tr></table>
mimic 283 lowerm.gif BOSS Atk: 45 Def: 40 HP: 50 Init: 70 P: weird dead mimic (n100)
mimic (Bottom 2 Rows) 287 barrel.gif Atk: 15 Def: 13 HP: 25 Init: 90 P: weird Manuel: "mimic"
mimic (Middle 2 Rows) 288 barrel.gif Atk: 25 Def: 22 HP: 35 Init: 90 P: weird Manuel: "mimic"
mimic (Top 2 Rows) 289 barrel.gif Atk: 35 Def: 31 HP: 45 Init: 90 P: weird Manuel: "mimic"
mimic (obsolete) 177 barrel.gif Atk: 15 Def: 13 HP: 25 Init: 90 P: weird Manuel: "mimic"
animated nightstand (mahogany combat) 399 darkstand.gif Atk: 162 Def: 149 HP: 170 Init: 30 P: construct Manuel: "animated nightstand" old coin purse (25) old leather wallet (25) half of a memo (c0)
animated nightstand (mahogany noncombat) 407 darkstand.gif Atk: 162 Def: 149 HP: 170 Init: 30 P: construct Manuel: "animated nightstand" old coin purse (25) old leather wallet (25) half of a memo (c0)
animated nightstand (white combat) 391 nightstand.gif Atk: 159 Def: 153 HP: 180 Init: 40 P: construct Manuel: "animated nightstand" grouchy restless spirit (80)
animated nightstand (white noncombat) 406 nightstand.gif Atk: 159 Def: 153 HP: 180 Init: 40 P: construct Manuel: "animated nightstand" grouchy restless spirit (80)
Yeah. I have that on my list of things to look at.Monster #906 has name 'Mob Penguin goon' but Manuel calls it 'Mob Penguin Goon'.
Mob Penguin goon 753 penggoon.gif Scale: 6 Cap: 10000 Floor: 10 Init: 75 P: penguin penguin thesaurus (0)
Mob Penguin Goon 906 penggoon.gif Scale: 0 Cap: 10000 Floor: 10 Init: -10000 P: penguin Crimbuck herringcello penguin focaccia bread
so an ASH script really can't be used to check KoLmafia monster names vs. Monster Manuel monster names.> ash ( "Mob Penguin goon" == "Mob Penguin Goon" )
Returned: true
record mon_data
{
string image;
string name;
};
static mon_data [int] monsters;
void parseManuel(string URL)
{
string page = visit_url(URL);
matcher entry_matcher = create_matcher( "<a name='mon(.*?)'></a><table width=95%>(.*?)</table>", page );
while ( entry_matcher.find() ) {
int id = entry_matcher.group( 1 ).to_int();
string entry = entry_matcher.group( 2 );
matcher image_matcher = create_matcher( "/.*images/(.*?.gif) width=([(100)(60)])", entry );
string image = image_matcher.find() ? image_matcher.group( 1 ) : "";
matcher data_matcher = create_matcher( "<font size=.2>(.*?)</font>", entry );
if ( data_matcher.find() && data_matcher.find() ) {
string name = data_matcher.group( 1 );
monsters[ id ] = new mon_data( image, name );
}
}
}
void parseall()
{
monsters.clear();
parseManuel("questlog.php?which=6&vl=a");
parseManuel("questlog.php?which=6&vl=b");
parseManuel("questlog.php?which=6&vl=c");
parseManuel("questlog.php?which=6&vl=d");
parseManuel("questlog.php?which=6&vl=e");
parseManuel("questlog.php?which=6&vl=f");
parseManuel("questlog.php?which=6&vl=g");
parseManuel("questlog.php?which=6&vl=h");
parseManuel("questlog.php?which=6&vl=i");
parseManuel("questlog.php?which=6&vl=j");
parseManuel("questlog.php?which=6&vl=k");
parseManuel("questlog.php?which=6&vl=l");
parseManuel("questlog.php?which=6&vl=m");
parseManuel("questlog.php?which=6&vl=n");
parseManuel("questlog.php?which=6&vl=o");
parseManuel("questlog.php?which=6&vl=p");
parseManuel("questlog.php?which=6&vl=q");
parseManuel("questlog.php?which=6&vl=r");
parseManuel("questlog.php?which=6&vl=s");
parseManuel("questlog.php?which=6&vl=t");
parseManuel("questlog.php?which=6&vl=u");
parseManuel("questlog.php?which=6&vl=v");
parseManuel("questlog.php?which=6&vl=w");
parseManuel("questlog.php?which=6&vl=x");
parseManuel("questlog.php?which=6&vl=y");
parseManuel("questlog.php?which=6&vl=z");
parseManuel("questlog.php?which=6&vl=-");
}
void main()
{
print("Checking Monster Manuel...", "blue");
parseall();
print("Done checking Monster Manuel!", "blue");
print( "Monster Manuel has told you about " + monsters.count() + " different monsters" );
map_to_file( monsters, "monster_map.txt" );
print( "Raw data saved to monster_map.txt in your 'data' directory." );
foreach id, data in monsters {
string name = data.name;
string image = data.image;
monster mon = to_monster( id );
if ( mon.to_string() == "none" ){
print( "Discrepancy: KoLmafia could not find monster '" + name + "' with id " + id );
}
if ( !( mon.images contains image ) ) {
print( "Discrepancy: Manuel says monster '" + name + "' has image " + image + " but KolMafia thinks it is " + mon.image );
}
}
}
This issue is why I am spending all of my KoL time in aftercore these days: I am focussed on getting factoids and getting KoLmafia to have the correct names, ids, and stats for all the obsolete monsters that the Dec of Every Card is giving us.> call scripts/Utilities/manuel.ash
Checking Monster Manuel...
Monster #906 has name 'Mob Penguin goon' but Manuel calls it 'Mob Penguin Goon'
Monster #1667 has name 'Your winged yeti' but Manuel calls it 'Mraderick'
Monster #1669 has name 'You the Adventurer' but Manuel calls it 'Veracity the Adventurer'
Done checking Monster Manuel!
Monster Manuel has told you about 1570 different monsters
Raw data saved to monster_map.txt in your 'data' directory.
Discrepancy: Manuel says monster '(shadow opponent)' has image shadows/61.gif but KolMafia thinks it is ../otherimages/shadows/20.gif
Discrepancy: Manuel says monster 'Mob Penguin goon' has image pengbook.gif but KolMafia thinks it is penggoon.gif
Discrepancy: Manuel says monster 'Mother Slime' has image slimetube/stboss.gif but KolMafia thinks it is ../otherimages/slimetube/stboss.gif
Discrepancy: Manuel says monster 'Veracity the Adventurer' has image classav6c_f.gif but KolMafia thinks it is
Yeah. I have that on my list of things to look at.
We have the monsters entered in with KoL's capitalization. What is the issue?Code:Mob Penguin goon 753 penggoon.gif Scale: 6 Cap: 10000 Floor: 10 Init: 75 P: penguin penguin thesaurus (0) Mob Penguin Goon 906 penggoon.gif Scale: 0 Cap: 10000 Floor: 10 Init: -10000 P: penguin Crimbuck herringcello penguin focaccia bread
- That message was from KoLmafia itself. It SHOULD have looked up monster by ID, so why the wrong name?
- When looking up monsters by name, do we ignore case?
- ASH itself ignores case in string comparisons:
- ASH itself ignores case in string comparisons:
Edit: for some reason, I thought "this thread" was the Feature that heeheehee started to discuss ASH string comparison, not, the "monsters have an ID" thread. I might move these posts over to the correct thread.
Mob Penguin goon 753 penggoon.gif
Mob Penguin Goon 906 penggoon.gif
Monster #906 has name 'Mob Penguin goon' but Manuel calls it 'Mob Penguin Goon'.
Your Shadow 210 ../otherimages/shadows/20.gif
Mother Slime 792 ../otherimages/slimetube/stboss.gif
Gnollish Sorceress 17 gnollmage.gif HP: 5 Def: 9 Atk: 11 Init: 60 P: humanoid
Right. And we have a thread for that: The return of formerly extinct monstersWith all of the above changes, this Feature might be done. Yes, we will still have missing monster IDs for months, probably - but we will add those, as we fax in the monsters and learn them.
MonsterDatabase.MONSTER_DATA is a map from (lower cased) name to MonsterDataThere is no monster in Mafia that has monster ID 906, and there is only one Mob Penguin goon (no Goon). Only the first listed monster is stored. Why? I have no idea.