<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://nethackwiki.com/index.php?action=history&amp;feed=atom&amp;title=User%3AAaxelb%2FMonster_resistances</id>
	<title>User:Aaxelb/Monster resistances - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://nethackwiki.com/index.php?action=history&amp;feed=atom&amp;title=User%3AAaxelb%2FMonster_resistances"/>
	<link rel="alternate" type="text/html" href="https://nethackwiki.com/index.php?title=User:Aaxelb/Monster_resistances&amp;action=history"/>
	<updated>2026-06-04T06:16:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.32.5</generator>
	<entry>
		<id>https://nethackwiki.com/index.php?title=User:Aaxelb/Monster_resistances&amp;diff=84828&amp;oldid=prev</id>
		<title>Aaxelb: The script I used to generate the monster resistances tables</title>
		<link rel="alternate" type="text/html" href="https://nethackwiki.com/index.php?title=User:Aaxelb/Monster_resistances&amp;diff=84828&amp;oldid=prev"/>
		<updated>2013-05-06T19:22:24Z</updated>

		<summary type="html">&lt;p&gt;The script I used to generate the monster resistances tables&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Here's the little script I wrote to generate the body of the [[monster resistances]] table (as well as the [[Monster resistances (UnNetHack)|UnNetHack version]]). It uses [[User:Adeon|Adeon]]'s [https://github.com/Noeda/pinobot pinobot code]. This page is as much for my own reference as for anyone else, and this was my first time playing with a purely functional language, let alone with Haskell, so please be gentle.&lt;br /&gt;
&lt;br /&gt;
To run this script, put it in a file (say, &amp;lt;code&amp;gt;resistancesTable.hs&amp;lt;/code&amp;gt;) in the &amp;lt;code&amp;gt;pinobot/src&amp;lt;/code&amp;gt; directory, then:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ghc --make resistancesTable&lt;br /&gt;
./resistancesTable vanilla &amp;gt; vanillaResistances.txt&lt;br /&gt;
./resistancesTable unnethack &amp;gt; unnethackResistances.txt&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And here's the script:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
import qualified NetHack.Data.Monster as MD&lt;br /&gt;
import qualified NetHack.Imported.Vanilla as Vanilla&lt;br /&gt;
import qualified NetHack.Imported.UnNetHack as UnNetHack&lt;br /&gt;
import qualified Data.Text as T&lt;br /&gt;
import System.Environment&lt;br /&gt;
import Data.Maybe ( fromJust )&lt;br /&gt;
import Data.List.Utils ( join, contains )&lt;br /&gt;
&lt;br /&gt;
data Variant = Vanilla&lt;br /&gt;
             | UnNetHack&lt;br /&gt;
&lt;br /&gt;
wikitableBody :: Variant -&amp;gt; String&lt;br /&gt;
wikitableBody variant = join &amp;quot;\n|-\n&amp;quot; [wikitableMonsterLine variant monName | monName &amp;lt;- (allMonsters variant)]&lt;br /&gt;
&lt;br /&gt;
monsterFetcher :: Variant -&amp;gt; T.Text -&amp;gt; Maybe MD.Monster&lt;br /&gt;
monsterFetcher Vanilla = Vanilla.monster&lt;br /&gt;
monsterFetcher UnNetHack = UnNetHack.monster&lt;br /&gt;
&lt;br /&gt;
allMonsters :: Variant -&amp;gt; [T.Text]&lt;br /&gt;
allMonsters Vanilla = Vanilla.allMonsterNames&lt;br /&gt;
allMonsters UnNetHack = UnNetHack.allMonsterNames&lt;br /&gt;
&lt;br /&gt;
wikitableMonsterLine :: Variant -&amp;gt; T.Text -&amp;gt; String&lt;br /&gt;
wikitableMonsterLine variant monName = wikitableMonsterLine' (fromJust $ monsterFetcher variant monName)&lt;br /&gt;
&lt;br /&gt;
wikitableMonsterLine' :: MD.Monster -&amp;gt; String&lt;br /&gt;
wikitableMonsterLine' mon = &amp;quot;| &amp;quot; ++ join &amp;quot; || &amp;quot;&lt;br /&gt;
    [&lt;br /&gt;
      &amp;quot;{{monsymlink|&amp;quot; ++ T.unpack (MD.moName mon) ++ &amp;quot;}}&amp;quot;,&lt;br /&gt;
      hasResistance mon MD.ReFire,&lt;br /&gt;
      hasResistance mon MD.ReCold,&lt;br /&gt;
      hasResistance mon MD.RePoison,&lt;br /&gt;
      hasResistance mon MD.ReSleep,&lt;br /&gt;
      hasResistance mon MD.ReElectricity,&lt;br /&gt;
      hasResistance mon MD.ReDisintegrate,&lt;br /&gt;
      hasResistance mon MD.ReAcid,&lt;br /&gt;
      hasResistance mon MD.RePetrification,&lt;br /&gt;
      hasResistance mon MD.ReDrain,&lt;br /&gt;
      hasResistance mon MD.ReMagic ]&lt;br /&gt;
  where&lt;br /&gt;
    hasResistance mon res = formatCell res (contains [res] (MD.moResistances mon))&lt;br /&gt;
&lt;br /&gt;
    resistanceName MD.ReFire = &amp;quot;Fire resistance&amp;quot;&lt;br /&gt;
    resistanceName MD.ReCold = &amp;quot;Cold resistance&amp;quot;&lt;br /&gt;
    resistanceName MD.ReSleep = &amp;quot;Sleep resistance&amp;quot;&lt;br /&gt;
    resistanceName MD.ReDisintegrate = &amp;quot;Disintegration resistance&amp;quot;&lt;br /&gt;
    resistanceName MD.ReElectricity = &amp;quot;Shock resistance&amp;quot;&lt;br /&gt;
    resistanceName MD.RePoison = &amp;quot;Poison resistance&amp;quot;&lt;br /&gt;
    resistanceName MD.ReAcid = &amp;quot;Acid resistance&amp;quot;&lt;br /&gt;
    resistanceName MD.RePetrification = &amp;quot;Petrification resistance&amp;quot;&lt;br /&gt;
    resistanceName MD.ReDrain = &amp;quot;Drain resistance&amp;quot;&lt;br /&gt;
    resistanceName MD.ReMagic = &amp;quot;Magic resistance&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    formatCell res hasRes = &amp;quot;title='&amp;quot; ++ resistanceName res ++ &amp;quot;' &amp;quot; ++ yesify hasRes&lt;br /&gt;
    yesify True = &amp;quot;{{yes}}&amp;quot;&lt;br /&gt;
    yesify False = &amp;quot;{{no}}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
variantFetcher :: String -&amp;gt; Variant&lt;br /&gt;
variantFetcher &amp;quot;vanilla&amp;quot; = Vanilla&lt;br /&gt;
variantFetcher &amp;quot;unnethack&amp;quot; = UnNetHack&lt;br /&gt;
&lt;br /&gt;
main = do&lt;br /&gt;
    (variant:_) &amp;lt;- getArgs&lt;br /&gt;
    putStrLn $ wikitableBody (variantFetcher variant)&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aaxelb</name></author>
		
	</entry>
</feed>