<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>Makefile-saiph.mk</filename>
    </added>
    <added>
      <filename>nbproject/Makefile-Default.mk</filename>
    </added>
    <added>
      <filename>nbproject/Makefile-impl.mk</filename>
    </added>
    <added>
      <filename>nbproject/Makefile-variables.mk</filename>
    </added>
    <added>
      <filename>nbproject/Package-Default.bash</filename>
    </added>
    <added>
      <filename>nbproject/configurations.xml</filename>
    </added>
    <added>
      <filename>nbproject/project.properties</filename>
    </added>
    <added>
      <filename>nbproject/project.xml</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,5 +1,7 @@
 *.log
+*.err
 *.o
 .*
 gmon.out
 saiph
+nbproject/private</diff>
      <filename>.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -11,17 +11,24 @@ namespace analyzer {
 }
 
 namespace action {
+
 	class Action {
 	public:
 		static const Command noop;
 
-		Action(analyzer::Analyzer *analyzer) : sequence(0), analyzer(analyzer) {}
-		virtual ~Action() {}
+		Action(analyzer::Analyzer *analyzer) : sequence(0), analyzer(analyzer) {
+		}
+
+		virtual ~Action() {
+		}
 
 		static void init();
 		static void destroy();
 		virtual int getID() = 0;
-		virtual analyzer::Analyzer *getAnalyzer() {return analyzer;}
+
+		virtual analyzer::Analyzer *getAnalyzer() {
+			return analyzer;
+		}
 		virtual const Command &amp;getCommand() = 0;
 		virtual void updateAction(const std::string &amp;messages) = 0;
 </diff>
      <filename>Actions/Action.h</filename>
    </modified>
    <modified>
      <diff>@@ -4,14 +4,20 @@
 #include &quot;Action.h&quot;
 
 namespace action {
+
 	class Answer : public Action {
 	public:
 		static int id;
 
-		Answer(analyzer::Analyzer *analyzer, std::string answer) : Action(analyzer), answer(answer, PRIORITY_CONTINUE_ACTION) {}
-		virtual ~Answer() {}
+		Answer(analyzer::Analyzer *analyzer, std::string answer) : Action(analyzer), answer(answer, PRIORITY_CONTINUE_ACTION) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Answer() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Answer.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,14 +5,20 @@
 #include &quot;../Inventory.h&quot;
 
 namespace action {
+
 	class Apply : public Action {
 	public:
 		static int id;
 
-		Apply(analyzer::Analyzer *analyzer, unsigned char key, int priority, bool update_inventory = true) : Action(analyzer), do_apply(&quot;a&quot;, priority), apply_item(std::string(1, key), PRIORITY_CONTINUE_ACTION), update_inventory(update_inventory) {}
-		virtual ~Apply() {}
+		Apply(analyzer::Analyzer *analyzer, unsigned char key, int priority, bool update_inventory = true) : Action(analyzer), do_apply(&quot;a&quot;, priority), apply_item(std::string(1, key), PRIORITY_CONTINUE_ACTION), update_inventory(update_inventory) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Apply() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Apply.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,14 +5,20 @@
 #include &quot;../Inventory.h&quot;
 
 namespace action {
+
 	class ApplyInDirection : public Action {
 	public:
 		static int id;
 
-		ApplyInDirection(analyzer::Analyzer *analyzer, unsigned char key, unsigned char direction, int priority, bool update_inventory = true) : Action(analyzer), do_apply(&quot;a&quot;, priority), apply_item(std::string(1, key), PRIORITY_CONTINUE_ACTION), apply_direction(std::string(1, direction), PRIORITY_CONTINUE_ACTION), update_inventory(update_inventory) {}
-		virtual ~ApplyInDirection() {}
+		ApplyInDirection(analyzer::Analyzer *analyzer, unsigned char key, unsigned char direction, int priority, bool update_inventory = true) : Action(analyzer), do_apply(&quot;a&quot;, priority), apply_item(std::string(1, key), PRIORITY_CONTINUE_ACTION), apply_direction(std::string(1, direction), PRIORITY_CONTINUE_ACTION), update_inventory(update_inventory) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~ApplyInDirection() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/ApplyInDirection.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,14 +5,20 @@
 #include &quot;../Inventory.h&quot;
 
 namespace action {
+
 	class Call : public Action {
 	public:
 		static int id;
 
-		Call(analyzer::Analyzer *analyzer, unsigned char item, std::string call) : Action(analyzer), do_call(&quot;#call&quot;, PRIORITY_LOOK), call_individual(&quot;n&quot;, PRIORITY_CONTINUE_ACTION), call_item(std::string(1, item), PRIORITY_CONTINUE_ACTION), set_call(call, PRIORITY_CONTINUE_ACTION) {}
-		virtual ~Call() {}
+		Call(analyzer::Analyzer *analyzer, unsigned char item, std::string call) : Action(analyzer), do_call(&quot;#call&quot;, PRIORITY_LOOK), call_individual(&quot;n&quot;, PRIORITY_CONTINUE_ACTION), call_item(std::string(1, item), PRIORITY_CONTINUE_ACTION), set_call(call, PRIORITY_CONTINUE_ACTION) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Call() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Call.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,14 +5,20 @@
 #include &quot;../Inventory.h&quot;
 
 namespace action {
+
 	class Eat : public Action {
 	public:
 		static int id;
 
-		Eat(analyzer::Analyzer *analyzer, unsigned char key, int priority) : Action(analyzer), eat(std::string(1, 'e'), priority), item(std::string(1, key), PRIORITY_CONTINUE_ACTION), answer_no(std::string(1, NO), PRIORITY_CONTINUE_ACTION), answer_yes(std::string(1, YES), PRIORITY_CONTINUE_ACTION) {}
-		virtual ~Eat() {}
+		Eat(analyzer::Analyzer *analyzer, unsigned char key, int priority) : Action(analyzer), eat(std::string(1, 'e'), priority), item(std::string(1, key), PRIORITY_CONTINUE_ACTION), answer_no(std::string(1, NO), PRIORITY_CONTINUE_ACTION), answer_yes(std::string(1, YES), PRIORITY_CONTINUE_ACTION) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Eat() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Eat.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,14 +5,20 @@
 #include &quot;../World.h&quot;
 
 namespace action {
+
 	class EatCorpse : public Action {
 	public:
 		static int id;
 
-		EatCorpse(analyzer::Analyzer *analyzer, std::string corpse, int priority) : Action(analyzer), eat(std::string(1, 'e'), priority), corpse(corpse), answer_no(std::string(1, NO), PRIORITY_CONTINUE_ACTION), answer_yes(std::string(1, YES), PRIORITY_CONTINUE_ACTION), look(&quot;:&quot;, PRIORITY_CONTINUE_ACTION), escape(std::string(1, (char) 27), PRIORITY_CONTINUE_ACTION) {}
-		virtual ~EatCorpse() {}
+		EatCorpse(analyzer::Analyzer *analyzer, std::string corpse, int priority) : Action(analyzer), eat(std::string(1, 'e'), priority), corpse(corpse), answer_no(std::string(1, NO), PRIORITY_CONTINUE_ACTION), answer_yes(std::string(1, YES), PRIORITY_CONTINUE_ACTION), look(&quot;:&quot;, PRIORITY_CONTINUE_ACTION), escape(std::string(1, (char) 27), PRIORITY_CONTINUE_ACTION) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~EatCorpse() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/EatCorpse.h</filename>
    </modified>
    <modified>
      <diff>@@ -4,14 +4,20 @@
 #include &quot;Action.h&quot;
 
 namespace action {
+
 	class Engrave : public Action {
 	public:
 		static int id;
 
-		Engrave(analyzer::Analyzer *analyzer, std::string engrave_msg, unsigned char engrave_with, int priority, bool should_append = true) : Action(analyzer), engrave(std::string(1, 'E'), priority), message(engrave_msg, PRIORITY_CONTINUE_ACTION), item(std::string(1,engrave_with), PRIORITY_CONTINUE_ACTION), append(std::string(1, should_append ? 'y' : 'n'), PRIORITY_CONTINUE_ACTION) {}
-		virtual ~Engrave() {}
+		Engrave(analyzer::Analyzer *analyzer, std::string engrave_msg, unsigned char engrave_with, int priority, bool should_append = true) : Action(analyzer), engrave(std::string(1, 'E'), priority), message(engrave_msg, PRIORITY_CONTINUE_ACTION), item(std::string(1, engrave_with), PRIORITY_CONTINUE_ACTION), append(std::string(1, should_append ? 'y' : 'n'), PRIORITY_CONTINUE_ACTION) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Engrave() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Engrave.h</filename>
    </modified>
    <modified>
      <diff>@@ -4,14 +4,20 @@
 #include &quot;Action.h&quot;
 
 namespace action {
+
 	class Fight : public Action {
 	public:
 		static int id;
 
-		Fight(analyzer::Analyzer *analyzer, unsigned char direction, int priority, bool attack_friendly = true) : Action(analyzer), fight(std::string(1, 'F').append(std::string(1, direction)), priority), attack_friendly(std::string(1, attack_friendly ? YES : NO), PRIORITY_CONTINUE_ACTION) {}
-		virtual ~Fight() {}
+		Fight(analyzer::Analyzer *analyzer, unsigned char direction, int priority, bool attack_friendly = true) : Action(analyzer), fight(std::string(1, 'F').append(std::string(1, direction)), priority), attack_friendly(std::string(1, attack_friendly ? YES : NO), PRIORITY_CONTINUE_ACTION) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Fight() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Fight.h</filename>
    </modified>
    <modified>
      <diff>@@ -4,14 +4,20 @@
 #include &quot;Action.h&quot;
 
 namespace action {
+
 	class Kick : public Action {
 	public:
 		static int id;
 
-		Kick(analyzer::Analyzer *analyzer, unsigned char direction, int priority) : Action(analyzer), kick(&quot;*&quot;, priority), kick_direction(std::string(1, direction), PRIORITY_CONTINUE_ACTION) {}
-		virtual ~Kick() {}
+		Kick(analyzer::Analyzer *analyzer, unsigned char direction, int priority) : Action(analyzer), kick(&quot;*&quot;, priority), kick_direction(std::string(1, direction), PRIORITY_CONTINUE_ACTION) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Kick() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Kick.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,14 +5,20 @@
 #include &quot;../World.h&quot;
 
 namespace action {
+
 	class ListInventory : public Action {
 	public:
 		static int id;
 
-		ListInventory(analyzer::Analyzer *analyzer) : Action(analyzer), list_inventory(&quot;i&quot;, PRIORITY_LOOK), close_page(&quot; &quot;, PRIORITY_CONTINUE_ACTION) {}
-		virtual ~ListInventory() {};
+		ListInventory(analyzer::Analyzer *analyzer) : Action(analyzer), list_inventory(&quot;i&quot;, PRIORITY_LOOK), close_page(&quot; &quot;, PRIORITY_CONTINUE_ACTION) {
+		}
+
+		virtual ~ListInventory() {
+		};
 
-		virtual int getID() {return id;}
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/ListInventory.h</filename>
    </modified>
    <modified>
      <diff>@@ -4,14 +4,20 @@
 #include &quot;Action.h&quot;
 
 namespace action {
+
 	class Look : public Action {
 	public:
 		static int id;
 
-		Look(analyzer::Analyzer *analyzer) : Action(analyzer), look(&quot;:&quot;, PRIORITY_LOOK) {}
-		virtual ~Look() {}
+		Look(analyzer::Analyzer *analyzer) : Action(analyzer), look(&quot;:&quot;, PRIORITY_LOOK) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Look() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Look.h</filename>
    </modified>
    <modified>
      <diff>@@ -4,14 +4,20 @@
 #include &quot;Action.h&quot;
 
 namespace action {
+
 	class Loot : public Action {
 	public:
 		static int id;
 
-		Loot(analyzer::Analyzer *analyzer, int priority) : Action(analyzer), loot(&quot;,&quot;, priority) {}
-		virtual ~Loot() {}
+		Loot(analyzer::Analyzer *analyzer, int priority) : Action(analyzer), loot(&quot;,&quot;, priority) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Loot() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Loot.h</filename>
    </modified>
    <modified>
      <diff>@@ -6,15 +6,24 @@
 #define MOVE_COST_MEDIAN 50
 
 namespace action {
+
 	class Move : public Action {
 	public:
 		static int id;
 
-		Move(analyzer::Analyzer *analyzer, unsigned char direction, int priority) : Action(analyzer), move(std::string(1, direction), priority) {}
-		virtual ~Move() {}
+		Move(analyzer::Analyzer *analyzer, unsigned char direction, int priority) : Action(analyzer), move(std::string(1, direction), priority) {
+		}
+
+		virtual ~Move() {
+		}
 
-		static int calculatePriority(int max_priority, int moves) {return max_priority * MOVE_COST_MEDIAN / (moves + MOVE_COST_MEDIAN - 1);}
-		virtual int getID() {return id;}
+		static int calculatePriority(int max_priority, int moves) {
+			return max_priority * MOVE_COST_MEDIAN / (moves + MOVE_COST_MEDIAN - 1);
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Move.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,14 +5,20 @@
 #include &quot;../Inventory.h&quot;
 
 namespace action {
+
 	class Name : public Action {
 	public:
 		static int id;
 
-		Name(analyzer::Analyzer *analyzer, unsigned char item, std::string name) : Action(analyzer), do_name(&quot;#name&quot;, PRIORITY_LOOK), name_individual(&quot;y&quot;, PRIORITY_CONTINUE_ACTION), name_item(std::string(1, item), PRIORITY_CONTINUE_ACTION), set_name(name, PRIORITY_CONTINUE_ACTION) {}
-		virtual ~Name() {}
+		Name(analyzer::Analyzer *analyzer, unsigned char item, std::string name) : Action(analyzer), do_name(&quot;#name&quot;, PRIORITY_LOOK), name_individual(&quot;y&quot;, PRIORITY_CONTINUE_ACTION), name_item(std::string(1, item), PRIORITY_CONTINUE_ACTION), set_name(name, PRIORITY_CONTINUE_ACTION) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Name() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Name.h</filename>
    </modified>
    <modified>
      <diff>@@ -4,14 +4,20 @@
 #include &quot;Action.h&quot;
 
 namespace action {
+
 	class Open : public Action {
 	public:
 		static int id;
 
-		Open(analyzer::Analyzer *analyzer, unsigned char direction, int priority) : Action(analyzer), open(&quot;o&quot;, priority), open_direction(std::string(1, direction), PRIORITY_CONTINUE_ACTION) {}
-		virtual ~Open() {}
+		Open(analyzer::Analyzer *analyzer, unsigned char direction, int priority) : Action(analyzer), open(&quot;o&quot;, priority), open_direction(std::string(1, direction), PRIORITY_CONTINUE_ACTION) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Open() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Open.h</filename>
    </modified>
    <modified>
      <diff>@@ -8,15 +8,24 @@
 #define PRAY_PRAYER_TIMEOUT 1000
 
 namespace action {
+
 	class Pray : public Action {
 	public:
 		static int id;
 
-		Pray(analyzer::Analyzer *analyzer, int priority) : Action(analyzer), pray(&quot;#pray\n&quot;, priority) {}
-		virtual ~Pray() {}
+		Pray(analyzer::Analyzer *analyzer, int priority) : Action(analyzer), pray(&quot;#pray\n&quot;, priority) {
+		}
+
+		virtual ~Pray() {
+		}
 
-		static bool isSafeToPray() {return World::turn - PRAY_PRAYER_TIMEOUT &gt; Saiph::last_pray_turn;}
-		virtual int getID() {return id;}
+		static bool isSafeToPray() {
+			return World::turn - PRAY_PRAYER_TIMEOUT &gt; Saiph::last_pray_turn;
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Pray.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,14 +5,20 @@
 #include &quot;../Inventory.h&quot;
 
 namespace action {
+
 	class PutOn : public Action {
 	public:
 		static int id;
 
-		PutOn(analyzer::Analyzer *analyzer, unsigned char key, int priority) : Action(analyzer), put_on(&quot;P&quot;, priority), put_on_key(std::string(1, key), PRIORITY_CONTINUE_ACTION) {}
-		virtual ~PutOn() {}
+		PutOn(analyzer::Analyzer *analyzer, unsigned char key, int priority) : Action(analyzer), put_on(&quot;P&quot;, priority), put_on_key(std::string(1, key), PRIORITY_CONTINUE_ACTION) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~PutOn() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/PutOn.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,14 +5,20 @@
 #include &quot;../Inventory.h&quot;
 
 namespace action {
+
 	class Remove : public Action {
 	public:
 		static int id;
 
-		Remove(analyzer::Analyzer *analyzer, unsigned char key, int priority) : Action(analyzer), remove(&quot;R&quot;, priority), remove_key(std::string(1, key), PRIORITY_CONTINUE_ACTION) {}
-		virtual ~Remove() {}
+		Remove(analyzer::Analyzer *analyzer, unsigned char key, int priority) : Action(analyzer), remove(&quot;R&quot;, priority), remove_key(std::string(1, key), PRIORITY_CONTINUE_ACTION) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Remove() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Remove.h</filename>
    </modified>
    <modified>
      <diff>@@ -4,14 +4,20 @@
 #include &quot;Action.h&quot;
 
 namespace action {
+
 	class Rest : public Action {
 	public:
 		static int id;
 
-		Rest(analyzer::Analyzer *analyzer, int priority) : Action(analyzer), rest(&quot;16s&quot;, priority) {}
-		virtual ~Rest() {}
+		Rest(analyzer::Analyzer *analyzer, int priority) : Action(analyzer), rest(&quot;16s&quot;, priority) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Rest() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Rest.h</filename>
    </modified>
    <modified>
      <diff>@@ -4,14 +4,20 @@
 #include &quot;Action.h&quot;
 
 namespace action {
+
 	class Search : public Action {
 	public:
 		static int id;
 
-		Search(analyzer::Analyzer *analyzer, int priority) : Action(analyzer), search(&quot;s&quot;, priority) {}
-		virtual ~Search() {}
+		Search(analyzer::Analyzer *analyzer, int priority) : Action(analyzer), search(&quot;s&quot;, priority) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Search() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 
@@ -32,7 +38,7 @@ namespace action {
 	inline void action::Search::updateAction(const std::string &amp;) {
 		if (sequence == 0) {
 			/* increase search counter on level */
-			World::levels[Saiph::position.level].increaseAdjacentSearchCount(Saiph::position);
+			World::levels[Saiph::position.level()].increaseAdjacentSearchCount(Saiph::position);
 			sequence = 1;
 		}
 	}</diff>
      <filename>Actions/Search.h</filename>
    </modified>
    <modified>
      <diff>@@ -4,14 +4,20 @@
 #include &quot;Action.h&quot;
 
 namespace action {
+
 	class Select : public Action {
 	public:
 		static int id;
 
-		Select(analyzer::Analyzer *analyzer, unsigned char key) : Action(analyzer), select(std::string(1, key), PRIORITY_SELECT_ITEM) {}
-		virtual ~Select() {}
+		Select(analyzer::Analyzer *analyzer, unsigned char key) : Action(analyzer), select(std::string(1, key), PRIORITY_SELECT_ITEM) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Select() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Select.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,14 +5,20 @@
 #include &quot;Action.h&quot;
 
 namespace action {
+
 	class SelectMultiple : public Action {
 	public:
 		static int id;
 
-		SelectMultiple(analyzer::Analyzer *analyzer, std::vector&lt;std::string&gt; keys) : Action(analyzer), keys(keys) {}
-		virtual ~SelectMultiple() {}
+		SelectMultiple(analyzer::Analyzer *analyzer, std::vector&lt;std::string&gt; keys) : Action(analyzer), keys(keys) {
+		}
+
+		virtual ~SelectMultiple() {
+		}
 
-		virtual int getID() {return id;}
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/SelectMultiple.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,14 +5,20 @@
 #include &quot;../Inventory.h&quot;
 
 namespace action {
+
 	class Throw : public Action {
 	public:
 		static int id;
 
-		Throw(analyzer::Analyzer *analyzer, unsigned char key, unsigned char direction, int priority) : Action(analyzer), do_throw(&quot;t&quot;, priority), throw_item(std::string(1, key), PRIORITY_CONTINUE_ACTION), throw_direction(std::string(1, direction), PRIORITY_CONTINUE_ACTION) {}
-		virtual ~Throw() {}
+		Throw(analyzer::Analyzer *analyzer, unsigned char key, unsigned char direction, int priority) : Action(analyzer), do_throw(&quot;t&quot;, priority), throw_item(std::string(1, key), PRIORITY_CONTINUE_ACTION), throw_direction(std::string(1, direction), PRIORITY_CONTINUE_ACTION) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Throw() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Throw.h</filename>
    </modified>
    <modified>
      <diff>@@ -4,14 +4,20 @@
 #include &quot;Action.h&quot;
 
 namespace action {
+
 	class Unlock : public Action {
 	public:
 		static int id;
 
-		Unlock(analyzer::Analyzer *analyzer, unsigned char key, unsigned char direction, int priority) : Action(analyzer), do_apply(&quot;a&quot;, priority), apply_item(std::string(1, key), PRIORITY_CONTINUE_ACTION), apply_direction(std::string(1, direction), PRIORITY_CONTINUE_ACTION), do_unlock(&quot;y&quot;, PRIORITY_CONTINUE_ACTION) {}
-		virtual ~Unlock() {}
+		Unlock(analyzer::Analyzer *analyzer, unsigned char key, unsigned char direction, int priority) : Action(analyzer), do_apply(&quot;a&quot;, priority), apply_item(std::string(1, key), PRIORITY_CONTINUE_ACTION), apply_direction(std::string(1, direction), PRIORITY_CONTINUE_ACTION), do_unlock(&quot;y&quot;, PRIORITY_CONTINUE_ACTION) {
+		}
 
-		virtual int getID() {return id;}
+		virtual ~Unlock() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 		virtual const Command &amp;getCommand();
 		virtual void updateAction(const std::string &amp;messages);
 </diff>
      <filename>Actions/Unlock.h</filename>
    </modified>
    <modified>
      <diff>@@ -29,25 +29,25 @@ Amulet::Amulet() : Analyzer(&quot;Amulet&quot;) {
 }
 
 /* methods */
-void Amulet::onEvent(Event *const event) {
+void Amulet::onEvent(Event * const event) {
 	if (event-&gt;getID() == ChangedInventoryItems::id) {
-		ChangedInventoryItems *e = static_cast&lt;ChangedInventoryItems *&gt;(event);
+		ChangedInventoryItems *e = static_cast&lt;ChangedInventoryItems *&gt; (event);
 		wearAmulet(e-&gt;keys);
 	} else if (event-&gt;getID() == ReceivedItems::id) {
 		// FIXME
 		//ReceivedItems *e = static_cast&lt;ReceivedItems *&gt;(event);
 		//wearAmulet(e-&gt;items);
 	} else if (event-&gt;getID() == WantItems::id) {
-		WantItems *e = static_cast&lt;WantItems *&gt;(event);
+		WantItems *e = static_cast&lt;WantItems *&gt; (event);
 		for (map&lt;unsigned char, Item&gt;::iterator i = e-&gt;items.begin(); i != e-&gt;items.end(); ++i) {
 			if (wantItem(i-&gt;second))
-				World::setAction(static_cast&lt;action::Action *&gt;(new action::Select(this, i-&gt;first)));
+				World::setAction(static_cast&lt;action::Action *&gt; (new action::Select(this, i-&gt;first)));
 		}
 	} else if (event-&gt;getID() == ItemsOnGround::id) {
-		ItemsOnGround *e = static_cast&lt;ItemsOnGround *&gt;(event);
+		ItemsOnGround *e = static_cast&lt;ItemsOnGround *&gt; (event);
 		for (list&lt;Item&gt;::iterator i = e-&gt;items.begin(); i != e-&gt;items.end(); ++i) {
 			if (wantItem(*i))
-				World::setAction(static_cast&lt;action::Action *&gt;(new action::Loot(this, PRIORITY_AMULET_LOOT)));
+				World::setAction(static_cast&lt;action::Action *&gt; (new action::Loot(this, PRIORITY_AMULET_LOOT)));
 		}
 	}
 }
@@ -83,5 +83,5 @@ void Amulet::wearAmulet(const set&lt;unsigned char&gt; &amp;keys) {
 		return; // no new amulet to put on or wearing best amulet
 
 	/* put on this amulet */
-	World::setAction(static_cast&lt;action::Action *&gt;(new action::PutOn(this, best_key, PRIORITY_AMULET_WEAR)));
+	World::setAction(static_cast&lt;action::Action *&gt; (new action::PutOn(this, best_key, PRIORITY_AMULET_WEAR)));
 }</diff>
      <filename>Analyzers/Amulet.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -11,11 +11,12 @@
 class Item;
 
 namespace analyzer {
+
 	class Amulet : public Analyzer {
 	public:
 		Amulet();
 
-		void onEvent(event::Event *const event);
+		void onEvent(event::Event * const event);
 
 	private:
 		bool wantItem(const Item &amp;item);</diff>
      <filename>Analyzers/Amulet.h</filename>
    </modified>
    <modified>
      <diff>@@ -10,18 +10,28 @@ namespace event {
 }
 
 namespace analyzer {
+
 	class Analyzer {
 	public:
 		std::string name;
 
-		Analyzer(std::string name) : name(name) {}
-		virtual ~Analyzer() {}
+		Analyzer(std::string name) : name(name) {
+		}
+
+		virtual ~Analyzer() {
+		}
 
 		static void init();
 		static void destroy();
-		virtual void parseMessages(const std::string &amp;) {}
-		virtual void analyze() {}
-		virtual void onEvent(event::Event *const) {}
+
+		virtual void parseMessages(const std::string &amp;) {
+		}
+
+		virtual void analyze() {
+		}
+
+		virtual void onEvent(event::Event * const) {
+		}
 
 	private:
 		static bool initialized;</diff>
      <filename>Analyzers/Analyzer.h</filename>
    </modified>
    <modified>
      <diff>@@ -52,34 +52,34 @@ void Door::analyze() {
 
 	/* go to nearest closed door and get it open somehow */
 	unsigned int least_moves = UNREACHABLE;
-	for (map&lt;Point, int&gt;::iterator d = World::levels[Saiph::position.level].symbols[(unsigned char) CLOSED_DOOR].begin(); d != World::levels[Saiph::position.level].symbols[(unsigned char) CLOSED_DOOR].end(); ++d) {
+	for (map&lt;Point, int&gt;::iterator d = World::levels[Saiph::position.level()].symbols[(unsigned char) CLOSED_DOOR].begin(); d != World::levels[Saiph::position.level()].symbols[(unsigned char) CLOSED_DOOR].end(); ++d) {
 		const PathNode &amp;node = World::shortestPath(d-&gt;first);
 		if (node.cost == UNREACHABLE)
 			continue; // can't reach this door
-		if (World::levels[Saiph::position.level].branch == BRANCH_MINES &amp;&amp; d-&gt;second == DOOR_LOCKED &amp;&amp; (unlock_tool_key == 0 || Inventory::items[unlock_tool_key].name == &quot;lock pick&quot; || Inventory::items[unlock_tool_key].name == &quot;credit card&quot;))
+		if (World::levels[Saiph::position.level()].branch == BRANCH_MINES &amp;&amp; d-&gt;second == DOOR_LOCKED &amp;&amp; (unlock_tool_key == 0 || Inventory::items[unlock_tool_key].name == &quot;lock pick&quot; || Inventory::items[unlock_tool_key].name == &quot;credit card&quot;))
 			continue; // don't kick/pick doors when we're in the mines
 		if (d-&gt;second == DOOR_SHOP_INVENTORY &amp;&amp; unlock_tool_key == 0)
 			continue; // shop and we got no means of opening it (well, except kicking)
 		if (node.moves == 1) {
 			/* open/pick/kick door */
 			if (d-&gt;second != DOOR_LOCKED) {
-				World::setAction(static_cast&lt;action::Action *&gt;(new action::Open(this, node.dir, PRIORITY_DOOR_OPEN)));
+				World::setAction(static_cast&lt;action::Action *&gt; (new action::Open(this, node.dir, PRIORITY_DOOR_OPEN)));
 			} else {
 				/* we can't apply when we're overtaxed, but logically we can kick... */
 				if (unlock_tool_key == 0 || Saiph::encumbrance &gt;= OVERTAXED) {
 					if (Saiph::hurt_leg)
 						continue; // can't kick, hurt leg
 					else
-						World::setAction(static_cast&lt;action::Action *&gt;(new action::Kick(this, node.dir, PRIORITY_DOOR_OPEN)));
+						World::setAction(static_cast&lt;action::Action *&gt; (new action::Kick(this, node.dir, PRIORITY_DOOR_OPEN)));
 				} else {
-					World::setAction(static_cast&lt;action::Action *&gt;(new action::Unlock(this, unlock_tool_key, node.dir, PRIORITY_DOOR_OPEN)));
+					World::setAction(static_cast&lt;action::Action *&gt; (new action::Unlock(this, unlock_tool_key, node.dir, PRIORITY_DOOR_OPEN)));
 				}
 			}
 			position = d-&gt;first;
 			return;
 		} else if (node.moves &lt; least_moves) {
 			/* go to door */
-			World::setAction(static_cast&lt;action::Action *&gt;(new action::Move(this, node.dir, action::Move::calculatePriority(PRIORITY_DOOR_OPEN, node.moves))));
+			World::setAction(static_cast&lt;action::Action *&gt; (new action::Move(this, node.dir, action::Move::calculatePriority(PRIORITY_DOOR_OPEN, node.moves))));
 			least_moves = node.moves;
 		}
 	}
@@ -88,13 +88,13 @@ void Door::analyze() {
 void Door::parseMessages(const string &amp;messages) {
 	if (messages.find(MESSAGE_SUCCEED_UNLOCKING) != string::npos) {
 		/* door unlocked */
-		World::levels[Saiph::position.level].symbols[(unsigned char) CLOSED_DOOR][position] = UNKNOWN_SYMBOL_VALUE;
+		World::levels[Saiph::position.level()].symbols[(unsigned char) CLOSED_DOOR][position] = UNKNOWN_SYMBOL_VALUE;
 	} else if (messages.find(MESSAGE_DOOR_LOCKED, 0) != string::npos) {
 		/* door is locked, set the value to 1 */
-		World::levels[Saiph::position.level].symbols[(unsigned char) CLOSED_DOOR][position] = 1;
+		World::levels[Saiph::position.level()].symbols[(unsigned char) CLOSED_DOOR][position] = 1;
 	} else if (messages.find(MESSAGE_BREAK_SHOP_DOOR, 0) != string::npos) {
 		/* oops, we broke a shopkeepers door, better pay */
-		World::setAction(static_cast&lt;action::Action *&gt;(new action::Answer(this, string(1, YES))));
+		World::setAction(static_cast&lt;action::Action *&gt; (new action::Answer(this, string(1, YES))));
 	} else if (messages.find(MESSAGE_CANT_REACH_OVER_PIT, 0) != string::npos) {
 		/* we're in a pit, can't reach door from here */
 		in_a_pit = true;
@@ -106,10 +106,10 @@ void Door::parseMessages(const string &amp;messages) {
 		/* a shop that is closed for inventory */
 		stack&lt;Point&gt; door;
 
-		door.push(Point(Saiph::position.row + 1, Saiph::position.col));
-		door.push(Point(Saiph::position.row - 1, Saiph::position.col));
-		door.push(Point(Saiph::position.row, Saiph::position.col + 1));
-		door.push(Point(Saiph::position.row, Saiph::position.col - 1));
+		door.push(Point(Saiph::position.row() + 1, Saiph::position.col()));
+		door.push(Point(Saiph::position.row() - 1, Saiph::position.col()));
+		door.push(Point(Saiph::position.row(), Saiph::position.col() + 1));
+		door.push(Point(Saiph::position.row(), Saiph::position.col() - 1));
 
 		while (door.empty() == false) {
 			Point top = door.top();
@@ -124,35 +124,35 @@ void Door::parseMessages(const string &amp;messages) {
 	}
 }
 
-void Door::onEvent(Event *const event) {
+void Door::onEvent(Event * const event) {
 	if (event-&gt;getID() == ChangedInventoryItems::id) {
 		/* inventory changed, see if we lost our unlocking device or got a new/better one */
 		map&lt;unsigned char, Item&gt;::iterator i = Inventory::items.find(unlock_tool_key);
 		if (Inventory::items.find(unlock_tool_key) == Inventory::items.end())
 			unlock_tool_key = 0; // darn, we lost our unlocking device
-		ChangedInventoryItems *e = static_cast&lt;ChangedInventoryItems *&gt;(event);
+		ChangedInventoryItems *e = static_cast&lt;ChangedInventoryItems *&gt; (event);
 		for (set&lt;unsigned char&gt;::iterator k = e-&gt;keys.begin(); k != e-&gt;keys.end(); ++k) {
 			map&lt;unsigned char, Item&gt;::iterator i = Inventory::items.find(*k);
 			if (i != Inventory::items.end() &amp;&amp; wantItem(i-&gt;second))
 				unlock_tool_key = *k; // better key than what we currently got
 		}
 	} else if (event-&gt;getID() == ReceivedItems::id) {
-		ReceivedItems *e = static_cast&lt;ReceivedItems *&gt;(event);
+		ReceivedItems *e = static_cast&lt;ReceivedItems *&gt; (event);
 		for (map&lt;unsigned char, Item&gt;::iterator i = e-&gt;items.begin(); i != e-&gt;items.end(); ++i) {
 			if (wantItem(i-&gt;second))
 				unlock_tool_key = i-&gt;first; // better key than what we currently got
 		}
 	} else if (event-&gt;getID() == WantItems::id) {
-		WantItems *e = static_cast&lt;WantItems *&gt;(event);
+		WantItems *e = static_cast&lt;WantItems *&gt; (event);
 		for (map&lt;unsigned char, Item&gt;::iterator i = e-&gt;items.begin(); i != e-&gt;items.end(); ++i) {
 			if (wantItem(i-&gt;second))
-				World::setAction(static_cast&lt;action::Action *&gt;(new action::Select(this, i-&gt;first)));
+				World::setAction(static_cast&lt;action::Action *&gt; (new action::Select(this, i-&gt;first)));
 		}
 	} else if (event-&gt;getID() == ItemsOnGround::id) {
-		ItemsOnGround *e = static_cast&lt;ItemsOnGround *&gt;(event);
+		ItemsOnGround *e = static_cast&lt;ItemsOnGround *&gt; (event);
 		for (list&lt;Item&gt;::iterator i = e-&gt;items.begin(); i != e-&gt;items.end(); ++i) {
 			if (wantItem(*i))
-				World::setAction(static_cast&lt;action::Action *&gt;(new action::Loot(this, PRIORITY_DOOR_LOOT)));
+				World::setAction(static_cast&lt;action::Action *&gt; (new action::Loot(this, PRIORITY_DOOR_LOOT)));
 		}
 	}
 }</diff>
      <filename>Analyzers/Door.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -16,20 +16,21 @@
 class Item;
 
 namespace analyzer {
+
 	class Door : public Analyzer {
 	public:
 		Door();
 
 		void analyze();
 		void parseMessages(const std::string &amp;messages);
-		void onEvent(event::Event *const event);
+		void onEvent(event::Event * const event);
 
 	private:
 		Point position;
 		unsigned char unlock_tool_key;
 		bool in_a_pit;
 
-	bool wantItem(const Item &amp;item);
+		bool wantItem(const Item &amp;item);
 	};
 }
 #endif</diff>
      <filename>Analyzers/Door.h</filename>
    </modified>
    <modified>
      <diff>@@ -16,9 +16,9 @@ Elbereth::Elbereth() : Analyzer(&quot;Elbereth&quot;), elbereth_count(0), engraving_type(E
 	EventBus::registerEvent(ElberethQuery::id, this);
 }
 
-void Elbereth::onEvent(Event *const evt) {
+void Elbereth::onEvent(Event * const evt) {
 	if (evt-&gt;getID() == ElberethQuery::id) {
-		ElberethQuery *const q = static_cast&lt;ElberethQuery *const&gt;(evt);
+		ElberethQuery * const q = static_cast&lt;ElberethQuery * const&gt; (evt);
 		if (World::getLastActionID() != action::Look::id) {
 			/* data is outdated */
 			engraving_type = ELBERETH_MUST_CHECK;</diff>
      <filename>Analyzers/Elbereth.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -5,12 +5,13 @@
 #include &quot;Analyzer.h&quot;
 
 namespace analyzer {
+
 	class Elbereth : public Analyzer {
 	public:
 		Elbereth();
 
 		void parseMessages(const std::string &amp;messages);
-		void onEvent(event::Event *const evt);
+		void onEvent(event::Event * const evt);
 
 	private:
 		int elbereth_count;</diff>
      <filename>Analyzers/Elbereth.h</filename>
    </modified>
    <modified>
      <diff>@@ -26,31 +26,31 @@ void Explore::analyze() {
 		return; // don't explore when we're blind/confused/hallucinating/stunned
 
 	/* find stairs on rogue level */
-	if (World::levels[Saiph::position.level].branch == BRANCH_ROGUE) {
-		for (map&lt;Point, int&gt;::iterator s = World::levels[Saiph::position.level].symbols[(unsigned char) ROGUE_STAIRS].begin(); s != World::levels[Saiph::position.level].symbols[(unsigned char) ROGUE_STAIRS].end(); ++s) {
+	if (World::levels[Saiph::position.level()].branch == BRANCH_ROGUE) {
+		for (map&lt;Point, int&gt;::iterator s = World::levels[Saiph::position.level()].symbols[(unsigned char) ROGUE_STAIRS].begin(); s != World::levels[Saiph::position.level()].symbols[(unsigned char) ROGUE_STAIRS].end(); ++s) {
 			const PathNode &amp;node = World::shortestPath(s-&gt;first);
 			if (node.cost &gt;= UNPASSABLE)
 				continue;
 			else if (node.dir == NOWHERE)
-				World::setAction(static_cast&lt;action::Action *&gt;(new action::Look(this)));
+				World::setAction(static_cast&lt;action::Action *&gt; (new action::Look(this)));
 			else
-				World::setAction(static_cast&lt;action::Action *&gt;(new action::Move(this, node.dir, action::Move::calculatePriority(PRIORITY_EXPLORE_ROGUE, node.moves))));
+				World::setAction(static_cast&lt;action::Action *&gt; (new action::Move(this, node.dir, action::Move::calculatePriority(PRIORITY_EXPLORE_ROGUE, node.moves))));
 			break;
 		}
 	}
 
 	/* explore stairs up */
-	if (World::levels[Saiph::position.level].depth != 1) {
-		for (map&lt;Point, int&gt;::iterator s = World::levels[Saiph::position.level].symbols[(unsigned char) STAIRS_UP].begin(); s != World::levels[Saiph::position.level].symbols[(unsigned char) STAIRS_UP].end(); ++s) {
+	if (World::levels[Saiph::position.level()].depth != 1) {
+		for (map&lt;Point, int&gt;::iterator s = World::levels[Saiph::position.level()].symbols[(unsigned char) STAIRS_UP].begin(); s != World::levels[Saiph::position.level()].symbols[(unsigned char) STAIRS_UP].end(); ++s) {
 			if (s-&gt;second != UNKNOWN_SYMBOL_VALUE)
 				continue; // we know where these stairs lead
 			const PathNode &amp;node = World::shortestPath(s-&gt;first);
 			if (node.cost &gt;= UNPASSABLE)
 				continue;
 			else if (node.dir == NOWHERE)
-				World::setAction(static_cast&lt;action::Action *&gt;(new action::Move(this, UP, action::Move::calculatePriority(PRIORITY_EXPLORE_STAIRS_UP, node.moves))));
+				World::setAction(static_cast&lt;action::Action *&gt; (new action::Move(this, UP, action::Move::calculatePriority(PRIORITY_EXPLORE_STAIRS_UP, node.moves))));
 			else
-				World::setAction(static_cast&lt;action::Action *&gt;(new action::Move(this, node.dir, action::Move::calculatePriority(PRIORITY_EXPLORE_STAIRS_UP, node.moves))));
+				World::setAction(static_cast&lt;action::Action *&gt; (new action::Move(this, node.dir, action::Move::calculatePriority(PRIORITY_EXPLORE_STAIRS_UP, node.moves))));
 			break;
 		}
 	}
@@ -60,35 +60,35 @@ void Explore::analyze() {
 		unsigned int min_moves = UNREACHABLE;
 		int best_type = INT_MAX;
 		/* floor */
-		for (map&lt;Point, int&gt;::iterator w = World::levels[Saiph::position.level].symbols[(unsigned char) FLOOR].begin(); w != World::levels[Saiph::position.level].symbols[(unsigned char) FLOOR].end(); ++w)
+		for (map&lt;Point, int&gt;::iterator w = World::levels[Saiph::position.level()].symbols[(unsigned char) FLOOR].begin(); w != World::levels[Saiph::position.level()].symbols[(unsigned char) FLOOR].end(); ++w)
 			explorePoint(w-&gt;first, &amp;min_moves, &amp;best_type);
 		/* corridor */
-		for (map&lt;Point, int&gt;::iterator w = World::levels[Saiph::position.level].symbols[(unsigned char) CORRIDOR].begin(); w != World::levels[Saiph::position.level].symbols[(unsigned char) CORRIDOR].end(); ++w)
+		for (map&lt;Point, int&gt;::iterator w = World::levels[Saiph::position.level()].symbols[(unsigned char) CORRIDOR].begin(); w != World::levels[Saiph::position.level()].symbols[(unsigned char) CORRIDOR].end(); ++w)
 			explorePoint(w-&gt;first, &amp;min_moves, &amp;best_type);
 		/* open door */
-		for (map&lt;Point, int&gt;::iterator w = World::levels[Saiph::position.level].symbols[(unsigned char) OPEN_DOOR].begin(); w != World::levels[Saiph::position.level].symbols[(unsigned char) OPEN_DOOR].end(); ++w)
+		for (map&lt;Point, int&gt;::iterator w = World::levels[Saiph::position.level()].symbols[(unsigned char) OPEN_DOOR].begin(); w != World::levels[Saiph::position.level()].symbols[(unsigned char) OPEN_DOOR].end(); ++w)
 			explorePoint(w-&gt;first, &amp;min_moves, &amp;best_type);
 		/* unknown tile */
-		for (map&lt;Point, int&gt;::iterator w = World::levels[Saiph::position.level].symbols[(unsigned char) UNKNOWN_TILE].begin(); w != World::levels[Saiph::position.level].symbols[(unsigned char) UNKNOWN_TILE].end(); ++w)
+		for (map&lt;Point, int&gt;::iterator w = World::levels[Saiph::position.level()].symbols[(unsigned char) UNKNOWN_TILE].begin(); w != World::levels[Saiph::position.level()].symbols[(unsigned char) UNKNOWN_TILE].end(); ++w)
 			explorePoint(w-&gt;first, &amp;min_moves, &amp;best_type);
 	}
 
 	/* explore stairs down */
-	for (map&lt;Point, int&gt;::iterator s = World::levels[Saiph::position.level].symbols[(unsigned char) STAIRS_DOWN].begin(); s != World::levels[Saiph::position.level].symbols[(unsigned char) STAIRS_DOWN].end(); ++s) {
+	for (map&lt;Point, int&gt;::iterator s = World::levels[Saiph::position.level()].symbols[(unsigned char) STAIRS_DOWN].begin(); s != World::levels[Saiph::position.level()].symbols[(unsigned char) STAIRS_DOWN].end(); ++s) {
 		if (s-&gt;second != UNKNOWN_SYMBOL_VALUE)
 			continue; // we know where these stairs lead
 		const PathNode &amp;node = World::shortestPath(s-&gt;first);
 		if (node.cost &gt;= UNPASSABLE)
 			continue;
 		else if (node.dir == NOWHERE)
-			World::setAction(static_cast&lt;action::Action *&gt;(new action::Move(this, DOWN, action::Move::calculatePriority(PRIORITY_EXPLORE_STAIRS_DOWN, node.moves))));
+			World::setAction(static_cast&lt;action::Action *&gt; (new action::Move(this, DOWN, action::Move::calculatePriority(PRIORITY_EXPLORE_STAIRS_DOWN, node.moves))));
 		else
-			World::setAction(static_cast&lt;action::Action *&gt;(new action::Move(this, node.dir, action::Move::calculatePriority(PRIORITY_EXPLORE_STAIRS_DOWN, node.moves))));
+			World::setAction(static_cast&lt;action::Action *&gt; (new action::Move(this, node.dir, action::Move::calculatePriority(PRIORITY_EXPLORE_STAIRS_DOWN, node.moves))));
 		break;
 	}
 
 	/* explore magic portals */
-	for (map&lt;Point, int&gt;::iterator s = World::levels[Saiph::position.level].symbols[(unsigned char) MAGIC_PORTAL].begin(); s != World::levels[Saiph::position.level].symbols[(unsigned char) MAGIC_PORTAL].end(); ++s) {
+	for (map&lt;Point, int&gt;::iterator s = World::levels[Saiph::position.level()].symbols[(unsigned char) MAGIC_PORTAL].begin(); s != World::levels[Saiph::position.level()].symbols[(unsigned char) MAGIC_PORTAL].end(); ++s) {
 		if (s-&gt;second != UNKNOWN_SYMBOL_VALUE)
 			continue; // we know where these stairs lead
 		const PathNode &amp;node = World::shortestPath(s-&gt;first);
@@ -97,7 +97,7 @@ void Explore::analyze() {
 		else if (node.dir == NOWHERE)
 			continue; // shouldn't happen
 		else
-			World::setAction(static_cast&lt;action::Action *&gt;(new action::Move(this, node.dir, action::Move::calculatePriority(PRIORITY_EXPLORE_MAGIC_PORTAL, node.moves))));
+			World::setAction(static_cast&lt;action::Action *&gt; (new action::Move(this, node.dir, action::Move::calculatePriority(PRIORITY_EXPLORE_MAGIC_PORTAL, node.moves))));
 		break;
 	}
 
@@ -109,15 +109,15 @@ void Explore::analyze() {
 			visit.erase(v++);
 			continue;
 		} else if (node.cost &lt; UNPASSABLE) {
-			World::setAction(static_cast&lt;action::Action *&gt;(new action::Move(this, node.dir, action::Move::calculatePriority(v-&gt;second, node.moves))));
+			World::setAction(static_cast&lt;action::Action *&gt; (new action::Move(this, node.dir, action::Move::calculatePriority(v-&gt;second, node.moves))));
 		}
 		++v;
 	}
 }
 
-void Explore::onEvent(Event *const event) {
+void Explore::onEvent(Event * const event) {
 	if (event-&gt;getID() == TakeMeThere::id) {
-		TakeMeThere *e = static_cast&lt;TakeMeThere *&gt;(event);
+		TakeMeThere *e = static_cast&lt;TakeMeThere *&gt; (event);
 		map&lt;Coordinate, int&gt;::iterator v = visit.find(e-&gt;coordinate);
 		if (v == visit.end() || v-&gt;second &lt; e-&gt;max_priority)
 			visit[e-&gt;coordinate] = e-&gt;max_priority;
@@ -130,7 +130,7 @@ void Explore::explorePoint(Point p, unsigned int *min_moves, int *best_type) {
 	int search_count = 0;
 	int solid_rock_count = 0;
 	int wall_count = 0;
-	--p.col;
+	p.moveWest();
 	unsigned char hs = World::getDungeonSymbol(p);
 	bool hu = false;
 	if (hs == SOLID_ROCK || hs == VERTICAL_WALL || hs == HORIZONTAL_WALL) {
@@ -138,13 +138,12 @@ void Explore::explorePoint(Point p, unsigned int *min_moves, int *best_type) {
 			++solid_rock_count;
 		else
 			++wall_count;
-		int sc = World::levels[Saiph::position.level].getSearchCount(p);
+		int sc = World::levels[Saiph::position.level()].getSearchCount(p);
 		if (sc &gt; search_count)
 			search_count = sc;
 		hu = true;
 	}
-	++p.col;
-	++p.row;
+	p.moveSoutheast();
 	unsigned char js = World::getDungeonSymbol(p);
 	bool ju = false;
 	if (js == SOLID_ROCK || js == VERTICAL_WALL || js == HORIZONTAL_WALL) {
@@ -152,13 +151,12 @@ void Explore::explorePoint(Point p, unsigned int *min_moves, int *best_type) {
 			++solid_rock_count;
 		else
 			++wall_count;
-		int sc = World::levels[Saiph::position.level].getSearchCount(p);
+		int sc = World::levels[Saiph::position.level()].getSearchCount(p);
 		if (sc &gt; search_count)
 			search_count = sc;
 		ju = true;
 	}
-	--p.row;
-	++p.col;
+	p.moveNortheast();
 	unsigned char ls = World::getDungeonSymbol(p);
 	bool lu = false;
 	if (ls == SOLID_ROCK || ls == VERTICAL_WALL || ls == HORIZONTAL_WALL) {
@@ -166,13 +164,12 @@ void Explore::explorePoint(Point p, unsigned int *min_moves, int *best_type) {
 			++solid_rock_count;
 		else
 			++wall_count;
-		int sc = World::levels[Saiph::position.level].getSearchCount(p);
+		int sc = World::levels[Saiph::position.level()].getSearchCount(p);
 		if (sc &gt; search_count)
 			search_count = sc;
 		lu = true;
 	}
-	--p.row;
-	--p.col;
+	p.moveNorthwest();
 	unsigned char ks = World::getDungeonSymbol(p);
 	bool ku = false;
 	if (ks == SOLID_ROCK || ks == VERTICAL_WALL || ks == HORIZONTAL_WALL) {
@@ -180,16 +177,16 @@ void Explore::explorePoint(Point p, unsigned int *min_moves, int *best_type) {
 			++solid_rock_count;
 		else
 			++wall_count;
-		int sc = World::levels[Saiph::position.level].getSearchCount(p);
+		int sc = World::levels[Saiph::position.level()].getSearchCount(p);
 		if (sc &gt; search_count)
 			search_count = sc;
 		ku = true;
 	}
 	/* set point back to original position */
-	++p.row;
+	p.moveSouth();
 
 	/* get search count for point */
-	int point_search_count = World::levels[Saiph::position.level].getSearchCount(p);
+	int point_search_count = World::levels[Saiph::position.level()].getSearchCount(p);
 
 	/* find out what &quot;type&quot; this place is.
 	 * a &quot;type&quot; pretty much just mean which order to explore places.
@@ -267,7 +264,7 @@ void Explore::explorePoint(Point p, unsigned int *min_moves, int *best_type) {
 	*min_moves = node.moves;
 	*best_type = type;
 	if (node.dir == NOWHERE)
-		World::setAction(static_cast&lt;action::Action *&gt;(new action::Search(this, action::Move::calculatePriority((type &lt; 2) ? PRIORITY_EXPLORE_LEVEL : PRIORITY_EXPLORE_LEVEL / (type + 1), node.moves))));
+		World::setAction(static_cast&lt;action::Action *&gt; (new action::Search(this, action::Move::calculatePriority((type &lt; 2) ? PRIORITY_EXPLORE_LEVEL : PRIORITY_EXPLORE_LEVEL / (type + 1), node.moves))));
 	else
-		World::setAction(static_cast&lt;action::Action *&gt;(new action::Move(this, node.dir, action::Move::calculatePriority((type &lt; 2) ? PRIORITY_EXPLORE_LEVEL : PRIORITY_EXPLORE_LEVEL / (type + 1), node.moves))));
+		World::setAction(static_cast&lt;action::Action *&gt; (new action::Move(this, node.dir, action::Move::calculatePriority((type &lt; 2) ? PRIORITY_EXPLORE_LEVEL : PRIORITY_EXPLORE_LEVEL / (type + 1), node.moves))));
 }</diff>
      <filename>Analyzers/Explore.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -17,13 +17,14 @@
 #define PRIORITY_EXPLORE_MAGIC_PORTAL 70
 
 namespace analyzer {
+
 	class Explore : public Analyzer {
 	public:
 		Explore();
 
 		void parseMessages(const std::string &amp;messages);
 		void analyze();
-		void onEvent(event::Event *const event);
+		void onEvent(event::Event * const event);
 
 	private:
 		std::map&lt;Coordinate, int&gt; visit;</diff>
      <filename>Analyzers/Explore.h</filename>
    </modified>
    <modified>
      <diff>@@ -49,12 +49,12 @@ Fight::Fight() : Analyzer(&quot;Fight&quot;) {
 void Fight::analyze() {
 	/* if engulfed try to fight our way out */
 	if (World::engulfed) {
-		World::setAction(static_cast&lt;action::Action *&gt;(new action::Fight(this, NW, PRIORITY_FIGHT_MELEE_MAX)));
+		World::setAction(static_cast&lt;action::Action *&gt; (new action::Fight(this, NW, PRIORITY_FIGHT_MELEE_MAX)));
 		return;
 	}
 	/* fight monsters */
 	int attack_score = INT_MIN;
-	for (map&lt;Point, Monster&gt;::iterator m = World::levels[Saiph::position.level].monsters.begin(); m != World::levels[Saiph::position.level].monsters.end(); ++m) {
+	for (map&lt;Point, Monster&gt;::iterator m = World::levels[Saiph::position.level()].monsters.begin(); m != World::levels[Saiph::position.level()].monsters.end(); ++m) {
 		if (m-&gt;second.symbol == PET)
 			continue; // we're not fighting pets :)
 		else if (m-&gt;second.attitude == FRIENDLY)
@@ -74,7 +74,7 @@ void Fight::analyze() {
 			 * stuff, if they use wands, etc */
 			attack_score = m-&gt;second.data-&gt;saiph_difficulty;
 		}
-		int distance = max(abs(m-&gt;first.row - Saiph::position.row), abs(m-&gt;first.col - Saiph::position.col));
+		int distance = max(abs(m-&gt;first.row() - Saiph::position.row()), abs(m-&gt;first.col() - Saiph::position.col()));
 		bool floating_eye = (m-&gt;second.symbol == S_EYE &amp;&amp; m-&gt;second.color == BLUE);
 		if (m-&gt;second.visible &amp;&amp; (distance &gt; 1 || floating_eye) &amp;&amp; projectile_slots.size() &gt; 0 &amp;&amp; distance &lt;= Saiph::strength / 2) {
 			/* got projectiles and monster is not next to us or it's a floating eye.
@@ -84,14 +84,14 @@ void Fight::analyze() {
 				/* we can throw at monster */
 				attack_score -= distance;
 				int priority = (attack_score - data::Monster::saiph_difficulty_min) * (PRIORITY_FIGHT_THROW_MAX - PRIORITY_FIGHT_THROW_MIN) / (data::Monster::saiph_difficulty_max - data::Monster::saiph_difficulty_min) + PRIORITY_FIGHT_THROW_MIN;
-				World::setAction(static_cast&lt;action::Action *&gt;(new action::Throw(this, *projectile_slots.begin(), in_line, priority)));
+				World::setAction(static_cast&lt;action::Action *&gt; (new action::Throw(this, *projectile_slots.begin(), in_line, priority)));
 				Debug::analyzer(name) &lt;&lt; &quot;Setting action to throw at '&quot; &lt;&lt; m-&gt;second.symbol &lt;&lt; &quot;' which is &quot; &lt;&lt; distance &lt;&lt; &quot; squares away with priority &quot; &lt;&lt; priority &lt;&lt; endl;
 				continue;
 			}
 		} else if (distance == 1 &amp;&amp; !floating_eye) {
 			/* next to monster, and it's not a floating eye. melee */
 			int priority = (attack_score - data::Monster::saiph_difficulty_min) * (PRIORITY_FIGHT_MELEE_MAX - PRIORITY_FIGHT_MELEE_MIN) / (data::Monster::saiph_difficulty_max - data::Monster::saiph_difficulty_min) + PRIORITY_FIGHT_MELEE_MIN;
-			World::setAction(static_cast&lt;action::Action *&gt;(new action::Fight(this, World::shortestPath(m-&gt;first).dir, priority)));
+			World::setAction(static_cast&lt;action::Action *&gt; (new action::Fight(this, World::shortestPath(m-&gt;first).dir, priority)));
 			Debug::analyzer(name) &lt;&lt; &quot;Setting action to melee '&quot; &lt;&lt; m-&gt;second.symbol &lt;&lt; &quot;' with priority &quot; &lt;&lt; priority &lt;&lt; endl;
 			continue;
 		}
@@ -101,14 +101,14 @@ void Fight::analyze() {
 			continue; // can't move to monster
 		int priority = (attack_score - data::Monster::saiph_difficulty_min) * (PRIORITY_FIGHT_MOVE_MAX - PRIORITY_FIGHT_MOVE_MIN) / (data::Monster::saiph_difficulty_max - data::Monster::saiph_difficulty_min) + PRIORITY_FIGHT_MOVE_MIN;
 		priority = action::Move::calculatePriority(priority, node.moves);
-		World::setAction(static_cast&lt;action::Action *&gt;(new action::Move(this, node.dir, priority)));
+		World::setAction(static_cast&lt;action::Action *&gt; (new action::Move(this, node.dir, priority)));
 		Debug::analyzer(name) &lt;&lt; &quot;Setting action to move towards '&quot; &lt;&lt; m-&gt;second.symbol &lt;&lt; &quot;' which is &quot; &lt;&lt; distance &lt;&lt; &quot; squares away with priority &quot; &lt;&lt; priority &lt;&lt; endl;
 	}
 }
 
-void Fight::onEvent(Event *const event) {
+void Fight::onEvent(Event * const event) {
 	if (event-&gt;getID() == ChangedInventoryItems::id) {
-		ChangedInventoryItems *e = static_cast&lt;ChangedInventoryItems *&gt;(event);
+		ChangedInventoryItems *e = static_cast&lt;ChangedInventoryItems *&gt; (event);
 		for (set&lt;unsigned char&gt;::iterator k = e-&gt;keys.begin(); k != e-&gt;keys.end(); ++k) {
 			map&lt;unsigned char, Item&gt;::iterator i = Inventory::items.find(*k);
 			if (i == Inventory::items.end()) {
@@ -125,25 +125,25 @@ void Fight::onEvent(Event *const event) {
 			}
 		}
 	} else if (event-&gt;getID() == ReceivedItems::id) {
-		ReceivedItems *e = static_cast&lt;ReceivedItems *&gt;(event);
+		ReceivedItems *e = static_cast&lt;ReceivedItems *&gt; (event);
 		for (map&lt;unsigned char, Item&gt;::iterator i = e-&gt;items.begin(); i != e-&gt;items.end(); ++i) {
 			if (wantItem(i-&gt;second))
 				projectile_slots.insert(i-&gt;first);
 		}
 	} else if (event-&gt;getID() == WantItems::id) {
-		WantItems *e = static_cast&lt;WantItems *&gt;(event);
+		WantItems *e = static_cast&lt;WantItems *&gt; (event);
 		for (map&lt;unsigned char, Item&gt;::iterator i = e-&gt;items.begin(); i != e-&gt;items.end(); ++i) {
 			if (!wantItem(i-&gt;second))
 				continue;
-			World::setAction(static_cast&lt;action::Action *&gt;(new action::Select(this, i-&gt;first)));
+			World::setAction(static_cast&lt;action::Action *&gt; (new action::Select(this, i-&gt;first)));
 			break;
 		}
 	} else if (event-&gt;getID() == ItemsOnGround::id) {
-		ItemsOnGround *e = static_cast&lt;ItemsOnGround *&gt;(event);
+		ItemsOnGround *e = static_cast&lt;ItemsOnGround *&gt; (event);
 		for (list&lt;Item&gt;::iterator i = e-&gt;items.begin(); i != e-&gt;items.end(); ++i) {
 			if (!wantItem(*i))
 				continue;
-			World::setAction(static_cast&lt;action::Action *&gt;(new action::Loot(this, PRIORITY_FIGHT_LOOT)));
+			World::setAction(static_cast&lt;action::Action *&gt; (new action::Loot(this, PRIORITY_FIGHT_LOOT)));
 			break;
 		}
 	}</diff>
      <filename>Analyzers/Fight.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -20,12 +20,13 @@ namespace event {
 class Item;
 
 namespace analyzer {
+
 	class Fight : public Analyzer {
 	public:
 		Fight();
 
 		void analyze();
-		void onEvent(event::Event *const event);
+		void onEvent(event::Event * const event);
 
 	private:
 		std::set&lt;std::string&gt; projectiles; // weapons we can throw</diff>
      <filename>Analyzers/Fight.h</filename>
    </modified>
    <modified>
      <diff>@@ -57,7 +57,7 @@ void Food::analyze() {
 
 	/* update prev_monster_loc with seen monsters (not standing on a stash) */
 	prev_monster_loc.clear();
-	for (map&lt;Point, Monster&gt;::iterator m = World::levels[Saiph::position.level].monsters.begin(); m != World::levels[Saiph::position.level].monsters.end(); ++m) {
+	for (map&lt;Point, Monster&gt;::iterator m = World::levels[Saiph::position.level()].monsters.begin(); m != World::levels[Saiph::position.level()].monsters.end(); ++m) {
 		if (m-&gt;second.visible)
 			prev_monster_loc[m-&gt;first] = m-&gt;second.symbol;
 	}
@@ -85,7 +85,7 @@ void Food::analyze() {
 			}
 			if (eat != Inventory::items.end()) {
 				/* we got something to eat, hooray! */
-				World::setAction(static_cast&lt;action::Action *&gt;(new action::Eat(this, eat-&gt;first, (Saiph::hunger == WEAK ? PRIORITY_FOOD_EAT_WEAK : PRIORITY_FOOD_EAT_FAINTING))));
+				World::setAction(static_cast&lt;action::Action *&gt; (new action::Eat(this, eat-&gt;first, (Saiph::hunger == WEAK ? PRIORITY_FOOD_EAT_WEAK : PRIORITY_FOOD_EAT_FAINTING))));
 				return;
 			}
 		}
@@ -94,7 +94,7 @@ void Food::analyze() {
 			/* bad enough to pray for help.
 			 * if this doesn't work... help! */
 			if (action::Pray::isSafeToPray())
-				World::setAction(static_cast&lt;action::Action *&gt;(new action::Pray(this, PRIORITY_FOOD_PRAY_FOR_FOOD)));
+				World::setAction(static_cast&lt;action::Action *&gt; (new action::Pray(this, PRIORITY_FOOD_PRAY_FOR_FOOD)));
 		}
 	}
 }
@@ -112,8 +112,8 @@ void Food::parseMessages(const string &amp;messages) {
 			}
 		}
 		/* also clear &quot;corpse_loc&quot; on squares where there are no items nor monsters */
-		for (map&lt;Point, int&gt;::iterator c = corpse_loc.begin(); c != corpse_loc.end(); ) {
-			if (World::levels[Saiph::position.level].monsters.find(c-&gt;first) == World::levels[Saiph::position.level].monsters.end() &amp;&amp; World::levels[Saiph::position.level].stashes.find(c-&gt;first) == World::levels[Saiph::position.level].stashes.end()) {
+		for (map&lt;Point, int&gt;::iterator c = corpse_loc.begin(); c != corpse_loc.end();) {
+			if (World::levels[Saiph::position.level()].monsters.find(c-&gt;first) == World::levels[Saiph::position.level()].monsters.end() &amp;&amp; World::levels[Saiph::position.level()].stashes.find(c-&gt;first) == World::levels[Saiph::position.level()].stashes.end()) {
 				corpse_loc.erase(c++);
 				continue;
 			}
@@ -122,9 +122,9 @@ void Food::parseMessages(const string &amp;messages) {
 	}
 }
 
-void Food::onEvent(Event *const event) {
+void Food::onEvent(Event * const event) {
 	if (event-&gt;getID() == ItemsOnGround::id &amp;&amp; World::getDungeonSymbol() != SHOP_TILE) {
-		ItemsOnGround *e = static_cast&lt;ItemsOnGround *&gt;(event);
+		ItemsOnGround *e = static_cast&lt;ItemsOnGround *&gt; (event);
 		map&lt;Point, int&gt;::iterator cl = corpse_loc.find(Saiph::position);
 		for (list&lt;Item&gt;::iterator i = e-&gt;items.begin(); i != e-&gt;items.end(); ++i) {
 			if (cl != corpse_loc.end() &amp;&amp; cl-&gt;second + FOOD_CORPSE_EAT_TIME &gt; World::turn) {
@@ -132,28 +132,28 @@ void Food::onEvent(Event *const event) {
 				map&lt;string, data::Corpse *&gt;::iterator c = data::Corpse::corpses.find(i-&gt;name);
 				/* check that item is a corpse, it's safe to eat and that the corpse rots */
 				if (c != data::Corpse::corpses.end() &amp;&amp; safeToEat(c) &amp;&amp; c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_ROT) {
-					World::setAction(static_cast&lt;action::Action *&gt;(new action::EatCorpse(this, i-&gt;name, PRIORITY_FOOD_EAT_CORPSE)));
+					World::setAction(static_cast&lt;action::Action *&gt; (new action::EatCorpse(this, i-&gt;name, PRIORITY_FOOD_EAT_CORPSE)));
 					break;
 				}
 			}
 			/* check if we want to pick up edible item that won't rot */
 			map&lt;string, data::Food *&gt;::iterator f = data::Food::foods.find(i-&gt;name);
 			if (f != data::Food::foods.end() &amp;&amp; !(f-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_ROT)) {
-				World::setAction(static_cast&lt;action::Action *&gt;(new action::Loot(this, PRIORITY_FOOD_LOOT)));
+				World::setAction(static_cast&lt;action::Action *&gt; (new action::Loot(this, PRIORITY_FOOD_LOOT)));
 				break;
 			}
 		}
 	} else if (event-&gt;getID() == WantItems::id) {
-		WantItems *e = static_cast&lt;WantItems *&gt;(event);
+		WantItems *e = static_cast&lt;WantItems *&gt; (event);
 		for (map&lt;unsigned char, Item&gt;::iterator i = e-&gt;items.begin(); i != e-&gt;items.end(); ++i) {
 			map&lt;string, data::Food *&gt;::iterator f = data::Food::foods.find(i-&gt;second.name);
 			if (f == data::Food::foods.end() || f-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_ROT)
 				continue; // not food or the food rots
-			World::setAction(static_cast&lt;action::Action *&gt;(new action::Select(this, i-&gt;first)));
+			World::setAction(static_cast&lt;action::Action *&gt; (new action::Select(this, i-&gt;first)));
 			break;
 		}
 	} else if (event-&gt;getID() == ChangedInventoryItems::id) {
-		ChangedInventoryItems *e = static_cast&lt;ChangedInventoryItems *&gt;(event);
+		ChangedInventoryItems *e = static_cast&lt;ChangedInventoryItems *&gt; (event);
 		for (set&lt;unsigned char&gt;::iterator k = e-&gt;keys.begin(); k != e-&gt;keys.end(); ++k) {
 			map&lt;unsigned char, Item&gt;::iterator i = Inventory::items.find(*k);
 			if (i == Inventory::items.end()) {
@@ -169,7 +169,7 @@ void Food::onEvent(Event *const event) {
 			}
 		}
 	} else if (event-&gt;getID() == ReceivedItems::id) {
-		ReceivedItems *e = static_cast&lt;ReceivedItems *&gt;(event);
+		ReceivedItems *e = static_cast&lt;ReceivedItems *&gt; (event);
 		for (map&lt;unsigned char, Item&gt;::iterator i = e-&gt;items.begin(); i != e-&gt;items.end(); ++i) {
 			map&lt;string, data::Food *&gt;::iterator f = data::Food::foods.find(i-&gt;second.name);
 			if (f == data::Food::foods.end() || f-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_ROT)
@@ -177,8 +177,8 @@ void Food::onEvent(Event *const event) {
 			food_items.insert(i-&gt;first);
 		}
 	} else if (event-&gt;getID() == EatItem::id) {
-		EatItem *e = static_cast&lt;EatItem *&gt;(event);
-		World::setAction(static_cast&lt;action::Action *&gt;(new action::Eat(this, e-&gt;key, e-&gt;priority)));
+		EatItem *e = static_cast&lt;EatItem *&gt; (event);
+		World::setAction(static_cast&lt;action::Action *&gt; (new action::Eat(this, e-&gt;key, e-&gt;priority)));
 	}
 }
 
@@ -187,41 +187,41 @@ bool Food::safeToEat(map&lt;string, data::Corpse *&gt;::iterator c) {
 	/* this method returns true if it's safe to eat given corpse */
 	if (Saiph::hunger &gt;= SATIATED &amp;&amp; !(c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_GAIN_LEVEL) &amp;&amp; !(c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_ESP))
 		return false; // satiated and eating it won't give us benefits that's worth the risk of choking
-	/* acidic ain't so bad
-	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_ACIDIC) != 0)
-		return false;
-	*/
+		/* acidic ain't so bad
+		else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_ACIDIC) != 0)
+			return false;
+		 */
 	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_AGGRAVATE) != 0)
 		return false;
 	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_DIE) != 0)
 		return false;
-	/* eat dwarves for now
-	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_DWARF) != 0)
-		return false;
-	*/
-	/* eat elves for now
-	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_ELF) != 0)
-		return false;
-	*/
-	/* eat gnomes for now
-	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_GNOME) != 0)
-		return false;
-	*/
+		/* eat dwarves for now
+		else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_DWARF) != 0)
+			return false;
+		 */
+		/* eat elves for now
+		else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_ELF) != 0)
+			return false;
+		 */
+		/* eat gnomes for now
+		else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_GNOME) != 0)
+			return false;
+		 */
 	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_HALLUCINOGENIC) != 0)
 		return false;
 	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_HUMAN) != 0)
 		return false;
 	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_LYCANTHROPY) != 0)
 		return false;
-	/* mimic for some turns isn't that bad, is it?
-	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_MIMIC) != 0)
-		return false;
-	*/
+		/* mimic for some turns isn't that bad, is it?
+		else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_MIMIC) != 0)
+			return false;
+		 */
 	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_PETRIFY) != 0)
 		return false;
 	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_POISONOUS) != 0 &amp;&amp;
-			!(Saiph::intrinsics &amp; PROPERTY_POISON ||
-			  Saiph::extrinsics &amp; PROPERTY_POISON))
+		!(Saiph::intrinsics &amp; PROPERTY_POISON ||
+		Saiph::extrinsics &amp; PROPERTY_POISON))
 		return false;
 	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_POLYMORPH) != 0)
 		return false;
@@ -229,47 +229,47 @@ bool Food::safeToEat(map&lt;string, data::Corpse *&gt;::iterator c) {
 		return false;
 	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_STUN) != 0)
 		return false;
-	/* teleportitis might be fun for a bot
-	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_TELEPORTITIS) != 0)
-		return false;
-	*/
-	/* we're not vegan
-	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_VEGAN) != 0)
-		return false;
-	*/
-	/* nor vegetarian
-	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_VEGETARIAN) != 0)
-		return false;
-	*/
-	/* let's eat stuff that makes us strong
-	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_STRENGTH) != 0)
-		return false;
-	*/
-	/* and stuff that gives us a level
-	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_GAIN_LEVEL) != 0)
-		return false;
-	*/
-	/* and stuff that heals us
-	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_HEAL) != 0)
-		return false;
-	*/
+		/* teleportitis might be fun for a bot
+		else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_TELEPORTITIS) != 0)
+			return false;
+		 */
+		/* we're not vegan
+		else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_VEGAN) != 0)
+			return false;
+		 */
+		/* nor vegetarian
+		else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_VEGETARIAN) != 0)
+			return false;
+		 */
+		/* let's eat stuff that makes us strong
+		else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_STRENGTH) != 0)
+			return false;
+		 */
+		/* and stuff that gives us a level
+		else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_GAIN_LEVEL) != 0)
+			return false;
+		 */
+		/* and stuff that heals us
+		else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_HEAL) != 0)
+			return false;
+		 */
 	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_SPEED_TOGGLE) != 0)
 		return false;
 	/* since we took out lizards from data::Corpse, no monster got this effect
 	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_CURE_STONING) != 0)
 		return false;
-	*/
+	 */
 	/* since we took out lichens from data::Corpse, no monster got this effect
 	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_REDUCE_STUNNING) != 0)
 		return false;
-	*/
+	 */
 	/* since we took out lichens from data::Corpse, no monster got this effect
 	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_REDUCE_CONFUSION) != 0)
 		return false;
-	*/
+	 */
 	/* sure, let's go invisible if we can
 	else if ((c-&gt;second-&gt;eat_effects &amp; EAT_EFFECT_INVISIBILITY) != 0)
 		return false;
-	*/
+	 */
 	return true;
 }</diff>
      <filename>Analyzers/Food.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -20,13 +20,14 @@
 #define PRIORITY_FOOD_LOOT 200
 
 namespace analyzer {
+
 	class Food : public Analyzer {
 	public:
 		Food();
 
 		void analyze();
 		void parseMessages(const std::string &amp;messages);
-		void onEvent(event::Event *const event);
+		void onEvent(event::Event * const event);
 
 	private:
 		std::map&lt;Point, unsigned char&gt; prev_monster_loc;</diff>
      <filename>Analyzers/Food.h</filename>
    </modified>
    <modified>
      <diff>@@ -30,7 +30,7 @@ void Health::analyze() {
 				/* TODO: should not enter this block if we could quaff */
 				/* quaffing won't work... how about pray? */
 				if (action::Pray::isSafeToPray()) {
-					World::setAction(static_cast&lt;action::Action *&gt;(new action::Pray(this, PRIORITY_HEALTH_PRAY_FOR_HP)));
+					World::setAction(static_cast&lt;action::Action *&gt; (new action::Pray(this, PRIORITY_HEALTH_PRAY_FOR_HP)));
 					doing_something = true;
 				}
 			}
@@ -48,7 +48,7 @@ void Health::analyze() {
 			/* TODO: should not enter this block if we can use unihorn */
 			/* TODO: eat eucalyptus leaf (if foodpoisoned or ill and no unihorn) */
 			/* if we can't cure this in any other way, just pray even if it's not safe, because we'll die for sure if we don't */
-			World::setAction(static_cast&lt;action::Action *&gt;(new action::Pray(this, PRIORITY_HEALTH_CURE_DEADLY)));
+			World::setAction(static_cast&lt;action::Action *&gt; (new action::Pray(this, PRIORITY_HEALTH_CURE_DEADLY)));
 		}
 	}
 	if (resting) {
@@ -57,16 +57,16 @@ void Health::analyze() {
 			resting = false; // enough hp (greater than about 86%) to continue our journey
 		} else if (!Saiph::blind &amp;&amp; !Saiph::confused &amp;&amp; !Saiph::stunned &amp;&amp; !Saiph::hallucinating) {
 			ElberethQuery eq;
-			EventBus::broadcast(static_cast&lt;Event *&gt;(&amp;eq));
+			EventBus::broadcast(static_cast&lt;Event *&gt; (&amp;eq));
 			if (eq.engraving_type == ELBERETH_MUST_CHECK) {
 				/* we don't know, we must look */
-				World::setAction(static_cast&lt;action::Action *&gt;(new action::Look(this)));
+				World::setAction(static_cast&lt;action::Action *&gt; (new action::Look(this)));
 			} else if (eq.engraving_type == ELBERETH_DUSTED || eq.engraving_type == ELBERETH_NONE) {
 				/* no elbereth or dusted elbereth, engrave or rest, depending on amount of elbereths */
 				if (eq.number_of_elbereths &lt; 3)
-					World::setAction(static_cast&lt;action::Action *&gt;(new action::Engrave(this, ELBERETH &quot;\n&quot;, HANDS, PRIORITY_HEALTH_REST_FOR_HP_HIGH, (eq.number_of_elbereths &gt; 0))));
+					World::setAction(static_cast&lt;action::Action *&gt; (new action::Engrave(this, ELBERETH &quot;\n&quot;, HANDS, PRIORITY_HEALTH_REST_FOR_HP_HIGH, (eq.number_of_elbereths &gt; 0))));
 				else
-					World::setAction(static_cast&lt;action::Action *&gt;(new action::Rest(this, PRIORITY_HEALTH_REST_FOR_HP_HIGH)));
+					World::setAction(static_cast&lt;action::Action *&gt; (new action::Rest(this, PRIORITY_HEALTH_REST_FOR_HP_HIGH)));
 			}
 			/* TODO: handle digged/burned elbereth */
 		}
@@ -76,12 +76,12 @@ void Health::analyze() {
 		/* TODO: eat sprig of wolfsbane */
 		/* no? try praying instead */
 		if (action::Pray::isSafeToPray())
-			World::setAction(static_cast&lt;action::Action *&gt;(new action::Pray(this, PRIORITY_HEALTH_CURE_LYCANTHROPY)));
+			World::setAction(static_cast&lt;action::Action *&gt; (new action::Pray(this, PRIORITY_HEALTH_CURE_LYCANTHROPY)));
 	}
 	if (Saiph::polymorphed) {
 		/* cure polymorph */
 		if (action::Pray::isSafeToPray())
-			World::setAction(static_cast&lt;action::Action *&gt;(new action::Pray(this, PRIORITY_HEALTH_CURE_POLYMORPH)));
+			World::setAction(static_cast&lt;action::Action *&gt; (new action::Pray(this, PRIORITY_HEALTH_CURE_POLYMORPH)));
 	}
 	if (prev_str &lt; Saiph::strength || prev_dex &lt; Saiph::dexterity || prev_con &lt; Saiph::constitution || prev_int &lt; Saiph::intelligence || prev_wis &lt; Saiph::wisdom || prev_cha &lt; Saiph::charisma) {
 		/* TODO: we lost some stats. apply unihorn */
@@ -100,6 +100,6 @@ void Health::parseMessages(const string &amp;messages) {
 		/* bloody *trice, this is bad */
 		/* TODO: eat [partly eaten] lizard corpse */
 		/* pray if all else fails, don't even bother checking if it's safe to pray, we're dead anyways */
-		World::setAction(static_cast&lt;action::Action *&gt;(new action::Pray(this, PRIORITY_HEALTH_CURE_DEADLY)));
+		World::setAction(static_cast&lt;action::Action *&gt; (new action::Pray(this, PRIORITY_HEALTH_CURE_DEADLY)));
 	}
 }</diff>
      <filename>Analyzers/Health.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -14,6 +14,7 @@
 #define PRIORITY_HEALTH_CURE_LYCANTHROPY 400
 
 namespace analyzer {
+
 	class Health : public Analyzer {
 	public:
 		Health();</diff>
      <filename>Analyzers/Health.h</filename>
    </modified>
    <modified>
      <diff>@@ -26,15 +26,15 @@ Loot::Loot() : Analyzer(&quot;Loot&quot;), showing_pickup(false), showing_drop(false) {
 void Loot::analyze() {
 	/* check inventory if it's not updated */
 	if (!Inventory::updated) {
-		World::setAction(static_cast&lt;action::Action *&gt;(new action::ListInventory(this)));
+		World::setAction(static_cast&lt;action::Action *&gt; (new action::ListInventory(this)));
 		return;
 	}
 
 	/* visit new/changed stashes */
 	set&lt;Coordinate&gt;::iterator v = visit.begin();
 	while (v != visit.end()) {
-		map&lt;Point, Stash&gt;::iterator s = World::levels[Saiph::position.level].stashes.find(*v);
-		if (s == World::levels[Saiph::position.level].stashes.end() || s-&gt;second.last_look == World::turn) {
+		map&lt;Point, Stash&gt;::iterator s = World::levels[Saiph::position.level()].stashes.find(*v);
+		if (s == World::levels[Saiph::position.level()].stashes.end() || s-&gt;second.last_look == World::turn) {
 			/* stash is gone or we recently looked at it */
 			visit.erase(v++);
 			continue;
@@ -42,13 +42,13 @@ void Loot::analyze() {
 		const PathNode &amp;node = World::shortestPath(*v);
 		if (node.dir == NOWHERE) {
 			/* standing on stash, look and remove from visit */
-			if (World::setAction(static_cast&lt;action::Action *&gt;(new action::Look(this)))) {
+			if (World::setAction(static_cast&lt;action::Action *&gt; (new action::Look(this)))) {
 				visit.erase(v++);
 				continue;
 			}
 		} else if (node.cost &lt; UNPASSABLE) {
 			/* move to stash */
-			World::setAction(static_cast&lt;action::Action *&gt;(new action::Move(this, node.dir, action::Move::calculatePriority(PRIORITY_LOOT_VISIT, node.moves))));
+			World::setAction(static_cast&lt;action::Action *&gt; (new action::Move(this, node.dir, action::Move::calculatePriority(PRIORITY_LOOT_VISIT, node.moves))));
 		}
 		++v;
 	}
@@ -87,7 +87,7 @@ void Loot::parseMessages(const string &amp;messages) {
 			pos += length;
 		}
 		/* broadcast event */
-		EventBus::broadcast(static_cast&lt;Event *&gt;(&amp;wi));
+		EventBus::broadcast(static_cast&lt;Event *&gt; (&amp;wi));
 		/* pick up stuff that was wanted by analyzers */
 		vector&lt;string&gt; pickup;
 		ostringstream tmp;
@@ -98,7 +98,7 @@ void Loot::parseMessages(const string &amp;messages) {
 			tmp &lt;&lt; w-&gt;second &lt;&lt; w-&gt;first;
 			pickup.push_back(tmp.str());
 		}
-		World::setAction(static_cast&lt;action::Action *&gt;(new action::SelectMultiple(this, pickup)));
+		World::setAction(static_cast&lt;action::Action *&gt; (new action::SelectMultiple(this, pickup)));
 	} else if ((pos = messages.find(MESSAGE_DROP_WHICH_ITEMS)) != string::npos || showing_drop) {
 		/* dropping items */
 		if (showing_drop) {
@@ -106,7 +106,8 @@ void Loot::parseMessages(const string &amp;messages) {
 			pos = 0;
 		} else {
 			/* first page, set menu */
-			showing_drop = true;;
+			showing_drop = true;
+			;
 			/* and find first &quot;  &quot; */
 			pos = messages.find(&quot;  &quot;, pos + 1);
 		}
@@ -134,7 +135,7 @@ void Loot::parseMessages(const string &amp;messages) {
 			pos += length;
 		}
 		/* broadcast event */
-		EventBus::broadcast(static_cast&lt;Event *&gt;(&amp;wi));
+		EventBus::broadcast(static_cast&lt;Event *&gt; (&amp;wi));
 		/* drop stuff no analyzer wanted */
 		vector&lt;string&gt; drop;
 		ostringstream tmp;
@@ -157,19 +158,19 @@ void Loot::parseMessages(const string &amp;messages) {
 			tmp &lt;&lt; (i-&gt;second.count - w-&gt;second) &lt;&lt; w-&gt;first;
 			drop.push_back(tmp.str());
 		}
-		World::setAction(static_cast&lt;action::Action *&gt;(new action::SelectMultiple(this, drop)));
+		World::setAction(static_cast&lt;action::Action *&gt; (new action::SelectMultiple(this, drop)));
 	}
 
 	if (messages.find(MESSAGE_SEVERAL_OBJECTS_HERE) != string::npos || messages.find(MESSAGE_MANY_OBJECTS_HERE) != string::npos || messages.find(MESSAGE_SEVERAL_MORE_OBJECTS_HERE) != string::npos || messages.find(MESSAGE_MANY_MORE_OBJECTS_HERE) != string::npos) {
 		/* several/many objects herek, take a look around */
-		World::setAction(static_cast&lt;action::Action *&gt;(new action::Look(this)));
+		World::setAction(static_cast&lt;action::Action *&gt; (new action::Look(this)));
 	}
 }
 
-void Loot::onEvent(Event *const event) {
+void Loot::onEvent(Event * const event) {
 	if (event-&gt;getID() == StashChanged::id) {
 		/* stash changed, we need to visit it again */
-		StashChanged *e = static_cast&lt;StashChanged *&gt;(event);
+		StashChanged *e = static_cast&lt;StashChanged *&gt; (event);
 		visit.insert(e-&gt;stash);
 	}
 }</diff>
      <filename>Analyzers/Loot.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -14,13 +14,14 @@ namespace event {
 }
 
 namespace analyzer {
+
 	class Loot : public Analyzer {
 	public:
 		Loot();
 
 		void analyze();
 		void parseMessages(const std::string &amp;messages);
-		void onEvent(event::Event *const event);
+		void onEvent(event::Event * const event);
 
 	private:
 		bool showing_pickup;</diff>
      <filename>Analyzers/Loot.h</filename>
    </modified>
    <modified>
      <diff>@@ -2,6 +2,6 @@
 
 using namespace std;
 
-ostream &amp;operator&lt;&lt;(ostream &amp;os, const Command &amp;c) {
+ostream &amp; operator&lt;&lt;(ostream &amp;os, const Command &amp;c) {
 	return os &lt;&lt; &quot;(&quot; &lt;&lt; c.priority &lt;&lt; &quot;): &quot; &lt;&lt; c.command;
 }</diff>
      <filename>Command.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -26,11 +26,16 @@ public:
 	std::string command;
 	int priority;
 
-	Command(const std::string &amp;command = &quot;&quot;, int priority = ILLEGAL_PRIORITY) : command(command), priority(priority) {}
-	Command(const Command &amp;c) : command(c.command), priority(c.priority) {}
+	Command(const std::string &amp;command = &quot;&quot;, int priority = ILLEGAL_PRIORITY) : command(command), priority(priority) {
+	}
 
-	bool operator==(const Command &amp;c) const {return priority == c.priority &amp;&amp; command == command;}
+	Command(const Command &amp;c) : command(c.command), priority(c.priority) {
+	}
+
+	bool operator==(const Command &amp;c) const {
+		return priority == c.priority &amp;&amp; command == command;
+	}
 };
 
-std::ostream &amp;operator&lt;&lt;(std::ostream &amp;os, const Command &amp;c);
+std::ostream &amp; operator&lt;&lt;(std::ostream &amp;os, const Command &amp;c);
 #endif</diff>
      <filename>Command.h</filename>
    </modified>
    <modified>
      <diff>@@ -14,16 +14,16 @@ Connection::~Connection() {
 /* static methods */
 Connection *Connection::create(int interface) {
 	switch (interface) {
-		case CONNECTION_LOCAL:
-			return new Local();
-			break;
+	case CONNECTION_LOCAL:
+		return new Local();
+		break;
 
-		case CONNECTION_TELNET:
-			return new Telnet();
-			break;
+	case CONNECTION_TELNET:
+		return new Telnet();
+		break;
 
-		default:
-			return NULL;
+	default:
+		return NULL;
 	}
 	/* this never happens :) */
 	return NULL;</diff>
      <filename>Connection.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -8,15 +8,15 @@
 #include &lt;string&gt;
 
 class Connection {
-	public:
-		Connection();
-		virtual ~Connection();
+public:
+	Connection();
+	virtual ~Connection();
 
-		static Connection *create(int interface);
+	static Connection *create(int interface);
 
-		virtual int retrieve(char *buffer, int count);
-		virtual int transmit(const std::string &amp;data);
-		virtual void start();
-		virtual void stop();
+	virtual int retrieve(char *buffer, int count);
+	virtual int transmit(const std::string &amp;data);
+	virtual void start();
+	virtual void stop();
 };
 #endif</diff>
      <filename>Connection.h</filename>
    </modified>
    <modified>
      <diff>@@ -2,6 +2,6 @@
 
 using namespace std;
 
-ostream &amp;operator&lt;&lt;(ostream &amp;os, const Coordinate&amp; c) {
-	return os &lt;&lt; &quot;(&quot; &lt;&lt; c.level &lt;&lt; &quot;, &quot; &lt;&lt; c.row &lt;&lt; &quot;, &quot; &lt;&lt; c.col &lt;&lt; &quot;)&quot;;
+ostream &amp; operator&lt;&lt;(ostream &amp;os, const Coordinate&amp; c) {
+	return os &lt;&lt; &quot;(&quot; &lt;&lt; c.level() &lt;&lt; &quot;, &quot; &lt;&lt; c.row() &lt;&lt; &quot;, &quot; &lt;&lt; c.col() &lt;&lt; &quot;)&quot;;
 }</diff>
      <filename>Coordinate.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -5,18 +5,49 @@
 
 class Coordinate : public Point {
 public:
-	int level;
 
-	Coordinate(int level = -1, int row = -1, int col = -1) : Point(row, col), level(level) {}
-	Coordinate(int level, const Point &amp;point = Point()) : Point(point), level(level) {}
+	Coordinate(int level = -1, int row = -1, int col = -1) : Point(row, col), _level(level) {
+	}
 
-	bool operator&lt;(const Coordinate &amp;c) const {return (level &lt; c.level || (level == c.level &amp;&amp; row &lt; c.row) || (level == c.level &amp;&amp; row == c.row &amp;&amp; col &lt; c.col));}
-	bool operator&gt;(const Coordinate &amp;c) const {return (level &gt; c.level || (level == c.level &amp;&amp; row &gt; c.row) || (level == c.level &amp;&amp; row == c.row &amp;&amp; col &gt; c.col));}
-	bool operator&lt;=(const Coordinate &amp;c) const {return (level &lt; c.level || (level == c.level &amp;&amp; row &lt; c.row) || (level == c.level &amp;&amp; row == c.row &amp;&amp; col &lt;= c.col));}
-	bool operator&gt;=(const Coordinate &amp;c) const {return (level &gt; c.level || (level == c.level &amp;&amp; row &gt; c.row) || (level == c.level &amp;&amp; row == c.row &amp;&amp; col &gt;= c.col));}
-	bool operator==(const Coordinate &amp;c) const {return (level == c.level &amp;&amp; row == c.row &amp;&amp; col == c.col);}
-	bool operator!=(const Coordinate &amp;c) const {return (level != c.level || row != c.row || col != c.col);}
+	Coordinate(int level, const Point &amp;point = Point()) : Point(point), _level(level) {
+	}
+
+	int level() const {
+		return _level;
+	}
+
+	int level(int level) {
+		_level = level;
+		return this-&gt;level();
+	}
+
+	bool operator&lt;(const Coordinate &amp;c) const {
+		return (_level &lt; c._level || (_level == c._level &amp;&amp; row() &lt; c.row()) || (_level == c._level &amp;&amp; row() == c.row() &amp;&amp; col() &lt; c.col()));
+	}
+
+	bool operator&gt;(const Coordinate &amp;c) const {
+		return (_level &gt; c._level || (_level == c._level &amp;&amp; row() &gt; c.row()) || (_level == c._level &amp;&amp; row() == c.row() &amp;&amp; col() &gt; c.col()));
+	}
+
+	bool operator&lt;=(const Coordinate &amp;c) const {
+		return (_level &lt; c._level || (_level == c._level &amp;&amp; row() &lt; c.row()) || (_level == c._level &amp;&amp; row() == c.row() &amp;&amp; col() &lt;= c.col()));
+	}
+
+	bool operator&gt;=(const Coordinate &amp;c) const {
+		return (_level &gt; c._level || (_level == c._level &amp;&amp; row() &gt; c.row()) || (_level == c._level &amp;&amp; row() == c.row() &amp;&amp; col() &gt;= c.col()));
+	}
+
+	bool operator==(const Coordinate &amp;c) const {
+		return (_level == c._level &amp;&amp; row() == c.row() &amp;&amp; col() == c.col());
+	}
+
+	bool operator!=(const Coordinate &amp;c) const {
+		return (_level != c._level || row() != c.row() || col() != c.col());
+	}
+
+private:
+	int _level;
 };
 
-std::ostream &amp;operator&lt;&lt;(std::ostream &amp;os, const Coordinate&amp; c);
+std::ostream &amp; operator&lt;&lt;(std::ostream &amp;os, const Coordinate&amp; c);
 #endif</diff>
      <filename>Coordinate.h</filename>
    </modified>
    <modified>
      <diff>@@ -6,13 +6,16 @@
 #include &quot;Item.h&quot;
 
 namespace data {
+
 	class Amulet : public Item {
 	public:
 		static std::map&lt;std::string, Amulet *&gt; amulets;
 		const bool confer_effect;
 
 		Amulet(const std::string &amp;name, int cost, int weight, int material, unsigned long long properties, bool confer_effect);
-		~Amulet() {}
+
+		~Amulet() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Amulet.h</filename>
    </modified>
    <modified>
      <diff>@@ -7,6 +7,7 @@
 #include &quot;../Globals.h&quot;
 
 namespace data {
+
 	class Armor : public Item {
 	public:
 		static std::map&lt;std::string, Armor *&gt; armors;
@@ -15,7 +16,9 @@ namespace data {
 		const int mc;
 
 		Armor(const std::string &amp;name, int cost, int weight, int material, int slot, int ac, int mc, unsigned long long properties);
-		virtual ~Armor() {}
+
+		virtual ~Armor() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Armor.h</filename>
    </modified>
    <modified>
      <diff>@@ -59,7 +59,7 @@
 #define AD_DISE         33      /* confers diseases */
 #define AD_DCAY         34      /* decays organics (brown Pudding) */
 #define AD_SSEX         35      /* Succubus seduction (extended) */
-                                /* If no SEDUCE then same as AD_SEDU */
+/* If no SEDUCE then same as AD_SEDU */
 #define AD_HALU         36      /* causes hallucination */
 #define AD_DETH         37      /* for Death only */
 #define AD_PEST         38      /* for Pestilence only */
@@ -76,6 +76,7 @@
 #define AD_CURS         253     /* random curse (ex. gremlin) */
 
 namespace data {
+
 	class Attack {
 	public:
 		int type;
@@ -83,11 +84,20 @@ namespace data {
 		int dice;
 		int sides;
 
-		Attack(int type = 0, int damage_type = 0, int dice = 0, int sides = 0) : type(type), damage_type(damage_type), dice(dice), sides(sides) {};
+		Attack(int type = 0, int damage_type = 0, int dice = 0, int sides = 0) : type(type), damage_type(damage_type), dice(dice), sides(sides) {
+		};
+
+		int minDamage() const {
+			return dice;
+		}
+
+		int avgDamage() const {
+			return (dice * sides + dice) / 2;
+		}
 
-		int minDamage() const {return dice;}
-		int avgDamage() const {return (dice * sides + dice) / 2;}
-		int maxDamage() const {return dice * sides;}
+		int maxDamage() const {
+			return dice * sides;
+		}
 	};
 }
 #endif</diff>
      <filename>Data/Attack.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Axe *&gt; axes;
 
 		Axe(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Axe() {}
+
+		virtual ~Axe() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Axe.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Boomerang *&gt; boomerangs;
 
 		Boomerang(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Boomerang() {}
+
+		virtual ~Boomerang() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Boomerang.h</filename>
    </modified>
    <modified>
      <diff>@@ -19,23 +19,23 @@ void Boots::create(const string &amp;name, int cost, int weight, int material, int a
 }
 
 void Boots::init() {
-	//     name                 cost  weight  material          ac mc properties
-	create(&quot;low boots&quot;,            8,     10, MATERIAL_LEATHER, 1, 0, 0);
-	create(&quot;high boots&quot;,          12,     20, MATERIAL_LEATHER, 2, 0, 0);
-	create(&quot;iron shoes&quot;,          16,     50, MATERIAL_IRON,    2, 0, 0);
-	create(&quot;elven boots&quot;,          8,     15, MATERIAL_LEATHER, 1, 0, PROPERTY_STEALTH | PROPERTY_MAGIC);
-	create(&quot;kicking boots&quot;,        8,     15, MATERIAL_IRON,    1, 0, PROPERTY_KICKING | PROPERTY_MAGIC);
-	create(&quot;fumble boots&quot;,        30,     20, MATERIAL_LEATHER, 1, 0, PROPERTY_FUMBLING | PROPERTY_MAGIC);
-	create(&quot;levitation boots&quot;,    30,     15, MATERIAL_LEATHER, 1, 0, PROPERTY_LEVITATION | PROPERTY_MAGIC);
-	create(&quot;jumping boots&quot;,       50,     20, MATERIAL_LEATHER, 1, 0, PROPERTY_JUMPING | PROPERTY_MAGIC);
-	create(&quot;speed boots&quot;,         50,     20, MATERIAL_LEATHER, 1, 0, PROPERTY_VERYFAST | PROPERTY_MAGIC);
-	create(&quot;water walking boots&quot;, 50,     20, MATERIAL_LEATHER, 1, 0, PROPERTY_WATERWALKING | PROPERTY_MAGIC);
-
-	// these appearances are constant
+	/* boots */
+	create(&quot;low boots&quot;, 8, 10, MATERIAL_LEATHER, 1, 0, 0);
+	create(&quot;high boots&quot;, 12, 20, MATERIAL_LEATHER, 2, 0, 0);
+	create(&quot;iron shoes&quot;, 16, 50, MATERIAL_IRON, 2, 0, 0);
+	create(&quot;elven boots&quot;, 8, 15, MATERIAL_LEATHER, 1, 0, PROPERTY_STEALTH | PROPERTY_MAGIC);
+	create(&quot;kicking boots&quot;, 8, 15, MATERIAL_IRON, 1, 0, PROPERTY_KICKING | PROPERTY_MAGIC);
+	create(&quot;fumble boots&quot;, 30, 20, MATERIAL_LEATHER, 1, 0, PROPERTY_FUMBLING | PROPERTY_MAGIC);
+	create(&quot;levitation boots&quot;, 30, 15, MATERIAL_LEATHER, 1, 0, PROPERTY_LEVITATION | PROPERTY_MAGIC);
+	create(&quot;jumping boots&quot;, 50, 20, MATERIAL_LEATHER, 1, 0, PROPERTY_JUMPING | PROPERTY_MAGIC);
+	create(&quot;speed boots&quot;, 50, 20, MATERIAL_LEATHER, 1, 0, PROPERTY_VERYFAST | PROPERTY_MAGIC);
+	create(&quot;water walking boots&quot;, 50, 20, MATERIAL_LEATHER, 1, 0, PROPERTY_WATERWALKING | PROPERTY_MAGIC);
+
+	/* aliases */
 	addToMap(&quot;walking shoes&quot;, boots[&quot;low boots&quot;]);
 	addToMap(&quot;jackboots&quot;, boots[&quot;high boots&quot;]);
 	addToMap(&quot;hard shoes&quot;, boots[&quot;iron shoes&quot;]);
 
-	// TODO: random appearances:
+	/* TODO: random appearances: */
 	// buckled, combat, hiking, jungle, riding, snow, mud
 }</diff>
      <filename>Data/Boots.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -6,12 +6,15 @@
 #include &quot;Armor.h&quot;
 
 namespace data {
+
 	class Boots : public Armor {
 	public:
 		static std::map&lt;std::string, Boots *&gt; boots;
 
 		Boots(const std::string &amp;name, int cost, int weight, int material, int ac, int mc, unsigned long long properties);
-		virtual ~Boots() {}
+
+		virtual ~Boots() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Boots.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Bow *&gt; bows;
 
 		Bow(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Bow() {}
+
+		virtual ~Bow() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Bow.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, BroadSword *&gt; broad_swords;
 
 		BroadSword(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~BroadSword() {}
+
+		virtual ~BroadSword() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/BroadSword.h</filename>
    </modified>
    <modified>
      <diff>@@ -19,27 +19,27 @@ void Cloak::create(const string &amp;name, int cost, int weight, int material, int a
 }
 
 void Cloak::init() {
-	//     name                       cost  weight  material          ac mc properties
-	create(&quot;mummy wrapping&quot;,             2,      3, MATERIAL_CLOTH,    0, 1, PROPERTY_VISIBLE);
-	create(&quot;orcish cloak&quot;,              40,     10, MATERIAL_CLOTH,    0, 2, 0);
-	create(&quot;dwarvish cloak&quot;,            50,     10, MATERIAL_CLOTH,    0, 2, 0);
-	create(&quot;leather cloak&quot;,             40,     15, MATERIAL_LEATHER,  1, 1, 0);
-	create(&quot;oilskin cloak&quot;,             50,     10, MATERIAL_CLOTH,    1, 3, PROPERTY_SLIPPERY);
-	create(&quot;alchemy smock&quot;,             50,     10, MATERIAL_CLOTH,    1, 1, PROPERTY_POISON | PROPERTY_ACID | PROPERTY_MAGIC);
-	create(&quot;elven cloak&quot;,               60,     10, MATERIAL_CLOTH,    1, 3, PROPERTY_STEALTH | PROPERTY_MAGIC);
-	create(&quot;robe&quot;,                      50,     15, MATERIAL_CLOTH,    2, 3, PROPERTY_CASTING_BONUS | PROPERTY_MAGIC);
-	create(&quot;cloak of magic resistance&quot;, 60,     10, MATERIAL_CLOTH,    1, 3, PROPERTY_MAGICRES | PROPERTY_MAGIC);
-	create(&quot;cloak of displacement&quot;,     50,     10, MATERIAL_CLOTH,    1, 2, PROPERTY_DISPLACEMENT | PROPERTY_MAGIC);
-	create(&quot;cloak of invisibility&quot;,     60,     10, MATERIAL_CLOTH,    1, 2, PROPERTY_INVISIBLE | PROPERTY_MAGIC);
-	create(&quot;cloak of protection&quot;,       50,     10, MATERIAL_CLOTH,    3, 3, PROPERTY_MAGIC);
-
-	// constant appearances
+	/* cloaks */
+	create(&quot;mummy wrapping&quot;, 2, 3, MATERIAL_CLOTH, 0, 1, PROPERTY_VISIBLE);
+	create(&quot;orcish cloak&quot;, 40, 10, MATERIAL_CLOTH, 0, 2, 0);
+	create(&quot;dwarvish cloak&quot;, 50, 10, MATERIAL_CLOTH, 0, 2, 0);
+	create(&quot;leather cloak&quot;, 40, 15, MATERIAL_LEATHER, 1, 1, 0);
+	create(&quot;oilskin cloak&quot;, 50, 10, MATERIAL_CLOTH, 1, 3, PROPERTY_SLIPPERY);
+	create(&quot;alchemy smock&quot;, 50, 10, MATERIAL_CLOTH, 1, 1, PROPERTY_POISON | PROPERTY_ACID | PROPERTY_MAGIC);
+	create(&quot;elven cloak&quot;, 60, 10, MATERIAL_CLOTH, 1, 3, PROPERTY_STEALTH | PROPERTY_MAGIC);
+	create(&quot;robe&quot;, 50, 15, MATERIAL_CLOTH, 2, 3, PROPERTY_CASTING_BONUS | PROPERTY_MAGIC);
+	create(&quot;cloak of magic resistance&quot;, 60, 10, MATERIAL_CLOTH, 1, 3, PROPERTY_MAGICRES | PROPERTY_MAGIC);
+	create(&quot;cloak of displacement&quot;, 50, 10, MATERIAL_CLOTH, 1, 2, PROPERTY_DISPLACEMENT | PROPERTY_MAGIC);
+	create(&quot;cloak of invisibility&quot;, 60, 10, MATERIAL_CLOTH, 1, 2, PROPERTY_INVISIBLE | PROPERTY_MAGIC);
+	create(&quot;cloak of protection&quot;, 50, 10, MATERIAL_CLOTH, 3, 3, PROPERTY_MAGIC);
+
+	/* aliases */
 	addToMap(&quot;coarse mantelet&quot;, cloaks[&quot;orcish cloak&quot;]);
 	addToMap(&quot;hooded cloak&quot;, cloaks[&quot;dwarvish cloak&quot;]);
 	addToMap(&quot;slippery cloak&quot;, cloaks[&quot;oilskin cloak&quot;]);
 	addToMap(&quot;apron&quot;, cloaks[&quot;alchemy smock&quot;]);
 	addToMap(&quot;faded pall&quot;, cloaks[&quot;elven cloak&quot;]);
 
-	// TODO: randomized appearance
+	/* TODO: randomized appearance */
 	// tattered cape, ornamental cope, opera cloak, piece of cloth
 }</diff>
      <filename>Data/Cloak.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -6,12 +6,15 @@
 #include &quot;Armor.h&quot;
 
 namespace data {
+
 	class Cloak : public Armor {
 	public:
 		static std::map&lt;std::string, Cloak *&gt; cloaks;
 
 		Cloak(const std::string &amp;name, int cost, int weight, int material, int ac, int mc, unsigned long long properties);
-		virtual ~Cloak() {}
+
+		virtual ~Cloak() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Cloak.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Club *&gt; clubs;
 
 		Club(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Club() {}
+
+		virtual ~Club() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Club.h</filename>
    </modified>
    <modified>
      <diff>@@ -7,13 +7,16 @@
 #include &quot;Monster.h&quot;
 
 namespace data {
+
 	class Corpse : public Food {
 	public:
 		static std::map&lt;std::string, Corpse *&gt; corpses;
 		const int resistance_confer_probability;
 
 		Corpse(const std::string &amp;name, int cost, int weight, int material, unsigned long long properties, int nutrition, int eat_time, int eat_effects, int resistance_confer_probability);
-		~Corpse() {}
+
+		~Corpse() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Corpse.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Crossbow *&gt; crossbows;
 
 		Crossbow(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Crossbow() {}
+
+		virtual ~Crossbow() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Crossbow.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Dagger *&gt; daggers;
 
 		Dagger(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Dagger() {}
+
+		virtual ~Dagger() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Dagger.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Dart *&gt; darts;
 
 		Dart(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Dart() {}
+
+		virtual ~Dart() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Dart.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Flail *&gt; flails;
 
 		Flail(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Flail() {}
+
+		virtual ~Flail() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Flail.h</filename>
    </modified>
    <modified>
      <diff>@@ -30,7 +30,7 @@ void Food::init() {
 	create(&quot;meat stick&quot;, 5, 1, MATERIAL_FLESH, 0, 5, 1, 0);
 	create(&quot;egg&quot;, 9, 15, MATERIAL_FLESH, 0, 80, 1, EAT_EFFECT_VEGAN);
 	create(&quot;tripe ration&quot;, 15, 10, MATERIAL_FLESH, 0, 200, 2, 0);
-	create(&quot;huge chunk of meat&quot;, 105, 400, MATERIAL_FLESH, 0, 2000, 20 , 0);
+	create(&quot;huge chunk of meat&quot;, 105, 400, MATERIAL_FLESH, 0, 2000, 20, 0);
 	create(&quot;kelp frond&quot;, 6, 1, MATERIAL_VEGGY, 0, 30, 1, EAT_EFFECT_VEGAN | EAT_EFFECT_VEGETARIAN);
 	create(&quot;eucalyptus leaf&quot;, 6, 1, MATERIAL_VEGGY, 0, 30, 1, EAT_EFFECT_VEGAN | EAT_EFFECT_VEGETARIAN | EAT_EFFECT_CURE_SICKNESS);
 	create(&quot;clove of garlic&quot;, 7, 1, MATERIAL_VEGGY, 0, 40, 1, EAT_EFFECT_VEGAN | EAT_EFFECT_VEGETARIAN);</diff>
      <filename>Data/Food.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -38,6 +38,7 @@
 #define EAT_EFFECT_ESP              (1 &lt;&lt; 30)
 
 namespace data {
+
 	class Food : public Item {
 	public:
 		static std::map&lt;std::string, Food *&gt; foods;
@@ -46,7 +47,9 @@ namespace data {
 		const int eat_effects;
 
 		Food(const std::string &amp;name, int cost, int weight, int material, unsigned long long properties, int nutrition, int eat_time, int eat_effects);
-		~Food() {}
+
+		~Food() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Food.h</filename>
    </modified>
    <modified>
      <diff>@@ -19,8 +19,9 @@ void Gloves::create(const string &amp;name, int cost, int weight, int material, int
 }
 
 void Gloves::init() {
-	create(&quot;leather gloves&quot;,          8, 10, MATERIAL_LEATHER, 1, 0, 0);
+	/* gloves */
+	create(&quot;leather gloves&quot;, 8, 10, MATERIAL_LEATHER, 1, 0, 0);
 	create(&quot;gauntlets of dexterity&quot;, 50, 10, MATERIAL_LEATHER, 1, 0, PROPERTY_DEXTERITY);
-	create(&quot;gauntlets of power&quot;,     50, 30, MATERIAL_IRON,    1, 0, PROPERTY_STRENGTH);
-	create(&quot;gauntlets of fumbling&quot;,  50, 10, MATERIAL_LEATHER, 1, 0, PROPERTY_FUMBLING);
+	create(&quot;gauntlets of power&quot;, 50, 30, MATERIAL_IRON, 1, 0, PROPERTY_STRENGTH);
+	create(&quot;gauntlets of fumbling&quot;, 50, 10, MATERIAL_LEATHER, 1, 0, PROPERTY_FUMBLING);
 }</diff>
      <filename>Data/Gloves.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -6,12 +6,15 @@
 #include &quot;Armor.h&quot;
 
 namespace data {
+
 	class Gloves : public Armor {
 	public:
 		static std::map&lt;std::string, Gloves *&gt; gloves;
 
 		Gloves(const std::string &amp;name, int cost, int weight, int material, int ac, int mc, unsigned long long properties);
-		~Gloves() {}
+
+		~Gloves() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Gloves.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Hammer *&gt; hammers;
 
 		Hammer(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Hammer() {}
+
+		virtual ~Hammer() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Hammer.h</filename>
    </modified>
    <modified>
      <diff>@@ -19,6 +19,7 @@ void Helmet::create(const string &amp;name, int cost, int weight, int material, int
 }
 
 void Helmet::init() {
+	/* helms */
 	create(&quot;helm of brilliance&quot;, 50, 50, MATERIAL_IRON, 1, 0, PROPERTY_MAGIC | PROPERTY_BRILLIANCE);
 	create(&quot;helm of opposite alignment&quot;, 50, 50, MATERIAL_IRON, 1, 0, PROPERTY_MAGIC);
 	create(&quot;dunce cap&quot;, 1, 4, MATERIAL_CLOTH, 0, 0, PROPERTY_MAGIC | PROPERTY_STUPIDITY);
@@ -32,6 +33,7 @@ void Helmet::init() {
 	create(&quot;fedora&quot;, 1, 3, MATERIAL_CLOTH, 0, 0, 0);
 	create(&quot;orcish helm&quot;, 10, 30, MATERIAL_IRON, 1, 0, 0);
 
+	/* aliases */
 	addToMap(&quot;iron skull cap&quot;, helmets[&quot;orcish helm&quot;]);
 	addToMap(&quot;conical hat&quot;, helmets[&quot;cornuthaum&quot;]);
 	addToMap(&quot;leather hat&quot;, helmets[&quot;elven leather helm&quot;]);</diff>
      <filename>Data/Helmet.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -6,12 +6,15 @@
 #include &quot;Armor.h&quot;
 
 namespace data {
+
 	class Helmet : public Armor {
 	public:
 		static std::map&lt;std::string, Helmet *&gt; helmets;
 
 		Helmet(const std::string &amp;name, int cost, int weight, int material, int ac, int mc, unsigned long long properties);
-		virtual ~Helmet() {}
+
+		virtual ~Helmet() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Helmet.h</filename>
    </modified>
    <modified>
      <diff>@@ -32,6 +32,7 @@
 #define MATERIALS_METALLIC   MATERIAL_METAL | MATERIAL_IRON | MATERIAL_COPPER | MATERIAL_SILVER | MATERIAL_GOLD | MATERIAL_PLATINUM | MATERIAL_MITHRIL
 
 namespace data {
+
 	class Item {
 	public:
 		static std::map&lt;std::string, Item *&gt; items;
@@ -43,7 +44,9 @@ namespace data {
 		const unsigned long long properties;
 
 		Item(const std::string &amp;name, int base_cost, int weight, char item_class, int material, unsigned long long properties);
-		virtual ~Item() {}
+
+		virtual ~Item() {
+		}
 
 		static void init();
 		static void destroy();</diff>
      <filename>Data/Item.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Javelin *&gt; javelins;
 
 		Javelin(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Javelin() {}
+
+		virtual ~Javelin() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Javelin.h</filename>
    </modified>
    <modified>
      <diff>@@ -6,7 +6,7 @@ using namespace std;
 /* initialize static variables */
 map&lt;string, Key *&gt; Key::keys;
 
-Key::Key(const string &amp;name, int cost, int weight, int material, unsigned long long properties) : Tool(name, cost, weight,  material, properties) {
+Key::Key(const string &amp;name, int cost, int weight, int material, unsigned long long properties) : Tool(name, cost, weight, material, properties) {
 }
 
 void Key::addToMap(const string &amp;name, Key *key) {
@@ -19,11 +19,12 @@ void Key::create(const string &amp;name, int cost, int weight, int material, unsigne
 }
 
 void Key::init() {
+	/* keys */
 	create(&quot;Master Key of Thievery&quot;, 3500, 3, MATERIAL_METAL, PROPERTY_ARTIFACT);
 	create(&quot;skeleton key&quot;, 10, 3, MATERIAL_METAL, 0);
 	create(&quot;lock pick&quot;, 20, 4, MATERIAL_METAL, 0);
 	create(&quot;credit card&quot;, 10, 1, MATERIAL_METAL, 0);
 
-	/* constant appearances */
+	/* aliases */
 	addToMap(&quot;key&quot;, keys[&quot;skeleton key&quot;]);
 }</diff>
      <filename>Data/Key.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -6,12 +6,15 @@
 #include &quot;Tool.h&quot;
 
 namespace data {
+
 	class Key : public Tool {
 	public:
 		static std::map&lt;std::string, Key *&gt; keys;
 
 		Key(const std::string &amp;name, int cost, int weight, int material, unsigned long long properties);
-		~Key() {}
+
+		~Key() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Key.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Knife *&gt; knives;
 
 		Knife(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Knife() {}
+
+		virtual ~Knife() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Knife.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Lance *&gt; lances;
 
 		Lance(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Lance() {}
+
+		virtual ~Lance() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Lance.h</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@ int Level::match(Level l) {
 	//assume symbols is rectangular and has at least one row vector
 	for (int row = 0; row &lt; symbols.size(); row++)
 		for (int col = 0; col &lt; symbols[0].size(); col++) {
-			char bullet = l.getDungeonSymbol(Point(row+MAP_ROW_BEGIN, col+MAP_COL_BEGIN));
+			char bullet = l.getDungeonSymbol(Point(row + MAP_ROW_BEGIN, col + MAP_COL_BEGIN));
 			char target = symbols[row][col];
 			if (bullet == UNKNOWN_TILE || bullet == UNKNOWN_TILE_UNPASSABLE || bullet == UNKNOWN_TILE_DIAGONALLY_UNPASSABLE) {
 				skipped++;
@@ -24,11 +24,11 @@ int Level::match(Level l) {
 			}
 			//unexpected wall; walls can't be created, so it's not a match
 			if ((bullet == VERTICAL_WALL &amp;&amp; target != VERTICAL_WALL) ||
-					(bullet == HORIZONTAL_WALL &amp;&amp; target != HORIZONTAL_WALL))
+				(bullet == HORIZONTAL_WALL &amp;&amp; target != HORIZONTAL_WALL))
 				return MATCH_IMPOSSIBLE;
 			//stairs mismatch; any difference means no match
 			if ((bullet == STAIRS_DOWN ^ target == STAIRS_DOWN) ||
-					(bullet == STAIRS_UP ^ target == STAIRS_UP))
+				(bullet == STAIRS_UP ^ target == STAIRS_UP))
 				return MATCH_IMPOSSIBLE;
 			//unexpected lava; lava cannot be created, so it's not a match
 			if (bullet == LAVA &amp;&amp; target != LAVA)
@@ -39,7 +39,7 @@ int Level::match(Level l) {
 	int checked = (symbols.size() * symbols[0].size() - skipped);
 	if (checked &lt; 10) //need moar samples
 		return MATCH_UNCERTAIN;
-	return (matches*100) / checked;
+	return (matches * 100) / checked;
 }
 
 void Level::init() {</diff>
      <filename>Data/Level.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -10,6 +10,7 @@
 #define MATCH_UNCERTAIN -1
 
 namespace data {
+
 	class Level {
 	public:
 		static std::map&lt;std::string, Level *&gt; levels;
@@ -21,7 +22,8 @@ namespace data {
 		const int min_depth;
 		const int max_depth;
 
-		Level(const std::string &amp;name, const std::vector&lt; std::vector&lt;char&gt; &gt; &amp;symbols, int branch, int min_depth, int max_depth) {}
+		Level(const std::string &amp;name, const std::vector&lt; std::vector&lt;char&gt; &gt; &amp;symbols, int branch, int min_depth, int max_depth) {
+		}
 		int match(Level level);
 	};
 }</diff>
      <filename>Data/Level.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, LongSword *&gt; long_swords;
 
 		LongSword(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~LongSword() {}
+
+		virtual ~LongSword() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/LongSword.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Mace *&gt; maces;
 
 		Mace(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Mace() {}
+
+		virtual ~Mace() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Mace.h</filename>
    </modified>
    <modified>
      <diff>@@ -7,7 +7,9 @@ using namespace std;
 int Monster::saiph_difficulty_min = 0;
 int Monster::saiph_difficulty_max = 0;
 bool Monster::initialized = false;
-int Monster::monster_symbol_mapping[UCHAR_MAX + 1][INVERSE_BOLD_WHITE + 1] = {{0}};
+int Monster::monster_symbol_mapping[UCHAR_MAX + 1][INVERSE_BOLD_WHITE + 1] = {
+	{0}
+};
 vector&lt;Monster *&gt; Monster::monsters;
 map&lt;string, int&gt; Monster::monster_name_mapping;
 
@@ -56,380 +58,380 @@ void Monster::init() {
 			monster_symbol_mapping[a][b] = -1;
 	}
 	/* push all monster data to vector */
-	monsters.push_back(new Monster(&quot;giant ant&quot;, S_ANT, 2, 18, 3, 0, 0, (G_GENO|G_SGROUP|3), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 10, 0, MS_SILENT, MZ_TINY, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_CARNIVORE, M2_HOSTILE, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;killer bee&quot;, S_ANT, 1, 18, -1, 0, 0, (G_GENO|G_LGROUP|2), Attack(AT_STNG, AD_DRST, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 1, 5, 0, MS_BUZZ, MZ_TINY, MR_POISON, MR_POISON, M1_ANIMAL|M1_FLY|M1_NOHANDS|M1_POIS, M2_HOSTILE|M2_FEMALE, 0, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;soldier ant&quot;, S_ANT, 3, 18, 3, 0, 0, (G_GENO|G_SGROUP|2), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(AT_STNG, AD_DRST, 3, 4), Attack(), Attack(), Attack(), Attack(), 20, 5, 0, MS_SILENT, MZ_TINY, MR_POISON, MR_POISON, M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_POIS|M1_CARNIVORE, M2_HOSTILE, 0, BLUE));
-	monsters.push_back(new Monster(&quot;fire ant&quot;, S_ANT, 3, 18, 3, 10, 0, (G_GENO|G_SGROUP|1), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(AT_BITE, AD_FIRE, 2, 4), Attack(), Attack(), Attack(), Attack(), 30, 10, 0, MS_SILENT, MZ_TINY, MR_FIRE, MR_FIRE, M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;giant beetle&quot;, S_ANT, 5, 6, 4, 0, 0, (G_GENO|3), Attack(AT_BITE, AD_PHYS, 3, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 10, 0, MS_SILENT, MZ_LARGE, MR_POISON, MR_POISON, M1_ANIMAL|M1_NOHANDS|M1_POIS|M1_CARNIVORE, M2_HOSTILE, 0, BLACK));
-	monsters.push_back(new Monster(&quot;queen bee&quot;, S_ANT, 9, 24, -4, 0, 0, (G_GENO|G_NOGEN), Attack(AT_STNG, AD_DRST, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 1, 5, 0, MS_BUZZ, MZ_TINY, MR_POISON, MR_POISON, M1_ANIMAL|M1_FLY|M1_NOHANDS|M1_OVIPAROUS|M1_POIS, M2_HOSTILE|M2_FEMALE|M2_PRINCE, 0, MAGENTA));
-	monsters.push_back(new Monster(&quot;acid blob&quot;, S_BLOB, 1, 3, 8, 0, 0, (G_GENO|2), Attack(AT_NONE, AD_ACID, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 10, 0, MS_SILENT, MZ_TINY, MR_SLEEP|MR_POISON|MR_ACID|MR_STONE, MR_STONE, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_ACID, M2_WANDER|M2_NEUTER, 0, GREEN));
-	monsters.push_back(new Monster(&quot;quivering blob&quot;, S_BLOB, 5, 1, 8, 0, 0, (G_GENO|2), Attack(AT_TUCH, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 200, 100, 0, MS_SILENT, MZ_SMALL, MR_SLEEP|MR_POISON, MR_POISON, M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS, M2_WANDER|M2_HOSTILE|M2_NEUTER, 0, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;gelatinous cube&quot;, S_BLOB, 6, 6, 8, 0, 0, (G_GENO|2), Attack(AT_TUCH, AD_PLYS, 2, 4), Attack(AT_NONE, AD_PLYS, 1, 4), Attack(), Attack(), Attack(), Attack(), 600, 150, 0, MS_SILENT, MZ_LARGE, MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON|MR_ACID|MR_STONE, MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP, M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_OMNIVORE|M1_ACID, M2_WANDER|M2_HOSTILE|M2_NEUTER, 0, CYAN));
-	monsters.push_back(new Monster(&quot;chickatrice&quot;, S_COCKATRICE, 4, 4, 8, 30, 0, (G_GENO|G_SGROUP|1), Attack(AT_BITE, AD_PHYS, 1, 2), Attack(AT_TUCH, AD_STON, 0, 0), Attack(AT_NONE, AD_STON, 0, 0), Attack(), Attack(), Attack(), 10, 10, 0, MS_HISS, MZ_TINY, MR_POISON|MR_STONE, MR_POISON|MR_STONE, M1_ANIMAL|M1_NOHANDS|M1_OMNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;cockatrice&quot;, S_COCKATRICE, 5, 6, 6, 30, 0, (G_GENO|5), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(AT_TUCH, AD_STON, 0, 0), Attack(AT_NONE, AD_STON, 0, 0), Attack(), Attack(), Attack(), 30, 30, 0, MS_HISS, MZ_SMALL, MR_POISON|MR_STONE, MR_POISON|MR_STONE, M1_ANIMAL|M1_NOHANDS|M1_OMNIVORE|M1_OVIPAROUS, M2_HOSTILE, M3_INFRAVISIBLE, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;pyrolisk&quot;, S_COCKATRICE, 6, 6, 6, 30, 0, (G_GENO|1), Attack(AT_GAZE, AD_FIRE, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 30, 0, MS_HISS, MZ_SMALL, MR_POISON|MR_FIRE, MR_POISON|MR_FIRE, M1_ANIMAL|M1_NOHANDS|M1_OMNIVORE|M1_OVIPAROUS, M2_HOSTILE, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;jackal&quot;, S_DOG, 0, 12, 7, 0, 0, (G_GENO|G_SGROUP|3), Attack(AT_BITE, AD_PHYS, 1, 2), Attack(), Attack(), Attack(), Attack(), Attack(), 300, 250, 0, MS_BARK, MZ_SMALL, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;fox&quot;, S_DOG, 0, 15, 7, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 300, 250, 0, MS_BARK, MZ_SMALL, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;coyote&quot;, S_DOG, 1, 12, 7, 0, 0, (G_GENO|G_SGROUP|1), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 300, 250, 0, MS_BARK, MZ_SMALL, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;werejackal&quot;, S_DOG, 2, 12, 7, 10, -7, (G_NOGEN|G_NOCORPSE), Attack(AT_BITE, AD_WERE, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 300, 250, 0, MS_BARK, MZ_SMALL, MR_POISON, 0, M1_NOHANDS|M1_POIS|M1_REGEN|M1_CARNIVORE, M2_NOPOLY|M2_WERE|M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;little dog&quot;, S_DOG, 2, 18, 6, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 150, 150, 0, MS_BARK, MZ_SMALL, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_DOMESTIC, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;dog&quot;, S_DOG, 4, 16, 5, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 200, 0, MS_BARK, MZ_MEDIUM, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_DOMESTIC, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;large dog&quot;, S_DOG, 6, 15, 4, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 250, 0, MS_BARK, MZ_MEDIUM, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_STRONG|M2_DOMESTIC, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;dingo&quot;, S_DOG, 4, 16, 5, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 200, 0, MS_BARK, MZ_MEDIUM, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;wolf&quot;, S_DOG, 5, 12, 4, 0, 0, (G_GENO|G_SGROUP|2), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 250, 0, MS_BARK, MZ_MEDIUM, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;werewolf&quot;, S_DOG, 5, 12, 4, 20, -7, (G_NOGEN|G_NOCORPSE), Attack(AT_BITE, AD_WERE, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 250, 0, MS_BARK, MZ_MEDIUM, MR_POISON, 0, M1_NOHANDS|M1_POIS|M1_REGEN|M1_CARNIVORE, M2_NOPOLY|M2_WERE|M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;warg&quot;, S_DOG, 7, 12, 4, 0, -5, (G_GENO|G_SGROUP|2), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 850, 350, 0, MS_BARK, MZ_MEDIUM, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;winter wolf cub&quot;, S_DOG, 5, 12, 4, 0, -5, (G_NOHELL|G_GENO|G_SGROUP|2), Attack(AT_BITE, AD_PHYS, 1, 8), Attack(AT_BREA, AD_COLD, 1, 8), Attack(), Attack(), Attack(), Attack(), 250, 200, 0, MS_BARK, MZ_SMALL, MR_COLD, MR_COLD, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, 0, CYAN));
-	monsters.push_back(new Monster(&quot;winter wolf&quot;, S_DOG, 7, 12, 4, 20, 0, (G_NOHELL|G_GENO|1), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(AT_BREA, AD_COLD, 2, 6), Attack(), Attack(), Attack(), Attack(), 700, 300, 0, MS_BARK, MZ_LARGE, MR_COLD, MR_COLD, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, 0, CYAN));
-	monsters.push_back(new Monster(&quot;hell hound pup&quot;, S_DOG, 7, 12, 4, 20, -5, (G_HELL|G_GENO|G_SGROUP|1), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(AT_BREA, AD_FIRE, 2, 6), Attack(), Attack(), Attack(), Attack(), 200, 200, 0, MS_BARK, MZ_SMALL, MR_FIRE, MR_FIRE, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;hell hound&quot;, S_DOG, 12, 14, 2, 20, 0, (G_HELL|G_GENO|1), Attack(AT_BITE, AD_PHYS, 3, 6), Attack(AT_BREA, AD_FIRE, 3, 6), Attack(), Attack(), Attack(), Attack(), 600, 300, 0, MS_BARK, MZ_MEDIUM, MR_FIRE, MR_FIRE, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;gas spore&quot;, S_EYE, 1, 3, 10, 0, 0, (G_NOCORPSE|G_GENO|1), Attack(AT_BOOM, AD_PHYS, 4, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 10, 0, MS_SILENT, MZ_SMALL, 0, 0, M1_FLY|M1_BREATHLESS|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS, M2_HOSTILE|M2_NEUTER, 0, WHITE));
-	monsters.push_back(new Monster(&quot;floating eye&quot;, S_EYE, 2, 1, 9, 10, 0, (G_GENO|5), Attack(AT_NONE, AD_PLYS, 0, 70), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 10, 0, MS_SILENT, MZ_SMALL, 0, 0, M1_FLY|M1_AMPHIBIOUS|M1_NOLIMBS|M1_NOHEAD|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, BLUE));
-	monsters.push_back(new Monster(&quot;freezing sphere&quot;, S_EYE, 6, 13, 4, 0, 0, (G_NOCORPSE|G_NOHELL|G_GENO|2), Attack(AT_EXPL, AD_COLD, 4, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 10, 0, MS_SILENT, MZ_SMALL, MR_COLD, MR_COLD, M1_FLY|M1_BREATHLESS|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;flaming sphere&quot;, S_EYE, 6, 13, 4, 0, 0, (G_NOCORPSE|G_GENO|2), Attack(AT_EXPL, AD_FIRE, 4, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 10, 0, MS_SILENT, MZ_SMALL, MR_FIRE, MR_FIRE, M1_FLY|M1_BREATHLESS|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;shocking sphere&quot;, S_EYE, 6, 13, 4, 0, 0, (G_NOCORPSE|G_GENO|2), Attack(AT_EXPL, AD_ELEC, 4, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 10, 0, MS_SILENT, MZ_SMALL, MR_ELEC, MR_ELEC, M1_FLY|M1_BREATHLESS|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, BOLD_BLUE));
-	monsters.push_back(new Monster(&quot;kitten&quot;, S_FELINE, 2, 18, 6, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 150, 150, 0, MS_MEW, MZ_SMALL, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_WANDER|M2_DOMESTIC, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;housecat&quot;, S_FELINE, 4, 16, 5, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 200, 200, 0, MS_MEW, MZ_SMALL, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_DOMESTIC, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;jaguar&quot;, S_FELINE, 4, 15, 6, 0, 0, (G_GENO|2), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_BITE, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), 600, 300, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;lynx&quot;, S_FELINE, 5, 15, 6, 0, 0, (G_GENO|1), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_BITE, AD_PHYS, 1, 10), Attack(), Attack(), Attack(), 600, 300, 0, MS_GROWL, MZ_SMALL, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CYAN));
-	monsters.push_back(new Monster(&quot;panther&quot;, S_FELINE, 5, 15, 6, 0, 0, (G_GENO|1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_BITE, AD_PHYS, 1, 10), Attack(), Attack(), Attack(), 600, 300, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, BLACK));
-	monsters.push_back(new Monster(&quot;large cat&quot;, S_FELINE, 6, 15, 4, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 250, 250, 0, MS_MEW, MZ_SMALL, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_STRONG|M2_DOMESTIC, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;tiger&quot;, S_FELINE, 6, 12, 6, 0, 0, (G_GENO|2), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_BITE, AD_PHYS, 1, 10), Attack(), Attack(), Attack(), 600, 300, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;gremlin&quot;, S_GREMLIN, 5, 12, 2, 25, -9, (G_GENO|2), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_CURS, 0, 0), Attack(), Attack(), 100, 20, 0, MS_LAUGH, MZ_SMALL, MR_POISON, MR_POISON, M1_SWIM|M1_HUMANOID|M1_POIS, M2_STALK, M3_INFRAVISIBLE, GREEN));
-	monsters.push_back(new Monster(&quot;gargoyle&quot;, S_GREMLIN, 6, 10, -4, 0, -9, (G_GENO|2), Attack(AT_CLAW, AD_PHYS, 2, 6), Attack(AT_CLAW, AD_PHYS, 2, 6), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), 1000, 200, 0, MS_GRUNT, MZ_HUMAN, MR_STONE, MR_STONE, M1_HUMANOID|M1_THICK_HIDE|M1_BREATHLESS, M2_HOSTILE|M2_STRONG, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;winged gargoyle&quot;, S_GREMLIN, 9, 15, -2, 0, -12, (G_GENO|1), Attack(AT_CLAW, AD_PHYS, 3, 6), Attack(AT_CLAW, AD_PHYS, 3, 6), Attack(AT_BITE, AD_PHYS, 3, 4), Attack(), Attack(), Attack(), 1200, 300, 0, MS_GRUNT, MZ_HUMAN, MR_STONE, MR_STONE, M1_FLY|M1_HUMANOID|M1_THICK_HIDE|M1_BREATHLESS|M1_OVIPAROUS, M2_LORD|M2_HOSTILE|M2_STRONG|M2_MAGIC, 0, MAGENTA));
-	monsters.push_back(new Monster(&quot;hobbit&quot;, S_HUMANOID, 1, 9, 10, 0, 6, (G_GENO|2), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 200, 0, MS_HUMANOID, MZ_SMALL, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, GREEN));
-	monsters.push_back(new Monster(&quot;dwarf&quot;, S_HUMANOID, 2, 6, 10, 10, 4, (G_GENO|3), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 900, 300, 0, MS_HUMANOID, MZ_HUMAN, 0, 0, M1_TUNNEL|M1_NEEDPICK|M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_DWARF|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;bugbear&quot;, S_HUMANOID, 3, 9, 5, 0, -6, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1250, 250, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, YELLOW));
-	monsters.push_back(new Monster(&quot;dwarf lord&quot;, S_HUMANOID, 4, 6, 10, 10, 5, (G_GENO|2), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), 900, 300, 0, MS_HUMANOID, MZ_HUMAN, 0, 0, M1_TUNNEL|M1_NEEDPICK|M1_HUMANOID|M1_OMNIVORE, M2_DWARF|M2_STRONG|M2_LORD|M2_MALE|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, BLUE));
-	monsters.push_back(new Monster(&quot;dwarf king&quot;, S_HUMANOID, 6, 6, 10, 20, 6, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), 900, 300, 0, MS_HUMANOID, MZ_HUMAN, 0, 0, M1_TUNNEL|M1_NEEDPICK|M1_HUMANOID|M1_OMNIVORE, M2_DWARF|M2_STRONG|M2_PRINCE|M2_MALE|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;mind flayer&quot;, S_HUMANOID, 9, 12, 5, 90, -8, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 1, 4), Attack(AT_TENT, AD_DRIN, 2, 1), Attack(AT_TENT, AD_DRIN, 2, 1), Attack(AT_TENT, AD_DRIN, 2, 1), Attack(), Attack(), 1450, 400, 0, MS_HISS, MZ_HUMAN, 0, 0, M1_HUMANOID|M1_FLY|M1_SEE_INVIS|M1_OMNIVORE, M2_HOSTILE|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;master mind flayer&quot;, S_HUMANOID, 13, 12, 0, 90, -8, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_TENT, AD_DRIN, 2, 1), Attack(AT_TENT, AD_DRIN, 2, 1), Attack(AT_TENT, AD_DRIN, 2, 1), Attack(AT_TENT, AD_DRIN, 2, 1), Attack(AT_TENT, AD_DRIN, 2, 1), 1450, 400, 0, MS_HISS, MZ_HUMAN, 0, 0, M1_HUMANOID|M1_FLY|M1_SEE_INVIS|M1_OMNIVORE, M2_HOSTILE|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;manes&quot;, S_IMP, 1, 3, 7, 0, -7, (G_GENO|G_LGROUP|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), 100, 100, 0, MS_SILENT, MZ_SMALL, MR_SLEEP|MR_POISON, 0, M1_POIS, M2_HOSTILE|M2_STALK, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;homunculus&quot;, S_IMP, 2, 12, 6, 10, -7, (G_GENO|2), Attack(AT_BITE, AD_SLEE, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 60, 100, 0, MS_SILENT, MZ_TINY, MR_SLEEP|MR_POISON, MR_SLEEP|MR_POISON, M1_FLY|M1_POIS, M2_STALK, M3_INFRAVISIBLE|M3_INFRAVISION, GREEN));
-	monsters.push_back(new Monster(&quot;imp&quot;, S_IMP, 3, 12, 2, 20, -7, (G_GENO|1), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 20, 10, 0, MS_CUSS, MZ_TINY, 0, 0, M1_REGEN, M2_WANDER|M2_STALK, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;lemure&quot;, S_IMP, 3, 3, 7, 0, -7, (G_HELL|G_GENO|G_LGROUP|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 150, 100, 0, MS_SILENT, MZ_MEDIUM, MR_SLEEP|MR_POISON, MR_SLEEP, M1_POIS|M1_REGEN, M2_HOSTILE|M2_WANDER|M2_STALK|M2_NEUTER, M3_INFRAVISIBLE|M3_INFRAVISION, YELLOW));
-	monsters.push_back(new Monster(&quot;quasit&quot;, S_IMP, 3, 15, 2, 20, -7, (G_GENO|2), Attack(AT_CLAW, AD_DRDX, 1, 2), Attack(AT_CLAW, AD_DRDX, 1, 2), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), 200, 200, 0, MS_SILENT, MZ_SMALL, MR_POISON, MR_POISON, M1_REGEN, M2_STALK, M3_INFRAVISIBLE|M3_INFRAVISION, BLUE));
-	monsters.push_back(new Monster(&quot;tengu&quot;, S_IMP, 6, 13, 5, 30, 7, (G_GENO|3), Attack(AT_BITE, AD_PHYS, 1, 7), Attack(), Attack(), Attack(), Attack(), Attack(), 300, 200, 0, MS_SQAWK, MZ_SMALL, MR_POISON, MR_POISON, M1_TPORT|M1_TPORT_CNTRL, M2_STALK, M3_INFRAVISIBLE|M3_INFRAVISION, CYAN));
-	monsters.push_back(new Monster(&quot;blue jelly&quot;, S_JELLY, 4, 0, 8, 10, 0, (G_GENO|2), Attack(AT_NONE, AD_COLD, 0, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 20, 0, MS_SILENT, MZ_MEDIUM, MR_COLD|MR_POISON, MR_COLD|MR_POISON, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS |M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, BLUE));
-	monsters.push_back(new Monster(&quot;spotted jelly&quot;, S_JELLY, 5, 0, 8, 10, 0, (G_GENO|1), Attack(AT_NONE, AD_ACID, 0, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 20, 0, MS_SILENT, MZ_MEDIUM, MR_ACID|MR_STONE, 0, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_ACID|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, GREEN));
-	monsters.push_back(new Monster(&quot;ochre jelly&quot;, S_JELLY, 6, 3, 8, 20, 0, (G_GENO|2), Attack(AT_ENGL, AD_ACID, 3, 6), Attack(AT_NONE, AD_ACID, 3, 6), Attack(), Attack(), Attack(), Attack(), 50, 20, 0, MS_SILENT, MZ_MEDIUM, MR_ACID|MR_STONE, 0, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_ACID|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;kobold&quot;, S_KOBOLD, 0, 6, 10, 0, -2, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 100, 0, MS_ORC, MZ_SMALL, MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_OMNIVORE, M2_HOSTILE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, YELLOW));
-	monsters.push_back(new Monster(&quot;large kobold&quot;, S_KOBOLD, 1, 6, 10, 0, -3, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 450, 150, 0, MS_ORC, MZ_SMALL, MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_OMNIVORE, M2_HOSTILE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;kobold lord&quot;, S_KOBOLD, 2, 6, 10, 0, -4, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 200, 0, MS_ORC, MZ_SMALL, MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_OMNIVORE, M2_HOSTILE|M2_LORD|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;kobold shaman&quot;, S_KOBOLD, 2, 6, 6, 10, -4, (G_GENO|1), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), Attack(), 450, 150, 0, MS_ORC, MZ_SMALL, MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_OMNIVORE, M2_HOSTILE|M2_MAGIC, M3_INFRAVISIBLE|M3_INFRAVISION, BOLD_BLUE));
-	monsters.push_back(new Monster(&quot;leprechaun&quot;, S_LEPRECHAUN, 5, 15, 8, 20, 0, (G_GENO|4), Attack(AT_CLAW, AD_SGLD, 1, 2), Attack(), Attack(), Attack(), Attack(), Attack(), 60, 30, 0, MS_LAUGH, MZ_TINY, 0, 0, M1_HUMANOID|M1_TPORT, M2_HOSTILE|M2_GREEDY, M3_INFRAVISIBLE, GREEN));
-	monsters.push_back(new Monster(&quot;small mimic&quot;, S_MIMIC, 7, 3, 7, 0, 0, (G_GENO|2), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 300, 200, 0, MS_SILENT, MZ_MEDIUM, MR_ACID, 0, M1_BREATHLESS|M1_AMORPHOUS|M1_HIDE|M1_ANIMAL|M1_NOEYES| M1_NOHEAD|M1_NOLIMBS|M1_THICK_HIDE|M1_CARNIVORE, M2_HOSTILE, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;large mimic&quot;, S_MIMIC, 8, 3, 7, 10, 0, (G_GENO|1), Attack(AT_CLAW, AD_STCK, 3, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 600, 400, 0, MS_SILENT, MZ_LARGE, MR_ACID, 0, M1_CLING|M1_BREATHLESS|M1_AMORPHOUS|M1_HIDE|M1_ANIMAL|M1_NOEYES| M1_NOHEAD|M1_NOLIMBS|M1_THICK_HIDE|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, 0, RED));
-	monsters.push_back(new Monster(&quot;giant mimic&quot;, S_MIMIC, 9, 3, 7, 20, 0, (G_GENO|1), Attack(AT_CLAW, AD_STCK, 3, 6), Attack(AT_CLAW, AD_STCK, 3, 6), Attack(), Attack(), Attack(), Attack(), 800, 500, 0, MS_SILENT, MZ_LARGE, MR_ACID, 0, M1_CLING|M1_BREATHLESS|M1_AMORPHOUS|M1_HIDE|M1_ANIMAL|M1_NOEYES| M1_NOHEAD|M1_NOLIMBS|M1_THICK_HIDE|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, 0, MAGENTA));
-	monsters.push_back(new Monster(&quot;wood nymph&quot;, S_NYMPH, 3, 12, 9, 20, 0, (G_GENO|2), Attack(AT_CLAW, AD_SITM, 0, 0), Attack(AT_CLAW, AD_SEDU, 0, 0), Attack(), Attack(), Attack(), Attack(), 600, 300, 0, MS_SEDUCE, MZ_HUMAN, 0, 0, M1_HUMANOID|M1_TPORT, M2_HOSTILE|M2_FEMALE|M2_COLLECT, M3_INFRAVISIBLE, GREEN));
-	monsters.push_back(new Monster(&quot;water nymph&quot;, S_NYMPH, 3, 12, 9, 20, 0, (G_GENO|2), Attack(AT_CLAW, AD_SITM, 0, 0), Attack(AT_CLAW, AD_SEDU, 0, 0), Attack(), Attack(), Attack(), Attack(), 600, 300, 0, MS_SEDUCE, MZ_HUMAN, 0, 0, M1_HUMANOID|M1_TPORT|M1_SWIM, M2_HOSTILE|M2_FEMALE|M2_COLLECT, M3_INFRAVISIBLE, BLUE));
-	monsters.push_back(new Monster(&quot;mountain nymph&quot;, S_NYMPH, 3, 12, 9, 20, 0, (G_GENO|2), Attack(AT_CLAW, AD_SITM, 0, 0), Attack(AT_CLAW, AD_SEDU, 0, 0), Attack(), Attack(), Attack(), Attack(), 600, 300, 0, MS_SEDUCE, MZ_HUMAN, 0, 0, M1_HUMANOID|M1_TPORT, M2_HOSTILE|M2_FEMALE|M2_COLLECT, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;goblin&quot;, S_ORC, 0, 6, 10, 0, -3, (G_GENO|2), Attack(AT_WEAP, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 100, 0, MS_ORC, MZ_SMALL, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_ORC|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, WHITE));
-	monsters.push_back(new Monster(&quot;hobgoblin&quot;, S_ORC, 1, 9, 10, 0, -4, (G_GENO|2), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1000, 200, 0, MS_ORC, MZ_HUMAN, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_ORC|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, YELLOW));
-	monsters.push_back(new Monster(&quot;orc&quot;, S_ORC, 1, 9, 10, 0, -3, (G_GENO|G_NOGEN|G_LGROUP), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 850, 150, 0, MS_ORC, MZ_HUMAN, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_ORC|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;hill orc&quot;, S_ORC, 2, 9, 10, 0, -4, (G_GENO|G_LGROUP|2), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1000, 200, 0, MS_ORC, MZ_HUMAN, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_ORC|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;Mordor orc&quot;, S_ORC, 3, 5, 10, 0, -5, (G_GENO|G_LGROUP|1), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1200, 200, 0, MS_ORC, MZ_HUMAN, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_ORC|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, BLUE));
-	monsters.push_back(new Monster(&quot;Uruk-hai&quot;, S_ORC, 3, 7, 10, 0, -4, (G_GENO|G_LGROUP|1), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 1300, 300, 0, MS_ORC, MZ_HUMAN, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_ORC|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, BLACK));
-	monsters.push_back(new Monster(&quot;orc shaman&quot;, S_ORC, 3, 9, 5, 10, -5, (G_GENO|1), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), Attack(), 1000, 300, 0, MS_ORC, MZ_HUMAN, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_ORC|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_MAGIC, M3_INFRAVISIBLE|M3_INFRAVISION, BOLD_BLUE));
-	monsters.push_back(new Monster(&quot;orc-captain&quot;, S_ORC, 5, 5, 10, 0, -5, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), 1350, 350, 0, MS_ORC, MZ_HUMAN, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_ORC|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;rock piercer&quot;, S_PIERCER, 3, 1, 3, 0, 0, (G_GENO|4), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 200, 200, 0, MS_SILENT, MZ_SMALL, 0, 0, M1_CLING|M1_HIDE|M1_ANIMAL|M1_NOEYES|M1_NOLIMBS|M1_CARNIVORE|M1_NOTAKE, M2_HOSTILE, 0, WHITE));
-	monsters.push_back(new Monster(&quot;iron piercer&quot;, S_PIERCER, 5, 1, 0, 0, 0, (G_GENO|2), Attack(AT_BITE, AD_PHYS, 3, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 300, 0, MS_SILENT, MZ_MEDIUM, 0, 0, M1_CLING|M1_HIDE|M1_ANIMAL|M1_NOEYES|M1_NOLIMBS|M1_CARNIVORE|M1_NOTAKE, M2_HOSTILE, 0, CYAN));
-	monsters.push_back(new Monster(&quot;glass piercer&quot;, S_PIERCER, 7, 1, 0, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 4, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 300, 0, MS_SILENT, MZ_MEDIUM, MR_ACID, 0, M1_CLING|M1_HIDE|M1_ANIMAL|M1_NOEYES|M1_NOLIMBS|M1_CARNIVORE|M1_NOTAKE, M2_HOSTILE, 0, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;rothe&quot;, S_QUADRUPED, 2, 9, 7, 0, 0, (G_GENO|G_SGROUP|4), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(AT_BITE, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), 400, 100, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_OMNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;mumak&quot;, S_QUADRUPED, 5, 9, 0, 0, -2, (G_GENO|1), Attack(AT_BUTT, AD_PHYS, 4, 12), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), 2500, 500, 0, MS_ROAR, MZ_LARGE, 0, 0, M1_ANIMAL|M1_THICK_HIDE|M1_NOHANDS|M1_HERBIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, WHITE));
-	monsters.push_back(new Monster(&quot;leocrotta&quot;, S_QUADRUPED, 6, 18, 4, 10, 0, (G_GENO|2), Attack(AT_CLAW, AD_PHYS, 2, 6), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(AT_CLAW, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), 1200, 500, 0, MS_IMITATE, MZ_LARGE, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_OMNIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;wumpus&quot;, S_QUADRUPED, 8, 3, 2, 10, 0, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 3, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 2500, 500, 0, MS_BURBLE, MZ_LARGE, 0, 0, M1_CLING|M1_ANIMAL|M1_NOHANDS|M1_OMNIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, CYAN));
-	monsters.push_back(new Monster(&quot;titanothere&quot;, S_QUADRUPED, 12, 12, 6, 0, 0, (G_GENO|2), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 2650, 650, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL|M1_THICK_HIDE|M1_NOHANDS|M1_HERBIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, WHITE));
-	monsters.push_back(new Monster(&quot;baluchitherium&quot;, S_QUADRUPED, 14, 12, 5, 0, 0, (G_GENO|2), Attack(AT_CLAW, AD_PHYS, 5, 4), Attack(AT_CLAW, AD_PHYS, 5, 4), Attack(), Attack(), Attack(), Attack(), 3800, 800, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL|M1_THICK_HIDE|M1_NOHANDS|M1_HERBIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, WHITE));
-	monsters.push_back(new Monster(&quot;mastodon&quot;, S_QUADRUPED, 20, 12, 5, 0, 0, (G_GENO|1), Attack(AT_BUTT, AD_PHYS, 4, 8), Attack(AT_BUTT, AD_PHYS, 4, 8), Attack(), Attack(), Attack(), Attack(), 3800, 800, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL|M1_THICK_HIDE|M1_NOHANDS|M1_HERBIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, BLACK));
-	monsters.push_back(new Monster(&quot;sewer rat&quot;, S_RODENT, 0, 12, 7, 0, 0, (G_GENO|G_SGROUP|1), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 20, 12, 0, MS_SQEEK, MZ_TINY, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;giant rat&quot;, S_RODENT, 1, 10, 7, 0, 0, (G_GENO|G_SGROUP|2), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 30, 0, MS_SQEEK, MZ_TINY, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;rabid rat&quot;, S_RODENT, 2, 12, 6, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_DRCO, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 5, 0, MS_SQEEK, MZ_TINY, MR_POISON, 0, M1_ANIMAL|M1_NOHANDS|M1_POIS|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;wererat&quot;, S_RODENT, 2, 12, 6, 10, -7, (G_NOGEN|G_NOCORPSE), Attack(AT_BITE, AD_WERE, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 40, 30, 0, MS_SQEEK, MZ_TINY, MR_POISON, 0, M1_NOHANDS|M1_POIS|M1_REGEN|M1_CARNIVORE, M2_NOPOLY|M2_WERE|M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;rock mole&quot;, S_RODENT, 3, 3, 0, 20, 0, (G_GENO|2), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 30, 0, MS_SILENT, MZ_SMALL, 0, 0, M1_TUNNEL|M1_ANIMAL|M1_NOHANDS|M1_METALLIVORE, M2_HOSTILE|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE, WHITE));
-	monsters.push_back(new Monster(&quot;woodchuck&quot;, S_RODENT, 3, 3, 0, 20, 0, (G_NOGEN|G_GENO), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 30, 0, MS_SILENT, MZ_SMALL, 0, 0, M1_TUNNEL |M1_ANIMAL|M1_NOHANDS|M1_SWIM|M1_HERBIVORE, M2_WANDER|M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;cave spider&quot;, S_SPIDER, 1, 12, 3, 0, 0, (G_GENO|G_SGROUP|2), Attack(AT_BITE, AD_PHYS, 1, 2), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 50, 0, MS_SILENT, MZ_TINY, MR_POISON, MR_POISON, M1_CONCEAL|M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_CARNIVORE, M2_HOSTILE, 0, WHITE));
-	monsters.push_back(new Monster(&quot;centipede&quot;, S_SPIDER, 2, 4, 3, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_DRST, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 50, 0, MS_SILENT, MZ_TINY, MR_POISON, MR_POISON, M1_CONCEAL|M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_CARNIVORE, M2_HOSTILE, 0, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;giant spider&quot;, S_SPIDER, 5, 15, 4, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_DRST, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 100, 100, 0, MS_SILENT, MZ_LARGE, MR_POISON, MR_POISON, M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_POIS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, 0, MAGENTA));
-	monsters.push_back(new Monster(&quot;scorpion&quot;, S_SPIDER, 5, 15, 3, 0, 0, (G_GENO|2), Attack(AT_CLAW, AD_PHYS, 1, 2), Attack(AT_CLAW, AD_PHYS, 1, 2), Attack(AT_STNG, AD_DRST, 1, 4), Attack(), Attack(), Attack(), 50, 100, 0, MS_SILENT, MZ_SMALL, MR_POISON, MR_POISON, M1_CONCEAL|M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_POIS|M1_CARNIVORE, M2_HOSTILE, 0, RED));
-	monsters.push_back(new Monster(&quot;lurker above&quot;, S_TRAPPER, 10, 3, 3, 0, 0, (G_GENO|2), Attack(AT_ENGL, AD_DGST, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_SILENT, MZ_HUGE, 0, 0, M1_HIDE|M1_FLY|M1_ANIMAL|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_CARNIVORE, M2_HOSTILE|M2_STALK|M2_STRONG, 0, WHITE));
-	monsters.push_back(new Monster(&quot;trapper&quot;, S_TRAPPER, 12, 3, 3, 0, 0, (G_GENO|2), Attack(AT_ENGL, AD_DGST, 1, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_SILENT, MZ_HUGE, 0, 0, M1_HIDE|M1_ANIMAL|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_CARNIVORE, M2_HOSTILE|M2_STALK|M2_STRONG, 0, GREEN));
-	monsters.push_back(new Monster(&quot;white unicorn&quot;, S_UNICORN, 4, 24, 2, 70, 7, (G_GENO|2), Attack(AT_BUTT, AD_PHYS, 1, 12), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1300, 300, 0, MS_NEIGH, MZ_LARGE, MR_POISON, MR_POISON, M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_JEWELS, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;gray unicorn&quot;, S_UNICORN, 4, 24, 2, 70, 0, (G_GENO|1), Attack(AT_BUTT, AD_PHYS, 1, 12), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1300, 300, 0, MS_NEIGH, MZ_LARGE, MR_POISON, MR_POISON, M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_JEWELS, M3_INFRAVISIBLE, WHITE));
-	monsters.push_back(new Monster(&quot;black unicorn&quot;, S_UNICORN, 4, 24, 2, 70, -7, (G_GENO|1), Attack(AT_BUTT, AD_PHYS, 1, 12), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1300, 300, 0, MS_NEIGH, MZ_LARGE, MR_POISON, MR_POISON, M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_JEWELS, M3_INFRAVISIBLE, BLACK));
-	monsters.push_back(new Monster(&quot;pony&quot;, S_UNICORN, 3, 16, 6, 0, 0, (G_GENO|2), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(AT_BITE, AD_PHYS, 1, 2), Attack(), Attack(), Attack(), Attack(), 1300, 250, 0, MS_NEIGH, MZ_MEDIUM, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_DOMESTIC, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;horse&quot;, S_UNICORN, 5, 20, 5, 0, 0, (G_GENO|2), Attack(AT_KICK, AD_PHYS, 1, 8), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), 1500, 300, 0, MS_NEIGH, MZ_LARGE, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_DOMESTIC, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;warhorse&quot;, S_UNICORN, 7, 24, 4, 0, 0, (G_GENO|2), Attack(AT_KICK, AD_PHYS, 1, 10), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), 1800, 350, 0, MS_NEIGH, MZ_LARGE, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_HERBIVORE, M2_WANDER|M2_STRONG|M2_DOMESTIC, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;fog cloud&quot;, S_VORTEX, 3, 1, 0, 0, 0, (G_GENO|G_NOCORPSE|2), Attack(AT_ENGL, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS| M1_AMORPHOUS|M1_UNSOLID, M2_HOSTILE|M2_NEUTER, 0, WHITE));
-	monsters.push_back(new Monster(&quot;dust vortex&quot;, S_VORTEX, 4, 20, 2, 30, 0, (G_GENO|G_NOCORPSE|2), Attack(AT_ENGL, AD_BLND, 2, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS, M2_HOSTILE|M2_NEUTER, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;ice vortex&quot;, S_VORTEX, 5, 20, 2, 30, 0, (G_NOHELL|G_GENO|G_NOCORPSE|1), Attack(AT_ENGL, AD_COLD, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_COLD|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, CYAN));
-	monsters.push_back(new Monster(&quot;energy vortex&quot;, S_VORTEX, 6, 20, 2, 30, 0, (G_GENO|G_NOCORPSE|1), Attack(AT_ENGL, AD_ELEC, 1, 6), Attack(AT_ENGL, AD_DREN, 0, 0), Attack(AT_NONE, AD_ELEC, 0, 4), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_ELEC|MR_SLEEP|MR_DISINT|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS| M1_UNSOLID, M2_HOSTILE|M2_NEUTER, 0, BOLD_BLUE));
-	monsters.push_back(new Monster(&quot;steam vortex&quot;, S_VORTEX, 7, 22, 2, 30, 0, (G_HELL|G_GENO|G_NOCORPSE|2), Attack(AT_ENGL, AD_FIRE, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_FIRE|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS| M1_UNSOLID, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, BLUE));
-	monsters.push_back(new Monster(&quot;fire vortex&quot;, S_VORTEX, 8, 22, 2, 30, 0, (G_HELL|G_GENO|G_NOCORPSE|1), Attack(AT_ENGL, AD_FIRE, 1, 10), Attack(AT_NONE, AD_FIRE, 0, 4), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_FIRE|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS| M1_UNSOLID, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;baby long worm&quot;, S_WORM, 8, 3, 5, 0, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 600, 250, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL|M1_SLITHY|M1_NOLIMBS|M1_CARNIVORE|M1_NOTAKE, M2_HOSTILE, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;baby purple worm&quot;, S_WORM, 8, 3, 5, 0, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 600, 250, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL|M1_SLITHY|M1_NOLIMBS|M1_CARNIVORE, M2_HOSTILE, 0, MAGENTA));
-	monsters.push_back(new Monster(&quot;long worm&quot;, S_WORM, 8, 3, 5, 10, 0, (G_GENO|2), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_SILENT, MZ_GIGANTIC, 0, 0, M1_ANIMAL|M1_SLITHY|M1_NOLIMBS|M1_OVIPAROUS|M1_CARNIVORE|M1_NOTAKE, M2_HOSTILE|M2_STRONG|M2_NASTY, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;purple worm&quot;, S_WORM, 15, 9, 6, 20, 0, (G_GENO|2), Attack(AT_BITE, AD_PHYS, 2, 8), Attack(AT_ENGL, AD_DGST, 1, 10), Attack(), Attack(), Attack(), Attack(), 2700, 700, 0, MS_SILENT, MZ_GIGANTIC, 0, 0, M1_ANIMAL|M1_SLITHY|M1_NOLIMBS|M1_OVIPAROUS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY, 0, MAGENTA));
-	monsters.push_back(new Monster(&quot;grid bug&quot;, S_XAN, 0, 12, 9, 0, 0, (G_GENO|G_SGROUP|G_NOCORPSE|3), Attack(AT_BITE, AD_ELEC, 1, 1), Attack(), Attack(), Attack(), Attack(), Attack(), 15, 10, 0, MS_BUZZ, MZ_TINY, MR_ELEC|MR_POISON, 0, M1_ANIMAL, M2_HOSTILE, M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;xan&quot;, S_XAN, 7, 18, -4, 0, 0, (G_GENO|3), Attack(AT_STNG, AD_LEGS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 300, 300, 0, MS_BUZZ, MZ_TINY, MR_POISON, MR_POISON, M1_FLY|M1_ANIMAL|M1_NOHANDS|M1_POIS, M2_HOSTILE, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;yellow light&quot;, S_LIGHT, 3, 15, 0, 0, 0, (G_NOCORPSE|G_GENO|4), Attack(AT_EXPL, AD_BLND, 10, 20), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_SMALL, MR_FIRE|MR_COLD|MR_ELEC|MR_DISINT|MR_SLEEP|MR_POISON|MR_ACID| MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_UNSOLID|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;black light&quot;, S_LIGHT, 5, 15, 0, 0, 0, (G_NOCORPSE|G_GENO|2), Attack(AT_EXPL, AD_HALU, 10, 12), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_SMALL, MR_FIRE|MR_COLD|MR_ELEC|MR_DISINT|MR_SLEEP|MR_POISON|MR_ACID| MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_UNSOLID|M1_SEE_INVIS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, BLACK));
-	monsters.push_back(new Monster(&quot;zruty&quot;, S_ZRUTY, 9, 8, 3, 0, 0, (G_GENO|2), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(AT_BITE, AD_PHYS, 3, 6), Attack(), Attack(), Attack(), 1200, 600, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;couatl&quot;, S_ANGEL, 8, 10, 5, 30, 7, (G_NOHELL|G_SGROUP|G_NOCORPSE|1), Attack(AT_BITE, AD_DRST, 2, 4), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(AT_HUGS, AD_WRAP, 2, 4), Attack(), Attack(), Attack(), 900, 400, 0, MS_HISS, MZ_LARGE, MR_NO_ELBERETH|MR_POISON, 0, M1_FLY|M1_POIS, M2_MINION|M2_STALK|M2_STRONG|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, GREEN));
-	monsters.push_back(new Monster(&quot;Aleax&quot;, S_ANGEL, 10, 8, 0, 30, 7, (G_NOHELL|G_NOCORPSE|1), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_KICK, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), 1450, 400, 0, MS_IMITATE, MZ_HUMAN, MR_NO_ELBERETH|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON, 0, M1_HUMANOID|M1_SEE_INVIS, M2_MINION|M2_STALK|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;Angel&quot;, S_ANGEL, 14, 10, -4, 55, 12, (G_NOHELL|G_NOCORPSE|1), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_MAGC, AD_MAGM, 2, 6), Attack(), Attack(), 1450, 400, 0, MS_CUSS, MZ_HUMAN, MR_NO_ELBERETH|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON, 0, M1_FLY|M1_HUMANOID|M1_SEE_INVIS, M2_NOPOLY|M2_MINION|M2_STALK|M2_STRONG|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;ki-rin&quot;, S_ANGEL, 16, 18, -5, 90, 15, (G_NOHELL|G_NOCORPSE|1), Attack(AT_KICK, AD_PHYS, 2, 4), Attack(AT_KICK, AD_PHYS, 2, 4), Attack(AT_BUTT, AD_PHYS, 3, 6), Attack(AT_MAGC, AD_SPEL, 2, 6), Attack(), Attack(), 1450, 400, 0, MS_NEIGH, MZ_LARGE, MR_NO_ELBERETH, 0, M1_FLY|M1_SEE_INVIS, M2_NOPOLY|M2_MINION|M2_STALK|M2_STRONG|M2_NASTY|M2_LORD, M3_INFRAVISIBLE|M3_INFRAVISION, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;Archon&quot;, S_ANGEL, 19, 16, -6, 80, 15, (G_NOHELL|G_NOCORPSE|1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_GAZE, AD_BLND, 2, 6), Attack(AT_CLAW, AD_PHYS, 1, 8), Attack(AT_MAGC, AD_SPEL, 4, 6), Attack(), 1450, 400, 0, MS_CUSS, MZ_LARGE, MR_NO_ELBERETH|MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON, 0, M1_FLY|M1_HUMANOID|M1_SEE_INVIS|M1_REGEN, M2_NOPOLY|M2_MINION|M2_STALK|M2_STRONG|M2_NASTY|M2_LORD| M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;bat&quot;, S_BAT, 0, 22, 8, 0, 0, (G_GENO|G_SGROUP|1), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 20, 20, 0, MS_SQEEK, MZ_TINY, 0, 0, M1_FLY|M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_WANDER, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;giant bat&quot;, S_BAT, 2, 22, 7, 0, 0, (G_GENO|2), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 30, 0, MS_SQEEK, MZ_SMALL, 0, 0, M1_FLY|M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_WANDER|M2_HOSTILE, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;raven&quot;, S_BAT, 4, 20, 6, 0, 0, (G_GENO|2), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_BLND, 1, 6), Attack(), Attack(), Attack(), Attack(), 40, 20, 0, MS_SQAWK, MZ_SMALL, 0, 0, M1_FLY|M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_WANDER|M2_HOSTILE, M3_INFRAVISIBLE, BLACK));
-	monsters.push_back(new Monster(&quot;vampire bat&quot;, S_BAT, 5, 20, 6, 0, 0, (G_GENO|2), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(AT_BITE, AD_DRST, 0, 0), Attack(), Attack(), Attack(), Attack(), 30, 20, 0, MS_SQEEK, MZ_SMALL, MR_SLEEP|MR_POISON, 0, M1_FLY|M1_ANIMAL|M1_NOHANDS|M1_POIS|M1_REGEN|M1_OMNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, BLACK));
-	monsters.push_back(new Monster(&quot;plains centaur&quot;, S_CENTAUR, 4, 18, 4, 0, 0, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 2500, 500, 0, MS_HUMANOID, MZ_LARGE, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_STRONG|M2_GREEDY|M2_COLLECT, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;forest centaur&quot;, S_CENTAUR, 5, 18, 3, 10, -1, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 2550, 600, 0, MS_HUMANOID, MZ_LARGE, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_STRONG|M2_GREEDY|M2_COLLECT, M3_INFRAVISIBLE, GREEN));
-	monsters.push_back(new Monster(&quot;mountain centaur&quot;, S_CENTAUR, 6, 20, 2, 10, -3, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 1, 10), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), 2550, 500, 0, MS_HUMANOID, MZ_LARGE, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_STRONG|M2_GREEDY|M2_COLLECT, M3_INFRAVISIBLE, CYAN));
-	monsters.push_back(new Monster(&quot;baby gray dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, 0, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, WHITE));
-	monsters.push_back(new Monster(&quot;baby silver dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, 0, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, BOLD_CYAN));
-	monsters.push_back(new Monster(&quot;baby red dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, MR_FIRE, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;baby white dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, MR_COLD, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;baby orange dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, MR_SLEEP, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, BOLD_RED));
-	monsters.push_back(new Monster(&quot;baby black dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, MR_DISINT, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, BLACK));
-	monsters.push_back(new Monster(&quot;baby blue dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, MR_ELEC, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, BLUE));
-	monsters.push_back(new Monster(&quot;baby green dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, MR_POISON, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE|M1_POIS, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, GREEN));
-	monsters.push_back(new Monster(&quot;baby yellow dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, MR_ACID|MR_STONE, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE|M1_ACID, M2_HOSTILE|M2_STRONG|M2_GREEDY|M2_JEWELS, 0, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;gray dragon&quot;, S_DRAGON, 15, 9, -1, 20, 4, (G_GENO|1), Attack(AT_BREA, AD_MAGM, 4, 6), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, 0, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, 0, WHITE));
-	monsters.push_back(new Monster(&quot;silver dragon&quot;, S_DRAGON, 15, 9, -1, 20, 4, (G_GENO|1), Attack(AT_BREA, AD_COLD, 4, 6), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_COLD, 0, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, 0, BOLD_CYAN));
-	monsters.push_back(new Monster(&quot;red dragon&quot;, S_DRAGON, 15, 9, -1, 20, -4, (G_GENO|1), Attack(AT_BREA, AD_FIRE, 6, 6), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_FIRE, MR_FIRE, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;white dragon&quot;, S_DRAGON, 15, 9, -1, 20, -5, (G_GENO|1), Attack(AT_BREA, AD_COLD, 4, 6), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_COLD, MR_COLD, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, 0, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;orange dragon&quot;, S_DRAGON, 15, 9, -1, 20, 5, (G_GENO|1), Attack(AT_BREA, AD_SLEE, 4, 25), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_SLEEP, MR_SLEEP, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, 0, BOLD_RED));
-	monsters.push_back(new Monster(&quot;black dragon&quot;, S_DRAGON, 15, 9, -1, 20, -6, (G_GENO|1), Attack(AT_BREA, AD_DISN, 4, 10), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_DISINT, MR_DISINT, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, 0, BLACK));
-	monsters.push_back(new Monster(&quot;blue dragon&quot;, S_DRAGON, 15, 9, -1, 20, -7, (G_GENO|1), Attack(AT_BREA, AD_ELEC, 4, 6), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_ELEC, MR_ELEC, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, 0, BLUE));
-	monsters.push_back(new Monster(&quot;green dragon&quot;, S_DRAGON, 15, 9, -1, 20, 6, (G_GENO|1), Attack(AT_BREA, AD_DRST, 4, 6), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_POISON, MR_POISON, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE|M1_POIS, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, 0, GREEN));
-	monsters.push_back(new Monster(&quot;yellow dragon&quot;, S_DRAGON, 15, 9, -1, 20, 7, (G_GENO|1), Attack(AT_BREA, AD_ACID, 4, 6), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_ACID|MR_STONE, MR_STONE, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_SEE_INVIS|M1_OVIPAROUS| M1_CARNIVORE|M1_ACID, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_GREEDY|M2_JEWELS|M2_MAGIC, 0, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;stalker&quot;, S_ELEMENTAL, 8, 12, 3, 0, 0, (G_GENO|3), Attack(AT_CLAW, AD_PHYS, 4, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 900, 400, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL|M1_FLY|M1_SEE_INVIS, M2_WANDER|M2_STALK|M2_HOSTILE|M2_STRONG, M3_INFRAVISION, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;air elemental&quot;, S_ELEMENTAL, 8, 36, 2, 30, 0, (G_NOCORPSE|1), Attack(AT_ENGL, AD_PHYS, 1, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_POISON|MR_STONE, 0, M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_UNSOLID|M1_FLY, M2_STRONG|M2_NEUTER, 0, CYAN));
-	monsters.push_back(new Monster(&quot;fire elemental&quot;, S_ELEMENTAL, 8, 12, 2, 30, 0, (G_NOCORPSE|1), Attack(AT_CLAW, AD_FIRE, 3, 6), Attack(AT_NONE, AD_FIRE, 0, 4), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_FIRE|MR_POISON|MR_STONE, 0, M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_UNSOLID|M1_FLY|M1_NOTAKE, M2_STRONG|M2_NEUTER, M3_INFRAVISIBLE, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;earth elemental&quot;, S_ELEMENTAL, 8, 6, 2, 30, 0, (G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 4, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 2500, 0, 0, MS_SILENT, MZ_HUGE, MR_FIRE|MR_COLD|MR_POISON|MR_STONE, 0, M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_BREATHLESS| M1_WALLWALK|M1_THICK_HIDE, M2_STRONG|M2_NEUTER, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;water elemental&quot;, S_ELEMENTAL, 8, 6, 2, 30, 0, (G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 5, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 2500, 0, 0, MS_SILENT, MZ_HUGE, MR_POISON|MR_STONE, 0, M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_AMPHIBIOUS|M1_SWIM, M2_STRONG|M2_NEUTER, 0, BLUE));
-	monsters.push_back(new Monster(&quot;lichen&quot;, S_FUNGUS, 0, 1, 9, 0, 0, (G_GENO|4), Attack(AT_TUCH, AD_STCK, 0, 0), Attack(), Attack(), Attack(), Attack(), Attack(), 20, 200, 0, MS_SILENT, MZ_SMALL, 0, 0, M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, BOLD_GREEN));
-	monsters.push_back(new Monster(&quot;brown mold&quot;, S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO|1), Attack(AT_NONE, AD_COLD, 0, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 30, 0, MS_SILENT, MZ_SMALL, MR_COLD|MR_POISON, MR_COLD|MR_POISON, M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;yellow mold&quot;, S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO|2), Attack(AT_NONE, AD_STUN, 0, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 30, 0, MS_SILENT, MZ_SMALL, MR_POISON, MR_POISON, M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_POIS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;green mold&quot;, S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO|1), Attack(AT_NONE, AD_ACID, 0, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 30, 0, MS_SILENT, MZ_SMALL, MR_ACID|MR_STONE, MR_STONE, M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_ACID|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, GREEN));
-	monsters.push_back(new Monster(&quot;red mold&quot;, S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO|1), Attack(AT_NONE, AD_FIRE, 0, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 30, 0, MS_SILENT, MZ_SMALL, MR_FIRE|MR_POISON, MR_FIRE|MR_POISON, M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;shrieker&quot;, S_FUNGUS, 3, 1, 7, 0, 0, (G_GENO|1), Attack(), Attack(), Attack(), Attack(), Attack(), Attack(), 100, 100, 0, MS_SHRIEK, MZ_SMALL, MR_POISON, MR_POISON, M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, MAGENTA));
-	monsters.push_back(new Monster(&quot;violet fungus&quot;, S_FUNGUS, 3, 1, 7, 0, 0, (G_GENO|2), Attack(AT_TUCH, AD_PHYS, 1, 4), Attack(AT_TUCH, AD_STCK, 0, 0), Attack(), Attack(), Attack(), Attack(), 100, 100, 0, MS_SILENT, MZ_SMALL, MR_POISON, MR_POISON, M1_BREATHLESS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD|M1_MINDLESS|M1_NOTAKE, M2_HOSTILE|M2_NEUTER, 0, MAGENTA));
-	monsters.push_back(new Monster(&quot;gnome&quot;, S_GNOME, 1, 6, 10, 4, 0, (G_GENO|G_SGROUP|1), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 650, 100, 0, MS_ORC, MZ_SMALL, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_GNOME|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, YELLOW));
-	monsters.push_back(new Monster(&quot;gnome lord&quot;, S_GNOME, 3, 8, 10, 4, 0, (G_GENO|2), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 700, 120, 0, MS_ORC, MZ_SMALL, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_GNOME|M2_LORD|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, BLUE));
-	monsters.push_back(new Monster(&quot;gnomish wizard&quot;, S_GNOME, 3, 10, 4, 10, 0, (G_GENO|1), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), Attack(), 700, 120, 0, MS_ORC, MZ_SMALL, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_GNOME|M2_MAGIC, M3_INFRAVISIBLE|M3_INFRAVISION, BOLD_BLUE));
-	monsters.push_back(new Monster(&quot;gnome king&quot;, S_GNOME, 5, 10, 10, 20, 0, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 750, 150, 0, MS_ORC, MZ_SMALL, 0, 0, M1_HUMANOID|M1_OMNIVORE, M2_GNOME|M2_PRINCE|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;giant&quot;, S_GIANT, 6, 6, 0, 0, 2, (G_GENO|G_NOGEN|1), Attack(AT_WEAP, AD_PHYS, 2, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 2250, 750, 0, MS_BOAST, MZ_HUGE, 0, 0, M1_HUMANOID|M1_CARNIVORE, M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;stone giant&quot;, S_GIANT, 6, 6, 0, 0, 2, (G_GENO|G_SGROUP|1), Attack(AT_WEAP, AD_PHYS, 2, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 2250, 750, 0, MS_BOAST, MZ_HUGE, 0, 0, M1_HUMANOID|M1_CARNIVORE, M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, M3_INFRAVISIBLE|M3_INFRAVISION, WHITE));
-	monsters.push_back(new Monster(&quot;hill giant&quot;, S_GIANT, 8, 10, 6, 0, -2, (G_GENO|G_SGROUP|1), Attack(AT_WEAP, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 2200, 700, 0, MS_BOAST, MZ_HUGE, 0, 0, M1_HUMANOID|M1_CARNIVORE, M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, M3_INFRAVISIBLE|M3_INFRAVISION, CYAN));
-	monsters.push_back(new Monster(&quot;fire giant&quot;, S_GIANT, 9, 12, 4, 5, 2, (G_GENO|G_SGROUP|1), Attack(AT_WEAP, AD_PHYS, 2, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 2250, 750, 0, MS_BOAST, MZ_HUGE, MR_FIRE, MR_FIRE, M1_HUMANOID|M1_CARNIVORE, M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, M3_INFRAVISIBLE|M3_INFRAVISION, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;frost giant&quot;, S_GIANT, 10, 12, 3, 10, -3, (G_NOHELL|G_GENO|G_SGROUP|1), Attack(AT_WEAP, AD_PHYS, 2, 12), Attack(), Attack(), Attack(), Attack(), Attack(), 2250, 750, 0, MS_BOAST, MZ_HUGE, MR_COLD, MR_COLD, M1_HUMANOID|M1_CARNIVORE, M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, M3_INFRAVISIBLE|M3_INFRAVISION, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;storm giant&quot;, S_GIANT, 16, 12, 3, 10, -3, (G_GENO|G_SGROUP|1), Attack(AT_WEAP, AD_PHYS, 2, 12), Attack(), Attack(), Attack(), Attack(), Attack(), 2250, 750, 0, MS_BOAST, MZ_HUGE, MR_ELEC, MR_ELEC, M1_HUMANOID|M1_CARNIVORE, M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_JEWELS, M3_INFRAVISIBLE|M3_INFRAVISION, BLUE));
-	monsters.push_back(new Monster(&quot;ettin&quot;, S_GIANT, 10, 12, 3, 0, 0, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 2, 8), Attack(AT_WEAP, AD_PHYS, 3, 6), Attack(), Attack(), Attack(), Attack(), 1700, 500, 0, MS_GRUNT, MZ_HUGE, 0, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, YELLOW));
-	monsters.push_back(new Monster(&quot;titan&quot;, S_GIANT, 16, 18, -3, 70, 9, (1), Attack(AT_WEAP, AD_PHYS, 2, 8), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), 2300, 900, 0, MS_SPELL, MZ_HUGE, 0, 0, M1_FLY|M1_HUMANOID|M1_OMNIVORE, M2_STRONG|M2_ROCKTHROW|M2_NASTY|M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;minotaur&quot;, S_GIANT, 15, 15, 6, 0, 0, (G_GENO|G_NOGEN), Attack(AT_CLAW, AD_PHYS, 3, 10), Attack(AT_CLAW, AD_PHYS, 3, 10), Attack(AT_BUTT, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), 1500, 700, 0, MS_SILENT, MZ_LARGE, MR_NO_ELBERETH, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, YELLOW));
-	monsters.push_back(new Monster(&quot;jabberwock&quot;, S_JABBERWOCK, 15, 12, -2, 50, 0, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 2, 10), Attack(AT_BITE, AD_PHYS, 2, 10), Attack(AT_CLAW, AD_PHYS, 2, 10), Attack(AT_CLAW, AD_PHYS, 2, 10), Attack(), Attack(), 1300, 600, 0, MS_BURBLE, MZ_LARGE, 0, 0, M1_ANIMAL|M1_FLY|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE, BOLD_RED));
-	monsters.push_back(new Monster(&quot;lich&quot;, S_LICH, 11, 6, 0, 30, -9, (G_GENO|G_NOCORPSE|1), Attack(AT_TUCH, AD_COLD, 1, 10), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), 1200, 100, 0, MS_MUMBLE, MZ_HUMAN, MR_COLD|MR_SLEEP|MR_POISON, MR_COLD, M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_UNDEAD|M2_HOSTILE|M2_MAGIC, M3_INFRAVISION, YELLOW));
-	monsters.push_back(new Monster(&quot;demilich&quot;, S_LICH, 14, 9, -2, 60, -12, (G_GENO|G_NOCORPSE|1), Attack(AT_TUCH, AD_COLD, 3, 4), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), 1200, 100, 0, MS_MUMBLE, MZ_HUMAN, MR_COLD|MR_SLEEP|MR_POISON, MR_COLD, M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_UNDEAD|M2_HOSTILE|M2_MAGIC, M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;master lich&quot;, S_LICH, 17, 9, -4, 90, -15, (G_HELL|G_GENO|G_NOCORPSE|1), Attack(AT_TUCH, AD_COLD, 3, 6), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), 1200, 100, 0, MS_MUMBLE, MZ_HUMAN, MR_FIRE|MR_COLD|MR_SLEEP|MR_POISON, MR_FIRE|MR_COLD, M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_UNDEAD|M2_HOSTILE|M2_MAGIC, M3_WANTSBOOK|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;arch-lich&quot;, S_LICH, 25, 9, -6, 90, -15, (G_HELL|G_GENO|G_NOCORPSE|1), Attack(AT_TUCH, AD_COLD, 5, 6), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), 1200, 100, 0, MS_MUMBLE, MZ_HUMAN, MR_FIRE|MR_COLD|MR_SLEEP|MR_ELEC|MR_POISON, MR_FIRE|MR_COLD, M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_UNDEAD|M2_HOSTILE|M2_MAGIC, M3_WANTSBOOK|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;kobold mummy&quot;, S_MUMMY, 3, 8, 6, 20, -2, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 50, 0, MS_SILENT, MZ_SMALL, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE, M3_INFRAVISION, YELLOW));
-	monsters.push_back(new Monster(&quot;gnome mummy&quot;, S_MUMMY, 4, 10, 6, 20, -3, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 650, 50, 0, MS_SILENT, MZ_SMALL, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE|M2_GNOME, M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;orc mummy&quot;, S_MUMMY, 5, 10, 5, 20, -4, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 850, 75, 0, MS_SILENT, MZ_HUMAN, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE|M2_ORC|M2_GREEDY|M2_JEWELS, M3_INFRAVISION, WHITE));
-	monsters.push_back(new Monster(&quot;dwarf mummy&quot;, S_MUMMY, 5, 10, 5, 20, -4, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 900, 150, 0, MS_SILENT, MZ_HUMAN, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE|M2_DWARF|M2_GREEDY|M2_JEWELS, M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;elf mummy&quot;, S_MUMMY, 6, 12, 4, 30, -5, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 175, 0, MS_SILENT, MZ_HUMAN, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE|M2_ELF, M3_INFRAVISION, GREEN));
-	monsters.push_back(new Monster(&quot;human mummy&quot;, S_MUMMY, 6, 12, 4, 30, -5, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), 1450, 200, 0, MS_SILENT, MZ_HUMAN, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE, M3_INFRAVISION, WHITE));
-	monsters.push_back(new Monster(&quot;ettin mummy&quot;, S_MUMMY, 7, 12, 4, 30, -6, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 2, 6), Attack(AT_CLAW, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), 1700, 250, 0, MS_SILENT, MZ_HUGE, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE|M2_STRONG, M3_INFRAVISION, BLUE));
-	monsters.push_back(new Monster(&quot;giant mummy&quot;, S_MUMMY, 8, 14, 3, 30, -7, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(), Attack(), Attack(), Attack(), 2050, 375, 0, MS_SILENT, MZ_HUGE, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_HOSTILE|M2_GIANT|M2_STRONG|M2_JEWELS, M3_INFRAVISION, CYAN));
-	monsters.push_back(new Monster(&quot;red naga hatchling&quot;, S_NAGA, 3, 10, 6, 0, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 100, 0, MS_MUMBLE, MZ_LARGE, MR_FIRE|MR_POISON, MR_FIRE|MR_POISON, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_NOTAKE|M1_OMNIVORE, M2_STRONG, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;black naga hatchling&quot;, S_NAGA, 3, 10, 6, 0, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 100, 0, MS_MUMBLE, MZ_LARGE, MR_POISON|MR_ACID|MR_STONE, MR_POISON|MR_STONE, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_ACID|M1_NOTAKE|M1_CARNIVORE, M2_STRONG, 0, BLACK));
-	monsters.push_back(new Monster(&quot;golden naga hatchling&quot;, S_NAGA, 3, 10, 6, 0, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 100, 0, MS_MUMBLE, MZ_LARGE, MR_POISON, MR_POISON, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_NOTAKE|M1_OMNIVORE, M2_STRONG, 0, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;guardian naga hatchling&quot;, S_NAGA, 3, 10, 6, 0, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 100, 0, MS_MUMBLE, MZ_LARGE, MR_POISON, MR_POISON, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_NOTAKE|M1_OMNIVORE, M2_STRONG, 0, GREEN));
-	monsters.push_back(new Monster(&quot;red naga&quot;, S_NAGA, 6, 12, 4, 0, -4, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(AT_BREA, AD_FIRE, 2, 6), Attack(), Attack(), Attack(), Attack(), 2600, 400, 0, MS_MUMBLE, MZ_HUGE, MR_FIRE|MR_POISON, MR_FIRE|MR_POISON, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_OVIPAROUS|M1_NOTAKE|M1_OMNIVORE, M2_STRONG, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;black naga&quot;, S_NAGA, 8, 14, 2, 10, 4, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(AT_SPIT, AD_ACID, 0, 0), Attack(), Attack(), Attack(), Attack(), 2600, 400, 0, MS_MUMBLE, MZ_HUGE, MR_POISON|MR_ACID|MR_STONE, MR_POISON|MR_STONE, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_OVIPAROUS|M1_ACID|M1_NOTAKE| M1_CARNIVORE, M2_STRONG, 0, BLACK));
-	monsters.push_back(new Monster(&quot;golden naga&quot;, S_NAGA, 10, 14, 2, 70, 5, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(AT_MAGC, AD_SPEL, 4, 6), Attack(), Attack(), Attack(), Attack(), 2600, 400, 0, MS_MUMBLE, MZ_HUGE, MR_POISON, MR_POISON, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_OVIPAROUS|M1_NOTAKE|M1_OMNIVORE, M2_STRONG, 0, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;guardian naga&quot;, S_NAGA, 12, 16, 0, 50, 7, (G_GENO|1), Attack(AT_BITE, AD_PLYS, 1, 6), Attack(AT_SPIT, AD_DRST, 1, 6), Attack(AT_HUGS, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), 2600, 400, 0, MS_MUMBLE, MZ_HUGE, MR_POISON, MR_POISON, M1_NOLIMBS|M1_SLITHY|M1_THICK_HIDE|M1_OVIPAROUS|M1_POIS|M1_NOTAKE| M1_OMNIVORE, M2_STRONG, 0, GREEN));
-	monsters.push_back(new Monster(&quot;ogre&quot;, S_OGRE, 5, 10, 5, 0, -3, (G_SGROUP|G_GENO|1), Attack(AT_WEAP, AD_PHYS, 2, 5), Attack(), Attack(), Attack(), Attack(), Attack(), 1600, 500, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID|M1_CARNIVORE, M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, YELLOW));
-	monsters.push_back(new Monster(&quot;ogre lord&quot;, S_OGRE, 7, 12, 3, 30, -5, (G_GENO|2), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1700, 700, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID|M1_CARNIVORE, M2_STRONG|M2_LORD|M2_MALE|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;ogre king&quot;, S_OGRE, 9, 14, 4, 60, -7, (G_GENO|2), Attack(AT_WEAP, AD_PHYS, 3, 5), Attack(), Attack(), Attack(), Attack(), Attack(), 1700, 750, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID|M1_CARNIVORE, M2_STRONG|M2_PRINCE|M2_MALE|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;gray ooze&quot;, S_PUDDING, 3, 1, 8, 0, 0, (G_GENO|2), Attack(AT_BITE, AD_RUST, 2, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 250, 0, MS_SILENT, MZ_MEDIUM, MR_FIRE|MR_COLD|MR_POISON|MR_ACID|MR_STONE, MR_FIRE|MR_COLD|MR_POISON, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_OMNIVORE|M1_ACID, M2_HOSTILE|M2_NEUTER, 0, WHITE));
-	monsters.push_back(new Monster(&quot;brown pudding&quot;, S_PUDDING, 5, 3, 8, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_DCAY, 0, 0), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 250, 0, MS_SILENT, MZ_MEDIUM, MR_COLD|MR_ELEC|MR_POISON|MR_ACID|MR_STONE, MR_COLD|MR_ELEC|MR_POISON, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_OMNIVORE|M1_ACID, M2_HOSTILE|M2_NEUTER, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;black pudding&quot;, S_PUDDING, 10, 6, 6, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_CORR, 3, 8), Attack(AT_NONE, AD_CORR, 0, 0), Attack(), Attack(), Attack(), Attack(), 900, 250, 0, MS_SILENT, MZ_LARGE, MR_COLD|MR_ELEC|MR_POISON|MR_ACID|MR_STONE, MR_COLD|MR_ELEC|MR_POISON, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_OMNIVORE|M1_ACID, M2_HOSTILE|M2_NEUTER, 0, BLACK));
-	monsters.push_back(new Monster(&quot;green slime&quot;, S_PUDDING, 6, 6, 6, 0, 0, (G_HELL|G_GENO|1), Attack(AT_TUCH, AD_SLIM, 1, 4), Attack(AT_NONE, AD_SLIM, 0, 0), Attack(), Attack(), Attack(), Attack(), 400, 150, 0, MS_SILENT, MZ_LARGE, MR_COLD|MR_ELEC|MR_POISON|MR_ACID|MR_STONE, 0, M1_BREATHLESS|M1_AMORPHOUS|M1_NOEYES|M1_NOLIMBS|M1_NOHEAD| M1_MINDLESS|M1_OMNIVORE|M1_ACID|M1_POIS, M2_HOSTILE|M2_NEUTER, 0, GREEN));
-	monsters.push_back(new Monster(&quot;quantum mechanic&quot;, S_QUANTMECH, 7, 12, 3, 10, 0, (G_GENO|3), Attack(AT_CLAW, AD_TLPT, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 20, 0, MS_HUMANOID, MZ_HUMAN, MR_POISON, 0, M1_HUMANOID|M1_OMNIVORE|M1_POIS|M1_TPORT, M2_HOSTILE, M3_INFRAVISIBLE, CYAN));
-	monsters.push_back(new Monster(&quot;rust monster&quot;, S_RUSTMONST, 5, 18, 2, 0, 0, (G_GENO|2), Attack(AT_TUCH, AD_RUST, 0, 0), Attack(AT_TUCH, AD_RUST, 0, 0), Attack(AT_NONE, AD_RUST, 0, 0), Attack(), Attack(), Attack(), 1000, 250, 0, MS_SILENT, MZ_MEDIUM, 0, 0, M1_SWIM|M1_ANIMAL|M1_NOHANDS|M1_METALLIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;disenchanter&quot;, S_RUSTMONST, 12, 12, -10, 0, -3, (G_HELL|G_GENO|2), Attack(AT_CLAW, AD_ENCH, 4, 4), Attack(AT_NONE, AD_ENCH, 0, 0), Attack(), Attack(), Attack(), Attack(), 750, 200, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_ANIMAL|M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, BLUE));
-	monsters.push_back(new Monster(&quot;garter snake&quot;, S_SNAKE, 1, 8, 8, 0, 0, (G_LGROUP|G_GENO|1), Attack(AT_BITE, AD_PHYS, 1, 2), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 60, 0, MS_HISS, MZ_TINY, 0, 0, M1_SWIM|M1_CONCEAL|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY|M1_OVIPAROUS| M1_CARNIVORE|M1_NOTAKE, 0, 0, GREEN));
-	monsters.push_back(new Monster(&quot;snake&quot;, S_SNAKE, 4, 15, 3, 0, 0, (G_GENO|2), Attack(AT_BITE, AD_DRST, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 100, 80, 0, MS_HISS, MZ_SMALL, MR_POISON, MR_POISON, M1_SWIM|M1_CONCEAL|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY|M1_POIS| M1_OVIPAROUS|M1_CARNIVORE|M1_NOTAKE, M2_HOSTILE, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;water moccasin&quot;, S_SNAKE, 4, 15, 3, 0, 0, (G_GENO|G_NOGEN|G_LGROUP), Attack(AT_BITE, AD_DRST, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 150, 80, 0, MS_HISS, MZ_SMALL, MR_POISON, MR_POISON, M1_SWIM|M1_CONCEAL|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY|M1_POIS| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, M2_HOSTILE, 0, RED));
-	monsters.push_back(new Monster(&quot;pit viper&quot;, S_SNAKE, 6, 15, 2, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_DRST, 1, 4), Attack(AT_BITE, AD_DRST, 1, 4), Attack(), Attack(), Attack(), Attack(), 100, 60, 0, MS_HISS, MZ_MEDIUM, MR_POISON, MR_POISON, M1_SWIM|M1_CONCEAL|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY|M1_POIS| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, M2_HOSTILE, M3_INFRAVISION, BLUE));
-	monsters.push_back(new Monster(&quot;python&quot;, S_SNAKE, 6, 3, 5, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(AT_TUCH, AD_PHYS, 0, 0), Attack(AT_HUGS, AD_WRAP, 1, 4), Attack(AT_HUGS, AD_PHYS, 2, 4), Attack(), Attack(), 250, 100, 0, MS_HISS, MZ_LARGE, 0, 0, M1_SWIM|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, M2_HOSTILE|M2_STRONG, M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;cobra&quot;, S_SNAKE, 6, 18, 2, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_DRST, 2, 4), Attack(AT_SPIT, AD_BLND, 0, 0), Attack(), Attack(), Attack(), Attack(), 250, 100, 0, MS_HISS, MZ_MEDIUM, MR_POISON, MR_POISON, M1_SWIM|M1_CONCEAL|M1_NOLIMBS|M1_ANIMAL|M1_SLITHY|M1_POIS| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, M2_HOSTILE, 0, BLUE));
-	monsters.push_back(new Monster(&quot;troll&quot;, S_TROLL, 7, 12, 4, 0, -3, (G_GENO|2), Attack(AT_WEAP, AD_PHYS, 4, 2), Attack(AT_CLAW, AD_PHYS, 4, 2), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), 800, 350, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID|M1_REGEN|M1_CARNIVORE, M2_STRONG|M2_STALK|M2_HOSTILE, M3_INFRAVISIBLE|M3_INFRAVISION, YELLOW));
-	monsters.push_back(new Monster(&quot;ice troll&quot;, S_TROLL, 9, 10, 2, 20, -3, (G_NOHELL|G_GENO|1), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_CLAW, AD_COLD, 2, 6), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), 1000, 300, 0, MS_GRUNT, MZ_LARGE, MR_COLD, MR_COLD, M1_HUMANOID|M1_REGEN|M1_CARNIVORE, M2_STRONG|M2_STALK|M2_HOSTILE, M3_INFRAVISIBLE|M3_INFRAVISION, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;rock troll&quot;, S_TROLL, 9, 12, 0, 0, -3, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 3, 6), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), 1200, 300, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID|M1_REGEN|M1_CARNIVORE, M2_STRONG|M2_STALK|M2_HOSTILE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, CYAN));
-	monsters.push_back(new Monster(&quot;water troll&quot;, S_TROLL, 11, 14, 4, 40, -3, (G_NOGEN|G_GENO), Attack(AT_WEAP, AD_PHYS, 2, 8), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), 1200, 350, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID|M1_REGEN|M1_CARNIVORE|M1_SWIM, M2_STRONG|M2_STALK|M2_HOSTILE, M3_INFRAVISIBLE|M3_INFRAVISION, BLUE));
-	monsters.push_back(new Monster(&quot;Olog-hai&quot;, S_TROLL, 13, 12, -4, 0, -7, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 3, 6), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), 1500, 400, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID|M1_REGEN|M1_CARNIVORE, M2_STRONG|M2_STALK|M2_HOSTILE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;umber hulk&quot;, S_UMBER, 9, 6, 2, 25, 0, (G_GENO|2), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(AT_BITE, AD_PHYS, 2, 5), Attack(AT_GAZE, AD_CONF, 0, 0), Attack(), Attack(), 1200, 500, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_TUNNEL|M1_CARNIVORE, M2_STRONG, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;vampire&quot;, S_VAMPIRE, 10, 12, 1, 25, -8, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_BITE, AD_DRLI, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_VAMPIRE, MZ_HUMAN, MR_SLEEP|MR_POISON, 0, M1_FLY|M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_STRONG|M2_NASTY, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;vampire lord&quot;, S_VAMPIRE, 12, 14, 0, 50, -9, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 8), Attack(AT_BITE, AD_DRLI, 1, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_VAMPIRE, MZ_HUMAN, MR_SLEEP|MR_POISON, 0, M1_FLY|M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_LORD|M2_MALE, M3_INFRAVISIBLE, BLUE));
-	monsters.push_back(new Monster(&quot;Vlad the Impaler&quot;, S_VAMPIRE, 14, 18, -3, 80, -10, (G_NOGEN|G_NOCORPSE|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 10), Attack(AT_BITE, AD_DRLI, 1, 10), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_VAMPIRE, MZ_HUMAN, MR_SLEEP|MR_POISON, 0, M1_FLY|M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN, M2_NOPOLY|M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_PNAME|M2_STRONG| M2_NASTY|M2_PRINCE|M2_MALE, M3_WAITFORU|M3_WANTSCAND|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;barrow wight&quot;, S_WRAITH, 3, 12, 5, 5, -3, (G_GENO|G_NOCORPSE|1), Attack(AT_WEAP, AD_DRLI, 0, 0), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), 1200, 0, 0, MS_SPELL, MZ_HUMAN, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_HUMANOID, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_COLLECT, 0, WHITE));
-	monsters.push_back(new Monster(&quot;wraith&quot;, S_WRAITH, 6, 12, 4, 15, -6, (G_GENO|2), Attack(AT_TUCH, AD_DRLI, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUMAN, MR_COLD|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_BREATHLESS|M1_FLY|M1_HUMANOID|M1_UNSOLID, M2_UNDEAD|M2_STALK|M2_HOSTILE, 0, BLACK));
-	monsters.push_back(new Monster(&quot;Nazgul&quot;, S_WRAITH, 13, 12, 0, 25, -17, (G_GENO|G_NOCORPSE|1), Attack(AT_WEAP, AD_DRLI, 1, 4), Attack(AT_BREA, AD_SLEE, 2, 25), Attack(), Attack(), Attack(), Attack(), 1450, 0, 0, MS_SPELL, MZ_HUMAN, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_HUMANOID, M2_NOPOLY|M2_UNDEAD|M2_STALK|M2_STRONG|M2_HOSTILE|M2_MALE|M2_COLLECT, 0, MAGENTA));
-	monsters.push_back(new Monster(&quot;xorn&quot;, S_XORN, 8, 9, -2, 20, 0, (G_GENO|1), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_PHYS, 4, 6), Attack(), Attack(), 1200, 700, 0, MS_ROAR, MZ_MEDIUM, MR_FIRE|MR_COLD|MR_STONE, MR_STONE, M1_BREATHLESS|M1_WALLWALK|M1_THICK_HIDE|M1_METALLIVORE, M2_HOSTILE|M2_STRONG, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;monkey&quot;, S_YETI, 2, 12, 6, 0, 0, (G_GENO|1), Attack(AT_CLAW, AD_SITM, 0, 0), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), 100, 50, 0, MS_GROWL, MZ_SMALL, 0, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, 0, M3_INFRAVISIBLE, WHITE));
-	monsters.push_back(new Monster(&quot;ape&quot;, S_YETI, 4, 12, 6, 0, 0, (G_GENO|G_SGROUP|2), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), 1100, 500, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_STRONG, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;owlbear&quot;, S_YETI, 5, 12, 5, 0, 0, (G_GENO|3), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_HUGS, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), 1700, 700, 0, MS_ROAR, MZ_LARGE, 0, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_HOSTILE|M2_STRONG|M2_NASTY, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;yeti&quot;, S_YETI, 5, 15, 6, 0, 0, (G_GENO|2), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), 1600, 700, 0, MS_GROWL, MZ_LARGE, MR_COLD, MR_COLD, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;carnivorous ape&quot;, S_YETI, 6, 12, 6, 0, 0, (G_GENO|1), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_HUGS, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), 1250, 550, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_ANIMAL|M1_HUMANOID|M1_CARNIVORE, M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, BLACK));
-	monsters.push_back(new Monster(&quot;sasquatch&quot;, S_YETI, 7, 15, 6, 0, 2, (G_GENO|1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_KICK, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), 1550, 750, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_ANIMAL|M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, M2_STRONG, M3_INFRAVISIBLE, WHITE));
-	monsters.push_back(new Monster(&quot;kobold zombie&quot;, S_ZOMBIE, 0, 6, 10, 0, -2, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 50, 0, MS_SILENT, MZ_SMALL, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_STALK|M2_HOSTILE, M3_INFRAVISION, YELLOW));
-	monsters.push_back(new Monster(&quot;gnome zombie&quot;, S_ZOMBIE, 1, 6, 10, 0, -2, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 5), Attack(), Attack(), Attack(), Attack(), Attack(), 650, 50, 0, MS_SILENT, MZ_SMALL, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_GNOME, M3_INFRAVISION, YELLOW));
-	monsters.push_back(new Monster(&quot;orc zombie&quot;, S_ZOMBIE, 2, 6, 9, 0, -3, (G_GENO|G_SGROUP|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 850, 75, 0, MS_SILENT, MZ_HUMAN, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_ORC, M3_INFRAVISION, WHITE));
-	monsters.push_back(new Monster(&quot;dwarf zombie&quot;, S_ZOMBIE, 2, 6, 9, 0, -3, (G_GENO|G_SGROUP|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 900, 150, 0, MS_SILENT, MZ_HUMAN, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_DWARF, M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;elf zombie&quot;, S_ZOMBIE, 3, 6, 9, 0, -3, (G_GENO|G_SGROUP|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 7), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 175, 0, MS_SILENT, MZ_HUMAN, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_ELF, M3_INFRAVISION, GREEN));
-	monsters.push_back(new Monster(&quot;human zombie&quot;, S_ZOMBIE, 4, 6, 8, 0, -3, (G_GENO|G_SGROUP|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 200, 0, MS_SILENT, MZ_HUMAN, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_UNDEAD|M2_STALK|M2_HOSTILE, M3_INFRAVISION, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;ettin zombie&quot;, S_ZOMBIE, 6, 8, 6, 0, -4, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 10), Attack(AT_CLAW, AD_PHYS, 1, 10), Attack(), Attack(), Attack(), Attack(), 1700, 250, 0, MS_SILENT, MZ_HUGE, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_STRONG, M3_INFRAVISION, BLUE));
-	monsters.push_back(new Monster(&quot;giant zombie&quot;, S_ZOMBIE, 8, 8, 6, 0, -4, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), Attack(), 2050, 375, 0, MS_SILENT, MZ_HUGE, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_GIANT|M2_STRONG, M3_INFRAVISION, CYAN));
-	monsters.push_back(new Monster(&quot;ghoul&quot;, S_ZOMBIE, 3, 6, 10, 0, -2, (G_GENO|G_NOCORPSE|1), Attack(AT_CLAW, AD_PLYS, 1, 2), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), 400, 50, 0, MS_SILENT, MZ_SMALL, MR_COLD|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_POIS, M2_UNDEAD|M2_WANDER|M2_HOSTILE, M3_INFRAVISION, BLACK));
-	monsters.push_back(new Monster(&quot;skeleton&quot;, S_ZOMBIE, 12, 8, 4, 0, 0, (G_NOCORPSE|G_NOGEN), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_TUCH, AD_SLOW, 1, 6), Attack(), Attack(), Attack(), Attack(), 300, 5, 0, MS_BONES, MZ_HUMAN, MR_COLD|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_THICK_HIDE, M2_UNDEAD|M2_WANDER|M2_HOSTILE|M2_STRONG|M2_COLLECT|M2_NASTY, M3_INFRAVISION, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;straw golem&quot;, S_GOLEM, 3, 12, 10, 0, 0, (G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 2), Attack(AT_CLAW, AD_PHYS, 1, 2), Attack(), Attack(), Attack(), Attack(), 400, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_HOSTILE|M2_NEUTER, 0, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;paper golem&quot;, S_GOLEM, 3, 12, 10, 0, 0, (G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_HOSTILE|M2_NEUTER, 0, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;rope golem&quot;, S_GOLEM, 4, 9, 8, 0, 0, (G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_HUGS, AD_PHYS, 6, 1), Attack(), Attack(), Attack(), 450, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_HOSTILE|M2_NEUTER, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;gold golem&quot;, S_GOLEM, 5, 9, 6, 0, 0, (G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 2, 3), Attack(AT_CLAW, AD_PHYS, 2, 3), Attack(), Attack(), Attack(), Attack(), 450, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP|MR_POISON|MR_ACID, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_THICK_HIDE, M2_HOSTILE|M2_NEUTER, 0, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;leather golem&quot;, S_GOLEM, 6, 6, 6, 0, 0, (G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 800, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_HOSTILE|M2_NEUTER, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;wood golem&quot;, S_GOLEM, 7, 3, 4, 0, 0, (G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 900, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_THICK_HIDE, M2_HOSTILE|M2_NEUTER, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;flesh golem&quot;, S_GOLEM, 9, 8, 9, 30, 0, (1), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), Attack(), 1400, 600, 0, MS_SILENT, MZ_LARGE, MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON, MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID, M2_HOSTILE|M2_STRONG, 0, RED));
-	monsters.push_back(new Monster(&quot;clay golem&quot;, S_GOLEM, 11, 7, 7, 40, 0, (G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 3, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 1550, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_THICK_HIDE, M2_HOSTILE|M2_STRONG, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;stone golem&quot;, S_GOLEM, 14, 6, 5, 50, 0, (G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 3, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 1900, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP|MR_POISON|MR_STONE, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_THICK_HIDE, M2_HOSTILE|M2_STRONG, 0, WHITE));
-	monsters.push_back(new Monster(&quot;glass golem&quot;, S_GOLEM, 16, 6, 1, 50, 0, (G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), Attack(), 1800, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP|MR_POISON|MR_ACID, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_THICK_HIDE, M2_HOSTILE|M2_STRONG, 0, CYAN));
-	monsters.push_back(new Monster(&quot;iron golem&quot;, S_GOLEM, 18, 6, 3, 60, 0, (G_NOCORPSE|1), Attack(AT_WEAP, AD_PHYS, 4, 10), Attack(AT_BREA, AD_DRST, 4, 6), Attack(), Attack(), Attack(), Attack(), 2000, 0, 0, MS_SILENT, MZ_LARGE, MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON, 0, M1_BREATHLESS|M1_MINDLESS|M1_HUMANOID|M1_THICK_HIDE|M1_POIS, M2_HOSTILE|M2_STRONG|M2_COLLECT, 0, CYAN));
-	monsters.push_back(new Monster(&quot;human&quot;, S_HUMAN, 0, 12, 10, 0, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;wererat&quot;, S_HUMAN, 2, 12, 10, 10, -7, (1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_WERE, MZ_HUMAN, MR_NO_ELBERETH|MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_REGEN|M1_OMNIVORE, M2_NOPOLY|M2_WERE|M2_HOSTILE|M2_HUMAN|M2_COLLECT, M3_INFRAVISIBLE, YELLOW));
-	monsters.push_back(new Monster(&quot;werejackal&quot;, S_HUMAN, 2, 12, 10, 10, -7, (1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_WERE, MZ_HUMAN, MR_NO_ELBERETH|MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_REGEN|M1_OMNIVORE, M2_NOPOLY|M2_WERE|M2_HOSTILE|M2_HUMAN|M2_COLLECT, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;werewolf&quot;, S_HUMAN, 5, 12, 10, 20, -7, (1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_WERE, MZ_HUMAN, MR_NO_ELBERETH|MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_REGEN|M1_OMNIVORE, M2_NOPOLY|M2_WERE|M2_HOSTILE|M2_HUMAN|M2_COLLECT, M3_INFRAVISIBLE, BOLD_RED));
-	monsters.push_back(new Monster(&quot;elf&quot;, S_HUMAN, 10, 12, 10, 2, -3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH|MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_OMNIVORE|M1_SEE_INVIS, M2_NOPOLY|M2_ELF|M2_STRONG|M2_COLLECT, M3_INFRAVISION|M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;Woodland-elf&quot;, S_HUMAN, 4, 12, 10, 10, -5, (G_GENO|G_SGROUP|2), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH|MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_OMNIVORE|M1_SEE_INVIS, M2_ELF|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, GREEN));
-	monsters.push_back(new Monster(&quot;Green-elf&quot;, S_HUMAN, 5, 12, 10, 10, -6, (G_GENO|G_SGROUP|2), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH|MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_OMNIVORE|M1_SEE_INVIS, M2_ELF|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, BOLD_GREEN));
-	monsters.push_back(new Monster(&quot;Grey-elf&quot;, S_HUMAN, 6, 12, 10, 10, -7, (G_GENO|G_SGROUP|2), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH|MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_OMNIVORE|M1_SEE_INVIS, M2_ELF|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, WHITE));
-	monsters.push_back(new Monster(&quot;elf-lord&quot;, S_HUMAN, 8, 12, 10, 20, -9, (G_GENO|G_SGROUP|2), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH|MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_OMNIVORE|M1_SEE_INVIS, M2_ELF|M2_STRONG|M2_LORD|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, BOLD_BLUE));
-	monsters.push_back(new Monster(&quot;Elvenking&quot;, S_HUMAN, 9, 12, 10, 25, -10, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH|MR_SLEEP, MR_SLEEP, M1_HUMANOID|M1_OMNIVORE|M1_SEE_INVIS, M2_ELF|M2_STRONG|M2_PRINCE|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;doppelganger&quot;, S_HUMAN, 9, 12, 5, 20, 0, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 1, 12), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_IMITATE, MZ_HUMAN, MR_NO_ELBERETH|MR_SLEEP, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_HOSTILE|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;nurse&quot;, S_HUMAN, 11, 6, 0, 0, 0, (G_GENO|3), Attack(AT_CLAW, AD_HEAL, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_NURSE, MZ_HUMAN, MR_NO_ELBERETH|MR_POISON, MR_POISON, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_HOSTILE, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;shopkeeper&quot;, S_HUMAN, 12, 18, 0, 50, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 4, 4), Attack(AT_WEAP, AD_PHYS, 4, 4), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SELL, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;guard&quot;, S_HUMAN, 12, 12, 10, 40, 10, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 4, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARD, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BLUE));
-	monsters.push_back(new Monster(&quot;prisoner&quot;, S_HUMAN, 12, 12, 10, 0, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_DJINNI, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE|M3_CLOSE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;Oracle&quot;, S_HUMAN, 12, 0, 0, 50, 0, (G_NOGEN|G_UNIQ), Attack(AT_NONE, AD_MAGM, 0, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_ORACLE, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_FEMALE, M3_INFRAVISIBLE, BOLD_BLUE));
-	monsters.push_back(new Monster(&quot;aligned priest&quot;, S_HUMAN, 12, 12, 10, 50, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 4, 10), Attack(AT_KICK, AD_PHYS, 1, 4), Attack(AT_MAGC, AD_CLRC, 0, 0), Attack(), Attack(), Attack(), 1450, 400, 0, MS_PRIEST, MZ_HUMAN, MR_NO_ELBERETH|MR_ELEC, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_LORD|M2_PEACEFUL|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;high priest&quot;, S_HUMAN, 25, 15, 7, 70, 0, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 4, 10), Attack(AT_KICK, AD_PHYS, 2, 8), Attack(AT_MAGC, AD_CLRC, 2, 8), Attack(AT_MAGC, AD_CLRC, 2, 8), Attack(), Attack(), 1450, 400, 0, MS_PRIEST, MZ_HUMAN, MR_NO_ELBERETH|MR_FIRE|MR_ELEC|MR_SLEEP|MR_POISON, 0, M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MINION|M2_PRINCE|M2_NASTY|M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;soldier&quot;, S_HUMAN, 6, 10, 10, 0, -2, (G_SGROUP|G_GENO|1), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SOLDIER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_STALK|M2_HOSTILE|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, WHITE));
-	monsters.push_back(new Monster(&quot;sergeant&quot;, S_HUMAN, 8, 10, 10, 5, -3, (G_SGROUP|G_GENO|1), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SOLDIER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_STALK|M2_HOSTILE|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;lieutenant&quot;, S_HUMAN, 10, 10, 10, 15, -4, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 3, 4), Attack(AT_WEAP, AD_PHYS, 3, 4), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SOLDIER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_STALK|M2_HOSTILE|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, GREEN));
-	monsters.push_back(new Monster(&quot;captain&quot;, S_HUMAN, 12, 10, 10, 15, -5, (G_GENO|1), Attack(AT_WEAP, AD_PHYS, 4, 4), Attack(AT_WEAP, AD_PHYS, 4, 4), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SOLDIER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_STALK|M2_HOSTILE|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BLUE));
-	monsters.push_back(new Monster(&quot;watchman&quot;, S_HUMAN, 6, 10, 10, 0, -2, (G_SGROUP|G_NOGEN|G_GENO|1), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SOLDIER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_STALK|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, WHITE));
-	monsters.push_back(new Monster(&quot;watch captain&quot;, S_HUMAN, 10, 10, 10, 15, -4, (G_NOGEN|G_GENO|1), Attack(AT_WEAP, AD_PHYS, 3, 4), Attack(AT_WEAP, AD_PHYS, 3, 4), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SOLDIER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_MERC|M2_STALK|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, GREEN));
-	monsters.push_back(new Monster(&quot;Medusa&quot;, S_HUMAN, 20, 12, 2, 50, -15, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 1, 8), Attack(AT_GAZE, AD_STON, 0, 0), Attack(AT_BITE, AD_DRST, 1, 6), Attack(), Attack(), 1450, 400, 0, MS_HISS, MZ_LARGE, MR_NO_ELBERETH|MR_POISON|MR_STONE, MR_POISON|MR_STONE, M1_FLY|M1_SWIM|M1_AMPHIBIOUS|M1_HUMANOID|M1_POIS|M1_OMNIVORE, M2_NOPOLY|M2_HOSTILE|M2_STRONG|M2_PNAME|M2_FEMALE, M3_WAITFORU|M3_INFRAVISIBLE, BOLD_GREEN));
-	monsters.push_back(new Monster(&quot;Wizard of Yendor&quot;, S_HUMAN, 30, 12, -8, 100, A_NONE, (G_NOGEN|G_UNIQ), Attack(AT_CLAW, AD_SAMU, 2, 12), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_CUSS, MZ_HUMAN, MR_NO_ELBERETH|MR_FIRE|MR_POISON, MR_FIRE|MR_POISON, M1_FLY|M1_BREATHLESS|M1_HUMANOID|M1_REGEN|M1_SEE_INVIS|M1_TPORT| M1_TPORT_CNTRL|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_HOSTILE|M2_STRONG|M2_NASTY| M2_PRINCE|M2_MALE|M2_MAGIC, M3_COVETOUS|M3_WAITFORU|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Croesus&quot;, S_HUMAN, 20, 15, 0, 40, 15, (G_UNIQ|G_NOGEN), Attack(AT_WEAP, AD_PHYS, 4, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARD, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STALK|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_PNAME| M2_PRINCE|M2_MALE|M2_GREEDY|M2_JEWELS|M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;ghost&quot;, S_GHOST, 10, 3, -5, 50, -5, (G_NOCORPSE|G_NOGEN), Attack(AT_TUCH, AD_PHYS, 1, 1), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 0, 0, MS_SILENT, MZ_HUMAN, MR_COLD|MR_DISINT|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_WALLWALK|M1_HUMANOID|M1_UNSOLID, M2_NOPOLY|M2_UNDEAD|M2_STALK|M2_HOSTILE, M3_INFRAVISION, WHITE));
-	monsters.push_back(new Monster(&quot;shade&quot;, S_GHOST, 12, 10, 10, 0, 0, (G_NOCORPSE|G_NOGEN), Attack(AT_TUCH, AD_PLYS, 2, 6), Attack(AT_TUCH, AD_SLOW, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 0, 0, MS_WAIL, MZ_HUMAN, MR_COLD|MR_DISINT|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_BREATHLESS|M1_WALLWALK|M1_HUMANOID|M1_UNSOLID|M1_SEE_INVIS, M2_NOPOLY|M2_UNDEAD|M2_WANDER|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISION, BLACK));
-	monsters.push_back(new Monster(&quot;water demon&quot;, S_DEMON, 8, 12, -4, 30, -7, (G_NOCORPSE|G_NOGEN), Attack(AT_WEAP, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), 1450, 400, 0, MS_DJINNI, MZ_HUMAN, MR_FIRE|MR_POISON, 0, M1_HUMANOID|M1_POIS|M1_SWIM, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, BLUE));
-	monsters.push_back(new Monster(&quot;horned devil&quot;, S_DEMON, 6, 9, -5, 50, 11, (G_HELL|G_NOCORPSE|2), Attack(AT_WEAP, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_BITE, AD_PHYS, 2, 3), Attack(AT_STNG, AD_PHYS, 1, 3), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_HUMAN, MR_FIRE|MR_POISON, 0, M1_POIS|M1_THICK_HIDE, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, YELLOW));
-	monsters.push_back(new Monster(&quot;succubus&quot;, S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_DRLI, 2, 6), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SEDUCE, MZ_HUMAN, MR_FIRE|MR_POISON, 0, M1_HUMANOID|M1_FLY|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY|M2_FEMALE, M3_INFRAVISIBLE|M3_INFRAVISION, WHITE));
-	monsters.push_back(new Monster(&quot;incubus&quot;, S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_DRLI, 2, 6), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SEDUCE, MZ_HUMAN, MR_FIRE|MR_POISON, 0, M1_HUMANOID|M1_FLY|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY|M2_MALE, M3_INFRAVISIBLE|M3_INFRAVISION, WHITE));
-	monsters.push_back(new Monster(&quot;erinys&quot;, S_DEMON, 7, 12, 2, 30, 10, (G_HELL|G_NOCORPSE|G_SGROUP|2), Attack(AT_WEAP, AD_DRST, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_HUMAN, MR_FIRE|MR_POISON, 0, M1_HUMANOID|M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_FEMALE| M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;barbed devil&quot;, S_DEMON, 8, 12, 0, 35, 8, (G_HELL|G_NOCORPSE|G_SGROUP|2), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_STNG, AD_PHYS, 3, 4), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_HUMAN, MR_FIRE|MR_POISON, 0, M1_POIS|M1_THICK_HIDE, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;marilith&quot;, S_DEMON, 7, 12, -6, 80, -12, (G_HELL|G_NOCORPSE|1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), 1450, 400, 0, MS_CUSS, MZ_LARGE, MR_FIRE|MR_POISON, 0, M1_HUMANOID|M1_SLITHY|M1_SEE_INVIS|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY|M2_FEMALE|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;vrock&quot;, S_DEMON, 8, 12, 0, 50, -9, (G_HELL|G_NOCORPSE|G_SGROUP|2), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 8), Attack(AT_CLAW, AD_PHYS, 1, 8), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), 1450, 400, 0, MS_SILENT, MZ_LARGE, MR_FIRE|MR_POISON, 0, M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;hezrou&quot;, S_DEMON, 9, 6, -2, 55, -10, (G_HELL|G_NOCORPSE|G_SGROUP|2), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_PHYS, 4, 4), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_LARGE, MR_FIRE|MR_POISON, 0, M1_HUMANOID|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;bone devil&quot;, S_DEMON, 9, 15, -1, 40, -9, (G_HELL|G_NOCORPSE|G_SGROUP|2), Attack(AT_WEAP, AD_PHYS, 3, 4), Attack(AT_STNG, AD_DRST, 2, 4), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_LARGE, MR_FIRE|MR_POISON, 0, M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, WHITE));
-	monsters.push_back(new Monster(&quot;ice devil&quot;, S_DEMON, 11, 6, -4, 55, -12, (G_HELL|G_NOCORPSE|2), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(AT_STNG, AD_COLD, 3, 4), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_LARGE, MR_FIRE|MR_COLD|MR_POISON, 0, M1_SEE_INVIS|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;nalfeshnee&quot;, S_DEMON, 11, 9, -1, 65, -11, (G_HELL|G_NOCORPSE|1), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), 1450, 400, 0, MS_SPELL, MZ_LARGE, MR_FIRE|MR_POISON, 0, M1_HUMANOID|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;pit fiend&quot;, S_DEMON, 13, 6, -3, 65, -13, (G_HELL|G_NOCORPSE|2), Attack(AT_WEAP, AD_PHYS, 4, 2), Attack(AT_WEAP, AD_PHYS, 4, 2), Attack(AT_HUGS, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GROWL, MZ_LARGE, MR_FIRE|MR_POISON, 0, M1_SEE_INVIS|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;balrog&quot;, S_DEMON, 16, 5, -2, 75, -14, (G_HELL|G_NOCORPSE|1), Attack(AT_WEAP, AD_PHYS, 8, 4), Attack(AT_WEAP, AD_PHYS, 4, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_LARGE, MR_FIRE|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_POIS, M2_DEMON|M2_STALK|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, RED));
-	monsters.push_back(new Monster(&quot;Juiblex&quot;, S_DEMON, 50, 3, -7, 65, -15, (G_HELL|G_NOCORPSE|G_NOGEN|G_UNIQ), Attack(AT_ENGL, AD_DISE, 4, 10), Attack(AT_SPIT, AD_ACID, 3, 6), Attack(), Attack(), Attack(), Attack(), 1500, 0, 0, MS_GURGLE, MZ_LARGE, MR_FIRE|MR_POISON|MR_ACID|MR_STONE, 0, M1_AMPHIBIOUS|M1_AMORPHOUS|M1_NOHEAD|M1_FLY|M1_SEE_INVIS|M1_ACID| M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_NASTY|M2_LORD| M2_MALE, M3_WAITFORU|M3_WANTSAMUL|M3_INFRAVISION, BOLD_GREEN));
-	monsters.push_back(new Monster(&quot;Yeenoghu&quot;, S_DEMON, 56, 18, -5, 80, -15, (G_HELL|G_NOCORPSE|G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 3, 6), Attack(AT_WEAP, AD_CONF, 2, 8), Attack(AT_CLAW, AD_PLYS, 1, 6), Attack(AT_MAGC, AD_MAGM, 2, 6), Attack(), Attack(), 900, 500, 0, MS_ORC, MZ_LARGE, MR_FIRE|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_NASTY|M2_LORD| M2_MALE|M2_COLLECT, M3_WANTSAMUL|M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;Orcus&quot;, S_DEMON, 66, 9, -6, 85, -20, (G_HELL|G_NOCORPSE|G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 3, 6), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(AT_MAGC, AD_SPEL, 8, 6), Attack(AT_STNG, AD_DRST, 2, 4), Attack(), 1500, 500, 0, MS_ORC, MZ_HUGE, MR_FIRE|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_NASTY|M2_PRINCE| M2_MALE|M2_COLLECT, M3_WAITFORU|M3_WANTSBOOK|M3_WANTSAMUL|M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;Geryon&quot;, S_DEMON, 72, 3, -3, 75, 15, (G_HELL|G_NOCORPSE|G_NOGEN|G_UNIQ), Attack(AT_CLAW, AD_PHYS, 3, 6), Attack(AT_CLAW, AD_PHYS, 3, 6), Attack(AT_STNG, AD_DRST, 2, 4), Attack(), Attack(), Attack(), 1500, 500, 0, MS_BRIBE, MZ_HUGE, MR_FIRE|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_POIS|M1_SLITHY, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_NASTY| M2_PRINCE|M2_MALE, M3_WANTSAMUL|M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;Dispater&quot;, S_DEMON, 78, 15, -2, 80, 15, (G_HELL|G_NOCORPSE|G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 4, 6), Attack(AT_MAGC, AD_SPEL, 6, 6), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_BRIBE, MZ_HUMAN, MR_FIRE|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_POIS|M1_HUMANOID, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_NASTY| M2_PRINCE|M2_MALE|M2_COLLECT, M3_WANTSAMUL|M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;Baalzebub&quot;, S_DEMON, 89, 9, -5, 85, 20, (G_HELL|G_NOCORPSE|G_NOGEN|G_UNIQ), Attack(AT_BITE, AD_DRST, 2, 6), Attack(AT_GAZE, AD_STUN, 2, 6), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_BRIBE, MZ_LARGE, MR_FIRE|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_NASTY| M2_PRINCE|M2_MALE, M3_WANTSAMUL|M3_WAITFORU|M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;Asmodeus&quot;, S_DEMON, 105, 12, -7, 90, 20, (G_HELL|G_NOCORPSE|G_NOGEN|G_UNIQ), Attack(AT_CLAW, AD_PHYS, 4, 4), Attack(AT_MAGC, AD_COLD, 6, 6), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_BRIBE, MZ_HUGE, MR_FIRE|MR_COLD|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_HUMANOID|M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_STRONG| M2_NASTY|M2_PRINCE|M2_MALE, M3_WANTSAMUL|M3_WAITFORU|M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;Demogorgon&quot;, S_DEMON, 106, 15, -8, 95, -20, (G_HELL|G_NOCORPSE|G_NOGEN|G_UNIQ), Attack(AT_MAGC, AD_SPEL, 8, 6), Attack(AT_STNG, AD_DRLI, 1, 4), Attack(AT_CLAW, AD_DISE, 1, 6), Attack(AT_CLAW, AD_DISE, 1, 6), Attack(), Attack(), 1500, 500, 0, MS_GROWL, MZ_HUGE, MR_FIRE|MR_POISON, 0, M1_FLY|M1_SEE_INVIS|M1_NOHANDS|M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_PNAME|M2_NASTY| M2_PRINCE|M2_MALE, M3_WANTSAMUL|M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;Death&quot;, S_DEMON, 30, 12, -5, 100, 0, (G_UNIQ|G_NOGEN), Attack(AT_TUCH, AD_DETH, 8, 8), Attack(AT_TUCH, AD_DETH, 8, 8), Attack(), Attack(), Attack(), Attack(), 1450, 1, 0, MS_RIDER, MZ_HUMAN, MR_NO_ELBERETH|MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_HUMANOID|M1_REGEN|M1_SEE_INVIS|M1_TPORT_CNTRL, M2_NOPOLY|M2_STALK|M2_HOSTILE|M2_PNAME|M2_STRONG|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;Pestilence&quot;, S_DEMON, 30, 12, -5, 100, 0, (G_UNIQ|G_NOGEN), Attack(AT_TUCH, AD_PEST, 8, 8), Attack(AT_TUCH, AD_PEST, 8, 8), Attack(), Attack(), Attack(), Attack(), 1450, 1, 0, MS_RIDER, MZ_HUMAN, MR_NO_ELBERETH|MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_HUMANOID|M1_REGEN|M1_SEE_INVIS|M1_TPORT_CNTRL, M2_NOPOLY|M2_STALK|M2_HOSTILE|M2_PNAME|M2_STRONG|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;Famine&quot;, S_DEMON, 30, 12, -5, 100, 0, (G_UNIQ|G_NOGEN), Attack(AT_TUCH, AD_FAMN, 8, 8), Attack(AT_TUCH, AD_FAMN, 8, 8), Attack(), Attack(), Attack(), Attack(), 1450, 1, 0, MS_RIDER, MZ_HUMAN, MR_NO_ELBERETH|MR_FIRE|MR_COLD|MR_ELEC|MR_SLEEP|MR_POISON|MR_STONE, 0, M1_FLY|M1_HUMANOID|M1_REGEN|M1_SEE_INVIS|M1_TPORT_CNTRL, M2_NOPOLY|M2_STALK|M2_HOSTILE|M2_PNAME|M2_STRONG|M2_NASTY, M3_INFRAVISIBLE|M3_INFRAVISION, MAGENTA));
-	monsters.push_back(new Monster(&quot;djinni&quot;, S_DEMON, 7, 12, 4, 30, 0, (G_NOGEN|G_NOCORPSE), Attack(AT_WEAP, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 400, 0, MS_DJINNI, MZ_HUMAN, MR_POISON|MR_STONE, 0, M1_HUMANOID|M1_FLY|M1_POIS, M2_NOPOLY|M2_STALK|M2_COLLECT, M3_INFRAVISIBLE, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;sandestin&quot;, S_DEMON, 13, 12, 4, 60, -5, (G_HELL|G_NOCORPSE|1), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), 1500, 400, 0, MS_CUSS, MZ_HUMAN, MR_STONE, 0, M1_HUMANOID, M2_NOPOLY|M2_STALK|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE|M3_INFRAVISION, WHITE));
-	monsters.push_back(new Monster(&quot;jellyfish&quot;, S_EEL, 3, 3, 6, 0, 0, (G_GENO|G_NOGEN), Attack(AT_STNG, AD_DRST, 3, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 80, 20, 0, MS_SILENT, MZ_SMALL, MR_POISON, MR_POISON, M1_SWIM|M1_AMPHIBIOUS|M1_SLITHY|M1_NOLIMBS|M1_NOTAKE|M1_POIS, M2_HOSTILE, 0, BLUE));
-	monsters.push_back(new Monster(&quot;piranha&quot;, S_EEL, 5, 12, 4, 0, 0, (G_GENO|G_NOGEN|G_SGROUP), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 60, 30, 0, MS_SILENT, MZ_SMALL, 0, 0, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_SLITHY|M1_NOLIMBS| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, M2_HOSTILE, 0, RED));
-	monsters.push_back(new Monster(&quot;shark&quot;, S_EEL, 7, 12, 2, 0, 0, (G_GENO|G_NOGEN), Attack(AT_BITE, AD_PHYS, 5, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 350, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_SLITHY|M1_NOLIMBS| M1_CARNIVORE|M1_OVIPAROUS|M1_THICK_HIDE|M1_NOTAKE, M2_HOSTILE, 0, WHITE));
-	monsters.push_back(new Monster(&quot;giant eel&quot;, S_EEL, 5, 9, -1, 0, 0, (G_GENO|G_NOGEN), Attack(AT_BITE, AD_PHYS, 3, 6), Attack(AT_TUCH, AD_WRAP, 0, 0), Attack(), Attack(), Attack(), Attack(), 200, 250, 0, MS_SILENT, MZ_HUGE, 0, 0, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_SLITHY|M1_NOLIMBS| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, M2_HOSTILE, M3_INFRAVISIBLE, CYAN));
-	monsters.push_back(new Monster(&quot;electric eel&quot;, S_EEL, 7, 10, -3, 0, 0, (G_GENO|G_NOGEN), Attack(AT_BITE, AD_ELEC, 4, 6), Attack(AT_TUCH, AD_WRAP, 0, 0), Attack(), Attack(), Attack(), Attack(), 200, 250, 0, MS_SILENT, MZ_HUGE, MR_ELEC, MR_ELEC, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_SLITHY|M1_NOLIMBS| M1_CARNIVORE|M1_OVIPAROUS|M1_NOTAKE, M2_HOSTILE, M3_INFRAVISIBLE, BOLD_BLUE));
-	monsters.push_back(new Monster(&quot;kraken&quot;, S_EEL, 20, 3, 6, 0, -3, (G_GENO|G_NOGEN), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_HUGS, AD_WRAP, 2, 6), Attack(AT_BITE, AD_PHYS, 5, 4), Attack(), Attack(), 1800, 1000, 0, MS_SILENT, MZ_HUGE, 0, 0, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_NOPOLY|M2_HOSTILE|M2_STRONG, M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;newt&quot;, S_LIZARD, 0, 6, 8, 0, 0, (G_GENO|5), Attack(AT_BITE, AD_PHYS, 1, 2), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 20, 0, MS_SILENT, MZ_TINY, 0, 0, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, 0, BOLD_YELLOW));
-	monsters.push_back(new Monster(&quot;gecko&quot;, S_LIZARD, 1, 6, 8, 0, 0, (G_GENO|5), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 20, 0, MS_SQEEK, MZ_TINY, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, 0, GREEN));
-	monsters.push_back(new Monster(&quot;iguana&quot;, S_LIZARD, 2, 6, 7, 0, 0, (G_GENO|5), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 30, 0, MS_SILENT, MZ_TINY, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;baby crocodile&quot;, S_LIZARD, 3, 6, 7, 0, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 200, 200, 0, MS_SILENT, MZ_MEDIUM, 0, 0, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;lizard&quot;, S_LIZARD, 5, 6, 6, 10, 0, (G_GENO|5), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 40, 0, MS_SILENT, MZ_TINY, MR_STONE, MR_STONE, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_HOSTILE, 0, GREEN));
-	monsters.push_back(new Monster(&quot;chameleon&quot;, S_LIZARD, 6, 5, 6, 10, 0, (G_GENO|2), Attack(AT_BITE, AD_PHYS, 4, 2), Attack(), Attack(), Attack(), Attack(), Attack(), 100, 100, 0, MS_SILENT, MZ_TINY, 0, 0, M1_ANIMAL|M1_NOHANDS|M1_CARNIVORE, M2_NOPOLY|M2_HOSTILE, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;crocodile&quot;, S_LIZARD, 6, 9, 5, 0, 0, (G_GENO|1), Attack(AT_BITE, AD_PHYS, 4, 2), Attack(AT_CLAW, AD_PHYS, 1, 12), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_SWIM|M1_AMPHIBIOUS|M1_ANIMAL|M1_THICK_HIDE|M1_NOHANDS| M1_OVIPAROUS|M1_CARNIVORE, M2_STRONG|M2_HOSTILE, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;salamander&quot;, S_LIZARD, 8, 12, -1, 0, -9, (G_HELL|1), Attack(AT_WEAP, AD_PHYS, 2, 8), Attack(AT_TUCH, AD_FIRE, 1, 6), Attack(AT_HUGS, AD_PHYS, 2, 6), Attack(AT_HUGS, AD_FIRE, 3, 6), Attack(), Attack(), 1500, 400, 0, MS_MUMBLE, MZ_HUMAN, MR_SLEEP|MR_FIRE, MR_FIRE, M1_HUMANOID|M1_SLITHY|M1_THICK_HIDE|M1_POIS, M2_STALK|M2_HOSTILE|M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE, BOLD_RED));
-	monsters.push_back(new Monster(&quot;long worm tail&quot;, S_WORM_TAIL, 0, 0, 0, 0, 0, (G_NOGEN|G_NOCORPSE|G_UNIQ), Attack(), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, 0, 0, 0, 0, 0L, M2_NOPOLY, 0, YELLOW));
-	monsters.push_back(new Monster(&quot;archeologist&quot;, S_HUMAN, 10, 12, 10, 1, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_TUNNEL|M1_NEEDPICK|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;barbarian&quot;, S_HUMAN, 10, 12, 10, 1, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH|MR_POISON, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;caveman&quot;, S_HUMAN, 10, 12, 10, 0, 1, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;cavewoman&quot;, S_HUMAN, 10, 12, 10, 0, 1, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_FEMALE|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;healer&quot;, S_HUMAN, 10, 12, 10, 1, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH|MR_POISON, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;knight&quot;, S_HUMAN, 10, 12, 10, 1, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;monk&quot;, S_HUMAN, 10, 12, 10, 2, 0, G_NOGEN, Attack(AT_CLAW, AD_PHYS, 1, 8), Attack(AT_KICK, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_HERBIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT|M2_MALE, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;priest&quot;, S_HUMAN, 10, 12, 10, 2, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_MALE|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;priestess&quot;, S_HUMAN, 10, 12, 10, 2, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_FEMALE|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;ranger&quot;, S_HUMAN, 10, 12, 10, 2, -3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;rogue&quot;, S_HUMAN, 10, 12, 10, 1, -3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_GREEDY|M2_JEWELS|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;samurai&quot;, S_HUMAN, 10, 12, 10, 1, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;valkyrie&quot;, S_HUMAN, 10, 12, 10, 1, -1, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH|MR_COLD, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_FEMALE|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;wizard&quot;, S_HUMAN, 10, 12, 10, 3, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;Lord Carnarvon&quot;, S_HUMAN, 20, 12, 0, 30, 20, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_TUNNEL|M1_NEEDPICK|M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, M3_CLOSE|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Pelias&quot;, S_HUMAN, 20, 12, 0, 30, 0, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH|MR_POISON, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, M3_CLOSE|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Shaman Karnov&quot;, S_HUMAN, 20, 12, 0, 30, 20, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, M3_CLOSE|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Hippocrates&quot;, S_HUMAN, 20, 12, 0, 40, 0, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH|MR_POISON, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, M3_CLOSE|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;King Arthur&quot;, S_HUMAN, 20, 12, 0, 40, 20, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, M3_CLOSE|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Grand Master&quot;, S_HUMAN, 25, 12, 0, 70, 0, (G_NOGEN|G_UNIQ), Attack(AT_CLAW, AD_PHYS, 4, 10), Attack(AT_KICK, AD_PHYS, 2, 8), Attack(AT_MAGC, AD_CLRC, 2, 8), Attack(AT_MAGC, AD_CLRC, 2, 8), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH|MR_FIRE|MR_ELEC|MR_SLEEP|MR_POISON, 0, M1_HUMANOID|M1_SEE_INVIS|M1_HERBIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_NASTY|M2_MAGIC, M3_CLOSE|M3_INFRAVISIBLE, BLACK));
-	monsters.push_back(new Monster(&quot;Arch Priest&quot;, S_HUMAN, 25, 12, 7, 70, 0, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 4, 10), Attack(AT_KICK, AD_PHYS, 2, 8), Attack(AT_MAGC, AD_CLRC, 2, 8), Attack(AT_MAGC, AD_CLRC, 2, 8), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH|MR_FIRE|MR_ELEC|MR_SLEEP|MR_POISON, 0, M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT|M2_MAGIC, M3_CLOSE|M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;Orion&quot;, S_HUMAN, 20, 12, 0, 30, 0, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE|M1_SEE_INVIS|M1_SWIM|M1_AMPHIBIOUS, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, M3_CLOSE|M3_INFRAVISION|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Master of Thieves&quot;, S_HUMAN, 20, 12, 0, 30, -20, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_CLAW, AD_SAMU, 2, 4), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH|MR_STONE, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_MALE|M2_GREEDY| M2_JEWELS|M2_COLLECT|M2_MAGIC, M3_CLOSE|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Lord Sato&quot;, S_HUMAN, 20, 12, 0, 30, 20, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_PEACEFUL|M2_STRONG|M2_MALE| M2_COLLECT|M2_MAGIC, M3_CLOSE|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Norn&quot;, S_HUMAN, 20, 12, 0, 80, 0, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH|MR_COLD, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_FEMALE| M2_COLLECT|M2_MAGIC, M3_CLOSE|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Neferet the Green&quot;, S_HUMAN, 20, 12, 0, 60, 0, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_MAGC, AD_SPEL, 2, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_FEMALE|M2_PNAME|M2_PEACEFUL| M2_STRONG|M2_COLLECT|M2_MAGIC, M3_CLOSE|M3_INFRAVISIBLE, GREEN));
-	monsters.push_back(new Monster(&quot;Minion of Huhetotl&quot;, S_DEMON, 16, 12, -2, 75, -14, (G_NOCORPSE|G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 8, 4), Attack(AT_WEAP, AD_PHYS, 4, 6), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(AT_CLAW, AD_SAMU, 2, 6), Attack(), Attack(), 1450, 400, 0, MS_NEMESIS, MZ_LARGE, MR_FIRE|MR_POISON|MR_STONE, 0, M1_FLY|M1_SEE_INVIS|M1_POIS, M2_NOPOLY|M2_DEMON|M2_STALK|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_COLLECT, M3_WANTSARTI|M3_WAITFORU|M3_INFRAVISION|M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;Thoth Amon&quot;, S_HUMAN, 16, 12, 0, 10, -14, (G_NOGEN|G_UNIQ|G_NOCORPSE), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(AT_CLAW, AD_SAMU, 1, 4), Attack(), Attack(), 1450, 400, 0, MS_NEMESIS, MZ_HUMAN, MR_NO_ELBERETH|MR_POISON|MR_STONE, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_STRONG|M2_MALE|M2_STALK|M2_HOSTILE| M2_NASTY|M2_COLLECT|M2_MAGIC, M3_WANTSARTI|M3_WAITFORU|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Chromatic Dragon&quot;, S_DRAGON, 16, 12, 0, 30, -14, (G_NOGEN|G_UNIQ), Attack(AT_BREA, AD_RBRE, 6, 8), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(AT_CLAW, AD_SAMU, 2, 8), Attack(AT_BITE, AD_PHYS, 4, 8), Attack(AT_BITE, AD_PHYS, 4, 8), Attack(AT_STNG, AD_PHYS, 1, 6), 4500, 1700, 0, MS_NEMESIS, MZ_GIGANTIC, MR_FIRE|MR_COLD|MR_SLEEP|MR_DISINT|MR_ELEC|MR_POISON|MR_ACID|MR_STONE, MR_FIRE|MR_COLD|MR_SLEEP|MR_DISINT|MR_ELEC|MR_POISON|MR_STONE, M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE|M1_SEE_INVIS|M1_POIS, M2_NOPOLY|M2_HOSTILE|M2_FEMALE|M2_STALK|M2_STRONG|M2_NASTY| M2_GREEDY|M2_JEWELS|M2_MAGIC, M3_WANTSARTI|M3_WAITFORU|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Cyclops&quot;, S_GIANT, 18, 12, 0, 0, -15, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 4, 8), Attack(AT_WEAP, AD_PHYS, 4, 8), Attack(AT_CLAW, AD_SAMU, 2, 6), Attack(), Attack(), Attack(), 1900, 700, 0, MS_NEMESIS, MZ_HUGE, MR_STONE, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_GIANT|M2_STRONG|M2_ROCKTHROW|M2_STALK|M2_HOSTILE| M2_NASTY|M2_MALE|M2_JEWELS|M2_COLLECT, M3_WANTSARTI|M3_WAITFORU|M3_INFRAVISION|M3_INFRAVISIBLE, WHITE));
-	monsters.push_back(new Monster(&quot;Ixoth&quot;, S_DRAGON, 15, 12, -1, 20, -14, (G_NOGEN|G_UNIQ), Attack(AT_BREA, AD_FIRE, 8, 6), Attack(AT_BITE, AD_PHYS, 4, 8), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_SAMU, 2, 4), Attack(), 4500, 1600, 0, MS_NEMESIS, MZ_GIGANTIC, MR_FIRE|MR_STONE, MR_FIRE, M1_FLY|M1_THICK_HIDE|M1_NOHANDS|M1_CARNIVORE|M1_SEE_INVIS, M2_NOPOLY|M2_PNAME|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_STALK| M2_GREEDY|M2_JEWELS|M2_MAGIC, M3_WANTSARTI|M3_WAITFORU|M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;Master Kaen&quot;, S_HUMAN, 25, 12, -10, 10, -20, (G_NOGEN|G_UNIQ), Attack(AT_CLAW, AD_PHYS, 16, 2), Attack(AT_CLAW, AD_PHYS, 16, 2), Attack(AT_MAGC, AD_CLRC, 0, 0), Attack(AT_CLAW, AD_SAMU, 1, 4), Attack(), Attack(), 1450, 400, 0, MS_NEMESIS, MZ_HUMAN, MR_NO_ELBERETH|MR_POISON|MR_STONE, MR_POISON, M1_HUMANOID|M1_HERBIVORE|M1_SEE_INVIS, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_HOSTILE|M2_STRONG|M2_NASTY| M2_STALK|M2_COLLECT|M2_MAGIC, M3_WANTSARTI|M3_WAITFORU|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Nalzok&quot;, S_DEMON, 16, 12, -2, 85, -127, (G_NOGEN|G_UNIQ|G_NOCORPSE), Attack(AT_WEAP, AD_PHYS, 8, 4), Attack(AT_WEAP, AD_PHYS, 4, 6), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(AT_CLAW, AD_SAMU, 2, 6), Attack(), Attack(), 1450, 400, 0, MS_NEMESIS, MZ_LARGE, MR_FIRE|MR_POISON|MR_STONE, 0, M1_FLY|M1_SEE_INVIS|M1_POIS, M2_NOPOLY|M2_DEMON|M2_PNAME|M2_HOSTILE|M2_STRONG|M2_STALK| M2_NASTY|M2_COLLECT, M3_WANTSARTI|M3_WAITFORU|M3_INFRAVISION|M3_INFRAVISIBLE, RED));
-	monsters.push_back(new Monster(&quot;Scorpius&quot;, S_SPIDER, 15, 12, 10, 0, -15, (G_NOGEN|G_UNIQ), Attack(AT_CLAW, AD_PHYS, 2, 6), Attack(AT_CLAW, AD_SAMU, 2, 6), Attack(AT_STNG, AD_DISE, 1, 4), Attack(), Attack(), Attack(), 750, 350, 0, MS_NEMESIS, MZ_HUMAN, MR_POISON|MR_STONE, MR_POISON, M1_ANIMAL|M1_NOHANDS|M1_OVIPAROUS|M1_POIS|M1_CARNIVORE, M2_NOPOLY|M2_PNAME|M2_HOSTILE|M2_STRONG|M2_STALK|M2_NASTY| M2_COLLECT|M2_MAGIC, M3_WANTSARTI|M3_WAITFORU, MAGENTA));
-	monsters.push_back(new Monster(&quot;Master Assassin&quot;, S_HUMAN, 15, 12, 0, 30, 18, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_DRST, 2, 6), Attack(AT_WEAP, AD_PHYS, 2, 8), Attack(AT_CLAW, AD_SAMU, 2, 6), Attack(), Attack(), Attack(), 1450, 400, 0, MS_NEMESIS, MZ_HUMAN, MR_NO_ELBERETH|MR_STONE, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_HOSTILE|M2_STALK|M2_NASTY| M2_COLLECT|M2_MAGIC, M3_WANTSARTI|M3_WAITFORU|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Ashikaga Takauji&quot;, S_HUMAN, 15, 12, 0, 40, -13, (G_NOGEN|G_UNIQ|G_NOCORPSE), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_CLAW, AD_SAMU, 2, 6), Attack(), Attack(), Attack(), 1450, 400, 0, MS_NEMESIS, MZ_HUMAN, MR_NO_ELBERETH|MR_STONE, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_HOSTILE|M2_STRONG|M2_STALK| M2_NASTY|M2_MALE|M2_COLLECT|M2_MAGIC, M3_WANTSARTI|M3_WAITFORU|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Lord Surtur&quot;, S_GIANT, 15, 12, 2, 50, 12, (G_NOGEN|G_UNIQ), Attack(AT_WEAP, AD_PHYS, 2, 10), Attack(AT_WEAP, AD_PHYS, 2, 10), Attack(AT_CLAW, AD_SAMU, 2, 6), Attack(), Attack(), Attack(), 2250, 850, 0, MS_NEMESIS, MZ_HUGE, MR_FIRE|MR_STONE, MR_FIRE, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_GIANT|M2_MALE|M2_PNAME|M2_HOSTILE|M2_STALK| M2_STRONG|M2_NASTY|M2_ROCKTHROW|M2_JEWELS|M2_COLLECT, M3_WANTSARTI|M3_WAITFORU|M3_INFRAVISION|M3_INFRAVISIBLE, MAGENTA));
-	monsters.push_back(new Monster(&quot;Dark One&quot;, S_HUMAN, 15, 12, 0, 80, -10, (G_NOGEN|G_UNIQ|G_NOCORPSE), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_SAMU, 1, 4), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), 1450, 400, 0, MS_NEMESIS, MZ_HUMAN, MR_NO_ELBERETH|MR_STONE, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_HOSTILE|M2_STALK|M2_NASTY| M2_COLLECT|M2_MAGIC, M3_WANTSARTI|M3_WAITFORU|M3_INFRAVISIBLE, BLACK));
-	monsters.push_back(new Monster(&quot;student&quot;, S_HUMAN, 5, 12, 10, 10, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_TUNNEL|M1_NEEDPICK|M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;chieftain&quot;, S_HUMAN, 5, 12, 10, 10, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH|MR_POISON, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;neanderthal&quot;, S_HUMAN, 5, 12, 10, 10, 1, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;attendant&quot;, S_HUMAN, 5, 12, 10, 10, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH|MR_POISON, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;page&quot;, S_HUMAN, 5, 12, 10, 10, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;abbot&quot;, S_HUMAN, 5, 12, 10, 20, 0, G_NOGEN, Attack(AT_CLAW, AD_PHYS, 8, 2), Attack(AT_KICK, AD_STUN, 3, 2), Attack(AT_MAGC, AD_CLRC, 0, 0), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_HERBIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;acolyte&quot;, S_HUMAN, 5, 12, 10, 20, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_MAGC, AD_CLRC, 0, 0), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;hunter&quot;, S_HUMAN, 5, 12, 10, 10, -7, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_SEE_INVIS|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISION|M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;thug&quot;, S_HUMAN, 5, 12, 10, 10, -3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_GREEDY|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;ninja&quot;, S_HUMAN, 5, 12, 10, 10, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_HOSTILE|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;roshi&quot;, S_HUMAN, 5, 12, 10, 10, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;warrior&quot;, S_HUMAN, 5, 12, 10, 10, -1, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT|M2_FEMALE, M3_INFRAVISIBLE, BOLD_WHITE));
-	monsters.push_back(new Monster(&quot;apprentice&quot;, S_HUMAN, 5, 12, 10, 30, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID|M1_OMNIVORE, M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT|M2_MAGIC, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;giant ant&quot;, S_ANT, 2, 18, 3, 0, 0, (G_GENO | G_SGROUP | 3), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 10, 0, MS_SILENT, MZ_TINY, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;killer bee&quot;, S_ANT, 1, 18, -1, 0, 0, (G_GENO | G_LGROUP | 2), Attack(AT_STNG, AD_DRST, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 1, 5, 0, MS_BUZZ, MZ_TINY, MR_POISON, MR_POISON, M1_ANIMAL | M1_FLY | M1_NOHANDS | M1_POIS, M2_HOSTILE | M2_FEMALE, 0, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;soldier ant&quot;, S_ANT, 3, 18, 3, 0, 0, (G_GENO | G_SGROUP | 2), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(AT_STNG, AD_DRST, 3, 4), Attack(), Attack(), Attack(), Attack(), 20, 5, 0, MS_SILENT, MZ_TINY, MR_POISON, MR_POISON, M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_POIS | M1_CARNIVORE, M2_HOSTILE, 0, BLUE));
+	monsters.push_back(new Monster(&quot;fire ant&quot;, S_ANT, 3, 18, 3, 10, 0, (G_GENO | G_SGROUP | 1), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(AT_BITE, AD_FIRE, 2, 4), Attack(), Attack(), Attack(), Attack(), 30, 10, 0, MS_SILENT, MZ_TINY, MR_FIRE, MR_FIRE, M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;giant beetle&quot;, S_ANT, 5, 6, 4, 0, 0, (G_GENO | 3), Attack(AT_BITE, AD_PHYS, 3, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 10, 0, MS_SILENT, MZ_LARGE, MR_POISON, MR_POISON, M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_CARNIVORE, M2_HOSTILE, 0, BLACK));
+	monsters.push_back(new Monster(&quot;queen bee&quot;, S_ANT, 9, 24, -4, 0, 0, (G_GENO | G_NOGEN), Attack(AT_STNG, AD_DRST, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 1, 5, 0, MS_BUZZ, MZ_TINY, MR_POISON, MR_POISON, M1_ANIMAL | M1_FLY | M1_NOHANDS | M1_OVIPAROUS | M1_POIS, M2_HOSTILE | M2_FEMALE | M2_PRINCE, 0, MAGENTA));
+	monsters.push_back(new Monster(&quot;acid blob&quot;, S_BLOB, 1, 3, 8, 0, 0, (G_GENO | 2), Attack(AT_NONE, AD_ACID, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 10, 0, MS_SILENT, MZ_TINY, MR_SLEEP | MR_POISON | MR_ACID | MR_STONE, MR_STONE, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_ACID, M2_WANDER | M2_NEUTER, 0, GREEN));
+	monsters.push_back(new Monster(&quot;quivering blob&quot;, S_BLOB, 5, 1, 8, 0, 0, (G_GENO | 2), Attack(AT_TUCH, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 200, 100, 0, MS_SILENT, MZ_SMALL, MR_SLEEP | MR_POISON, MR_POISON, M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS, M2_WANDER | M2_HOSTILE | M2_NEUTER, 0, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;gelatinous cube&quot;, S_BLOB, 6, 6, 8, 0, 0, (G_GENO | 2), Attack(AT_TUCH, AD_PLYS, 2, 4), Attack(AT_NONE, AD_PLYS, 1, 4), Attack(), Attack(), Attack(), Attack(), 600, 150, 0, MS_SILENT, MZ_LARGE, MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_ACID | MR_STONE, MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP, M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_OMNIVORE | M1_ACID, M2_WANDER | M2_HOSTILE | M2_NEUTER, 0, CYAN));
+	monsters.push_back(new Monster(&quot;chickatrice&quot;, S_COCKATRICE, 4, 4, 8, 30, 0, (G_GENO | G_SGROUP | 1), Attack(AT_BITE, AD_PHYS, 1, 2), Attack(AT_TUCH, AD_STON, 0, 0), Attack(AT_NONE, AD_STON, 0, 0), Attack(), Attack(), Attack(), 10, 10, 0, MS_HISS, MZ_TINY, MR_POISON | MR_STONE, MR_POISON | MR_STONE, M1_ANIMAL | M1_NOHANDS | M1_OMNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;cockatrice&quot;, S_COCKATRICE, 5, 6, 6, 30, 0, (G_GENO | 5), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(AT_TUCH, AD_STON, 0, 0), Attack(AT_NONE, AD_STON, 0, 0), Attack(), Attack(), Attack(), 30, 30, 0, MS_HISS, MZ_SMALL, MR_POISON | MR_STONE, MR_POISON | MR_STONE, M1_ANIMAL | M1_NOHANDS | M1_OMNIVORE | M1_OVIPAROUS, M2_HOSTILE, M3_INFRAVISIBLE, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;pyrolisk&quot;, S_COCKATRICE, 6, 6, 6, 30, 0, (G_GENO | 1), Attack(AT_GAZE, AD_FIRE, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 30, 0, MS_HISS, MZ_SMALL, MR_POISON | MR_FIRE, MR_POISON | MR_FIRE, M1_ANIMAL | M1_NOHANDS | M1_OMNIVORE | M1_OVIPAROUS, M2_HOSTILE, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;jackal&quot;, S_DOG, 0, 12, 7, 0, 0, (G_GENO | G_SGROUP | 3), Attack(AT_BITE, AD_PHYS, 1, 2), Attack(), Attack(), Attack(), Attack(), Attack(), 300, 250, 0, MS_BARK, MZ_SMALL, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;fox&quot;, S_DOG, 0, 15, 7, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 300, 250, 0, MS_BARK, MZ_SMALL, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;coyote&quot;, S_DOG, 1, 12, 7, 0, 0, (G_GENO | G_SGROUP | 1), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 300, 250, 0, MS_BARK, MZ_SMALL, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;werejackal&quot;, S_DOG, 2, 12, 7, 10, -7, (G_NOGEN | G_NOCORPSE), Attack(AT_BITE, AD_WERE, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 300, 250, 0, MS_BARK, MZ_SMALL, MR_POISON, 0, M1_NOHANDS | M1_POIS | M1_REGEN | M1_CARNIVORE, M2_NOPOLY | M2_WERE | M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;little dog&quot;, S_DOG, 2, 18, 6, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 150, 150, 0, MS_BARK, MZ_SMALL, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_DOMESTIC, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;dog&quot;, S_DOG, 4, 16, 5, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 200, 0, MS_BARK, MZ_MEDIUM, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_DOMESTIC, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;large dog&quot;, S_DOG, 6, 15, 4, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 250, 0, MS_BARK, MZ_MEDIUM, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_STRONG | M2_DOMESTIC, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;dingo&quot;, S_DOG, 4, 16, 5, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 200, 0, MS_BARK, MZ_MEDIUM, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;wolf&quot;, S_DOG, 5, 12, 4, 0, 0, (G_GENO | G_SGROUP | 2), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 250, 0, MS_BARK, MZ_MEDIUM, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;werewolf&quot;, S_DOG, 5, 12, 4, 20, -7, (G_NOGEN | G_NOCORPSE), Attack(AT_BITE, AD_WERE, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 250, 0, MS_BARK, MZ_MEDIUM, MR_POISON, 0, M1_NOHANDS | M1_POIS | M1_REGEN | M1_CARNIVORE, M2_NOPOLY | M2_WERE | M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;warg&quot;, S_DOG, 7, 12, 4, 0, -5, (G_GENO | G_SGROUP | 2), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 850, 350, 0, MS_BARK, MZ_MEDIUM, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;winter wolf cub&quot;, S_DOG, 5, 12, 4, 0, -5, (G_NOHELL | G_GENO | G_SGROUP | 2), Attack(AT_BITE, AD_PHYS, 1, 8), Attack(AT_BREA, AD_COLD, 1, 8), Attack(), Attack(), Attack(), Attack(), 250, 200, 0, MS_BARK, MZ_SMALL, MR_COLD, MR_COLD, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, CYAN));
+	monsters.push_back(new Monster(&quot;winter wolf&quot;, S_DOG, 7, 12, 4, 20, 0, (G_NOHELL | G_GENO | 1), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(AT_BREA, AD_COLD, 2, 6), Attack(), Attack(), Attack(), Attack(), 700, 300, 0, MS_BARK, MZ_LARGE, MR_COLD, MR_COLD, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG, 0, CYAN));
+	monsters.push_back(new Monster(&quot;hell hound pup&quot;, S_DOG, 7, 12, 4, 20, -5, (G_HELL | G_GENO | G_SGROUP | 1), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(AT_BREA, AD_FIRE, 2, 6), Attack(), Attack(), Attack(), Attack(), 200, 200, 0, MS_BARK, MZ_SMALL, MR_FIRE, MR_FIRE, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;hell hound&quot;, S_DOG, 12, 14, 2, 20, 0, (G_HELL | G_GENO | 1), Attack(AT_BITE, AD_PHYS, 3, 6), Attack(AT_BREA, AD_FIRE, 3, 6), Attack(), Attack(), Attack(), Attack(), 600, 300, 0, MS_BARK, MZ_MEDIUM, MR_FIRE, MR_FIRE, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;gas spore&quot;, S_EYE, 1, 3, 10, 0, 0, (G_NOCORPSE | G_GENO | 1), Attack(AT_BOOM, AD_PHYS, 4, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 10, 0, MS_SILENT, MZ_SMALL, 0, 0, M1_FLY | M1_BREATHLESS | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS, M2_HOSTILE | M2_NEUTER, 0, WHITE));
+	monsters.push_back(new Monster(&quot;floating eye&quot;, S_EYE, 2, 1, 9, 10, 0, (G_GENO | 5), Attack(AT_NONE, AD_PLYS, 0, 70), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 10, 0, MS_SILENT, MZ_SMALL, 0, 0, M1_FLY | M1_AMPHIBIOUS | M1_NOLIMBS | M1_NOHEAD | M1_NOTAKE, M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, BLUE));
+	monsters.push_back(new Monster(&quot;freezing sphere&quot;, S_EYE, 6, 13, 4, 0, 0, (G_NOCORPSE | G_NOHELL | G_GENO | 2), Attack(AT_EXPL, AD_COLD, 4, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 10, 0, MS_SILENT, MZ_SMALL, MR_COLD, MR_COLD, M1_FLY | M1_BREATHLESS | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;flaming sphere&quot;, S_EYE, 6, 13, 4, 0, 0, (G_NOCORPSE | G_GENO | 2), Attack(AT_EXPL, AD_FIRE, 4, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 10, 0, MS_SILENT, MZ_SMALL, MR_FIRE, MR_FIRE, M1_FLY | M1_BREATHLESS | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS, M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;shocking sphere&quot;, S_EYE, 6, 13, 4, 0, 0, (G_NOCORPSE | G_GENO | 2), Attack(AT_EXPL, AD_ELEC, 4, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 10, 0, MS_SILENT, MZ_SMALL, MR_ELEC, MR_ELEC, M1_FLY | M1_BREATHLESS | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS, M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, BOLD_BLUE));
+	monsters.push_back(new Monster(&quot;kitten&quot;, S_FELINE, 2, 18, 6, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 150, 150, 0, MS_MEW, MZ_SMALL, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_WANDER | M2_DOMESTIC, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;housecat&quot;, S_FELINE, 4, 16, 5, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 200, 200, 0, MS_MEW, MZ_SMALL, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_DOMESTIC, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;jaguar&quot;, S_FELINE, 4, 15, 6, 0, 0, (G_GENO | 2), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_BITE, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), 600, 300, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;lynx&quot;, S_FELINE, 5, 15, 6, 0, 0, (G_GENO | 1), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_BITE, AD_PHYS, 1, 10), Attack(), Attack(), Attack(), 600, 300, 0, MS_GROWL, MZ_SMALL, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, CYAN));
+	monsters.push_back(new Monster(&quot;panther&quot;, S_FELINE, 5, 15, 6, 0, 0, (G_GENO | 1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_BITE, AD_PHYS, 1, 10), Attack(), Attack(), Attack(), 600, 300, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, BLACK));
+	monsters.push_back(new Monster(&quot;large cat&quot;, S_FELINE, 6, 15, 4, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 250, 250, 0, MS_MEW, MZ_SMALL, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_STRONG | M2_DOMESTIC, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;tiger&quot;, S_FELINE, 6, 12, 6, 0, 0, (G_GENO | 2), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_BITE, AD_PHYS, 1, 10), Attack(), Attack(), Attack(), 600, 300, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;gremlin&quot;, S_GREMLIN, 5, 12, 2, 25, -9, (G_GENO | 2), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_CURS, 0, 0), Attack(), Attack(), 100, 20, 0, MS_LAUGH, MZ_SMALL, MR_POISON, MR_POISON, M1_SWIM | M1_HUMANOID | M1_POIS, M2_STALK, M3_INFRAVISIBLE, GREEN));
+	monsters.push_back(new Monster(&quot;gargoyle&quot;, S_GREMLIN, 6, 10, -4, 0, -9, (G_GENO | 2), Attack(AT_CLAW, AD_PHYS, 2, 6), Attack(AT_CLAW, AD_PHYS, 2, 6), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), 1000, 200, 0, MS_GRUNT, MZ_HUMAN, MR_STONE, MR_STONE, M1_HUMANOID | M1_THICK_HIDE | M1_BREATHLESS, M2_HOSTILE | M2_STRONG, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;winged gargoyle&quot;, S_GREMLIN, 9, 15, -2, 0, -12, (G_GENO | 1), Attack(AT_CLAW, AD_PHYS, 3, 6), Attack(AT_CLAW, AD_PHYS, 3, 6), Attack(AT_BITE, AD_PHYS, 3, 4), Attack(), Attack(), Attack(), 1200, 300, 0, MS_GRUNT, MZ_HUMAN, MR_STONE, MR_STONE, M1_FLY | M1_HUMANOID | M1_THICK_HIDE | M1_BREATHLESS | M1_OVIPAROUS, M2_LORD | M2_HOSTILE | M2_STRONG | M2_MAGIC, 0, MAGENTA));
+	monsters.push_back(new Monster(&quot;hobbit&quot;, S_HUMANOID, 1, 9, 10, 0, 6, (G_GENO | 2), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 200, 0, MS_HUMANOID, MZ_SMALL, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, GREEN));
+	monsters.push_back(new Monster(&quot;dwarf&quot;, S_HUMANOID, 2, 6, 10, 10, 4, (G_GENO | 3), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 900, 300, 0, MS_HUMANOID, MZ_HUMAN, 0, 0, M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_DWARF | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;bugbear&quot;, S_HUMANOID, 3, 9, 5, 0, -6, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1250, 250, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, YELLOW));
+	monsters.push_back(new Monster(&quot;dwarf lord&quot;, S_HUMANOID, 4, 6, 10, 10, 5, (G_GENO | 2), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), 900, 300, 0, MS_HUMANOID, MZ_HUMAN, 0, 0, M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE, M2_DWARF | M2_STRONG | M2_LORD | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, BLUE));
+	monsters.push_back(new Monster(&quot;dwarf king&quot;, S_HUMANOID, 6, 6, 10, 20, 6, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), 900, 300, 0, MS_HUMANOID, MZ_HUMAN, 0, 0, M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE, M2_DWARF | M2_STRONG | M2_PRINCE | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;mind flayer&quot;, S_HUMANOID, 9, 12, 5, 90, -8, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 1, 4), Attack(AT_TENT, AD_DRIN, 2, 1), Attack(AT_TENT, AD_DRIN, 2, 1), Attack(AT_TENT, AD_DRIN, 2, 1), Attack(), Attack(), 1450, 400, 0, MS_HISS, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_FLY | M1_SEE_INVIS | M1_OMNIVORE, M2_HOSTILE | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;master mind flayer&quot;, S_HUMANOID, 13, 12, 0, 90, -8, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_TENT, AD_DRIN, 2, 1), Attack(AT_TENT, AD_DRIN, 2, 1), Attack(AT_TENT, AD_DRIN, 2, 1), Attack(AT_TENT, AD_DRIN, 2, 1), Attack(AT_TENT, AD_DRIN, 2, 1), 1450, 400, 0, MS_HISS, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_FLY | M1_SEE_INVIS | M1_OMNIVORE, M2_HOSTILE | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;manes&quot;, S_IMP, 1, 3, 7, 0, -7, (G_GENO | G_LGROUP | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), 100, 100, 0, MS_SILENT, MZ_SMALL, MR_SLEEP | MR_POISON, 0, M1_POIS, M2_HOSTILE | M2_STALK, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;homunculus&quot;, S_IMP, 2, 12, 6, 10, -7, (G_GENO | 2), Attack(AT_BITE, AD_SLEE, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 60, 100, 0, MS_SILENT, MZ_TINY, MR_SLEEP | MR_POISON, MR_SLEEP | MR_POISON, M1_FLY | M1_POIS, M2_STALK, M3_INFRAVISIBLE | M3_INFRAVISION, GREEN));
+	monsters.push_back(new Monster(&quot;imp&quot;, S_IMP, 3, 12, 2, 20, -7, (G_GENO | 1), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 20, 10, 0, MS_CUSS, MZ_TINY, 0, 0, M1_REGEN, M2_WANDER | M2_STALK, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;lemure&quot;, S_IMP, 3, 3, 7, 0, -7, (G_HELL | G_GENO | G_LGROUP | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 150, 100, 0, MS_SILENT, MZ_MEDIUM, MR_SLEEP | MR_POISON, MR_SLEEP, M1_POIS | M1_REGEN, M2_HOSTILE | M2_WANDER | M2_STALK | M2_NEUTER, M3_INFRAVISIBLE | M3_INFRAVISION, YELLOW));
+	monsters.push_back(new Monster(&quot;quasit&quot;, S_IMP, 3, 15, 2, 20, -7, (G_GENO | 2), Attack(AT_CLAW, AD_DRDX, 1, 2), Attack(AT_CLAW, AD_DRDX, 1, 2), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), 200, 200, 0, MS_SILENT, MZ_SMALL, MR_POISON, MR_POISON, M1_REGEN, M2_STALK, M3_INFRAVISIBLE | M3_INFRAVISION, BLUE));
+	monsters.push_back(new Monster(&quot;tengu&quot;, S_IMP, 6, 13, 5, 30, 7, (G_GENO | 3), Attack(AT_BITE, AD_PHYS, 1, 7), Attack(), Attack(), Attack(), Attack(), Attack(), 300, 200, 0, MS_SQAWK, MZ_SMALL, MR_POISON, MR_POISON, M1_TPORT | M1_TPORT_CNTRL, M2_STALK, M3_INFRAVISIBLE | M3_INFRAVISION, CYAN));
+	monsters.push_back(new Monster(&quot;blue jelly&quot;, S_JELLY, 4, 0, 8, 10, 0, (G_GENO | 2), Attack(AT_NONE, AD_COLD, 0, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 20, 0, MS_SILENT, MZ_MEDIUM, MR_COLD | MR_POISON, MR_COLD | MR_POISON, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, M2_HOSTILE | M2_NEUTER, 0, BLUE));
+	monsters.push_back(new Monster(&quot;spotted jelly&quot;, S_JELLY, 5, 0, 8, 10, 0, (G_GENO | 1), Attack(AT_NONE, AD_ACID, 0, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 20, 0, MS_SILENT, MZ_MEDIUM, MR_ACID | MR_STONE, 0, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_ACID | M1_NOTAKE, M2_HOSTILE | M2_NEUTER, 0, GREEN));
+	monsters.push_back(new Monster(&quot;ochre jelly&quot;, S_JELLY, 6, 3, 8, 20, 0, (G_GENO | 2), Attack(AT_ENGL, AD_ACID, 3, 6), Attack(AT_NONE, AD_ACID, 3, 6), Attack(), Attack(), Attack(), Attack(), 50, 20, 0, MS_SILENT, MZ_MEDIUM, MR_ACID | MR_STONE, 0, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_ACID | M1_NOTAKE, M2_HOSTILE | M2_NEUTER, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;kobold&quot;, S_KOBOLD, 0, 6, 10, 0, -2, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 100, 0, MS_ORC, MZ_SMALL, MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_OMNIVORE, M2_HOSTILE | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, YELLOW));
+	monsters.push_back(new Monster(&quot;large kobold&quot;, S_KOBOLD, 1, 6, 10, 0, -3, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 450, 150, 0, MS_ORC, MZ_SMALL, MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_OMNIVORE, M2_HOSTILE | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;kobold lord&quot;, S_KOBOLD, 2, 6, 10, 0, -4, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 200, 0, MS_ORC, MZ_SMALL, MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_OMNIVORE, M2_HOSTILE | M2_LORD | M2_MALE | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;kobold shaman&quot;, S_KOBOLD, 2, 6, 6, 10, -4, (G_GENO | 1), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), Attack(), 450, 150, 0, MS_ORC, MZ_SMALL, MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_OMNIVORE, M2_HOSTILE | M2_MAGIC, M3_INFRAVISIBLE | M3_INFRAVISION, BOLD_BLUE));
+	monsters.push_back(new Monster(&quot;leprechaun&quot;, S_LEPRECHAUN, 5, 15, 8, 20, 0, (G_GENO | 4), Attack(AT_CLAW, AD_SGLD, 1, 2), Attack(), Attack(), Attack(), Attack(), Attack(), 60, 30, 0, MS_LAUGH, MZ_TINY, 0, 0, M1_HUMANOID | M1_TPORT, M2_HOSTILE | M2_GREEDY, M3_INFRAVISIBLE, GREEN));
+	monsters.push_back(new Monster(&quot;small mimic&quot;, S_MIMIC, 7, 3, 7, 0, 0, (G_GENO | 2), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 300, 200, 0, MS_SILENT, MZ_MEDIUM, MR_ACID, 0, M1_BREATHLESS | M1_AMORPHOUS | M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOHEAD | M1_NOLIMBS | M1_THICK_HIDE | M1_CARNIVORE, M2_HOSTILE, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;large mimic&quot;, S_MIMIC, 8, 3, 7, 10, 0, (G_GENO | 1), Attack(AT_CLAW, AD_STCK, 3, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 600, 400, 0, MS_SILENT, MZ_LARGE, MR_ACID, 0, M1_CLING | M1_BREATHLESS | M1_AMORPHOUS | M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOHEAD | M1_NOLIMBS | M1_THICK_HIDE | M1_CARNIVORE, M2_HOSTILE | M2_STRONG, 0, RED));
+	monsters.push_back(new Monster(&quot;giant mimic&quot;, S_MIMIC, 9, 3, 7, 20, 0, (G_GENO | 1), Attack(AT_CLAW, AD_STCK, 3, 6), Attack(AT_CLAW, AD_STCK, 3, 6), Attack(), Attack(), Attack(), Attack(), 800, 500, 0, MS_SILENT, MZ_LARGE, MR_ACID, 0, M1_CLING | M1_BREATHLESS | M1_AMORPHOUS | M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOHEAD | M1_NOLIMBS | M1_THICK_HIDE | M1_CARNIVORE, M2_HOSTILE | M2_STRONG, 0, MAGENTA));
+	monsters.push_back(new Monster(&quot;wood nymph&quot;, S_NYMPH, 3, 12, 9, 20, 0, (G_GENO | 2), Attack(AT_CLAW, AD_SITM, 0, 0), Attack(AT_CLAW, AD_SEDU, 0, 0), Attack(), Attack(), Attack(), Attack(), 600, 300, 0, MS_SEDUCE, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_TPORT, M2_HOSTILE | M2_FEMALE | M2_COLLECT, M3_INFRAVISIBLE, GREEN));
+	monsters.push_back(new Monster(&quot;water nymph&quot;, S_NYMPH, 3, 12, 9, 20, 0, (G_GENO | 2), Attack(AT_CLAW, AD_SITM, 0, 0), Attack(AT_CLAW, AD_SEDU, 0, 0), Attack(), Attack(), Attack(), Attack(), 600, 300, 0, MS_SEDUCE, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_TPORT | M1_SWIM, M2_HOSTILE | M2_FEMALE | M2_COLLECT, M3_INFRAVISIBLE, BLUE));
+	monsters.push_back(new Monster(&quot;mountain nymph&quot;, S_NYMPH, 3, 12, 9, 20, 0, (G_GENO | 2), Attack(AT_CLAW, AD_SITM, 0, 0), Attack(AT_CLAW, AD_SEDU, 0, 0), Attack(), Attack(), Attack(), Attack(), 600, 300, 0, MS_SEDUCE, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_TPORT, M2_HOSTILE | M2_FEMALE | M2_COLLECT, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;goblin&quot;, S_ORC, 0, 6, 10, 0, -3, (G_GENO | 2), Attack(AT_WEAP, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 100, 0, MS_ORC, MZ_SMALL, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, WHITE));
+	monsters.push_back(new Monster(&quot;hobgoblin&quot;, S_ORC, 1, 9, 10, 0, -4, (G_GENO | 2), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1000, 200, 0, MS_ORC, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, YELLOW));
+	monsters.push_back(new Monster(&quot;orc&quot;, S_ORC, 1, 9, 10, 0, -3, (G_GENO | G_NOGEN | G_LGROUP), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 850, 150, 0, MS_ORC, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;hill orc&quot;, S_ORC, 2, 9, 10, 0, -4, (G_GENO | G_LGROUP | 2), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1000, 200, 0, MS_ORC, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;Mordor orc&quot;, S_ORC, 3, 5, 10, 0, -5, (G_GENO | G_LGROUP | 1), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1200, 200, 0, MS_ORC, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, BLUE));
+	monsters.push_back(new Monster(&quot;Uruk-hai&quot;, S_ORC, 3, 7, 10, 0, -4, (G_GENO | G_LGROUP | 1), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 1300, 300, 0, MS_ORC, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, BLACK));
+	monsters.push_back(new Monster(&quot;orc shaman&quot;, S_ORC, 3, 9, 5, 10, -5, (G_GENO | 1), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), Attack(), 1000, 300, 0, MS_ORC, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_MAGIC, M3_INFRAVISIBLE | M3_INFRAVISION, BOLD_BLUE));
+	monsters.push_back(new Monster(&quot;orc-captain&quot;, S_ORC, 5, 5, 10, 0, -5, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), 1350, 350, 0, MS_ORC, MZ_HUMAN, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_ORC | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;rock piercer&quot;, S_PIERCER, 3, 1, 3, 0, 0, (G_GENO | 4), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 200, 200, 0, MS_SILENT, MZ_SMALL, 0, 0, M1_CLING | M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS | M1_CARNIVORE | M1_NOTAKE, M2_HOSTILE, 0, WHITE));
+	monsters.push_back(new Monster(&quot;iron piercer&quot;, S_PIERCER, 5, 1, 0, 0, 0, (G_GENO | 2), Attack(AT_BITE, AD_PHYS, 3, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 300, 0, MS_SILENT, MZ_MEDIUM, 0, 0, M1_CLING | M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS | M1_CARNIVORE | M1_NOTAKE, M2_HOSTILE, 0, CYAN));
+	monsters.push_back(new Monster(&quot;glass piercer&quot;, S_PIERCER, 7, 1, 0, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 4, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 300, 0, MS_SILENT, MZ_MEDIUM, MR_ACID, 0, M1_CLING | M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS | M1_CARNIVORE | M1_NOTAKE, M2_HOSTILE, 0, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;rothe&quot;, S_QUADRUPED, 2, 9, 7, 0, 0, (G_GENO | G_SGROUP | 4), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(AT_BITE, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), 400, 100, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_OMNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;mumak&quot;, S_QUADRUPED, 5, 9, 0, 0, -2, (G_GENO | 1), Attack(AT_BUTT, AD_PHYS, 4, 12), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), 2500, 500, 0, MS_ROAR, MZ_LARGE, 0, 0, M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_HERBIVORE, M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, WHITE));
+	monsters.push_back(new Monster(&quot;leocrotta&quot;, S_QUADRUPED, 6, 18, 4, 10, 0, (G_GENO | 2), Attack(AT_CLAW, AD_PHYS, 2, 6), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(AT_CLAW, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), 1200, 500, 0, MS_IMITATE, MZ_LARGE, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_OMNIVORE, M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;wumpus&quot;, S_QUADRUPED, 8, 3, 2, 10, 0, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 3, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 2500, 500, 0, MS_BURBLE, MZ_LARGE, 0, 0, M1_CLING | M1_ANIMAL | M1_NOHANDS | M1_OMNIVORE, M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, CYAN));
+	monsters.push_back(new Monster(&quot;titanothere&quot;, S_QUADRUPED, 12, 12, 6, 0, 0, (G_GENO | 2), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 2650, 650, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_HERBIVORE, M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, WHITE));
+	monsters.push_back(new Monster(&quot;baluchitherium&quot;, S_QUADRUPED, 14, 12, 5, 0, 0, (G_GENO | 2), Attack(AT_CLAW, AD_PHYS, 5, 4), Attack(AT_CLAW, AD_PHYS, 5, 4), Attack(), Attack(), Attack(), Attack(), 3800, 800, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_HERBIVORE, M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, WHITE));
+	monsters.push_back(new Monster(&quot;mastodon&quot;, S_QUADRUPED, 20, 12, 5, 0, 0, (G_GENO | 1), Attack(AT_BUTT, AD_PHYS, 4, 8), Attack(AT_BUTT, AD_PHYS, 4, 8), Attack(), Attack(), Attack(), Attack(), 3800, 800, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_HERBIVORE, M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, BLACK));
+	monsters.push_back(new Monster(&quot;sewer rat&quot;, S_RODENT, 0, 12, 7, 0, 0, (G_GENO | G_SGROUP | 1), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 20, 12, 0, MS_SQEEK, MZ_TINY, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;giant rat&quot;, S_RODENT, 1, 10, 7, 0, 0, (G_GENO | G_SGROUP | 2), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 30, 0, MS_SQEEK, MZ_TINY, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;rabid rat&quot;, S_RODENT, 2, 12, 6, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_DRCO, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 5, 0, MS_SQEEK, MZ_TINY, MR_POISON, 0, M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;wererat&quot;, S_RODENT, 2, 12, 6, 10, -7, (G_NOGEN | G_NOCORPSE), Attack(AT_BITE, AD_WERE, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 40, 30, 0, MS_SQEEK, MZ_TINY, MR_POISON, 0, M1_NOHANDS | M1_POIS | M1_REGEN | M1_CARNIVORE, M2_NOPOLY | M2_WERE | M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;rock mole&quot;, S_RODENT, 3, 3, 0, 20, 0, (G_GENO | 2), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 30, 0, MS_SILENT, MZ_SMALL, 0, 0, M1_TUNNEL | M1_ANIMAL | M1_NOHANDS | M1_METALLIVORE, M2_HOSTILE | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE, WHITE));
+	monsters.push_back(new Monster(&quot;woodchuck&quot;, S_RODENT, 3, 3, 0, 20, 0, (G_NOGEN | G_GENO), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 30, 0, MS_SILENT, MZ_SMALL, 0, 0, M1_TUNNEL | M1_ANIMAL | M1_NOHANDS | M1_SWIM | M1_HERBIVORE, M2_WANDER | M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;cave spider&quot;, S_SPIDER, 1, 12, 3, 0, 0, (G_GENO | G_SGROUP | 2), Attack(AT_BITE, AD_PHYS, 1, 2), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 50, 0, MS_SILENT, MZ_TINY, MR_POISON, MR_POISON, M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE, 0, WHITE));
+	monsters.push_back(new Monster(&quot;centipede&quot;, S_SPIDER, 2, 4, 3, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_DRST, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 50, 0, MS_SILENT, MZ_TINY, MR_POISON, MR_POISON, M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE, 0, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;giant spider&quot;, S_SPIDER, 5, 15, 4, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_DRST, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 100, 100, 0, MS_SILENT, MZ_LARGE, MR_POISON, MR_POISON, M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_POIS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG, 0, MAGENTA));
+	monsters.push_back(new Monster(&quot;scorpion&quot;, S_SPIDER, 5, 15, 3, 0, 0, (G_GENO | 2), Attack(AT_CLAW, AD_PHYS, 1, 2), Attack(AT_CLAW, AD_PHYS, 1, 2), Attack(AT_STNG, AD_DRST, 1, 4), Attack(), Attack(), Attack(), 50, 100, 0, MS_SILENT, MZ_SMALL, MR_POISON, MR_POISON, M1_CONCEAL | M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_POIS | M1_CARNIVORE, M2_HOSTILE, 0, RED));
+	monsters.push_back(new Monster(&quot;lurker above&quot;, S_TRAPPER, 10, 3, 3, 0, 0, (G_GENO | 2), Attack(AT_ENGL, AD_DGST, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_SILENT, MZ_HUGE, 0, 0, M1_HIDE | M1_FLY | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_CARNIVORE, M2_HOSTILE | M2_STALK | M2_STRONG, 0, WHITE));
+	monsters.push_back(new Monster(&quot;trapper&quot;, S_TRAPPER, 12, 3, 3, 0, 0, (G_GENO | 2), Attack(AT_ENGL, AD_DGST, 1, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_SILENT, MZ_HUGE, 0, 0, M1_HIDE | M1_ANIMAL | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_CARNIVORE, M2_HOSTILE | M2_STALK | M2_STRONG, 0, GREEN));
+	monsters.push_back(new Monster(&quot;white unicorn&quot;, S_UNICORN, 4, 24, 2, 70, 7, (G_GENO | 2), Attack(AT_BUTT, AD_PHYS, 1, 12), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1300, 300, 0, MS_NEIGH, MZ_LARGE, MR_POISON, MR_POISON, M1_NOHANDS | M1_HERBIVORE, M2_WANDER | M2_STRONG | M2_JEWELS, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;gray unicorn&quot;, S_UNICORN, 4, 24, 2, 70, 0, (G_GENO | 1), Attack(AT_BUTT, AD_PHYS, 1, 12), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1300, 300, 0, MS_NEIGH, MZ_LARGE, MR_POISON, MR_POISON, M1_NOHANDS | M1_HERBIVORE, M2_WANDER | M2_STRONG | M2_JEWELS, M3_INFRAVISIBLE, WHITE));
+	monsters.push_back(new Monster(&quot;black unicorn&quot;, S_UNICORN, 4, 24, 2, 70, -7, (G_GENO | 1), Attack(AT_BUTT, AD_PHYS, 1, 12), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1300, 300, 0, MS_NEIGH, MZ_LARGE, MR_POISON, MR_POISON, M1_NOHANDS | M1_HERBIVORE, M2_WANDER | M2_STRONG | M2_JEWELS, M3_INFRAVISIBLE, BLACK));
+	monsters.push_back(new Monster(&quot;pony&quot;, S_UNICORN, 3, 16, 6, 0, 0, (G_GENO | 2), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(AT_BITE, AD_PHYS, 1, 2), Attack(), Attack(), Attack(), Attack(), 1300, 250, 0, MS_NEIGH, MZ_MEDIUM, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_HERBIVORE, M2_WANDER | M2_STRONG | M2_DOMESTIC, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;horse&quot;, S_UNICORN, 5, 20, 5, 0, 0, (G_GENO | 2), Attack(AT_KICK, AD_PHYS, 1, 8), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), 1500, 300, 0, MS_NEIGH, MZ_LARGE, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_HERBIVORE, M2_WANDER | M2_STRONG | M2_DOMESTIC, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;warhorse&quot;, S_UNICORN, 7, 24, 4, 0, 0, (G_GENO | 2), Attack(AT_KICK, AD_PHYS, 1, 10), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), 1800, 350, 0, MS_NEIGH, MZ_LARGE, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_HERBIVORE, M2_WANDER | M2_STRONG | M2_DOMESTIC, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;fog cloud&quot;, S_VORTEX, 3, 1, 0, 0, 0, (G_GENO | G_NOCORPSE | 2), Attack(AT_ENGL, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_AMORPHOUS | M1_UNSOLID, M2_HOSTILE | M2_NEUTER, 0, WHITE));
+	monsters.push_back(new Monster(&quot;dust vortex&quot;, S_VORTEX, 4, 20, 2, 30, 0, (G_GENO | G_NOCORPSE | 2), Attack(AT_ENGL, AD_BLND, 2, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS, M2_HOSTILE | M2_NEUTER, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;ice vortex&quot;, S_VORTEX, 5, 20, 2, 30, 0, (G_NOHELL | G_GENO | G_NOCORPSE | 1), Attack(AT_ENGL, AD_COLD, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_COLD | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS, M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, CYAN));
+	monsters.push_back(new Monster(&quot;energy vortex&quot;, S_VORTEX, 6, 20, 2, 30, 0, (G_GENO | G_NOCORPSE | 1), Attack(AT_ENGL, AD_ELEC, 1, 6), Attack(AT_ENGL, AD_DREN, 0, 0), Attack(AT_NONE, AD_ELEC, 0, 4), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_ELEC | MR_SLEEP | MR_DISINT | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_UNSOLID, M2_HOSTILE | M2_NEUTER, 0, BOLD_BLUE));
+	monsters.push_back(new Monster(&quot;steam vortex&quot;, S_VORTEX, 7, 22, 2, 30, 0, (G_HELL | G_GENO | G_NOCORPSE | 2), Attack(AT_ENGL, AD_FIRE, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_FIRE | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_UNSOLID, M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, BLUE));
+	monsters.push_back(new Monster(&quot;fire vortex&quot;, S_VORTEX, 8, 22, 2, 30, 0, (G_HELL | G_GENO | G_NOCORPSE | 1), Attack(AT_ENGL, AD_FIRE, 1, 10), Attack(AT_NONE, AD_FIRE, 0, 4), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_FIRE | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_UNSOLID, M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;baby long worm&quot;, S_WORM, 8, 3, 5, 0, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 600, 250, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_CARNIVORE | M1_NOTAKE, M2_HOSTILE, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;baby purple worm&quot;, S_WORM, 8, 3, 5, 0, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 600, 250, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_CARNIVORE, M2_HOSTILE, 0, MAGENTA));
+	monsters.push_back(new Monster(&quot;long worm&quot;, S_WORM, 8, 3, 5, 10, 0, (G_GENO | 2), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_SILENT, MZ_GIGANTIC, 0, 0, M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_OVIPAROUS | M1_CARNIVORE | M1_NOTAKE, M2_HOSTILE | M2_STRONG | M2_NASTY, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;purple worm&quot;, S_WORM, 15, 9, 6, 20, 0, (G_GENO | 2), Attack(AT_BITE, AD_PHYS, 2, 8), Attack(AT_ENGL, AD_DGST, 1, 10), Attack(), Attack(), Attack(), Attack(), 2700, 700, 0, MS_SILENT, MZ_GIGANTIC, 0, 0, M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY, 0, MAGENTA));
+	monsters.push_back(new Monster(&quot;grid bug&quot;, S_XAN, 0, 12, 9, 0, 0, (G_GENO | G_SGROUP | G_NOCORPSE | 3), Attack(AT_BITE, AD_ELEC, 1, 1), Attack(), Attack(), Attack(), Attack(), Attack(), 15, 10, 0, MS_BUZZ, MZ_TINY, MR_ELEC | MR_POISON, 0, M1_ANIMAL, M2_HOSTILE, M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;xan&quot;, S_XAN, 7, 18, -4, 0, 0, (G_GENO | 3), Attack(AT_STNG, AD_LEGS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 300, 300, 0, MS_BUZZ, MZ_TINY, MR_POISON, MR_POISON, M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_POIS, M2_HOSTILE, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;yellow light&quot;, S_LIGHT, 3, 15, 0, 0, 0, (G_NOCORPSE | G_GENO | 4), Attack(AT_EXPL, AD_BLND, 10, 20), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_SMALL, MR_FIRE | MR_COLD | MR_ELEC | MR_DISINT | MR_SLEEP | MR_POISON | MR_ACID | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_UNSOLID | M1_NOTAKE, M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;black light&quot;, S_LIGHT, 5, 15, 0, 0, 0, (G_NOCORPSE | G_GENO | 2), Attack(AT_EXPL, AD_HALU, 10, 12), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_SMALL, MR_FIRE | MR_COLD | MR_ELEC | MR_DISINT | MR_SLEEP | MR_POISON | MR_ACID | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_UNSOLID | M1_SEE_INVIS | M1_NOTAKE, M2_HOSTILE | M2_NEUTER, 0, BLACK));
+	monsters.push_back(new Monster(&quot;zruty&quot;, S_ZRUTY, 9, 8, 3, 0, 0, (G_GENO | 2), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(AT_BITE, AD_PHYS, 3, 6), Attack(), Attack(), Attack(), 1200, 600, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;couatl&quot;, S_ANGEL, 8, 10, 5, 30, 7, (G_NOHELL | G_SGROUP | G_NOCORPSE | 1), Attack(AT_BITE, AD_DRST, 2, 4), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(AT_HUGS, AD_WRAP, 2, 4), Attack(), Attack(), Attack(), 900, 400, 0, MS_HISS, MZ_LARGE, MR_NO_ELBERETH | MR_POISON, 0, M1_FLY | M1_POIS, M2_MINION | M2_STALK | M2_STRONG | M2_NASTY, M3_INFRAVISIBLE | M3_INFRAVISION, GREEN));
+	monsters.push_back(new Monster(&quot;Aleax&quot;, S_ANGEL, 10, 8, 0, 30, 7, (G_NOHELL | G_NOCORPSE | 1), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_KICK, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), 1450, 400, 0, MS_IMITATE, MZ_HUMAN, MR_NO_ELBERETH | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON, 0, M1_HUMANOID | M1_SEE_INVIS, M2_MINION | M2_STALK | M2_NASTY | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;Angel&quot;, S_ANGEL, 14, 10, -4, 55, 12, (G_NOHELL | G_NOCORPSE | 1), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_MAGC, AD_MAGM, 2, 6), Attack(), Attack(), 1450, 400, 0, MS_CUSS, MZ_HUMAN, MR_NO_ELBERETH | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON, 0, M1_FLY | M1_HUMANOID | M1_SEE_INVIS, M2_NOPOLY | M2_MINION | M2_STALK | M2_STRONG | M2_NASTY | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;ki-rin&quot;, S_ANGEL, 16, 18, -5, 90, 15, (G_NOHELL | G_NOCORPSE | 1), Attack(AT_KICK, AD_PHYS, 2, 4), Attack(AT_KICK, AD_PHYS, 2, 4), Attack(AT_BUTT, AD_PHYS, 3, 6), Attack(AT_MAGC, AD_SPEL, 2, 6), Attack(), Attack(), 1450, 400, 0, MS_NEIGH, MZ_LARGE, MR_NO_ELBERETH, 0, M1_FLY | M1_SEE_INVIS, M2_NOPOLY | M2_MINION | M2_STALK | M2_STRONG | M2_NASTY | M2_LORD, M3_INFRAVISIBLE | M3_INFRAVISION, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;Archon&quot;, S_ANGEL, 19, 16, -6, 80, 15, (G_NOHELL | G_NOCORPSE | 1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_GAZE, AD_BLND, 2, 6), Attack(AT_CLAW, AD_PHYS, 1, 8), Attack(AT_MAGC, AD_SPEL, 4, 6), Attack(), 1450, 400, 0, MS_CUSS, MZ_LARGE, MR_NO_ELBERETH | MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON, 0, M1_FLY | M1_HUMANOID | M1_SEE_INVIS | M1_REGEN, M2_NOPOLY | M2_MINION | M2_STALK | M2_STRONG | M2_NASTY | M2_LORD | M2_COLLECT | M2_MAGIC, M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;bat&quot;, S_BAT, 0, 22, 8, 0, 0, (G_GENO | G_SGROUP | 1), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 20, 20, 0, MS_SQEEK, MZ_TINY, 0, 0, M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_WANDER, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;giant bat&quot;, S_BAT, 2, 22, 7, 0, 0, (G_GENO | 2), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 30, 0, MS_SQEEK, MZ_SMALL, 0, 0, M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_WANDER | M2_HOSTILE, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;raven&quot;, S_BAT, 4, 20, 6, 0, 0, (G_GENO | 2), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_BLND, 1, 6), Attack(), Attack(), Attack(), Attack(), 40, 20, 0, MS_SQAWK, MZ_SMALL, 0, 0, M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_WANDER | M2_HOSTILE, M3_INFRAVISIBLE, BLACK));
+	monsters.push_back(new Monster(&quot;vampire bat&quot;, S_BAT, 5, 20, 6, 0, 0, (G_GENO | 2), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(AT_BITE, AD_DRST, 0, 0), Attack(), Attack(), Attack(), Attack(), 30, 20, 0, MS_SQEEK, MZ_SMALL, MR_SLEEP | MR_POISON, 0, M1_FLY | M1_ANIMAL | M1_NOHANDS | M1_POIS | M1_REGEN | M1_OMNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, BLACK));
+	monsters.push_back(new Monster(&quot;plains centaur&quot;, S_CENTAUR, 4, 18, 4, 0, 0, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 2500, 500, 0, MS_HUMANOID, MZ_LARGE, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_STRONG | M2_GREEDY | M2_COLLECT, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;forest centaur&quot;, S_CENTAUR, 5, 18, 3, 10, -1, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 2550, 600, 0, MS_HUMANOID, MZ_LARGE, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_STRONG | M2_GREEDY | M2_COLLECT, M3_INFRAVISIBLE, GREEN));
+	monsters.push_back(new Monster(&quot;mountain centaur&quot;, S_CENTAUR, 6, 20, 2, 10, -3, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 1, 10), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(AT_KICK, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), 2550, 500, 0, MS_HUMANOID, MZ_LARGE, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_STRONG | M2_GREEDY | M2_COLLECT, M3_INFRAVISIBLE, CYAN));
+	monsters.push_back(new Monster(&quot;baby gray dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, 0, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, WHITE));
+	monsters.push_back(new Monster(&quot;baby silver dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, 0, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, BOLD_CYAN));
+	monsters.push_back(new Monster(&quot;baby red dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, MR_FIRE, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;baby white dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, MR_COLD, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;baby orange dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, MR_SLEEP, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, BOLD_RED));
+	monsters.push_back(new Monster(&quot;baby black dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, MR_DISINT, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, BLACK));
+	monsters.push_back(new Monster(&quot;baby blue dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, MR_ELEC, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, BLUE));
+	monsters.push_back(new Monster(&quot;baby green dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, MR_POISON, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE | M1_POIS, M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, GREEN));
+	monsters.push_back(new Monster(&quot;baby yellow dragon&quot;, S_DRAGON, 12, 9, 2, 10, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_ROAR, MZ_HUGE, MR_ACID | MR_STONE, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE | M1_ACID, M2_HOSTILE | M2_STRONG | M2_GREEDY | M2_JEWELS, 0, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;gray dragon&quot;, S_DRAGON, 15, 9, -1, 20, 4, (G_GENO | 1), Attack(AT_BREA, AD_MAGM, 4, 6), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, 0, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, 0, WHITE));
+	monsters.push_back(new Monster(&quot;silver dragon&quot;, S_DRAGON, 15, 9, -1, 20, 4, (G_GENO | 1), Attack(AT_BREA, AD_COLD, 4, 6), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_COLD, 0, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, 0, BOLD_CYAN));
+	monsters.push_back(new Monster(&quot;red dragon&quot;, S_DRAGON, 15, 9, -1, 20, -4, (G_GENO | 1), Attack(AT_BREA, AD_FIRE, 6, 6), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_FIRE, MR_FIRE, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;white dragon&quot;, S_DRAGON, 15, 9, -1, 20, -5, (G_GENO | 1), Attack(AT_BREA, AD_COLD, 4, 6), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_COLD, MR_COLD, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, 0, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;orange dragon&quot;, S_DRAGON, 15, 9, -1, 20, 5, (G_GENO | 1), Attack(AT_BREA, AD_SLEE, 4, 25), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_SLEEP, MR_SLEEP, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, 0, BOLD_RED));
+	monsters.push_back(new Monster(&quot;black dragon&quot;, S_DRAGON, 15, 9, -1, 20, -6, (G_GENO | 1), Attack(AT_BREA, AD_DISN, 4, 10), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_DISINT, MR_DISINT, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, 0, BLACK));
+	monsters.push_back(new Monster(&quot;blue dragon&quot;, S_DRAGON, 15, 9, -1, 20, -7, (G_GENO | 1), Attack(AT_BREA, AD_ELEC, 4, 6), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_ELEC, MR_ELEC, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, 0, BLUE));
+	monsters.push_back(new Monster(&quot;green dragon&quot;, S_DRAGON, 15, 9, -1, 20, 6, (G_GENO | 1), Attack(AT_BREA, AD_DRST, 4, 6), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_POISON, MR_POISON, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE | M1_POIS, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, 0, GREEN));
+	monsters.push_back(new Monster(&quot;yellow dragon&quot;, S_DRAGON, 15, 9, -1, 20, 7, (G_GENO | 1), Attack(AT_BREA, AD_ACID, 4, 6), Attack(AT_BITE, AD_PHYS, 3, 8), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), 4500, 1500, 0, MS_ROAR, MZ_GIGANTIC, MR_ACID | MR_STONE, MR_STONE, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_SEE_INVIS | M1_OVIPAROUS | M1_CARNIVORE | M1_ACID, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, 0, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;stalker&quot;, S_ELEMENTAL, 8, 12, 3, 0, 0, (G_GENO | 3), Attack(AT_CLAW, AD_PHYS, 4, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 900, 400, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_ANIMAL | M1_FLY | M1_SEE_INVIS, M2_WANDER | M2_STALK | M2_HOSTILE | M2_STRONG, M3_INFRAVISION, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;air elemental&quot;, S_ELEMENTAL, 8, 36, 2, 30, 0, (G_NOCORPSE | 1), Attack(AT_ENGL, AD_PHYS, 1, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_POISON | MR_STONE, 0, M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_UNSOLID | M1_FLY, M2_STRONG | M2_NEUTER, 0, CYAN));
+	monsters.push_back(new Monster(&quot;fire elemental&quot;, S_ELEMENTAL, 8, 12, 2, 30, 0, (G_NOCORPSE | 1), Attack(AT_CLAW, AD_FIRE, 3, 6), Attack(AT_NONE, AD_FIRE, 0, 4), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUGE, MR_FIRE | MR_POISON | MR_STONE, 0, M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_UNSOLID | M1_FLY | M1_NOTAKE, M2_STRONG | M2_NEUTER, M3_INFRAVISIBLE, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;earth elemental&quot;, S_ELEMENTAL, 8, 6, 2, 30, 0, (G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 4, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 2500, 0, 0, MS_SILENT, MZ_HUGE, MR_FIRE | MR_COLD | MR_POISON | MR_STONE, 0, M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_BREATHLESS | M1_WALLWALK | M1_THICK_HIDE, M2_STRONG | M2_NEUTER, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;water elemental&quot;, S_ELEMENTAL, 8, 6, 2, 30, 0, (G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 5, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 2500, 0, 0, MS_SILENT, MZ_HUGE, MR_POISON | MR_STONE, 0, M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_AMPHIBIOUS | M1_SWIM, M2_STRONG | M2_NEUTER, 0, BLUE));
+	monsters.push_back(new Monster(&quot;lichen&quot;, S_FUNGUS, 0, 1, 9, 0, 0, (G_GENO | 4), Attack(AT_TUCH, AD_STCK, 0, 0), Attack(), Attack(), Attack(), Attack(), Attack(), 20, 200, 0, MS_SILENT, MZ_SMALL, 0, 0, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, M2_HOSTILE | M2_NEUTER, 0, BOLD_GREEN));
+	monsters.push_back(new Monster(&quot;brown mold&quot;, S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1), Attack(AT_NONE, AD_COLD, 0, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 30, 0, MS_SILENT, MZ_SMALL, MR_COLD | MR_POISON, MR_COLD | MR_POISON, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, M2_HOSTILE | M2_NEUTER, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;yellow mold&quot;, S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 2), Attack(AT_NONE, AD_STUN, 0, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 30, 0, MS_SILENT, MZ_SMALL, MR_POISON, MR_POISON, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_POIS | M1_NOTAKE, M2_HOSTILE | M2_NEUTER, 0, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;green mold&quot;, S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1), Attack(AT_NONE, AD_ACID, 0, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 30, 0, MS_SILENT, MZ_SMALL, MR_ACID | MR_STONE, MR_STONE, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_ACID | M1_NOTAKE, M2_HOSTILE | M2_NEUTER, 0, GREEN));
+	monsters.push_back(new Monster(&quot;red mold&quot;, S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1), Attack(AT_NONE, AD_FIRE, 0, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 30, 0, MS_SILENT, MZ_SMALL, MR_FIRE | MR_POISON, MR_FIRE | MR_POISON, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, M2_HOSTILE | M2_NEUTER, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;shrieker&quot;, S_FUNGUS, 3, 1, 7, 0, 0, (G_GENO | 1), Attack(), Attack(), Attack(), Attack(), Attack(), Attack(), 100, 100, 0, MS_SHRIEK, MZ_SMALL, MR_POISON, MR_POISON, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, M2_HOSTILE | M2_NEUTER, 0, MAGENTA));
+	monsters.push_back(new Monster(&quot;violet fungus&quot;, S_FUNGUS, 3, 1, 7, 0, 0, (G_GENO | 2), Attack(AT_TUCH, AD_PHYS, 1, 4), Attack(AT_TUCH, AD_STCK, 0, 0), Attack(), Attack(), Attack(), Attack(), 100, 100, 0, MS_SILENT, MZ_SMALL, MR_POISON, MR_POISON, M1_BREATHLESS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_NOTAKE, M2_HOSTILE | M2_NEUTER, 0, MAGENTA));
+	monsters.push_back(new Monster(&quot;gnome&quot;, S_GNOME, 1, 6, 10, 4, 0, (G_GENO | G_SGROUP | 1), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 650, 100, 0, MS_ORC, MZ_SMALL, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_GNOME | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, YELLOW));
+	monsters.push_back(new Monster(&quot;gnome lord&quot;, S_GNOME, 3, 8, 10, 4, 0, (G_GENO | 2), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 700, 120, 0, MS_ORC, MZ_SMALL, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_GNOME | M2_LORD | M2_MALE | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, BLUE));
+	monsters.push_back(new Monster(&quot;gnomish wizard&quot;, S_GNOME, 3, 10, 4, 10, 0, (G_GENO | 1), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), Attack(), 700, 120, 0, MS_ORC, MZ_SMALL, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_GNOME | M2_MAGIC, M3_INFRAVISIBLE | M3_INFRAVISION, BOLD_BLUE));
+	monsters.push_back(new Monster(&quot;gnome king&quot;, S_GNOME, 5, 10, 10, 20, 0, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 750, 150, 0, MS_ORC, MZ_SMALL, 0, 0, M1_HUMANOID | M1_OMNIVORE, M2_GNOME | M2_PRINCE | M2_MALE | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;giant&quot;, S_GIANT, 6, 6, 0, 0, 2, (G_GENO | G_NOGEN | 1), Attack(AT_WEAP, AD_PHYS, 2, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 2250, 750, 0, MS_BOAST, MZ_HUGE, 0, 0, M1_HUMANOID | M1_CARNIVORE, M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT | M2_JEWELS, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;stone giant&quot;, S_GIANT, 6, 6, 0, 0, 2, (G_GENO | G_SGROUP | 1), Attack(AT_WEAP, AD_PHYS, 2, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 2250, 750, 0, MS_BOAST, MZ_HUGE, 0, 0, M1_HUMANOID | M1_CARNIVORE, M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT | M2_JEWELS, M3_INFRAVISIBLE | M3_INFRAVISION, WHITE));
+	monsters.push_back(new Monster(&quot;hill giant&quot;, S_GIANT, 8, 10, 6, 0, -2, (G_GENO | G_SGROUP | 1), Attack(AT_WEAP, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 2200, 700, 0, MS_BOAST, MZ_HUGE, 0, 0, M1_HUMANOID | M1_CARNIVORE, M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT | M2_JEWELS, M3_INFRAVISIBLE | M3_INFRAVISION, CYAN));
+	monsters.push_back(new Monster(&quot;fire giant&quot;, S_GIANT, 9, 12, 4, 5, 2, (G_GENO | G_SGROUP | 1), Attack(AT_WEAP, AD_PHYS, 2, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 2250, 750, 0, MS_BOAST, MZ_HUGE, MR_FIRE, MR_FIRE, M1_HUMANOID | M1_CARNIVORE, M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT | M2_JEWELS, M3_INFRAVISIBLE | M3_INFRAVISION, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;frost giant&quot;, S_GIANT, 10, 12, 3, 10, -3, (G_NOHELL | G_GENO | G_SGROUP | 1), Attack(AT_WEAP, AD_PHYS, 2, 12), Attack(), Attack(), Attack(), Attack(), Attack(), 2250, 750, 0, MS_BOAST, MZ_HUGE, MR_COLD, MR_COLD, M1_HUMANOID | M1_CARNIVORE, M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT | M2_JEWELS, M3_INFRAVISIBLE | M3_INFRAVISION, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;storm giant&quot;, S_GIANT, 16, 12, 3, 10, -3, (G_GENO | G_SGROUP | 1), Attack(AT_WEAP, AD_PHYS, 2, 12), Attack(), Attack(), Attack(), Attack(), Attack(), 2250, 750, 0, MS_BOAST, MZ_HUGE, MR_ELEC, MR_ELEC, M1_HUMANOID | M1_CARNIVORE, M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT | M2_JEWELS, M3_INFRAVISIBLE | M3_INFRAVISION, BLUE));
+	monsters.push_back(new Monster(&quot;ettin&quot;, S_GIANT, 10, 12, 3, 0, 0, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 2, 8), Attack(AT_WEAP, AD_PHYS, 3, 6), Attack(), Attack(), Attack(), Attack(), 1700, 500, 0, MS_GRUNT, MZ_HUGE, 0, 0, M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, YELLOW));
+	monsters.push_back(new Monster(&quot;titan&quot;, S_GIANT, 16, 18, -3, 70, 9, (1), Attack(AT_WEAP, AD_PHYS, 2, 8), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), 2300, 900, 0, MS_SPELL, MZ_HUGE, 0, 0, M1_FLY | M1_HUMANOID | M1_OMNIVORE, M2_STRONG | M2_ROCKTHROW | M2_NASTY | M2_COLLECT | M2_MAGIC, M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;minotaur&quot;, S_GIANT, 15, 15, 6, 0, 0, (G_GENO | G_NOGEN), Attack(AT_CLAW, AD_PHYS, 3, 10), Attack(AT_CLAW, AD_PHYS, 3, 10), Attack(AT_BUTT, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), 1500, 700, 0, MS_SILENT, MZ_LARGE, MR_NO_ELBERETH, 0, M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY, M3_INFRAVISIBLE | M3_INFRAVISION, YELLOW));
+	monsters.push_back(new Monster(&quot;jabberwock&quot;, S_JABBERWOCK, 15, 12, -2, 50, 0, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 2, 10), Attack(AT_BITE, AD_PHYS, 2, 10), Attack(AT_CLAW, AD_PHYS, 2, 10), Attack(AT_CLAW, AD_PHYS, 2, 10), Attack(), Attack(), 1300, 600, 0, MS_BURBLE, MZ_LARGE, 0, 0, M1_ANIMAL | M1_FLY | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY | M2_COLLECT, M3_INFRAVISIBLE, BOLD_RED));
+	monsters.push_back(new Monster(&quot;lich&quot;, S_LICH, 11, 6, 0, 30, -9, (G_GENO | G_NOCORPSE | 1), Attack(AT_TUCH, AD_COLD, 1, 10), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), 1200, 100, 0, MS_MUMBLE, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON, MR_COLD, M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_UNDEAD | M2_HOSTILE | M2_MAGIC, M3_INFRAVISION, YELLOW));
+	monsters.push_back(new Monster(&quot;demilich&quot;, S_LICH, 14, 9, -2, 60, -12, (G_GENO | G_NOCORPSE | 1), Attack(AT_TUCH, AD_COLD, 3, 4), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), 1200, 100, 0, MS_MUMBLE, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON, MR_COLD, M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_UNDEAD | M2_HOSTILE | M2_MAGIC, M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;master lich&quot;, S_LICH, 17, 9, -4, 90, -15, (G_HELL | G_GENO | G_NOCORPSE | 1), Attack(AT_TUCH, AD_COLD, 3, 6), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), 1200, 100, 0, MS_MUMBLE, MZ_HUMAN, MR_FIRE | MR_COLD | MR_SLEEP | MR_POISON, MR_FIRE | MR_COLD, M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_UNDEAD | M2_HOSTILE | M2_MAGIC, M3_WANTSBOOK | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;arch-lich&quot;, S_LICH, 25, 9, -6, 90, -15, (G_HELL | G_GENO | G_NOCORPSE | 1), Attack(AT_TUCH, AD_COLD, 5, 6), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), 1200, 100, 0, MS_MUMBLE, MZ_HUMAN, MR_FIRE | MR_COLD | MR_SLEEP | MR_ELEC | MR_POISON, MR_FIRE | MR_COLD, M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_UNDEAD | M2_HOSTILE | M2_MAGIC, M3_WANTSBOOK | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;kobold mummy&quot;, S_MUMMY, 3, 8, 6, 20, -2, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 50, 0, MS_SILENT, MZ_SMALL, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE, M3_INFRAVISION, YELLOW));
+	monsters.push_back(new Monster(&quot;gnome mummy&quot;, S_MUMMY, 4, 10, 6, 20, -3, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 650, 50, 0, MS_SILENT, MZ_SMALL, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE | M2_GNOME, M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;orc mummy&quot;, S_MUMMY, 5, 10, 5, 20, -4, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 850, 75, 0, MS_SILENT, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE | M2_ORC | M2_GREEDY | M2_JEWELS, M3_INFRAVISION, WHITE));
+	monsters.push_back(new Monster(&quot;dwarf mummy&quot;, S_MUMMY, 5, 10, 5, 20, -4, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 900, 150, 0, MS_SILENT, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE | M2_DWARF | M2_GREEDY | M2_JEWELS, M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;elf mummy&quot;, S_MUMMY, 6, 12, 4, 30, -5, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 175, 0, MS_SILENT, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE | M2_ELF, M3_INFRAVISION, GREEN));
+	monsters.push_back(new Monster(&quot;human mummy&quot;, S_MUMMY, 6, 12, 4, 30, -5, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), 1450, 200, 0, MS_SILENT, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE, M3_INFRAVISION, WHITE));
+	monsters.push_back(new Monster(&quot;ettin mummy&quot;, S_MUMMY, 7, 12, 4, 30, -6, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 2, 6), Attack(AT_CLAW, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), 1700, 250, 0, MS_SILENT, MZ_HUGE, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE | M2_STRONG, M3_INFRAVISION, BLUE));
+	monsters.push_back(new Monster(&quot;giant mummy&quot;, S_MUMMY, 8, 14, 3, 30, -7, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(), Attack(), Attack(), Attack(), 2050, 375, 0, MS_SILENT, MZ_HUGE, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE | M2_GIANT | M2_STRONG | M2_JEWELS, M3_INFRAVISION, CYAN));
+	monsters.push_back(new Monster(&quot;red naga hatchling&quot;, S_NAGA, 3, 10, 6, 0, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 100, 0, MS_MUMBLE, MZ_LARGE, MR_FIRE | MR_POISON, MR_FIRE | MR_POISON, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_NOTAKE | M1_OMNIVORE, M2_STRONG, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;black naga hatchling&quot;, S_NAGA, 3, 10, 6, 0, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 100, 0, MS_MUMBLE, MZ_LARGE, MR_POISON | MR_ACID | MR_STONE, MR_POISON | MR_STONE, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_ACID | M1_NOTAKE | M1_CARNIVORE, M2_STRONG, 0, BLACK));
+	monsters.push_back(new Monster(&quot;golden naga hatchling&quot;, S_NAGA, 3, 10, 6, 0, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 100, 0, MS_MUMBLE, MZ_LARGE, MR_POISON, MR_POISON, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_NOTAKE | M1_OMNIVORE, M2_STRONG, 0, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;guardian naga hatchling&quot;, S_NAGA, 3, 10, 6, 0, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 100, 0, MS_MUMBLE, MZ_LARGE, MR_POISON, MR_POISON, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_NOTAKE | M1_OMNIVORE, M2_STRONG, 0, GREEN));
+	monsters.push_back(new Monster(&quot;red naga&quot;, S_NAGA, 6, 12, 4, 0, -4, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(AT_BREA, AD_FIRE, 2, 6), Attack(), Attack(), Attack(), Attack(), 2600, 400, 0, MS_MUMBLE, MZ_HUGE, MR_FIRE | MR_POISON, MR_FIRE | MR_POISON, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS | M1_NOTAKE | M1_OMNIVORE, M2_STRONG, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;black naga&quot;, S_NAGA, 8, 14, 2, 10, 4, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(AT_SPIT, AD_ACID, 0, 0), Attack(), Attack(), Attack(), Attack(), 2600, 400, 0, MS_MUMBLE, MZ_HUGE, MR_POISON | MR_ACID | MR_STONE, MR_POISON | MR_STONE, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS | M1_ACID | M1_NOTAKE | M1_CARNIVORE, M2_STRONG, 0, BLACK));
+	monsters.push_back(new Monster(&quot;golden naga&quot;, S_NAGA, 10, 14, 2, 70, 5, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(AT_MAGC, AD_SPEL, 4, 6), Attack(), Attack(), Attack(), Attack(), 2600, 400, 0, MS_MUMBLE, MZ_HUGE, MR_POISON, MR_POISON, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS | M1_NOTAKE | M1_OMNIVORE, M2_STRONG, 0, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;guardian naga&quot;, S_NAGA, 12, 16, 0, 50, 7, (G_GENO | 1), Attack(AT_BITE, AD_PLYS, 1, 6), Attack(AT_SPIT, AD_DRST, 1, 6), Attack(AT_HUGS, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), 2600, 400, 0, MS_MUMBLE, MZ_HUGE, MR_POISON, MR_POISON, M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_OVIPAROUS | M1_POIS | M1_NOTAKE | M1_OMNIVORE, M2_STRONG, 0, GREEN));
+	monsters.push_back(new Monster(&quot;ogre&quot;, S_OGRE, 5, 10, 5, 0, -3, (G_SGROUP | G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 2, 5), Attack(), Attack(), Attack(), Attack(), Attack(), 1600, 500, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID | M1_CARNIVORE, M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, YELLOW));
+	monsters.push_back(new Monster(&quot;ogre lord&quot;, S_OGRE, 7, 12, 3, 30, -5, (G_GENO | 2), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1700, 700, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID | M1_CARNIVORE, M2_STRONG | M2_LORD | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;ogre king&quot;, S_OGRE, 9, 14, 4, 60, -7, (G_GENO | 2), Attack(AT_WEAP, AD_PHYS, 3, 5), Attack(), Attack(), Attack(), Attack(), Attack(), 1700, 750, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID | M1_CARNIVORE, M2_STRONG | M2_PRINCE | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;gray ooze&quot;, S_PUDDING, 3, 1, 8, 0, 0, (G_GENO | 2), Attack(AT_BITE, AD_RUST, 2, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 250, 0, MS_SILENT, MZ_MEDIUM, MR_FIRE | MR_COLD | MR_POISON | MR_ACID | MR_STONE, MR_FIRE | MR_COLD | MR_POISON, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_OMNIVORE | M1_ACID, M2_HOSTILE | M2_NEUTER, 0, WHITE));
+	monsters.push_back(new Monster(&quot;brown pudding&quot;, S_PUDDING, 5, 3, 8, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_DCAY, 0, 0), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 250, 0, MS_SILENT, MZ_MEDIUM, MR_COLD | MR_ELEC | MR_POISON | MR_ACID | MR_STONE, MR_COLD | MR_ELEC | MR_POISON, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_OMNIVORE | M1_ACID, M2_HOSTILE | M2_NEUTER, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;black pudding&quot;, S_PUDDING, 10, 6, 6, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_CORR, 3, 8), Attack(AT_NONE, AD_CORR, 0, 0), Attack(), Attack(), Attack(), Attack(), 900, 250, 0, MS_SILENT, MZ_LARGE, MR_COLD | MR_ELEC | MR_POISON | MR_ACID | MR_STONE, MR_COLD | MR_ELEC | MR_POISON, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_OMNIVORE | M1_ACID, M2_HOSTILE | M2_NEUTER, 0, BLACK));
+	monsters.push_back(new Monster(&quot;green slime&quot;, S_PUDDING, 6, 6, 6, 0, 0, (G_HELL | G_GENO | 1), Attack(AT_TUCH, AD_SLIM, 1, 4), Attack(AT_NONE, AD_SLIM, 0, 0), Attack(), Attack(), Attack(), Attack(), 400, 150, 0, MS_SILENT, MZ_LARGE, MR_COLD | MR_ELEC | MR_POISON | MR_ACID | MR_STONE, 0, M1_BREATHLESS | M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_NOHEAD | M1_MINDLESS | M1_OMNIVORE | M1_ACID | M1_POIS, M2_HOSTILE | M2_NEUTER, 0, GREEN));
+	monsters.push_back(new Monster(&quot;quantum mechanic&quot;, S_QUANTMECH, 7, 12, 3, 10, 0, (G_GENO | 3), Attack(AT_CLAW, AD_TLPT, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 20, 0, MS_HUMANOID, MZ_HUMAN, MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE | M1_POIS | M1_TPORT, M2_HOSTILE, M3_INFRAVISIBLE, CYAN));
+	monsters.push_back(new Monster(&quot;rust monster&quot;, S_RUSTMONST, 5, 18, 2, 0, 0, (G_GENO | 2), Attack(AT_TUCH, AD_RUST, 0, 0), Attack(AT_TUCH, AD_RUST, 0, 0), Attack(AT_NONE, AD_RUST, 0, 0), Attack(), Attack(), Attack(), 1000, 250, 0, MS_SILENT, MZ_MEDIUM, 0, 0, M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_METALLIVORE, M2_HOSTILE, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;disenchanter&quot;, S_RUSTMONST, 12, 12, -10, 0, -3, (G_HELL | G_GENO | 2), Attack(AT_CLAW, AD_ENCH, 4, 4), Attack(AT_NONE, AD_ENCH, 0, 0), Attack(), Attack(), Attack(), Attack(), 750, 200, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_ANIMAL | M1_CARNIVORE, M2_HOSTILE, M3_INFRAVISIBLE, BLUE));
+	monsters.push_back(new Monster(&quot;garter snake&quot;, S_SNAKE, 1, 8, 8, 0, 0, (G_LGROUP | G_GENO | 1), Attack(AT_BITE, AD_PHYS, 1, 2), Attack(), Attack(), Attack(), Attack(), Attack(), 50, 60, 0, MS_HISS, MZ_TINY, 0, 0, M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_OVIPAROUS | M1_CARNIVORE | M1_NOTAKE, 0, 0, GREEN));
+	monsters.push_back(new Monster(&quot;snake&quot;, S_SNAKE, 4, 15, 3, 0, 0, (G_GENO | 2), Attack(AT_BITE, AD_DRST, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 100, 80, 0, MS_HISS, MZ_SMALL, MR_POISON, MR_POISON, M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS | M1_OVIPAROUS | M1_CARNIVORE | M1_NOTAKE, M2_HOSTILE, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;water moccasin&quot;, S_SNAKE, 4, 15, 3, 0, 0, (G_GENO | G_NOGEN | G_LGROUP), Attack(AT_BITE, AD_DRST, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 150, 80, 0, MS_HISS, MZ_SMALL, MR_POISON, MR_POISON, M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, M2_HOSTILE, 0, RED));
+	monsters.push_back(new Monster(&quot;pit viper&quot;, S_SNAKE, 6, 15, 2, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_DRST, 1, 4), Attack(AT_BITE, AD_DRST, 1, 4), Attack(), Attack(), Attack(), Attack(), 100, 60, 0, MS_HISS, MZ_MEDIUM, MR_POISON, MR_POISON, M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, M2_HOSTILE, M3_INFRAVISION, BLUE));
+	monsters.push_back(new Monster(&quot;python&quot;, S_SNAKE, 6, 3, 5, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(AT_TUCH, AD_PHYS, 0, 0), Attack(AT_HUGS, AD_WRAP, 1, 4), Attack(AT_HUGS, AD_PHYS, 2, 4), Attack(), Attack(), 250, 100, 0, MS_HISS, MZ_LARGE, 0, 0, M1_SWIM | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, M2_HOSTILE | M2_STRONG, M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;cobra&quot;, S_SNAKE, 6, 18, 2, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_DRST, 2, 4), Attack(AT_SPIT, AD_BLND, 0, 0), Attack(), Attack(), Attack(), Attack(), 250, 100, 0, MS_HISS, MZ_MEDIUM, MR_POISON, MR_POISON, M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, M2_HOSTILE, 0, BLUE));
+	monsters.push_back(new Monster(&quot;troll&quot;, S_TROLL, 7, 12, 4, 0, -3, (G_GENO | 2), Attack(AT_WEAP, AD_PHYS, 4, 2), Attack(AT_CLAW, AD_PHYS, 4, 2), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), 800, 350, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID | M1_REGEN | M1_CARNIVORE, M2_STRONG | M2_STALK | M2_HOSTILE, M3_INFRAVISIBLE | M3_INFRAVISION, YELLOW));
+	monsters.push_back(new Monster(&quot;ice troll&quot;, S_TROLL, 9, 10, 2, 20, -3, (G_NOHELL | G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_CLAW, AD_COLD, 2, 6), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), 1000, 300, 0, MS_GRUNT, MZ_LARGE, MR_COLD, MR_COLD, M1_HUMANOID | M1_REGEN | M1_CARNIVORE, M2_STRONG | M2_STALK | M2_HOSTILE, M3_INFRAVISIBLE | M3_INFRAVISION, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;rock troll&quot;, S_TROLL, 9, 12, 0, 0, -3, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 3, 6), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), 1200, 300, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID | M1_REGEN | M1_CARNIVORE, M2_STRONG | M2_STALK | M2_HOSTILE | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, CYAN));
+	monsters.push_back(new Monster(&quot;water troll&quot;, S_TROLL, 11, 14, 4, 40, -3, (G_NOGEN | G_GENO), Attack(AT_WEAP, AD_PHYS, 2, 8), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), 1200, 350, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID | M1_REGEN | M1_CARNIVORE | M1_SWIM, M2_STRONG | M2_STALK | M2_HOSTILE, M3_INFRAVISIBLE | M3_INFRAVISION, BLUE));
+	monsters.push_back(new Monster(&quot;Olog-hai&quot;, S_TROLL, 13, 12, -4, 0, -7, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 3, 6), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), 1500, 400, 0, MS_GRUNT, MZ_LARGE, 0, 0, M1_HUMANOID | M1_REGEN | M1_CARNIVORE, M2_STRONG | M2_STALK | M2_HOSTILE | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;umber hulk&quot;, S_UMBER, 9, 6, 2, 25, 0, (G_GENO | 2), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(AT_BITE, AD_PHYS, 2, 5), Attack(AT_GAZE, AD_CONF, 0, 0), Attack(), Attack(), 1200, 500, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_TUNNEL | M1_CARNIVORE, M2_STRONG, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;vampire&quot;, S_VAMPIRE, 10, 12, 1, 25, -8, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_BITE, AD_DRLI, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_VAMPIRE, MZ_HUMAN, MR_SLEEP | MR_POISON, 0, M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;vampire lord&quot;, S_VAMPIRE, 12, 14, 0, 50, -9, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 8), Attack(AT_BITE, AD_DRLI, 1, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_VAMPIRE, MZ_HUMAN, MR_SLEEP | MR_POISON, 0, M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_LORD | M2_MALE, M3_INFRAVISIBLE, BLUE));
+	monsters.push_back(new Monster(&quot;Vlad the Impaler&quot;, S_VAMPIRE, 14, 18, -3, 80, -10, (G_NOGEN | G_NOCORPSE | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 10), Attack(AT_BITE, AD_DRLI, 1, 10), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_VAMPIRE, MZ_HUMAN, MR_SLEEP | MR_POISON, 0, M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_POIS | M1_REGEN, M2_NOPOLY | M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY | M2_PRINCE | M2_MALE, M3_WAITFORU | M3_WANTSCAND | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;barrow wight&quot;, S_WRAITH, 3, 12, 5, 5, -3, (G_GENO | G_NOCORPSE | 1), Attack(AT_WEAP, AD_DRLI, 0, 0), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), 1200, 0, 0, MS_SPELL, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_HUMANOID, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_COLLECT, 0, WHITE));
+	monsters.push_back(new Monster(&quot;wraith&quot;, S_WRAITH, 6, 12, 4, 15, -6, (G_GENO | 2), Attack(AT_TUCH, AD_DRLI, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, MS_SILENT, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_BREATHLESS | M1_FLY | M1_HUMANOID | M1_UNSOLID, M2_UNDEAD | M2_STALK | M2_HOSTILE, 0, BLACK));
+	monsters.push_back(new Monster(&quot;Nazgul&quot;, S_WRAITH, 13, 12, 0, 25, -17, (G_GENO | G_NOCORPSE | 1), Attack(AT_WEAP, AD_DRLI, 1, 4), Attack(AT_BREA, AD_SLEE, 2, 25), Attack(), Attack(), Attack(), Attack(), 1450, 0, 0, MS_SPELL, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_HUMANOID, M2_NOPOLY | M2_UNDEAD | M2_STALK | M2_STRONG | M2_HOSTILE | M2_MALE | M2_COLLECT, 0, MAGENTA));
+	monsters.push_back(new Monster(&quot;xorn&quot;, S_XORN, 8, 9, -2, 20, 0, (G_GENO | 1), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_PHYS, 4, 6), Attack(), Attack(), 1200, 700, 0, MS_ROAR, MZ_MEDIUM, MR_FIRE | MR_COLD | MR_STONE, MR_STONE, M1_BREATHLESS | M1_WALLWALK | M1_THICK_HIDE | M1_METALLIVORE, M2_HOSTILE | M2_STRONG, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;monkey&quot;, S_YETI, 2, 12, 6, 0, 0, (G_GENO | 1), Attack(AT_CLAW, AD_SITM, 0, 0), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), 100, 50, 0, MS_GROWL, MZ_SMALL, 0, 0, M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, 0, M3_INFRAVISIBLE, WHITE));
+	monsters.push_back(new Monster(&quot;ape&quot;, S_YETI, 4, 12, 6, 0, 0, (G_GENO | G_SGROUP | 2), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), 1100, 500, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, M2_STRONG, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;owlbear&quot;, S_YETI, 5, 12, 5, 0, 0, (G_GENO | 3), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_HUGS, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), 1700, 700, 0, MS_ROAR, MZ_LARGE, 0, 0, M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, M2_HOSTILE | M2_STRONG | M2_NASTY, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;yeti&quot;, S_YETI, 5, 15, 6, 0, 0, (G_GENO | 2), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), 1600, 700, 0, MS_GROWL, MZ_LARGE, MR_COLD, MR_COLD, M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;carnivorous ape&quot;, S_YETI, 6, 12, 6, 0, 0, (G_GENO | 1), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_HUGS, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), 1250, 550, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_ANIMAL | M1_HUMANOID | M1_CARNIVORE, M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, BLACK));
+	monsters.push_back(new Monster(&quot;sasquatch&quot;, S_YETI, 7, 15, 6, 0, 2, (G_GENO | 1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_KICK, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), 1550, 750, 0, MS_GROWL, MZ_LARGE, 0, 0, M1_ANIMAL | M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, M2_STRONG, M3_INFRAVISIBLE, WHITE));
+	monsters.push_back(new Monster(&quot;kobold zombie&quot;, S_ZOMBIE, 0, 6, 10, 0, -2, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 50, 0, MS_SILENT, MZ_SMALL, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_STALK | M2_HOSTILE, M3_INFRAVISION, YELLOW));
+	monsters.push_back(new Monster(&quot;gnome zombie&quot;, S_ZOMBIE, 1, 6, 10, 0, -2, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 5), Attack(), Attack(), Attack(), Attack(), Attack(), 650, 50, 0, MS_SILENT, MZ_SMALL, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_GNOME, M3_INFRAVISION, YELLOW));
+	monsters.push_back(new Monster(&quot;orc zombie&quot;, S_ZOMBIE, 2, 6, 9, 0, -3, (G_GENO | G_SGROUP | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 850, 75, 0, MS_SILENT, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_ORC, M3_INFRAVISION, WHITE));
+	monsters.push_back(new Monster(&quot;dwarf zombie&quot;, S_ZOMBIE, 2, 6, 9, 0, -3, (G_GENO | G_SGROUP | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 900, 150, 0, MS_SILENT, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_DWARF, M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;elf zombie&quot;, S_ZOMBIE, 3, 6, 9, 0, -3, (G_GENO | G_SGROUP | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 7), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 175, 0, MS_SILENT, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_ELF, M3_INFRAVISION, GREEN));
+	monsters.push_back(new Monster(&quot;human zombie&quot;, S_ZOMBIE, 4, 6, 8, 0, -3, (G_GENO | G_SGROUP | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 200, 0, MS_SILENT, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_UNDEAD | M2_STALK | M2_HOSTILE, M3_INFRAVISION, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;ettin zombie&quot;, S_ZOMBIE, 6, 8, 6, 0, -4, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 10), Attack(AT_CLAW, AD_PHYS, 1, 10), Attack(), Attack(), Attack(), Attack(), 1700, 250, 0, MS_SILENT, MZ_HUGE, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG, M3_INFRAVISION, BLUE));
+	monsters.push_back(new Monster(&quot;giant zombie&quot;, S_ZOMBIE, 8, 8, 6, 0, -4, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), Attack(), 2050, 375, 0, MS_SILENT, MZ_HUGE, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_GIANT | M2_STRONG, M3_INFRAVISION, CYAN));
+	monsters.push_back(new Monster(&quot;ghoul&quot;, S_ZOMBIE, 3, 6, 10, 0, -2, (G_GENO | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PLYS, 1, 2), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), 400, 50, 0, MS_SILENT, MZ_SMALL, MR_COLD | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_WANDER | M2_HOSTILE, M3_INFRAVISION, BLACK));
+	monsters.push_back(new Monster(&quot;skeleton&quot;, S_ZOMBIE, 12, 8, 4, 0, 0, (G_NOCORPSE | G_NOGEN), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_TUCH, AD_SLOW, 1, 6), Attack(), Attack(), Attack(), Attack(), 300, 5, 0, MS_BONES, MZ_HUMAN, MR_COLD | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE, M2_UNDEAD | M2_WANDER | M2_HOSTILE | M2_STRONG | M2_COLLECT | M2_NASTY, M3_INFRAVISION, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;straw golem&quot;, S_GOLEM, 3, 12, 10, 0, 0, (G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 2), Attack(AT_CLAW, AD_PHYS, 1, 2), Attack(), Attack(), Attack(), Attack(), 400, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_HOSTILE | M2_NEUTER, 0, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;paper golem&quot;, S_GOLEM, 3, 12, 10, 0, 0, (G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 400, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_HOSTILE | M2_NEUTER, 0, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;rope golem&quot;, S_GOLEM, 4, 9, 8, 0, 0, (G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_HUGS, AD_PHYS, 6, 1), Attack(), Attack(), Attack(), 450, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_HOSTILE | M2_NEUTER, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;gold golem&quot;, S_GOLEM, 5, 9, 6, 0, 0, (G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 2, 3), Attack(AT_CLAW, AD_PHYS, 2, 3), Attack(), Attack(), Attack(), Attack(), 450, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP | MR_POISON | MR_ACID, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE, M2_HOSTILE | M2_NEUTER, 0, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;leather golem&quot;, S_GOLEM, 6, 6, 6, 0, 0, (G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 800, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_HOSTILE | M2_NEUTER, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;wood golem&quot;, S_GOLEM, 7, 3, 4, 0, 0, (G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 900, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE, M2_HOSTILE | M2_NEUTER, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;flesh golem&quot;, S_GOLEM, 9, 8, 9, 30, 0, (1), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), Attack(), 1400, 600, 0, MS_SILENT, MZ_LARGE, MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON, MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID, M2_HOSTILE | M2_STRONG, 0, RED));
+	monsters.push_back(new Monster(&quot;clay golem&quot;, S_GOLEM, 11, 7, 7, 40, 0, (G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 3, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 1550, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE, M2_HOSTILE | M2_STRONG, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;stone golem&quot;, S_GOLEM, 14, 6, 5, 50, 0, (G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 3, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 1900, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP | MR_POISON | MR_STONE, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE, M2_HOSTILE | M2_STRONG, 0, WHITE));
+	monsters.push_back(new Monster(&quot;glass golem&quot;, S_GOLEM, 16, 6, 1, 50, 0, (G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(AT_CLAW, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), Attack(), 1800, 0, 0, MS_SILENT, MZ_LARGE, MR_SLEEP | MR_POISON | MR_ACID, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE, M2_HOSTILE | M2_STRONG, 0, CYAN));
+	monsters.push_back(new Monster(&quot;iron golem&quot;, S_GOLEM, 18, 6, 3, 60, 0, (G_NOCORPSE | 1), Attack(AT_WEAP, AD_PHYS, 4, 10), Attack(AT_BREA, AD_DRST, 4, 6), Attack(), Attack(), Attack(), Attack(), 2000, 0, 0, MS_SILENT, MZ_LARGE, MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON, 0, M1_BREATHLESS | M1_MINDLESS | M1_HUMANOID | M1_THICK_HIDE | M1_POIS, M2_HOSTILE | M2_STRONG | M2_COLLECT, 0, CYAN));
+	monsters.push_back(new Monster(&quot;human&quot;, S_HUMAN, 0, 12, 10, 0, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;wererat&quot;, S_HUMAN, 2, 12, 10, 10, -7, (1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_WERE, MZ_HUMAN, MR_NO_ELBERETH | MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_REGEN | M1_OMNIVORE, M2_NOPOLY | M2_WERE | M2_HOSTILE | M2_HUMAN | M2_COLLECT, M3_INFRAVISIBLE, YELLOW));
+	monsters.push_back(new Monster(&quot;werejackal&quot;, S_HUMAN, 2, 12, 10, 10, -7, (1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_WERE, MZ_HUMAN, MR_NO_ELBERETH | MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_REGEN | M1_OMNIVORE, M2_NOPOLY | M2_WERE | M2_HOSTILE | M2_HUMAN | M2_COLLECT, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;werewolf&quot;, S_HUMAN, 5, 12, 10, 20, -7, (1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_WERE, MZ_HUMAN, MR_NO_ELBERETH | MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_REGEN | M1_OMNIVORE, M2_NOPOLY | M2_WERE | M2_HOSTILE | M2_HUMAN | M2_COLLECT, M3_INFRAVISIBLE, BOLD_RED));
+	monsters.push_back(new Monster(&quot;elf&quot;, S_HUMAN, 10, 12, 10, 2, -3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH | MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, M2_NOPOLY | M2_ELF | M2_STRONG | M2_COLLECT, M3_INFRAVISION | M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;Woodland-elf&quot;, S_HUMAN, 4, 12, 10, 10, -5, (G_GENO | G_SGROUP | 2), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH | MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, M2_ELF | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, GREEN));
+	monsters.push_back(new Monster(&quot;Green-elf&quot;, S_HUMAN, 5, 12, 10, 10, -6, (G_GENO | G_SGROUP | 2), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH | MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, M2_ELF | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, BOLD_GREEN));
+	monsters.push_back(new Monster(&quot;Grey-elf&quot;, S_HUMAN, 6, 12, 10, 10, -7, (G_GENO | G_SGROUP | 2), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH | MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, M2_ELF | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, WHITE));
+	monsters.push_back(new Monster(&quot;elf-lord&quot;, S_HUMAN, 8, 12, 10, 20, -9, (G_GENO | G_SGROUP | 2), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH | MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, M2_ELF | M2_STRONG | M2_LORD | M2_MALE | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, BOLD_BLUE));
+	monsters.push_back(new Monster(&quot;Elvenking&quot;, S_HUMAN, 9, 12, 10, 25, -10, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), 800, 350, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH | MR_SLEEP, MR_SLEEP, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS, M2_ELF | M2_STRONG | M2_PRINCE | M2_MALE | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;doppelganger&quot;, S_HUMAN, 9, 12, 5, 20, 0, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 1, 12), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_IMITATE, MZ_HUMAN, MR_NO_ELBERETH | MR_SLEEP, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_HOSTILE | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;nurse&quot;, S_HUMAN, 11, 6, 0, 0, 0, (G_GENO | 3), Attack(AT_CLAW, AD_HEAL, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_NURSE, MZ_HUMAN, MR_NO_ELBERETH | MR_POISON, MR_POISON, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_HOSTILE, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;shopkeeper&quot;, S_HUMAN, 12, 18, 0, 50, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 4, 4), Attack(AT_WEAP, AD_PHYS, 4, 4), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SELL, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT | M2_MAGIC, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;guard&quot;, S_HUMAN, 12, 12, 10, 40, 10, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 4, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARD, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MERC | M2_PEACEFUL | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BLUE));
+	monsters.push_back(new Monster(&quot;prisoner&quot;, S_HUMAN, 12, 12, 10, 0, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_DJINNI, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE | M3_CLOSE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;Oracle&quot;, S_HUMAN, 12, 0, 0, 50, 0, (G_NOGEN | G_UNIQ), Attack(AT_NONE, AD_MAGM, 0, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_ORACLE, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_FEMALE, M3_INFRAVISIBLE, BOLD_BLUE));
+	monsters.push_back(new Monster(&quot;aligned priest&quot;, S_HUMAN, 12, 12, 10, 50, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 4, 10), Attack(AT_KICK, AD_PHYS, 1, 4), Attack(AT_MAGC, AD_CLRC, 0, 0), Attack(), Attack(), Attack(), 1450, 400, 0, MS_PRIEST, MZ_HUMAN, MR_NO_ELBERETH | MR_ELEC, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_LORD | M2_PEACEFUL | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;high priest&quot;, S_HUMAN, 25, 15, 7, 70, 0, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 4, 10), Attack(AT_KICK, AD_PHYS, 2, 8), Attack(AT_MAGC, AD_CLRC, 2, 8), Attack(AT_MAGC, AD_CLRC, 2, 8), Attack(), Attack(), 1450, 400, 0, MS_PRIEST, MZ_HUMAN, MR_NO_ELBERETH | MR_FIRE | MR_ELEC | MR_SLEEP | MR_POISON, 0, M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MINION | M2_PRINCE | M2_NASTY | M2_COLLECT | M2_MAGIC, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;soldier&quot;, S_HUMAN, 6, 10, 10, 0, -2, (G_SGROUP | G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SOLDIER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, WHITE));
+	monsters.push_back(new Monster(&quot;sergeant&quot;, S_HUMAN, 8, 10, 10, 5, -3, (G_SGROUP | G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SOLDIER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;lieutenant&quot;, S_HUMAN, 10, 10, 10, 15, -4, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 3, 4), Attack(AT_WEAP, AD_PHYS, 3, 4), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SOLDIER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, GREEN));
+	monsters.push_back(new Monster(&quot;captain&quot;, S_HUMAN, 12, 10, 10, 15, -5, (G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 4, 4), Attack(AT_WEAP, AD_PHYS, 4, 4), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SOLDIER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BLUE));
+	monsters.push_back(new Monster(&quot;watchman&quot;, S_HUMAN, 6, 10, 10, 0, -2, (G_SGROUP | G_NOGEN | G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SOLDIER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_PEACEFUL | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, WHITE));
+	monsters.push_back(new Monster(&quot;watch captain&quot;, S_HUMAN, 10, 10, 10, 15, -4, (G_NOGEN | G_GENO | 1), Attack(AT_WEAP, AD_PHYS, 3, 4), Attack(AT_WEAP, AD_PHYS, 3, 4), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SOLDIER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_MERC | M2_STALK | M2_PEACEFUL | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, GREEN));
+	monsters.push_back(new Monster(&quot;Medusa&quot;, S_HUMAN, 20, 12, 2, 50, -15, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 1, 8), Attack(AT_GAZE, AD_STON, 0, 0), Attack(AT_BITE, AD_DRST, 1, 6), Attack(), Attack(), 1450, 400, 0, MS_HISS, MZ_LARGE, MR_NO_ELBERETH | MR_POISON | MR_STONE, MR_POISON | MR_STONE, M1_FLY | M1_SWIM | M1_AMPHIBIOUS | M1_HUMANOID | M1_POIS | M1_OMNIVORE, M2_NOPOLY | M2_HOSTILE | M2_STRONG | M2_PNAME | M2_FEMALE, M3_WAITFORU | M3_INFRAVISIBLE, BOLD_GREEN));
+	monsters.push_back(new Monster(&quot;Wizard of Yendor&quot;, S_HUMAN, 30, 12, -8, 100, A_NONE, (G_NOGEN | G_UNIQ), Attack(AT_CLAW, AD_SAMU, 2, 12), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_CUSS, MZ_HUMAN, MR_NO_ELBERETH | MR_FIRE | MR_POISON, MR_FIRE | MR_POISON, M1_FLY | M1_BREATHLESS | M1_HUMANOID | M1_REGEN | M1_SEE_INVIS | M1_TPORT | M1_TPORT_CNTRL | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_PRINCE | M2_MALE | M2_MAGIC, M3_COVETOUS | M3_WAITFORU | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Croesus&quot;, S_HUMAN, 20, 15, 0, 40, 15, (G_UNIQ | G_NOGEN), Attack(AT_WEAP, AD_PHYS, 4, 10), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARD, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_PNAME | M2_PRINCE | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT | M2_MAGIC, M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;ghost&quot;, S_GHOST, 10, 3, -5, 50, -5, (G_NOCORPSE | G_NOGEN), Attack(AT_TUCH, AD_PHYS, 1, 1), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 0, 0, MS_SILENT, MZ_HUMAN, MR_COLD | MR_DISINT | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_WALLWALK | M1_HUMANOID | M1_UNSOLID, M2_NOPOLY | M2_UNDEAD | M2_STALK | M2_HOSTILE, M3_INFRAVISION, WHITE));
+	monsters.push_back(new Monster(&quot;shade&quot;, S_GHOST, 12, 10, 10, 0, 0, (G_NOCORPSE | G_NOGEN), Attack(AT_TUCH, AD_PLYS, 2, 6), Attack(AT_TUCH, AD_SLOW, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 0, 0, MS_WAIL, MZ_HUMAN, MR_COLD | MR_DISINT | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_BREATHLESS | M1_WALLWALK | M1_HUMANOID | M1_UNSOLID | M1_SEE_INVIS, M2_NOPOLY | M2_UNDEAD | M2_WANDER | M2_STALK | M2_HOSTILE | M2_NASTY, M3_INFRAVISION, BLACK));
+	monsters.push_back(new Monster(&quot;water demon&quot;, S_DEMON, 8, 12, -4, 30, -7, (G_NOCORPSE | G_NOGEN), Attack(AT_WEAP, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), 1450, 400, 0, MS_DJINNI, MZ_HUMAN, MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_POIS | M1_SWIM, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, BLUE));
+	monsters.push_back(new Monster(&quot;horned devil&quot;, S_DEMON, 6, 9, -5, 50, 11, (G_HELL | G_NOCORPSE | 2), Attack(AT_WEAP, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_BITE, AD_PHYS, 2, 3), Attack(AT_STNG, AD_PHYS, 1, 3), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_HUMAN, MR_FIRE | MR_POISON, 0, M1_POIS | M1_THICK_HIDE, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, M3_INFRAVISIBLE | M3_INFRAVISION, YELLOW));
+	monsters.push_back(new Monster(&quot;succubus&quot;, S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_DRLI, 2, 6), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SEDUCE, MZ_HUMAN, MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_FLY | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEMALE, M3_INFRAVISIBLE | M3_INFRAVISION, WHITE));
+	monsters.push_back(new Monster(&quot;incubus&quot;, S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_DRLI, 2, 6), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SEDUCE, MZ_HUMAN, MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_FLY | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_MALE, M3_INFRAVISIBLE | M3_INFRAVISION, WHITE));
+	monsters.push_back(new Monster(&quot;erinys&quot;, S_DEMON, 7, 12, 2, 30, 10, (G_HELL | G_NOCORPSE | G_SGROUP | 2), Attack(AT_WEAP, AD_DRST, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_HUMAN, MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_FEMALE | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;barbed devil&quot;, S_DEMON, 8, 12, 0, 35, 8, (G_HELL | G_NOCORPSE | G_SGROUP | 2), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_STNG, AD_PHYS, 3, 4), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_HUMAN, MR_FIRE | MR_POISON, 0, M1_POIS | M1_THICK_HIDE, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;marilith&quot;, S_DEMON, 7, 12, -6, 80, -12, (G_HELL | G_NOCORPSE | 1), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), 1450, 400, 0, MS_CUSS, MZ_LARGE, MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_SLITHY | M1_SEE_INVIS | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEMALE | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;vrock&quot;, S_DEMON, 8, 12, 0, 50, -9, (G_HELL | G_NOCORPSE | G_SGROUP | 2), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 8), Attack(AT_CLAW, AD_PHYS, 1, 8), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), 1450, 400, 0, MS_SILENT, MZ_LARGE, MR_FIRE | MR_POISON, 0, M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;hezrou&quot;, S_DEMON, 9, 6, -2, 55, -10, (G_HELL | G_NOCORPSE | G_SGROUP | 2), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_CLAW, AD_PHYS, 1, 3), Attack(AT_BITE, AD_PHYS, 4, 4), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_LARGE, MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;bone devil&quot;, S_DEMON, 9, 15, -1, 40, -9, (G_HELL | G_NOCORPSE | G_SGROUP | 2), Attack(AT_WEAP, AD_PHYS, 3, 4), Attack(AT_STNG, AD_DRST, 2, 4), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_LARGE, MR_FIRE | MR_POISON, 0, M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, WHITE));
+	monsters.push_back(new Monster(&quot;ice devil&quot;, S_DEMON, 11, 6, -4, 55, -12, (G_HELL | G_NOCORPSE | 2), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(AT_STNG, AD_COLD, 3, 4), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_LARGE, MR_FIRE | MR_COLD | MR_POISON, 0, M1_SEE_INVIS | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, M3_INFRAVISIBLE | M3_INFRAVISION, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;nalfeshnee&quot;, S_DEMON, 11, 9, -1, 65, -11, (G_HELL | G_NOCORPSE | 1), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_CLAW, AD_PHYS, 1, 4), Attack(AT_BITE, AD_PHYS, 2, 4), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), 1450, 400, 0, MS_SPELL, MZ_LARGE, MR_FIRE | MR_POISON, 0, M1_HUMANOID | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;pit fiend&quot;, S_DEMON, 13, 6, -3, 65, -13, (G_HELL | G_NOCORPSE | 2), Attack(AT_WEAP, AD_PHYS, 4, 2), Attack(AT_WEAP, AD_PHYS, 4, 2), Attack(AT_HUGS, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GROWL, MZ_LARGE, MR_FIRE | MR_POISON, 0, M1_SEE_INVIS | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;balrog&quot;, S_DEMON, 16, 5, -2, 75, -14, (G_HELL | G_NOCORPSE | 1), Attack(AT_WEAP, AD_PHYS, 8, 4), Attack(AT_WEAP, AD_PHYS, 4, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_LARGE, MR_FIRE | MR_POISON, 0, M1_FLY | M1_SEE_INVIS | M1_POIS, M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, RED));
+	monsters.push_back(new Monster(&quot;Juiblex&quot;, S_DEMON, 50, 3, -7, 65, -15, (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), Attack(AT_ENGL, AD_DISE, 4, 10), Attack(AT_SPIT, AD_ACID, 3, 6), Attack(), Attack(), Attack(), Attack(), 1500, 0, 0, MS_GURGLE, MZ_LARGE, MR_FIRE | MR_POISON | MR_ACID | MR_STONE, 0, M1_AMPHIBIOUS | M1_AMORPHOUS | M1_NOHEAD | M1_FLY | M1_SEE_INVIS | M1_ACID | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_LORD | M2_MALE, M3_WAITFORU | M3_WANTSAMUL | M3_INFRAVISION, BOLD_GREEN));
+	monsters.push_back(new Monster(&quot;Yeenoghu&quot;, S_DEMON, 56, 18, -5, 80, -15, (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 3, 6), Attack(AT_WEAP, AD_CONF, 2, 8), Attack(AT_CLAW, AD_PLYS, 1, 6), Attack(AT_MAGC, AD_MAGM, 2, 6), Attack(), Attack(), 900, 500, 0, MS_ORC, MZ_LARGE, MR_FIRE | MR_POISON, 0, M1_FLY | M1_SEE_INVIS | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_LORD | M2_MALE | M2_COLLECT, M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;Orcus&quot;, S_DEMON, 66, 9, -6, 85, -20, (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 3, 6), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(AT_CLAW, AD_PHYS, 3, 4), Attack(AT_MAGC, AD_SPEL, 8, 6), Attack(AT_STNG, AD_DRST, 2, 4), Attack(), 1500, 500, 0, MS_ORC, MZ_HUGE, MR_FIRE | MR_POISON, 0, M1_FLY | M1_SEE_INVIS | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE | M2_MALE | M2_COLLECT, M3_WAITFORU | M3_WANTSBOOK | M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;Geryon&quot;, S_DEMON, 72, 3, -3, 75, 15, (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), Attack(AT_CLAW, AD_PHYS, 3, 6), Attack(AT_CLAW, AD_PHYS, 3, 6), Attack(AT_STNG, AD_DRST, 2, 4), Attack(), Attack(), Attack(), 1500, 500, 0, MS_BRIBE, MZ_HUGE, MR_FIRE | MR_POISON, 0, M1_FLY | M1_SEE_INVIS | M1_POIS | M1_SLITHY, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE | M2_MALE, M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;Dispater&quot;, S_DEMON, 78, 15, -2, 80, 15, (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 4, 6), Attack(AT_MAGC, AD_SPEL, 6, 6), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_BRIBE, MZ_HUMAN, MR_FIRE | MR_POISON, 0, M1_FLY | M1_SEE_INVIS | M1_POIS | M1_HUMANOID, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE | M2_MALE | M2_COLLECT, M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;Baalzebub&quot;, S_DEMON, 89, 9, -5, 85, 20, (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), Attack(AT_BITE, AD_DRST, 2, 6), Attack(AT_GAZE, AD_STUN, 2, 6), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_BRIBE, MZ_LARGE, MR_FIRE | MR_POISON, 0, M1_FLY | M1_SEE_INVIS | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE | M2_MALE, M3_WANTSAMUL | M3_WAITFORU | M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;Asmodeus&quot;, S_DEMON, 105, 12, -7, 90, 20, (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), Attack(AT_CLAW, AD_PHYS, 4, 4), Attack(AT_MAGC, AD_COLD, 6, 6), Attack(), Attack(), Attack(), Attack(), 1500, 500, 0, MS_BRIBE, MZ_HUGE, MR_FIRE | MR_COLD | MR_POISON, 0, M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY | M2_PRINCE | M2_MALE, M3_WANTSAMUL | M3_WAITFORU | M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;Demogorgon&quot;, S_DEMON, 106, 15, -8, 95, -20, (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ), Attack(AT_MAGC, AD_SPEL, 8, 6), Attack(AT_STNG, AD_DRLI, 1, 4), Attack(AT_CLAW, AD_DISE, 1, 6), Attack(AT_CLAW, AD_DISE, 1, 6), Attack(), Attack(), 1500, 500, 0, MS_GROWL, MZ_HUGE, MR_FIRE | MR_POISON, 0, M1_FLY | M1_SEE_INVIS | M1_NOHANDS | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE | M2_MALE, M3_WANTSAMUL | M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;Death&quot;, S_DEMON, 30, 12, -5, 100, 0, (G_UNIQ | G_NOGEN), Attack(AT_TUCH, AD_DETH, 8, 8), Attack(AT_TUCH, AD_DETH, 8, 8), Attack(), Attack(), Attack(), Attack(), 1450, 1, 0, MS_RIDER, MZ_HUMAN, MR_NO_ELBERETH | MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_HUMANOID | M1_REGEN | M1_SEE_INVIS | M1_TPORT_CNTRL, M2_NOPOLY | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY, M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;Pestilence&quot;, S_DEMON, 30, 12, -5, 100, 0, (G_UNIQ | G_NOGEN), Attack(AT_TUCH, AD_PEST, 8, 8), Attack(AT_TUCH, AD_PEST, 8, 8), Attack(), Attack(), Attack(), Attack(), 1450, 1, 0, MS_RIDER, MZ_HUMAN, MR_NO_ELBERETH | MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_HUMANOID | M1_REGEN | M1_SEE_INVIS | M1_TPORT_CNTRL, M2_NOPOLY | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY, M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;Famine&quot;, S_DEMON, 30, 12, -5, 100, 0, (G_UNIQ | G_NOGEN), Attack(AT_TUCH, AD_FAMN, 8, 8), Attack(AT_TUCH, AD_FAMN, 8, 8), Attack(), Attack(), Attack(), Attack(), 1450, 1, 0, MS_RIDER, MZ_HUMAN, MR_NO_ELBERETH | MR_FIRE | MR_COLD | MR_ELEC | MR_SLEEP | MR_POISON | MR_STONE, 0, M1_FLY | M1_HUMANOID | M1_REGEN | M1_SEE_INVIS | M1_TPORT_CNTRL, M2_NOPOLY | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY, M3_INFRAVISIBLE | M3_INFRAVISION, MAGENTA));
+	monsters.push_back(new Monster(&quot;djinni&quot;, S_DEMON, 7, 12, 4, 30, 0, (G_NOGEN | G_NOCORPSE), Attack(AT_WEAP, AD_PHYS, 2, 8), Attack(), Attack(), Attack(), Attack(), Attack(), 1500, 400, 0, MS_DJINNI, MZ_HUMAN, MR_POISON | MR_STONE, 0, M1_HUMANOID | M1_FLY | M1_POIS, M2_NOPOLY | M2_STALK | M2_COLLECT, M3_INFRAVISIBLE, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;sandestin&quot;, S_DEMON, 13, 12, 4, 60, -5, (G_HELL | G_NOCORPSE | 1), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), 1500, 400, 0, MS_CUSS, MZ_HUMAN, MR_STONE, 0, M1_HUMANOID, M2_NOPOLY | M2_STALK | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE | M3_INFRAVISION, WHITE));
+	monsters.push_back(new Monster(&quot;jellyfish&quot;, S_EEL, 3, 3, 6, 0, 0, (G_GENO | G_NOGEN), Attack(AT_STNG, AD_DRST, 3, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 80, 20, 0, MS_SILENT, MZ_SMALL, MR_POISON, MR_POISON, M1_SWIM | M1_AMPHIBIOUS | M1_SLITHY | M1_NOLIMBS | M1_NOTAKE | M1_POIS, M2_HOSTILE, 0, BLUE));
+	monsters.push_back(new Monster(&quot;piranha&quot;, S_EEL, 5, 12, 4, 0, 0, (G_GENO | G_NOGEN | G_SGROUP), Attack(AT_BITE, AD_PHYS, 2, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 60, 30, 0, MS_SILENT, MZ_SMALL, 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, M2_HOSTILE, 0, RED));
+	monsters.push_back(new Monster(&quot;shark&quot;, S_EEL, 7, 12, 2, 0, 0, (G_GENO | G_NOGEN), Attack(AT_BITE, AD_PHYS, 5, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 500, 350, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_CARNIVORE | M1_OVIPAROUS | M1_THICK_HIDE | M1_NOTAKE, M2_HOSTILE, 0, WHITE));
+	monsters.push_back(new Monster(&quot;giant eel&quot;, S_EEL, 5, 9, -1, 0, 0, (G_GENO | G_NOGEN), Attack(AT_BITE, AD_PHYS, 3, 6), Attack(AT_TUCH, AD_WRAP, 0, 0), Attack(), Attack(), Attack(), Attack(), 200, 250, 0, MS_SILENT, MZ_HUGE, 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, M2_HOSTILE, M3_INFRAVISIBLE, CYAN));
+	monsters.push_back(new Monster(&quot;electric eel&quot;, S_EEL, 7, 10, -3, 0, 0, (G_GENO | G_NOGEN), Attack(AT_BITE, AD_ELEC, 4, 6), Attack(AT_TUCH, AD_WRAP, 0, 0), Attack(), Attack(), Attack(), Attack(), 200, 250, 0, MS_SILENT, MZ_HUGE, MR_ELEC, MR_ELEC, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_CARNIVORE | M1_OVIPAROUS | M1_NOTAKE, M2_HOSTILE, M3_INFRAVISIBLE, BOLD_BLUE));
+	monsters.push_back(new Monster(&quot;kraken&quot;, S_EEL, 20, 3, 6, 0, -3, (G_GENO | G_NOGEN), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_HUGS, AD_WRAP, 2, 6), Attack(AT_BITE, AD_PHYS, 5, 4), Attack(), Attack(), 1800, 1000, 0, MS_SILENT, MZ_HUGE, 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_NOPOLY | M2_HOSTILE | M2_STRONG, M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;newt&quot;, S_LIZARD, 0, 6, 8, 0, 0, (G_GENO | 5), Attack(AT_BITE, AD_PHYS, 1, 2), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 20, 0, MS_SILENT, MZ_TINY, 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, BOLD_YELLOW));
+	monsters.push_back(new Monster(&quot;gecko&quot;, S_LIZARD, 1, 6, 8, 0, 0, (G_GENO | 5), Attack(AT_BITE, AD_PHYS, 1, 3), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 20, 0, MS_SQEEK, MZ_TINY, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, GREEN));
+	monsters.push_back(new Monster(&quot;iguana&quot;, S_LIZARD, 2, 6, 7, 0, 0, (G_GENO | 5), Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 30, 30, 0, MS_SILENT, MZ_TINY, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;baby crocodile&quot;, S_LIZARD, 3, 6, 7, 0, 0, G_GENO, Attack(AT_BITE, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 200, 200, 0, MS_SILENT, MZ_MEDIUM, 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;lizard&quot;, S_LIZARD, 5, 6, 6, 10, 0, (G_GENO | 5), Attack(AT_BITE, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 10, 40, 0, MS_SILENT, MZ_TINY, MR_STONE, MR_STONE, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_HOSTILE, 0, GREEN));
+	monsters.push_back(new Monster(&quot;chameleon&quot;, S_LIZARD, 6, 5, 6, 10, 0, (G_GENO | 2), Attack(AT_BITE, AD_PHYS, 4, 2), Attack(), Attack(), Attack(), Attack(), Attack(), 100, 100, 0, MS_SILENT, MZ_TINY, 0, 0, M1_ANIMAL | M1_NOHANDS | M1_CARNIVORE, M2_NOPOLY | M2_HOSTILE, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;crocodile&quot;, S_LIZARD, 6, 9, 5, 0, 0, (G_GENO | 1), Attack(AT_BITE, AD_PHYS, 4, 2), Attack(AT_CLAW, AD_PHYS, 1, 12), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_SILENT, MZ_LARGE, 0, 0, M1_SWIM | M1_AMPHIBIOUS | M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_OVIPAROUS | M1_CARNIVORE, M2_STRONG | M2_HOSTILE, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;salamander&quot;, S_LIZARD, 8, 12, -1, 0, -9, (G_HELL | 1), Attack(AT_WEAP, AD_PHYS, 2, 8), Attack(AT_TUCH, AD_FIRE, 1, 6), Attack(AT_HUGS, AD_PHYS, 2, 6), Attack(AT_HUGS, AD_FIRE, 3, 6), Attack(), Attack(), 1500, 400, 0, MS_MUMBLE, MZ_HUMAN, MR_SLEEP | MR_FIRE, MR_FIRE, M1_HUMANOID | M1_SLITHY | M1_THICK_HIDE | M1_POIS, M2_STALK | M2_HOSTILE | M2_COLLECT | M2_MAGIC, M3_INFRAVISIBLE, BOLD_RED));
+	monsters.push_back(new Monster(&quot;long worm tail&quot;, S_WORM_TAIL, 0, 0, 0, 0, 0, (G_NOGEN | G_NOCORPSE | G_UNIQ), Attack(), Attack(), Attack(), Attack(), Attack(), Attack(), 0, 0, 0, 0, 0, 0, 0, 0L, M2_NOPOLY, 0, YELLOW));
+	monsters.push_back(new Monster(&quot;archeologist&quot;, S_HUMAN, 10, 12, 10, 1, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_TUNNEL | M1_NEEDPICK | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;barbarian&quot;, S_HUMAN, 10, 12, 10, 1, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH | MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;caveman&quot;, S_HUMAN, 10, 12, 10, 0, 1, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_MALE | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;cavewoman&quot;, S_HUMAN, 10, 12, 10, 0, 1, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_FEMALE | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;healer&quot;, S_HUMAN, 10, 12, 10, 1, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH | MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;knight&quot;, S_HUMAN, 10, 12, 10, 1, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;monk&quot;, S_HUMAN, 10, 12, 10, 2, 0, G_NOGEN, Attack(AT_CLAW, AD_PHYS, 1, 8), Attack(AT_KICK, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_HERBIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT | M2_MALE, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;priest&quot;, S_HUMAN, 10, 12, 10, 2, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_MALE | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;priestess&quot;, S_HUMAN, 10, 12, 10, 2, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_FEMALE | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;ranger&quot;, S_HUMAN, 10, 12, 10, 2, -3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;rogue&quot;, S_HUMAN, 10, 12, 10, 1, -3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_GREEDY | M2_JEWELS | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;samurai&quot;, S_HUMAN, 10, 12, 10, 1, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;valkyrie&quot;, S_HUMAN, 10, 12, 10, 1, -1, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH | MR_COLD, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_FEMALE | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;wizard&quot;, S_HUMAN, 10, 12, 10, 3, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_COLLECT | M2_MAGIC, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;Lord Carnarvon&quot;, S_HUMAN, 20, 12, 0, 30, 20, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Pelias&quot;, S_HUMAN, 20, 12, 0, 30, 0, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH | MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Shaman Karnov&quot;, S_HUMAN, 20, 12, 0, 30, 20, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Hippocrates&quot;, S_HUMAN, 20, 12, 0, 40, 0, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH | MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;King Arthur&quot;, S_HUMAN, 20, 12, 0, 40, 20, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Grand Master&quot;, S_HUMAN, 25, 12, 0, 70, 0, (G_NOGEN | G_UNIQ), Attack(AT_CLAW, AD_PHYS, 4, 10), Attack(AT_KICK, AD_PHYS, 2, 8), Attack(AT_MAGC, AD_CLRC, 2, 8), Attack(AT_MAGC, AD_CLRC, 2, 8), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH | MR_FIRE | MR_ELEC | MR_SLEEP | MR_POISON, 0, M1_HUMANOID | M1_SEE_INVIS | M1_HERBIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_NASTY | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, BLACK));
+	monsters.push_back(new Monster(&quot;Arch Priest&quot;, S_HUMAN, 25, 12, 7, 70, 0, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 4, 10), Attack(AT_KICK, AD_PHYS, 2, 8), Attack(AT_MAGC, AD_CLRC, 2, 8), Attack(AT_MAGC, AD_CLRC, 2, 8), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH | MR_FIRE | MR_ELEC | MR_SLEEP | MR_POISON, 0, M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;Orion&quot;, S_HUMAN, 20, 12, 0, 30, 0, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE | M1_SEE_INVIS | M1_SWIM | M1_AMPHIBIOUS, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISION | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Master of Thieves&quot;, S_HUMAN, 20, 12, 0, 30, -20, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_CLAW, AD_SAMU, 2, 4), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH | MR_STONE, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_GREEDY | M2_JEWELS | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Lord Sato&quot;, S_HUMAN, 20, 12, 0, 30, 20, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_MALE | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Norn&quot;, S_HUMAN, 20, 12, 0, 80, 0, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH | MR_COLD, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_FEMALE | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Neferet the Green&quot;, S_HUMAN, 20, 12, 0, 60, 0, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_MAGC, AD_SPEL, 2, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_LEADER, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_FEMALE | M2_PNAME | M2_PEACEFUL | M2_STRONG | M2_COLLECT | M2_MAGIC, M3_CLOSE | M3_INFRAVISIBLE, GREEN));
+	monsters.push_back(new Monster(&quot;Minion of Huhetotl&quot;, S_DEMON, 16, 12, -2, 75, -14, (G_NOCORPSE | G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 8, 4), Attack(AT_WEAP, AD_PHYS, 4, 6), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(AT_CLAW, AD_SAMU, 2, 6), Attack(), Attack(), 1450, 400, 0, MS_NEMESIS, MZ_LARGE, MR_FIRE | MR_POISON | MR_STONE, 0, M1_FLY | M1_SEE_INVIS | M1_POIS, M2_NOPOLY | M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISION | M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;Thoth Amon&quot;, S_HUMAN, 16, 12, 0, 10, -14, (G_NOGEN | G_UNIQ | G_NOCORPSE), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(AT_CLAW, AD_SAMU, 1, 4), Attack(), Attack(), 1450, 400, 0, MS_NEMESIS, MZ_HUMAN, MR_NO_ELBERETH | MR_POISON | MR_STONE, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_STRONG | M2_MALE | M2_STALK | M2_HOSTILE | M2_NASTY | M2_COLLECT | M2_MAGIC, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Chromatic Dragon&quot;, S_DRAGON, 16, 12, 0, 30, -14, (G_NOGEN | G_UNIQ), Attack(AT_BREA, AD_RBRE, 6, 8), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(AT_CLAW, AD_SAMU, 2, 8), Attack(AT_BITE, AD_PHYS, 4, 8), Attack(AT_BITE, AD_PHYS, 4, 8), Attack(AT_STNG, AD_PHYS, 1, 6), 4500, 1700, 0, MS_NEMESIS, MZ_GIGANTIC, MR_FIRE | MR_COLD | MR_SLEEP | MR_DISINT | MR_ELEC | MR_POISON | MR_ACID | MR_STONE, MR_FIRE | MR_COLD | MR_SLEEP | MR_DISINT | MR_ELEC | MR_POISON | MR_STONE, M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE | M1_SEE_INVIS | M1_POIS, M2_NOPOLY | M2_HOSTILE | M2_FEMALE | M2_STALK | M2_STRONG | M2_NASTY | M2_GREEDY | M2_JEWELS | M2_MAGIC, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Cyclops&quot;, S_GIANT, 18, 12, 0, 0, -15, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 4, 8), Attack(AT_WEAP, AD_PHYS, 4, 8), Attack(AT_CLAW, AD_SAMU, 2, 6), Attack(), Attack(), Attack(), 1900, 700, 0, MS_NEMESIS, MZ_HUGE, MR_STONE, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_STALK | M2_HOSTILE | M2_NASTY | M2_MALE | M2_JEWELS | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISION | M3_INFRAVISIBLE, WHITE));
+	monsters.push_back(new Monster(&quot;Ixoth&quot;, S_DRAGON, 15, 12, -1, 20, -14, (G_NOGEN | G_UNIQ), Attack(AT_BREA, AD_FIRE, 8, 6), Attack(AT_BITE, AD_PHYS, 4, 8), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(AT_CLAW, AD_PHYS, 2, 4), Attack(AT_CLAW, AD_SAMU, 2, 4), Attack(), 4500, 1600, 0, MS_NEMESIS, MZ_GIGANTIC, MR_FIRE | MR_STONE, MR_FIRE, M1_FLY | M1_THICK_HIDE | M1_NOHANDS | M1_CARNIVORE | M1_SEE_INVIS, M2_NOPOLY | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_STALK | M2_GREEDY | M2_JEWELS | M2_MAGIC, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;Master Kaen&quot;, S_HUMAN, 25, 12, -10, 10, -20, (G_NOGEN | G_UNIQ), Attack(AT_CLAW, AD_PHYS, 16, 2), Attack(AT_CLAW, AD_PHYS, 16, 2), Attack(AT_MAGC, AD_CLRC, 0, 0), Attack(AT_CLAW, AD_SAMU, 1, 4), Attack(), Attack(), 1450, 400, 0, MS_NEMESIS, MZ_HUMAN, MR_NO_ELBERETH | MR_POISON | MR_STONE, MR_POISON, M1_HUMANOID | M1_HERBIVORE | M1_SEE_INVIS, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_STALK | M2_COLLECT | M2_MAGIC, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Nalzok&quot;, S_DEMON, 16, 12, -2, 85, -127, (G_NOGEN | G_UNIQ | G_NOCORPSE), Attack(AT_WEAP, AD_PHYS, 8, 4), Attack(AT_WEAP, AD_PHYS, 4, 6), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(AT_CLAW, AD_SAMU, 2, 6), Attack(), Attack(), 1450, 400, 0, MS_NEMESIS, MZ_LARGE, MR_FIRE | MR_POISON | MR_STONE, 0, M1_FLY | M1_SEE_INVIS | M1_POIS, M2_NOPOLY | M2_DEMON | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_STALK | M2_NASTY | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISION | M3_INFRAVISIBLE, RED));
+	monsters.push_back(new Monster(&quot;Scorpius&quot;, S_SPIDER, 15, 12, 10, 0, -15, (G_NOGEN | G_UNIQ), Attack(AT_CLAW, AD_PHYS, 2, 6), Attack(AT_CLAW, AD_SAMU, 2, 6), Attack(AT_STNG, AD_DISE, 1, 4), Attack(), Attack(), Attack(), 750, 350, 0, MS_NEMESIS, MZ_HUMAN, MR_POISON | MR_STONE, MR_POISON, M1_ANIMAL | M1_NOHANDS | M1_OVIPAROUS | M1_POIS | M1_CARNIVORE, M2_NOPOLY | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_STALK | M2_NASTY | M2_COLLECT | M2_MAGIC, M3_WANTSARTI | M3_WAITFORU, MAGENTA));
+	monsters.push_back(new Monster(&quot;Master Assassin&quot;, S_HUMAN, 15, 12, 0, 30, 18, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_DRST, 2, 6), Attack(AT_WEAP, AD_PHYS, 2, 8), Attack(AT_CLAW, AD_SAMU, 2, 6), Attack(), Attack(), Attack(), 1450, 400, 0, MS_NEMESIS, MZ_HUMAN, MR_NO_ELBERETH | MR_STONE, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_HOSTILE | M2_STALK | M2_NASTY | M2_COLLECT | M2_MAGIC, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Ashikaga Takauji&quot;, S_HUMAN, 15, 12, 0, 40, -13, (G_NOGEN | G_UNIQ | G_NOCORPSE), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_WEAP, AD_PHYS, 2, 6), Attack(AT_CLAW, AD_SAMU, 2, 6), Attack(), Attack(), Attack(), 1450, 400, 0, MS_NEMESIS, MZ_HUMAN, MR_NO_ELBERETH | MR_STONE, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_STALK | M2_NASTY | M2_MALE | M2_COLLECT | M2_MAGIC, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Lord Surtur&quot;, S_GIANT, 15, 12, 2, 50, 12, (G_NOGEN | G_UNIQ), Attack(AT_WEAP, AD_PHYS, 2, 10), Attack(AT_WEAP, AD_PHYS, 2, 10), Attack(AT_CLAW, AD_SAMU, 2, 6), Attack(), Attack(), Attack(), 2250, 850, 0, MS_NEMESIS, MZ_HUGE, MR_FIRE | MR_STONE, MR_FIRE, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_GIANT | M2_MALE | M2_PNAME | M2_HOSTILE | M2_STALK | M2_STRONG | M2_NASTY | M2_ROCKTHROW | M2_JEWELS | M2_COLLECT, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISION | M3_INFRAVISIBLE, MAGENTA));
+	monsters.push_back(new Monster(&quot;Dark One&quot;, S_HUMAN, 15, 12, 0, 80, -10, (G_NOGEN | G_UNIQ | G_NOCORPSE), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_CLAW, AD_SAMU, 1, 4), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), 1450, 400, 0, MS_NEMESIS, MZ_HUMAN, MR_NO_ELBERETH | MR_STONE, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_STRONG | M2_HOSTILE | M2_STALK | M2_NASTY | M2_COLLECT | M2_MAGIC, M3_WANTSARTI | M3_WAITFORU | M3_INFRAVISIBLE, BLACK));
+	monsters.push_back(new Monster(&quot;student&quot;, S_HUMAN, 5, 12, 10, 10, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_TUNNEL | M1_NEEDPICK | M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;chieftain&quot;, S_HUMAN, 5, 12, 10, 10, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH | MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;neanderthal&quot;, S_HUMAN, 5, 12, 10, 10, 1, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 2, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;attendant&quot;, S_HUMAN, 5, 12, 10, 10, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH | MR_POISON, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;page&quot;, S_HUMAN, 5, 12, 10, 10, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;abbot&quot;, S_HUMAN, 5, 12, 10, 20, 0, G_NOGEN, Attack(AT_CLAW, AD_PHYS, 8, 2), Attack(AT_KICK, AD_STUN, 3, 2), Attack(AT_MAGC, AD_CLRC, 0, 0), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_HERBIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;acolyte&quot;, S_HUMAN, 5, 12, 10, 20, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_MAGC, AD_CLRC, 0, 0), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;hunter&quot;, S_HUMAN, 5, 12, 10, 10, -7, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 4), Attack(), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_SEE_INVIS | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, M3_INFRAVISION | M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;thug&quot;, S_HUMAN, 5, 12, 10, 10, -3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_GREEDY | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;ninja&quot;, S_HUMAN, 5, 12, 10, 10, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_HUMANOID, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_HOSTILE | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;roshi&quot;, S_HUMAN, 5, 12, 10, 10, 3, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;warrior&quot;, S_HUMAN, 5, 12, 10, 10, -1, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(AT_WEAP, AD_PHYS, 1, 8), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT | M2_FEMALE, M3_INFRAVISIBLE, BOLD_WHITE));
+	monsters.push_back(new Monster(&quot;apprentice&quot;, S_HUMAN, 5, 12, 10, 30, 0, G_NOGEN, Attack(AT_WEAP, AD_PHYS, 1, 6), Attack(AT_MAGC, AD_SPEL, 0, 0), Attack(), Attack(), Attack(), Attack(), 1450, 400, 0, MS_GUARDIAN, MZ_HUMAN, MR_NO_ELBERETH, 0, M1_HUMANOID | M1_OMNIVORE, M2_NOPOLY | M2_HUMAN | M2_PEACEFUL | M2_STRONG | M2_COLLECT | M2_MAGIC, M3_INFRAVISIBLE, BOLD_WHITE));
 
 	/* create mapping */
 	for (int i = 0; i &lt; (int) monsters.size(); ++i) {</diff>
      <filename>Data/Monster.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -223,6 +223,7 @@
 #define G_FREQ          0x0007          /* creation frequency mask */
 
 namespace data {
+
 	class Monster {
 	public:
 		std::string name;</diff>
      <filename>Data/Monster.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, MorningStar *&gt; morning_stars;
 
 		MorningStar(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~MorningStar() {}
+
+		virtual ~MorningStar() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/MorningStar.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, PickAxe *&gt; pick_axes;
 
 		PickAxe(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~PickAxe() {}
+
+		virtual ~PickAxe() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/PickAxe.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Polearm *&gt; polearms;
 
 		Polearm(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Polearm() {}
+
+		virtual ~Polearm() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Polearm.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Quarterstaff *&gt; quarterstaves;
 
 		Quarterstaff(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Quarterstaff() {}
+
+		virtual ~Quarterstaff() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Quarterstaff.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Saber *&gt; sabers;
 
 		Saber(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Saber() {}
+
+		virtual ~Saber() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Saber.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Scimitar *&gt; scimitars;
 
 		Scimitar(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Scimitar() {}
+
+		virtual ~Scimitar() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Scimitar.h</filename>
    </modified>
    <modified>
      <diff>@@ -6,12 +6,15 @@
 #include &quot;Armor.h&quot;
 
 namespace data {
+
 	class Shield : public Armor {
 	public:
 		static std::map&lt;std::string, Shield *&gt; shields;
 
 		Shield(const std::string &amp;name, int cost, int weight, int material, int ac, int mc, unsigned long long properties);
-		virtual ~Shield() {}
+
+		virtual ~Shield() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Shield.h</filename>
    </modified>
    <modified>
      <diff>@@ -19,7 +19,7 @@ void Shirt::create(const string &amp;name, int cost, int weight, int material, int a
 }
 
 void Shirt::init() {
-	//     name           cost  weight  material        ac mc properties
-	create(&quot;Hawaiian shirt&quot;, 3,      5, MATERIAL_CLOTH, 0, 0, 0);
-	create(&quot;T-shirt&quot;,        2,      5, MATERIAL_CLOTH, 0, 0, 0);
+	/* shirts */
+	create(&quot;Hawaiian shirt&quot;, 3, 5, MATERIAL_CLOTH, 0, 0, 0);
+	create(&quot;T-shirt&quot;, 2, 5, MATERIAL_CLOTH, 0, 0, 0);
 }</diff>
      <filename>Data/Shirt.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -6,12 +6,15 @@
 #include &quot;Armor.h&quot;
 
 namespace data {
+
 	class Shirt : public Armor {
 	public:
 		static std::map&lt;std::string, Shirt *&gt; shirts;
 
 		Shirt(const std::string &amp;name, int cost, int weight, int material, int ac, int mc, unsigned long long properties);
-		virtual ~Shirt() {}
+
+		virtual ~Shirt() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Shirt.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, ShortSword *&gt; short_swords;
 
 		ShortSword(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~ShortSword() {}
+
+		virtual ~ShortSword() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/ShortSword.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Shuriken *&gt; shurikens;
 
 		Shuriken(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Shuriken() {}
+
+		virtual ~Shuriken() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Shuriken.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Sling *&gt; slings;
 
 		Sling(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Sling() {}
+
+		virtual ~Sling() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Sling.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Spear *&gt; spears;
 
 		Spear(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Spear() {}
+
+		virtual ~Spear() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Spear.h</filename>
    </modified>
    <modified>
      <diff>@@ -19,6 +19,7 @@ void Suit::create(const string &amp;name, int cost, int weight, int material, int ac
 }
 
 void Suit::init() {
+	/* suits */
 	create(&quot;white dragon scale mail&quot;, 900, 40, MATERIAL_DRAGON_HIDE, 9, 0, PROPERTY_COLD | PROPERTY_MAGIC);
 	create(&quot;gray dragon scales&quot;, 700, 40, MATERIAL_DRAGON_HIDE, 3, 0, PROPERTY_MAGICRES);
 	create(&quot;silver dragon scale mail&quot;, 1200, 40, MATERIAL_DRAGON_HIDE, 9, 0, PROPERTY_REFLECTION | PROPERTY_MAGIC);
@@ -53,6 +54,7 @@ void Suit::init() {
 	create(&quot;chain mail&quot;, 75, 300, MATERIAL_IRON, 5, 1, 0);
 	create(&quot;dwarvish mithril-coat&quot;, 240, 150, MATERIAL_MITHRIL, 6, 3, 0);
 
+	/* aliases */
 	addToMap(&quot;crude ring mail&quot;, suits[&quot;orcish ring mail&quot;]);
 	addToMap(&quot;crude chain mail&quot;, suits[&quot;orcish chain mail&quot;]);
 }</diff>
      <filename>Data/Suit.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -6,12 +6,15 @@
 #include &quot;Armor.h&quot;
 
 namespace data {
+
 	class Suit : public Armor {
 	public:
 		static std::map&lt;std::string, Suit *&gt; suits;
 
 		Suit(const std::string &amp;name, int cost, int weight, int material, int ac, int mc, unsigned long long properties);
-		virtual ~Suit() {}
+
+		virtual ~Suit() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Suit.h</filename>
    </modified>
    <modified>
      <diff>@@ -7,12 +7,15 @@
 #include &quot;../Globals.h&quot;
 
 namespace data {
+
 	class Tool : public Item {
 	public:
 		static std::map&lt;std::string, Tool *&gt; tools;
 
 		Tool(const std::string &amp;name, int cost, int weight, int material, unsigned long long properties);
-		virtual ~Tool() {}
+
+		virtual ~Tool() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Tool.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Trident *&gt; tridents;
 
 		Trident(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Trident() {}
+
+		virtual ~Trident() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Trident.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, TwoHandedSword *&gt; two_handed_swords;
 
 		TwoHandedSword(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~TwoHandedSword() {}
+
+		virtual ~TwoHandedSword() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/TwoHandedSword.h</filename>
    </modified>
    <modified>
      <diff>@@ -19,6 +19,6 @@ void UnicornHorn::create(const string &amp;name, int cost, int weight, const Attack
 }
 
 void UnicornHorn::init() {
-	/* unicorn_horns */
+	/* unicorn horns */
 	create(&quot;unicorn horn&quot;, 100, 20, Attack(AT_CLAW, AD_PHYS, 1, 12), Attack(), Attack(), Attack(AT_CLAW, AD_PHYS, 1, 12), Attack(), Attack(), MATERIAL_BONE, '(', 0, false, CHAOTIC | NEUTRAL | LAWFUL);
 }</diff>
      <filename>Data/UnicornHorn.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, UnicornHorn *&gt; unicorn_horns;
 
 		UnicornHorn(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~UnicornHorn() {}
+
+		virtual ~UnicornHorn() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/UnicornHorn.h</filename>
    </modified>
    <modified>
      <diff>@@ -18,7 +18,9 @@ namespace data {
 		Attack attack_large[3];
 
 		Weapon(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Weapon() {}
+
+		virtual ~Weapon() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Weapon.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,9 @@ namespace data {
 		static std::map&lt;std::string, Whip *&gt; whips;
 
 		Whip(const std::string &amp;name, int cost, int weight, char item_class, int material, unsigned long long properties, bool one_handed, int alignment, const Attack &amp;as0, const Attack &amp;as1, const Attack &amp;as2, const Attack &amp;al0, const Attack &amp;al1, const Attack &amp;al2);
-		virtual ~Whip() {}
+
+		virtual ~Whip() {
+		}
 
 		static void init();
 </diff>
      <filename>Data/Whip.h</filename>
    </modified>
    <modified>
      <diff>@@ -37,7 +37,7 @@ void EventBus::unregisterEvent(int event_id, Analyzer *analyzer) {
 	Debug::warning() &lt;&lt; EVENTBUS_DEBUG_NAME &lt;&lt; &quot;Failed to unregister &quot; &lt;&lt; analyzer-&gt;name &lt;&lt; &quot; for event &quot; &lt;&lt; event_id &lt;&lt; endl;
 }
 
-void EventBus::broadcast(Event *const event) {
+void EventBus::broadcast(Event * const event) {
 	if (event-&gt;getID() &lt; 0 || event-&gt;getID() &gt;= (int) EventBus::events.size())
 		return;
 	vector&lt;Analyzer *&gt; &amp;subscribers = events[event-&gt;getID()];</diff>
      <filename>EventBus.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -13,7 +13,7 @@ public:
 	static int createEventID();
 	static void registerEvent(int event_id, analyzer::Analyzer *analyzer);
 	static void unregisterEvent(int event_id, analyzer::Analyzer *analyzer);
-	static void broadcast(event::Event *const event);
+	static void broadcast(event::Event * const event);
 
 private:
 	static std::vector&lt;std::vector&lt;analyzer::Analyzer *&gt; &gt; events;</diff>
      <filename>EventBus.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,16 +5,25 @@
 #include &quot;Event.h&quot;
 
 namespace event {
+
 	class ChangedInventoryItems : public Event {
 	public:
 		static int id;
 		std::set&lt;unsigned char&gt; keys;
 
-		ChangedInventoryItems() : keys() {}
-		virtual ~ChangedInventoryItems() {}
+		ChangedInventoryItems() : keys() {
+		}
+
+		virtual ~ChangedInventoryItems() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 
-		virtual int getID() {return id;}
-		virtual std::string getName() {return &quot;ChangedInventoryItems&quot;;}
+		virtual std::string getName() {
+			return &quot;ChangedInventoryItems&quot;;
+		}
 	};
 }
 #endif</diff>
      <filename>Events/ChangedInventoryItems.h</filename>
    </modified>
    <modified>
      <diff>@@ -4,17 +4,26 @@
 #include &quot;Event.h&quot;
 
 namespace event {
+
 	class EatItem : public Event {
 	public:
 		static int id;
 		unsigned char key;
 		int priority;
 
-		EatItem() : key(0), priority(0) {}
-		virtual ~EatItem() {}
+		EatItem() : key(0), priority(0) {
+		}
+
+		virtual ~EatItem() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 
-		virtual int getID() {return id;}
-		virtual std::string getName() {return &quot;EatItem&quot;;}
+		virtual std::string getName() {
+			return &quot;EatItem&quot;;
+		}
 	};
 }
 #endif</diff>
      <filename>Events/EatItem.h</filename>
    </modified>
    <modified>
      <diff>@@ -11,6 +11,7 @@
 #define ELBERETH_PERMANENT 4
 
 namespace event {
+
 	class ElberethQuery : public Event {
 	public:
 		static int id;
@@ -19,11 +20,20 @@ namespace event {
 		int engraving_type;
 
 		// initialize these to invalid values to spot bugs
-		ElberethQuery() : number_of_elbereths(0), engraving_type(ELBERETH_NOT_HANDLED) {}
-		virtual ~ElberethQuery() {}
 
-		virtual int getID() {return id;}
-		virtual std::string getName() {return &quot;ElberethQuery&quot;;}
+		ElberethQuery() : number_of_elbereths(0), engraving_type(ELBERETH_NOT_HANDLED) {
+		}
+
+		virtual ~ElberethQuery() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
+
+		virtual std::string getName() {
+			return &quot;ElberethQuery&quot;;
+		}
 	};
 }
 #endif</diff>
      <filename>Events/ElberethQuery.h</filename>
    </modified>
    <modified>
      <diff>@@ -6,9 +6,12 @@
 #define ILLEGAL_EVENT_ID -1
 
 namespace event {
+
 	class Event {
 	public:
-		virtual ~Event() {};
+
+		virtual ~Event() {
+		};
 
 		static void init();
 		static void destroy();</diff>
      <filename>Events/Event.h</filename>
    </modified>
    <modified>
      <diff>@@ -6,16 +6,25 @@
 #include &quot;../Item.h&quot;
 
 namespace event {
+
 	class ItemsOnGround : public Event {
 	public:
 		static int id;
 		std::list&lt;Item&gt; items;
 
-		ItemsOnGround() : items() {}
-		virtual ~ItemsOnGround() {}
+		ItemsOnGround() : items() {
+		}
+
+		virtual ~ItemsOnGround() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 
-		virtual int getID() {return id;}
-		virtual std::string getName() {return &quot;ItemsOnGround&quot;;}
+		virtual std::string getName() {
+			return &quot;ItemsOnGround&quot;;
+		}
 	};
 }
 #endif</diff>
      <filename>Events/ItemsOnGround.h</filename>
    </modified>
    <modified>
      <diff>@@ -6,16 +6,25 @@
 #include &quot;../Item.h&quot;
 
 namespace event {
+
 	class ReceivedItems : public Event {
 	public:
 		static int id;
 		std::map&lt;unsigned char, Item&gt; items;
 
-		ReceivedItems() : items() {}
-		virtual ~ReceivedItems() {}
+		ReceivedItems() : items() {
+		}
+
+		virtual ~ReceivedItems() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 
-		virtual int getID() {return id;}
-		virtual std::string getName() {return &quot;ReceivedItems&quot;;}
+		virtual std::string getName() {
+			return &quot;ReceivedItems&quot;;
+		}
 	};
 }
 #endif</diff>
      <filename>Events/ReceivedItems.h</filename>
    </modified>
    <modified>
      <diff>@@ -6,16 +6,25 @@
 #include &quot;../Coordinate.h&quot;
 
 namespace event {
+
 	class StashChanged : public Event {
 	public:
 		static int id;
 		Coordinate stash;
 
-		StashChanged() : stash() {}
-		virtual ~StashChanged() {}
+		StashChanged() : stash() {
+		}
+
+		virtual ~StashChanged() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 
-		virtual int getID() {return id;}
-		virtual std::string getName() {return &quot;StashChanged&quot;;}
+		virtual std::string getName() {
+			return &quot;StashChanged&quot;;
+		}
 	};
 }
 #endif</diff>
      <filename>Events/StashChanged.h</filename>
    </modified>
    <modified>
      <diff>@@ -5,17 +5,26 @@
 #include &quot;../Coordinate.h&quot;
 
 namespace event {
+
 	class TakeMeThere : public Event {
 	public:
 		static int id;
 		Coordinate coordinate;
 		int max_priority;
 
-		TakeMeThere() : coordinate(), max_priority(0) {}
-		virtual ~TakeMeThere() {}
+		TakeMeThere() : coordinate(), max_priority(0) {
+		}
+
+		virtual ~TakeMeThere() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 
-		virtual int getID() {return id;}
-		virtual std::string getName() {return &quot;TakeMeThere&quot;;}
+		virtual std::string getName() {
+			return &quot;TakeMeThere&quot;;
+		}
 	};
 }
 #endif</diff>
      <filename>Events/TakeMeThere.h</filename>
    </modified>
    <modified>
      <diff>@@ -14,17 +14,26 @@
  * in case of drop, we first &quot;remove&quot; all items in our inventory and let the analyzer &quot;pick up&quot; what they want.
  * the analyzer set the &quot;want&quot; value how many they want of a given item and we set it to -1 when we drop for beatifying */
 namespace event {
+
 	class WantItems : public Event {
 	public:
 		static int id;
 		std::map&lt;unsigned char, Item&gt; items;
 		std::map&lt;unsigned char, int&gt; want;
 
-		WantItems() : items(), want() {}
-		virtual ~WantItems() {}
+		WantItems() : items(), want() {
+		}
+
+		virtual ~WantItems() {
+		}
+
+		virtual int getID() {
+			return id;
+		}
 
-		virtual int getID() {return id;}
-		virtual std::string getName() {return &quot;WantItems&quot;;}
+		virtual std::string getName() {
+			return &quot;WantItems&quot;;
+		}
 	};
 }
 #endif</diff>
      <filename>Events/WantItems.h</filename>
    </modified>
    <modified>
      <diff>@@ -67,7 +67,7 @@ void Inventory::parseMessages(const string &amp;messages) {
 		}
 		if (changed.keys.size() &gt; 0) {
 			/* broadcast ChangedInventoryItems */
-			EventBus::broadcast(static_cast&lt;Event *&gt;(&amp;changed));
+			EventBus::broadcast(static_cast&lt;Event *&gt; (&amp;changed));
 		}
 	} else if (messages.find(MESSAGE_NOT_CARRYING_ANYTHING) != string::npos || messages.find(MESSAGE_NOT_CARRYING_ANYTHING_EXCEPT_GOLD) != string::npos) {
 		/* we're not carrying anything */</diff>
      <filename>Inventory.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -206,7 +206,7 @@ bool Item::operator==(const Item &amp;i) {
 	return count == i.count &amp;&amp; beatitude == i.beatitude &amp;&amp; greased == i.greased &amp;&amp; fixed == i.fixed &amp;&amp; damage == i.damage &amp;&amp; unknown_enchantment == i.unknown_enchantment &amp;&amp; enchantment == i.enchantment &amp;&amp; name == i.name &amp;&amp; additional == i.additional;
 }
 
-ostream &amp;operator&lt;&lt;(ostream &amp;out, const Item &amp;item) {
+ostream &amp; operator&lt;&lt;(ostream &amp;out, const Item &amp;item) {
 	if (item.name == &quot;&quot;) {
 		out &lt;&lt; &quot;(no item)&quot;;
 	} else {
@@ -232,7 +232,7 @@ ostream &amp;operator&lt;&lt;(ostream &amp;out, const Item &amp;item) {
 			out &lt;&lt; ((item.enchantment &gt;= 0) ? &quot;+&quot; : &quot;&quot;) &lt;&lt; item.enchantment &lt;&lt; &quot; &quot;;
 		out &lt;&lt; item.name;
 		if (item.additional != &quot;&quot;)
-			 out &lt;&lt; &quot; &quot; &lt;&lt; item.additional;
+			out &lt;&lt; &quot; &quot; &lt;&lt; item.additional;
 	}
 	return out;
 }</diff>
      <filename>Item.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -26,23 +26,26 @@
 #include &lt;string&gt;
 
 class Item {
-	public:
-		std::string name;
-		int count;
-		int beatitude;
-		bool greased;
-		bool fixed;
-		int damage;
-		bool unknown_enchantment;
-		int enchantment;
-		std::string additional;
+public:
+	std::string name;
+	int count;
+	int beatitude;
+	bool greased;
+	bool fixed;
+	int damage;
+	bool unknown_enchantment;
+	int enchantment;
+	std::string additional;
 
-		Item(const std::string &amp;text);
-		Item();
+	Item(const std::string &amp;text);
+	Item();
 
-		bool operator==(const Item &amp;i);
-		bool operator!=(const Item &amp;i) {return !(*this == i);}
+	bool operator==(const Item &amp;i);
+
+	bool operator!=(const Item &amp;i) {
+		return !(*this == i);
+	}
 };
 
-std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const Item&amp; item);
+std::ostream &amp; operator&lt;&lt;(std::ostream&amp; out, const Item&amp; item);
 #endif</diff>
      <filename>Item.h</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,9 @@ using namespace std;
 bool Level::passable[UCHAR_MAX + 1] = {false};
 /* private */
 Point Level::pathing_queue[PATHING_QUEUE_SIZE] = {Point()};
-unsigned char Level::uniquemap[UCHAR_MAX + 1][CHAR_MAX + 1] = {{0}};
+unsigned char Level::uniquemap[UCHAR_MAX + 1][CHAR_MAX + 1] = {
+	{0}
+};
 int Level::pathcost[UCHAR_MAX + 1] = {0};
 bool Level::dungeon[UCHAR_MAX + 1] = {false};
 bool Level::monster[UCHAR_MAX + 1] = {false};
@@ -44,21 +46,21 @@ void Level::analyze() {
 	if (World::menu)
 		return; // menu hides map, don't update
 	if (World::engulfed) {
-		 /* we'll still need to update monster's &quot;visible&quot; while engulfed,
-		  * or she may attempt to farlook a monster she can't see */
+		/* we'll still need to update monster's &quot;visible&quot; while engulfed,
+		 * or she may attempt to farlook a monster she can't see */
 		for (map&lt;Point, Monster&gt;::iterator m = monsters.begin(); m != monsters.end(); ++m)
 			m-&gt;second.visible = false;
 		return;
 	}
 	/* update changed symbols */
 	for (vector&lt;Point&gt;::iterator c = World::changes.begin(); c != World::changes.end(); ++c)
-		updateMapPoint(*c, (unsigned char) World::view[c-&gt;row][c-&gt;col], World::color[c-&gt;row][c-&gt;col]);
+		updateMapPoint(*c, (unsigned char) World::view[c-&gt;row()][c-&gt;col()], World::color[c-&gt;row()][c-&gt;col()]);
 	/* update monsters */
 	updateMonsters();
 	/* update pathmap */
 	updatePathMap();
 	/* set point we're standing on &quot;fully searched&quot; */
-	searchmap[Saiph::position.row][Saiph::position.col] = INT_MAX;
+	searchmap[Saiph::position.row()][Saiph::position.col()] = INT_MAX;
 }
 
 void Level::parseMessages(const string &amp;messages) {
@@ -168,14 +170,14 @@ void Level::parseMessages(const string &amp;messages) {
 		map&lt;Point, Stash&gt;::iterator s = stashes.find(Saiph::position);
 		if (received.items.size() &gt; 0) {
 			/* broadcast &quot;ReceivedItems&quot; */
-			EventBus::broadcast(static_cast&lt;Event *&gt;(&amp;received));
+			EventBus::broadcast(static_cast&lt;Event *&gt; (&amp;received));
 			/* make stash dirty too */
 			if (s != stashes.end())
 				s-&gt;second.items.clear();
 			/* broadcast StashChanged */
 			StashChanged sc;
-			sc.stash = Coordinate(Saiph::position.level, Saiph::position);
-			EventBus::broadcast(static_cast&lt;Event *&gt;(&amp;sc));
+			sc.stash = Coordinate(Saiph::position.level(), Saiph::position);
+			EventBus::broadcast(static_cast&lt;Event *&gt; (&amp;sc));
 		}
 
 		if (!World::question) {
@@ -183,7 +185,7 @@ void Level::parseMessages(const string &amp;messages) {
 			if (s != stashes.end() &amp;&amp; s-&gt;second.items.size() &gt; 0) {
 				on_ground.items = s-&gt;second.items;
 				/* broadcast &quot;ItemsOnGround&quot; */
-				EventBus::broadcast(static_cast&lt;Event *&gt;(&amp;on_ground));
+				EventBus::broadcast(static_cast&lt;Event *&gt; (&amp;on_ground));
 			}
 		}
 	}
@@ -193,37 +195,37 @@ void Level::updateMapPoint(const Point &amp;point, unsigned char symbol, int color)
 	if (branch == BRANCH_ROGUE) {
 		/* we need a special symbol remapping for rogue level */
 		switch ((char) symbol) {
-			case '+':
-				symbol = OPEN_DOOR;
-				break;
+		case '+':
+			symbol = OPEN_DOOR;
+			break;
 
-			case ':':
-				symbol = FOOD;
-				break;
+		case ':':
+			symbol = FOOD;
+			break;
 
-			case ']':
-				symbol = ARMOR;
-				break;
+		case ']':
+			symbol = ARMOR;
+			break;
 
-			case '*':
-				symbol = GOLD;
-				break;
+		case '*':
+			symbol = GOLD;
+			break;
 
-			case ',':
-				symbol = AMULET;
-				break;
+		case ',':
+			symbol = AMULET;
+			break;
 
-			case '%':
-				/* set symbol to ROGUE_STAIRS if we don't know where the stairs lead.
-				 * if we do know where the stairs lead, then set the symbol accordingly */
-				if (dungeonmap[point.row][point.col] != STAIRS_DOWN &amp;&amp; dungeonmap[point.row][point.col] != STAIRS_UP)
-					symbol = ROGUE_STAIRS;
-				else
-					symbol = dungeonmap[point.row][point.col];
-				break;
+		case '%':
+			/* set symbol to ROGUE_STAIRS if we don't know where the stairs lead.
+			 * if we do know where the stairs lead, then set the symbol accordingly */
+			if (dungeonmap[point.row()][point.col()] != STAIRS_DOWN &amp;&amp; dungeonmap[point.row()][point.col()] != STAIRS_UP)
+				symbol = ROGUE_STAIRS;
+			else
+				symbol = dungeonmap[point.row()][point.col()];
+			break;
 
-			default:
-				break;
+		default:
+			break;
 		}
 	} else {
 		/* remap ambigous symbols */
@@ -231,13 +233,13 @@ void Level::updateMapPoint(const Point &amp;point, unsigned char symbol, int color)
 		/* some special cases */
 		if (symbol == FOUNTAIN &amp;&amp; branch == BRANCH_MINES)
 			symbol = MINES_FOUNTAIN; // to avoid dipping &amp; such
-		else if (symbol == FLOOR &amp;&amp; dungeonmap[point.row][point.col] == SHOP_TILE)
+		else if (symbol == FLOOR &amp;&amp; dungeonmap[point.row()][point.col()] == SHOP_TILE)
 			symbol = SHOP_TILE; // don't overwrite shop tiles here
 	}
-	if (dungeon[symbol] || (symbol == SOLID_ROCK &amp;&amp; dungeonmap[point.row][point.col] == CORRIDOR)) {
+	if (dungeon[symbol] || (symbol == SOLID_ROCK &amp;&amp; dungeonmap[point.row()][point.col()] == CORRIDOR)) {
 		/* update the map showing static stuff */
 		setDungeonSymbol(point, symbol);
-	} else if (symbol != SOLID_ROCK &amp;&amp; !passable[dungeonmap[point.row][point.col]] &amp;&amp; dungeonmap[point.row][point.col] != UNKNOWN_TILE_UNPASSABLE) {
+	} else if (symbol != SOLID_ROCK &amp;&amp; !passable[dungeonmap[point.row()][point.col()]] &amp;&amp; dungeonmap[point.row()][point.col()] != UNKNOWN_TILE_UNPASSABLE) {
 		/* we can't see the floor here, but we believe we can pass this tile.
 		 * place an UNKNOWN_TILE here.
 		 * the reason we check if stored tile is !passable is because if we don't,
@@ -255,18 +257,18 @@ void Level::updateMapPoint(const Point &amp;point, unsigned char symbol, int color)
 				s-&gt;second.top_color = color;
 				/* broadcast StashChanged */
 				StashChanged sc;
-				sc.stash = Coordinate(Saiph::position.level, point);
-				EventBus::broadcast(static_cast&lt;Event *&gt;(&amp;sc));
+				sc.stash = Coordinate(Saiph::position.level(), point);
+				EventBus::broadcast(static_cast&lt;Event *&gt; (&amp;sc));
 			}
 		} else {
 			/* new stash */
 			stashes[point] = Stash(symbol, color);
 			/* broadcast StashChanged */
 			StashChanged sc;
-			sc.stash = Coordinate(Saiph::position.level, point);
-			EventBus::broadcast(static_cast&lt;Event *&gt;(&amp;sc));
+			sc.stash = Coordinate(Saiph::position.level(), point);
+			EventBus::broadcast(static_cast&lt;Event *&gt; (&amp;sc));
 		}
-	} else if (symbol == dungeonmap[point.row][point.col]) {
+	} else if (symbol == dungeonmap[point.row()][point.col()]) {
 		/* if there ever was a stash here, it's gone now */
 		stashes.erase(point);
 	}
@@ -289,8 +291,8 @@ void Level::updateMapPoint(const Point &amp;point, unsigned char symbol, int color)
 			if ((color &gt;= INVERSE_BLACK &amp;&amp; color &lt;= INVERSE_WHITE) || (color &gt;= INVERSE_BOLD_BLACK &amp;&amp; color &lt;= INVERSE_BOLD_WHITE))
 				old_symbol = PET;
 			else
-				old_symbol = World::view[m-&gt;first.row][m-&gt;first.col];
-			if (m-&gt;second.symbol == old_symbol &amp;&amp; m-&gt;second.color == World::color[m-&gt;first.row][m-&gt;first.col]) {
+				old_symbol = World::view[m-&gt;first.row()][m-&gt;first.col()];
+			if (m-&gt;second.symbol == old_symbol &amp;&amp; m-&gt;second.color == World::color[m-&gt;first.row()][m-&gt;first.col()]) {
 				/* note about this &quot;point == m-&gt;first&quot;:
 				 * the character for the monster may be updated even if it hasn't moved,
 				 * if this is the case, we should return and neither move nor add the
@@ -300,7 +302,7 @@ void Level::updateMapPoint(const Point &amp;point, unsigned char symbol, int color)
 				continue; // this monster already is on its square
 			}
 			/* see if this monster is closer than the last found monster */
-			int distance = max(abs(m-&gt;first.row - point.row), abs(m-&gt;first.col - point.col));
+			int distance = max(abs(m-&gt;first.row() - point.row()), abs(m-&gt;first.col() - point.col()));
 			if (distance &gt; MAX_MONSTER_MOVE)
 				continue; // too far away from where we last saw it, probably new monster
 			else if (distance &gt;= min_distance)
@@ -314,7 +316,7 @@ void Level::updateMapPoint(const Point &amp;point, unsigned char symbol, int color)
 		if (nearest != monsters.end()) {
 			/* we know of this monster, move it to new location */
 			/* remove monster from monstermap */
-			monstermap[nearest-&gt;first.row][nearest-&gt;first.col] = ILLEGAL_MONSTER;
+			monstermap[nearest-&gt;first.row()][nearest-&gt;first.col()] = ILLEGAL_MONSTER;
 			/* update monster */
 			nearest-&gt;second.last_seen = World::turn;
 			monsters[point] = nearest-&gt;second;
@@ -324,33 +326,33 @@ void Level::updateMapPoint(const Point &amp;point, unsigned char symbol, int color)
 			monsters[point] = Monster(msymbol, color, World::turn);
 		}
 		/* set monster on monstermap */
-		monstermap[point.row][point.col] = msymbol;
+		monstermap[point.row()][point.col()] = msymbol;
 	}
 }
 
 void Level::updateMonsters() {
 	/* remove monsters that seems to be gone
 	 * and make monsters we can't see !visible */
-	for (map&lt;Point, Monster&gt;::iterator m = monsters.begin(); m != monsters.end(); ) {
+	for (map&lt;Point, Monster&gt;::iterator m = monsters.begin(); m != monsters.end();) {
 		unsigned char symbol;
-		int color = World::color[m-&gt;first.row][m-&gt;first.col];
+		int color = World::color[m-&gt;first.row()][m-&gt;first.col()];
 		if ((color &gt;= INVERSE_BLACK &amp;&amp; color &lt;= INVERSE_WHITE) || (color &gt;= INVERSE_BOLD_BLACK &amp;&amp; color &lt;= INVERSE_BOLD_WHITE))
 			symbol = PET;
 		else
-			symbol = World::view[m-&gt;first.row][m-&gt;first.col];
+			symbol = World::view[m-&gt;first.row()][m-&gt;first.col()];
 		/* if we don't see the monster on world-&gt;view then it's not visible */
 		m-&gt;second.visible = (m-&gt;first != Saiph::position &amp;&amp; symbol == m-&gt;second.symbol &amp;&amp; color == m-&gt;second.color);
 		if (m-&gt;second.visible) {
 			/* monster still visible, don't remove it */
 			++m;
 			continue;
-		} else if (abs(Saiph::position.row - m-&gt;first.row) &gt; 1 || abs(Saiph::position.col - m-&gt;first.col) &gt; 1) {
+		} else if (abs(Saiph::position.row() - m-&gt;first.row()) &gt; 1 || abs(Saiph::position.col() - m-&gt;first.col()) &gt; 1) {
 			/* player is not next to where we last saw the monster */
 			++m;
 			continue;
 		}
 		/* remove monster from monstermap */
-		monstermap[m-&gt;first.row][m-&gt;first.col] = ILLEGAL_MONSTER;
+		monstermap[m-&gt;first.row()][m-&gt;first.col()] = ILLEGAL_MONSTER;
 		/* remove monster from list */
 		monsters.erase(m++);
 	}
@@ -368,96 +370,97 @@ void Level::updatePathMap() {
 	int nodes = 0;
 	unsigned int cost = 0;
 	Point from = Saiph::position;
-	pathmap[from.row][from.col].dir = NOWHERE;
-	pathmap[from.row][from.col].moves = 0;
-	pathmap[from.row][from.col].cost = 0;
+	pathmap[from.row()][from.col()].dir = NOWHERE;
+	pathmap[from.row()][from.col()].moves = 0;
+	pathmap[from.row()][from.col()].cost = 0;
 
-	/* first move northwest node */
-	Point to(from.row - 1, from.col - 1);
-	if (to.row &gt;= MAP_ROW_BEGIN &amp;&amp; to.col &gt;= MAP_COL_BEGIN) {
+	/* check first northwest node */
+	Point to(from);
+	to.moveNorthwest();
+	if (to.insideMap()) {
 		cost = updatePathMapHelper(to, from);
 		if (cost &lt; UNREACHABLE) {
 			pathing_queue[nodes++] = to;
-			pathmap[to.row][to.col] = PathNode(from, NW, 1, cost);
+			pathmap[to.row()][to.col()] = PathNode(from, NW, 1, cost);
 		} else {
-			pathmap[to.row][to.col] = PathNode(from, NW, 1, UNPASSABLE);
+			pathmap[to.row()][to.col()] = PathNode(from, NW, 1, UNPASSABLE);
 		}
 	}
-	/* first move north node */
-	++to.col;
-	if (to.row &gt;= MAP_ROW_BEGIN) {
+	/* check first north node */
+	to.moveEast();
+	if (to.insideMap()) {
 		cost = updatePathMapHelper(to, from);
 		if (cost &lt; UNREACHABLE) {
 			pathing_queue[nodes++] = to;
-			pathmap[to.row][to.col] = PathNode(from, N, 1, cost);
+			pathmap[to.row()][to.col()] = PathNode(from, N, 1, cost);
 		} else {
-			pathmap[to.row][to.col] = PathNode(from, N, 1, UNPASSABLE);
+			pathmap[to.row()][to.col()] = PathNode(from, N, 1, UNPASSABLE);
 		}
 	}
-	/* first move northeast node */
-	++to.col;
-	if (to.row &gt;= MAP_ROW_BEGIN &amp;&amp; to.col &lt;= MAP_COL_END) {
+	/* check first northeast node */
+	to.moveEast();
+	if (to.insideMap()) {
 		cost = updatePathMapHelper(to, from);
 		if (cost &lt; UNREACHABLE) {
 			pathing_queue[nodes++] = to;
-			pathmap[to.row][to.col] = PathNode(from, NE, 1, cost);
+			pathmap[to.row()][to.col()] = PathNode(from, NE, 1, cost);
 		} else {
-			pathmap[to.row][to.col] = PathNode(from, NE, 1, UNPASSABLE);
+			pathmap[to.row()][to.col()] = PathNode(from, NE, 1, UNPASSABLE);
 		}
 	}
-	/* first move east node */
-	++to.row;
-	if (to.col &lt;= MAP_COL_END) {
+	/* check first east node */
+	to.moveSouth();
+	if (to.insideMap()) {
 		cost = updatePathMapHelper(to, from);
 		if (cost &lt; UNREACHABLE) {
 			pathing_queue[nodes++] = to;
-			pathmap[to.row][to.col] = PathNode(from, E, 1, cost);
+			pathmap[to.row()][to.col()] = PathNode(from, E, 1, cost);
 		} else {
-			pathmap[to.row][to.col] = PathNode(from, E, 1, UNPASSABLE);
+			pathmap[to.row()][to.col()] = PathNode(from, E, 1, UNPASSABLE);
 		}
 	}
-	/* first move southeast node */
-	++to.row;
-	if (to.row &lt;= MAP_ROW_END &amp;&amp; to.col &lt;= MAP_COL_END) {
+	/* check first southeast node */
+	to.moveSouth();
+	if (to.insideMap()) {
 		cost = updatePathMapHelper(to, from);
 		if (cost &lt; UNREACHABLE) {
 			pathing_queue[nodes++] = to;
-			pathmap[to.row][to.col] = PathNode(from, SE, 1, cost);
+			pathmap[to.row()][to.col()] = PathNode(from, SE, 1, cost);
 		} else {
-			pathmap[to.row][to.col] = PathNode(from, SE, 1, UNPASSABLE);
+			pathmap[to.row()][to.col()] = PathNode(from, SE, 1, UNPASSABLE);
 		}
 	}
-	/* first move south node */
-	--to.col;
-	if (to.row &lt;= MAP_ROW_END) {
+	/* check first south node */
+	to.moveWest();
+	if (to.insideMap()) {
 		cost = updatePathMapHelper(to, from);
 		if (cost &lt; UNREACHABLE) {
 			pathing_queue[nodes++] = to;
-			pathmap[to.row][to.col] = PathNode(from, S, 1, cost);
+			pathmap[to.row()][to.col()] = PathNode(from, S, 1, cost);
 		} else {
-			pathmap[to.row][to.col] = PathNode(from, S, 1, UNPASSABLE);
+			pathmap[to.row()][to.col()] = PathNode(from, S, 1, UNPASSABLE);
 		}
 	}
-	/* first move southwest node */
-	--to.col;
-	if (to.row &lt;= MAP_ROW_END &amp;&amp; to.col &gt;= MAP_COL_BEGIN) {
+	/* check first southwest node */
+	to.moveWest();
+	if (to.insideMap()) {
 		cost = updatePathMapHelper(to, from);
 		if (cost &lt; UNREACHABLE) {
 			pathing_queue[nodes++] = to;
-			pathmap[to.row][to.col] = PathNode(from, SW, 1, cost);
+			pathmap[to.row()][to.col()] = PathNode(from, SW, 1, cost);
 		} else {
-			pathmap[to.row][to.col] = PathNode(from, SW, 1, UNPASSABLE);
+			pathmap[to.row()][to.col()] = PathNode(from, SW, 1, UNPASSABLE);
 		}
 	}
-	/* first move west node */
-	--to.row;
-	if (to.col &gt;= MAP_COL_BEGIN) {
+	/* check first west node */
+	to.moveNorth();
+	if (to.insideMap()) {
 		cost = updatePathMapHelper(to, from);
 		if (cost &lt; UNREACHABLE) {
 			pathing_queue[nodes++] = to;
-			pathmap[to.row][to.col] = PathNode(from, W, 1, cost);
+			pathmap[to.row()][to.col()] = PathNode(from, W, 1, cost);
 		} else {
-			pathmap[to.row][to.col] = PathNode(from, W, 1, UNPASSABLE);
+			pathmap[to.row()][to.col()] = PathNode(from, W, 1, UNPASSABLE);
 		}
 	}
 
@@ -465,91 +468,92 @@ void Level::updatePathMap() {
 	while (curnode &lt; nodes) {
 		from = pathing_queue[curnode++];
 		/* check northwest node */
-		to = Point(from.row - 1, from.col - 1);
-		if (to.row &gt;= MAP_ROW_BEGIN &amp;&amp; to.col &gt;= MAP_COL_BEGIN) {
+		Point to(from);
+		to.moveNorthwest();
+		if (to.insideMap()) {
 			cost = updatePathMapHelper(to, from);
-			if (cost &lt; pathmap[to.row][to.col].cost) {
+			if (cost &lt; pathmap[to.row()][to.col()].cost) {
 				pathing_queue[nodes++] = to;
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, cost);
-			} else if (cost == pathmap[to.row][to.col].cost &amp;&amp; cost == UNREACHABLE) {
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, UNPASSABLE);
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, cost);
+			} else if (cost == pathmap[to.row()][to.col()].cost &amp;&amp; cost == UNREACHABLE) {
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, UNPASSABLE);
 			}
 		}
 		/* check north node */
-		++to.col;
-		if (to.row &gt;= MAP_ROW_BEGIN) {
+		to.moveEast();
+		if (to.insideMap()) {
 			cost = updatePathMapHelper(to, from);
-			if (cost &lt; pathmap[to.row][to.col].cost) {
+			if (cost &lt; pathmap[to.row()][to.col()].cost) {
 				pathing_queue[nodes++] = to;
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, cost);
-			} else if (cost == pathmap[to.row][to.col].cost &amp;&amp; cost == UNREACHABLE) {
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, UNPASSABLE);
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, cost);
+			} else if (cost == pathmap[to.row()][to.col()].cost &amp;&amp; cost == UNREACHABLE) {
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, UNPASSABLE);
 			}
 		}
 		/* check northeast node */
-		++to.col;
-		if (to.row &gt;= MAP_ROW_BEGIN &amp;&amp; to.col &lt;= MAP_COL_END) {
+		to.moveEast();
+		if (to.insideMap()) {
 			cost = updatePathMapHelper(to, from);
-			if (cost &lt; pathmap[to.row][to.col].cost) {
+			if (cost &lt; pathmap[to.row()][to.col()].cost) {
 				pathing_queue[nodes++] = to;
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, cost);
-			} else if (cost == pathmap[to.row][to.col].cost &amp;&amp; cost == UNREACHABLE) {
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, UNPASSABLE);
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, cost);
+			} else if (cost == pathmap[to.row()][to.col()].cost &amp;&amp; cost == UNREACHABLE) {
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, UNPASSABLE);
 			}
 		}
 		/* check east node */
-		++to.row;
-		if (to.col &lt;= MAP_COL_END) {
+		to.moveSouth();
+		if (to.insideMap()) {
 			cost = updatePathMapHelper(to, from);
-			if (cost &lt; pathmap[to.row][to.col].cost) {
+			if (cost &lt; pathmap[to.row()][to.col()].cost) {
 				pathing_queue[nodes++] = to;
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, cost);
-			} else if (cost == pathmap[to.row][to.col].cost &amp;&amp; cost == UNREACHABLE) {
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, UNPASSABLE);
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, cost);
+			} else if (cost == pathmap[to.row()][to.col()].cost &amp;&amp; cost == UNREACHABLE) {
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, UNPASSABLE);
 			}
 		}
 		/* check southeast node */
-		++to.row;
-		if (to.row &lt;= MAP_ROW_END &amp;&amp; to.col &lt;= MAP_COL_END) {
+		to.moveSouth();
+		if (to.insideMap()) {
 			cost = updatePathMapHelper(to, from);
-			if (cost &lt; pathmap[to.row][to.col].cost) {
+			if (cost &lt; pathmap[to.row()][to.col()].cost) {
 				pathing_queue[nodes++] = to;
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, cost);
-			} else if (cost == pathmap[to.row][to.col].cost &amp;&amp; cost == UNREACHABLE) {
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, UNPASSABLE);
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, cost);
+			} else if (cost == pathmap[to.row()][to.col()].cost &amp;&amp; cost == UNREACHABLE) {
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, UNPASSABLE);
 			}
 		}
 		/* check south node */
-		--to.col;
-		if (to.row &lt;= MAP_ROW_END) {
+		to.moveWest();
+		if (to.insideMap()) {
 			cost = updatePathMapHelper(to, from);
-			if (cost &lt; pathmap[to.row][to.col].cost) {
+			if (cost &lt; pathmap[to.row()][to.col()].cost) {
 				pathing_queue[nodes++] = to;
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, cost);
-			} else if (cost == pathmap[to.row][to.col].cost &amp;&amp; cost == UNREACHABLE) {
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, UNPASSABLE);
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, cost);
+			} else if (cost == pathmap[to.row()][to.col()].cost &amp;&amp; cost == UNREACHABLE) {
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, UNPASSABLE);
 			}
 		}
 		/* check southwest node */
-		--to.col;
-		if (to.row &lt;= MAP_ROW_END &amp;&amp; to.col &gt;= MAP_COL_BEGIN) {
+		to.moveWest();
+		if (to.insideMap()) {
 			cost = updatePathMapHelper(to, from);
-			if (cost &lt; pathmap[to.row][to.col].cost) {
+			if (cost &lt; pathmap[to.row()][to.col()].cost) {
 				pathing_queue[nodes++] = to;
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, cost);
-			} else if (cost == pathmap[to.row][to.col].cost &amp;&amp; cost == UNREACHABLE) {
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, UNPASSABLE);
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, cost);
+			} else if (cost == pathmap[to.row()][to.col()].cost &amp;&amp; cost == UNREACHABLE) {
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, UNPASSABLE);
 			}
 		}
 		/* check west node */
-		--to.row;
-		if (to.col &gt;= MAP_COL_BEGIN) {
+		to.moveNorth();
+		if (to.insideMap()) {
 			cost = updatePathMapHelper(to, from);
-			if (cost &lt; pathmap[to.row][to.col].cost) {
+			if (cost &lt; pathmap[to.row()][to.col()].cost) {
 				pathing_queue[nodes++] = to;
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, cost);
-			} else if (cost == pathmap[to.row][to.col].cost &amp;&amp; cost == UNREACHABLE) {
-				pathmap[to.row][to.col] = PathNode(from, pathmap[from.row][from.col].dir, pathmap[from.row][from.col].moves + 1, UNPASSABLE);
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, cost);
+			} else if (cost == pathmap[to.row()][to.col()].cost &amp;&amp; cost == UNREACHABLE) {
+				pathmap[to.row()][to.col()] = PathNode(from, pathmap[from.row()][from.col()].dir, pathmap[from.row()][from.col()].moves + 1, UNPASSABLE);
 			}
 		}
 	}
@@ -559,17 +563,17 @@ void Level::updatePathMap() {
 unsigned int Level::updatePathMapHelper(const Point &amp;to, const Point &amp;from) {
 	/* helper method for updatePathMap()
 	 * return UNREACHABLE if move is illegal, or the cost for reaching the node if move is legal */
-	unsigned char s = dungeonmap[to.row][to.col];
+	unsigned char s = dungeonmap[to.row()][to.col()];
 	if (!passable[s])
 		return UNREACHABLE;
-	bool cardinal_move = (to.row == from.row || to.col == from.col);
+	bool cardinal_move = (to.row() == from.row() || to.col() == from.col());
 	if (!cardinal_move) {
-		if (s == OPEN_DOOR || dungeonmap[from.row][from.col] == OPEN_DOOR)
+		if (s == OPEN_DOOR || dungeonmap[from.row()][from.col()] == OPEN_DOOR)
 			return UNREACHABLE; // diagonally in/out of door
-		if (s == UNKNOWN_TILE_DIAGONALLY_UNPASSABLE || dungeonmap[from.row][from.col] == UNKNOWN_TILE_DIAGONALLY_UNPASSABLE)
+		if (s == UNKNOWN_TILE_DIAGONALLY_UNPASSABLE || dungeonmap[from.row()][from.col()] == UNKNOWN_TILE_DIAGONALLY_UNPASSABLE)
 			return UNREACHABLE; // don't know what tile this is, but we know we can't pass it diagonally
-		unsigned char sc1 = dungeonmap[to.row][from.col];
-		unsigned char sc2 = dungeonmap[from.row][to.col];
+		unsigned char sc1 = dungeonmap[to.row()][from.col()];
+		unsigned char sc2 = dungeonmap[from.row()][to.col()];
 		if (!passable[sc1] &amp;&amp; !passable[sc2]) {
 			/* moving past two corners
 			 * while we may pass two corners if we're not carrying too much we'll just ignore this.
@@ -580,19 +584,19 @@ unsigned int Level::updatePathMapHelper(const Point &amp;to, const Point &amp;from) {
 				return UNREACHABLE; // in sokoban we can't pass by boulders diagonally
 		}
 		//if (polymorphed_to_grid_bug)
-		//      return UNREACHABLE;
+		//return UNREACHABLE;
 	}
 	if (s == LAVA) // &amp;&amp; !levitating)
-	      return UNREACHABLE;
+		return UNREACHABLE;
 	if (s == WATER) // &amp;&amp; (!levitating || !waterwalk))
-	      return UNREACHABLE;
+		return UNREACHABLE;
 	if (s == TRAP &amp;&amp; branch == BRANCH_SOKOBAN)
 		return UNREACHABLE;
-	if (monstermap[to.row][to.col] != ILLEGAL_MONSTER &amp;&amp; abs(Saiph::position.row - to.row) &lt;= 1 &amp;&amp; abs(Saiph::position.col - to.col) &lt;= 1)
+	if (monstermap[to.row()][to.col()] != ILLEGAL_MONSTER &amp;&amp; abs(Saiph::position.row() - to.row()) &lt;= 1 &amp;&amp; abs(Saiph::position.col() - to.col()) &lt;= 1)
 		return UNREACHABLE; // don't path through monster next to her
-	unsigned int cost = pathmap[from.row][from.col].cost + (cardinal_move ? COST_CARDINAL : COST_DIAGONAL);
+	unsigned int cost = pathmap[from.row()][from.col()].cost + (cardinal_move ? COST_CARDINAL : COST_DIAGONAL);
 	cost += pathcost[s];
-	if (monstermap[to.row][to.col] != ILLEGAL_MONSTER)
+	if (monstermap[to.row()][to.col()] != ILLEGAL_MONSTER)
 		cost += COST_MONSTER;
 	return cost;
 }
@@ -602,7 +606,7 @@ void Level::init() {
 	initialized = true;
 	/* monsters */
 	for (int a = 0; a &lt;= UCHAR_MAX; ++a) {
-		if ((a &gt;= '@' &amp;&amp; a &lt;= 'Z') || (a &gt;= 'a' &amp;&amp; a &lt;= 'z') || (a &gt;= '1' &amp;&amp; a &lt;= '5')  || a == '&amp;' || a == '\'' || a == ':' || a == ';' || a == '~' || a == PET)
+		if ((a &gt;= '@' &amp;&amp; a &lt;= 'Z') || (a &gt;= 'a' &amp;&amp; a &lt;= 'z') || (a &gt;= '1' &amp;&amp; a &lt;= '5') || a == '&amp;' || a == '\'' || a == ':' || a == ';' || a == '~' || a == PET)
 			monster[a] = true;
 	}
 	/* items */</diff>
      <filename>Level.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -104,46 +104,46 @@ private:
 /* inline methods */
 inline unsigned char Level::getDungeonSymbol(const Point &amp;point) {
 	/* return dungeon symbol at given point */
-	if (point.row &lt; MAP_ROW_BEGIN || point.row &gt; MAP_ROW_END || point.col &lt; MAP_COL_BEGIN || point.col &gt; MAP_COL_END)
+	if (point.row() &lt; MAP_ROW_BEGIN || point.row() &gt; MAP_ROW_END || point.col() &lt; MAP_COL_BEGIN || point.col() &gt; MAP_COL_END)
 		return OUTSIDE_MAP;
-	return dungeonmap[point.row][point.col];
+	return dungeonmap[point.row()][point.col()];
 }
 
 inline unsigned char Level::getMonsterSymbol(const Point &amp;point) {
 	/* return monster symbol at given point */
-	if (point.row &lt; MAP_ROW_BEGIN || point.row &gt; MAP_ROW_END || point.col &lt; MAP_COL_BEGIN || point.col &gt; MAP_COL_END)
+	if (point.row() &lt; MAP_ROW_BEGIN || point.row() &gt; MAP_ROW_END || point.col() &lt; MAP_COL_BEGIN || point.col() &gt; MAP_COL_END)
 		return ILLEGAL_MONSTER;
-	return monstermap[point.row][point.col];
+	return monstermap[point.row()][point.col()];
 }
 
 inline int Level::getSearchCount(const Point &amp;point) {
 	/* return search count at given point */
-	if (point.row &lt; MAP_ROW_BEGIN || point.row &gt; MAP_ROW_END || point.col &lt; MAP_COL_BEGIN || point.col &gt; MAP_COL_END)
+	if (point.row() &lt; MAP_ROW_BEGIN || point.row() &gt; MAP_ROW_END || point.col() &lt; MAP_COL_BEGIN || point.col() &gt; MAP_COL_END)
 		return POINT_FULLY_SEARCHED;
-	return searchmap[point.row][point.col];
+	return searchmap[point.row()][point.col()];
 }
 
 inline void Level::setDungeonSymbol(const Point &amp;point, unsigned char symbol) {
 	/* need to update both dungeonmap and symbols,
 	 * better keep it in a method */
-	if (point.row &lt; MAP_ROW_BEGIN || point.row &gt; MAP_ROW_END || point.col &lt; MAP_COL_BEGIN || point.col &gt; MAP_COL_END)
+	if (point.row() &lt; MAP_ROW_BEGIN || point.row() &gt; MAP_ROW_END || point.col() &lt; MAP_COL_BEGIN || point.col() &gt; MAP_COL_END)
 		return; // outside map
-	if (dungeonmap[point.row][point.col] == symbol)
+	if (dungeonmap[point.row()][point.col()] == symbol)
 		return; // no change
 	/* erase old symbol from symbols */
-	symbols[dungeonmap[point.row][point.col]].erase(point);
+	symbols[dungeonmap[point.row()][point.col()]].erase(point);
 	/* set new symbol in symbols */
 	symbols[symbol][point] = UNKNOWN_SYMBOL_VALUE;
 	/* update dungeonmap */
-	dungeonmap[point.row][point.col] = symbol;
+	dungeonmap[point.row()][point.col()] = symbol;
 }
 
 inline void Level::increaseAdjacentSearchCount(const Point &amp;point) {
 	/* increase search count for adjacent points to given point */
-	for (int r = point.row - 1; r &lt;= point.row + 1; ++r) {
+	for (int r = point.row() - 1; r &lt;= point.row() + 1; ++r) {
 		if (r &lt; MAP_ROW_BEGIN || r &gt; MAP_ROW_END)
 			continue;
-		for (int c = point.col - 1; c &lt;= point.col + 1; ++c) {
+		for (int c = point.col() - 1; c &lt;= point.col() + 1; ++c) {
 			if (c &lt; MAP_COL_BEGIN || c &gt; MAP_COL_END)
 				continue;
 			if (searchmap[r][c] &gt;= POINT_FULLY_SEARCHED)
@@ -155,8 +155,8 @@ inline void Level::increaseAdjacentSearchCount(const Point &amp;point) {
 
 inline const PathNode &amp;Level::shortestPath(const Point &amp;point) {
 	/* return a PathNode that tells us which direction to move to get to given point */
-	if (point.row &lt; MAP_ROW_BEGIN || point.row &gt; MAP_ROW_END || point.col &lt; MAP_COL_BEGIN || point.col &gt; MAP_COL_END)
+	if (point.row() &lt; MAP_ROW_BEGIN || point.row() &gt; MAP_ROW_END || point.col() &lt; MAP_COL_BEGIN || point.col() &gt; MAP_COL_END)
 		return pathnode_outside_map;
-	return pathmap[point.row][point.col];
+	return pathmap[point.row()][point.col()];
 }
 #endif</diff>
      <filename>Level.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,16 +12,16 @@
 #include &quot;Connection.h&quot;
 
 class Local : public Connection {
-	public:
-		Local();
-		~Local();
+public:
+	Local();
+	~Local();
 
-		virtual int retrieve(char *buffer, int count);
-		virtual int transmit(const std::string &amp;data);
-		virtual void start();
-		virtual void stop();
+	virtual int retrieve(char *buffer, int count);
+	virtual int transmit(const std::string &amp;data);
+	virtual void start();
+	virtual void stop();
 
-	private:
-		int link[2];
+private:
+	int link[2];
 };
 #endif</diff>
      <filename>Local.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,16 +12,16 @@ namespace data {
 }
 
 class Monster {
-	public:
-		const data::Monster *data;
-		unsigned char symbol;
-		int color;
-		int last_seen;
-		bool visible;
-		int attitude;
-		bool shopkeeper;
-		bool priest;
+public:
+	const data::Monster *data;
+	unsigned char symbol;
+	int color;
+	int last_seen;
+	bool visible;
+	int attitude;
+	bool shopkeeper;
+	bool priest;
 
-		Monster(unsigned char symbol = ILLEGAL_MONSTER, int color = 0, int last_seen = -1);
+	Monster(unsigned char symbol = ILLEGAL_MONSTER, int color = 0, int last_seen = -1);
 };
 #endif</diff>
      <filename>Monster.h</filename>
    </modified>
    <modified>
      <diff>@@ -6,12 +6,12 @@
 #include &quot;Point.h&quot;
 
 class PathNode {
-	public:
-		Point next;
-		unsigned char dir;
-		unsigned int moves;
-		unsigned int cost;
+public:
+	Point next;
+	unsigned char dir;
+	unsigned int moves;
+	unsigned int cost;
 
-		PathNode(const Point &amp;next = Point(), unsigned char dir = ILLEGAL_DIRECTION, unsigned int moves = UNREACHABLE, unsigned int cost = UNREACHABLE);
+	PathNode(const Point &amp;next = Point(), unsigned char dir = ILLEGAL_DIRECTION, unsigned int moves = UNREACHABLE, unsigned int cost = UNREACHABLE);
 };
 #endif</diff>
      <filename>PathNode.h</filename>
    </modified>
    <modified>
      <diff>@@ -2,6 +2,6 @@
 
 using namespace std;
 
-ostream &amp;operator&lt;&lt;(ostream &amp;os, const Point &amp;p) {
-	return os &lt;&lt; &quot;(&quot; &lt;&lt; p.row &lt;&lt; &quot;, &quot; &lt;&lt; p.col &lt;&lt; &quot;)&quot;;
+ostream &amp; operator&lt;&lt;(ostream &amp;os, const Point &amp;p) {
+	return os &lt;&lt; &quot;(&quot; &lt;&lt; p.row() &lt;&lt; &quot;, &quot; &lt;&lt; p.col() &lt;&lt; &quot;)&quot;;
 }</diff>
      <filename>Point.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -3,20 +3,108 @@
 
 #include &lt;iostream&gt;
 
+#include &quot;Globals.h&quot;
+
 class Point {
 public:
-	int row;
-	int col;
 
-	Point(int row = -1, int col = -1) : row(row), col(col) {}
+	Point(int row = -1, int col = -1) : _row(row), _col(col) {
+	}
+
+	int col() const {
+		return _col;
+	}
+
+	int col(int col) {
+		_col = col;
+		return this-&gt;col();
+	}
+
+	int row() const {
+		return _row;
+	}
+
+	int row(int row) {
+		_row = row;
+		return this-&gt;row();
+	}
+
+	bool insideMap() {
+		return row() &gt;= MAP_ROW_BEGIN &amp;&amp; row() &lt;= MAP_ROW_END &amp;&amp; col() &gt;= MAP_COL_BEGIN &amp;&amp; col() &lt;= MAP_COL_END;
+	}
+
+	Point &amp;moveNorth() {
+		--_row;
+		return *this;
+	}
+
+	Point &amp;moveNortheast() {
+		--_row;
+		++_col;
+		return *this;
+	}
+
+	Point &amp;moveEast() {
+		++_col;
+		return *this;
+	}
+
+	Point &amp;moveSoutheast() {
+		++_row;
+		++_col;
+		return *this;
+	}
+
+	Point &amp;moveSouth() {
+		++_row;
+		return *this;
+	}
+
+	Point &amp;moveSouthwest() {
+		++_row;
+		--_col;
+		return *this;
+	}
+
+	Point &amp;moveWest() {
+		--_col;
+		return *this;
+	}
+
+	Point &amp;moveNorthwest() {
+		--_row;
+		--_col;
+		return *this;
+	}
+
+	bool operator&lt;(const Point &amp;p) const {
+		return (_row &gt; p._row || (_row == p._row &amp;&amp; _col &gt; p._col));
+	}
+
+	bool operator&gt;(const Point &amp;p) const {
+		return (_row &gt; p._row || (_row == p._row &amp;&amp; _col &gt; p._col));
+	}
+
+	bool operator&lt;=(const Point &amp;p) const {
+		return (_row &lt; p._row || (_row == p._row &amp;&amp; _col &lt;= p._col));
+	}
+
+	bool operator&gt;=(const Point &amp;p) const {
+		return (_row &gt; p._row || (_row == p._row &amp;&amp; _col &gt;= p._col));
+	}
+
+	bool operator==(const Point &amp;p) const {
+		return (_row == p._row &amp;&amp; _col == p._col);
+	}
+
+	bool operator!=(const Point &amp;p) const {
+		return (_row != p._row || _col != p._col);
+	}
 
-	bool operator&lt;(const Point &amp;p) const {return (row &gt; p.row || (row == p.row &amp;&amp; col &gt; p.col));}
-	bool operator&gt;(const Point &amp;p) const {return (row &gt; p.row || (row == p.row &amp;&amp; col &gt; p.col));}
-	bool operator&lt;=(const Point &amp;p) const {return (row &lt; p.row || (row == p.row &amp;&amp; col &lt;= p.col));}
-	bool operator&gt;=(const Point &amp;p) const {return (row &gt; p.row || (row == p.row &amp;&amp; col &gt;= p.col));}
-	bool operator==(const Point &amp;p) const {return (row == p.row &amp;&amp; col == p.col);}
-	bool operator!=(const Point &amp;p) const {return (row != p.row || col != p.col);}
+private:
+	int _row;
+	int _col;
 };
 
-std::ostream &amp;operator&lt;&lt;(std::ostream &amp;os, const Point &amp;p);
+std::ostream &amp; operator&lt;&lt;(std::ostream &amp;os, const Point &amp;p);
 #endif</diff>
      <filename>Point.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,6 +12,7 @@ public:
 	int top_color;
 	std::list&lt;Item&gt; items;
 
-	Stash(int last_look = 0, unsigned char top_symbol = ILLEGAL_ITEM, int top_color = NO_COLOR) : last_look(last_look), top_symbol(top_symbol), top_color(top_color), items() {}
+	Stash(int last_look = 0, unsigned char top_symbol = ILLEGAL_ITEM, int top_color = NO_COLOR) : last_look(last_look), top_symbol(top_symbol), top_color(top_color), items() {
+	}
 };
 #endif</diff>
      <filename>Stash.h</filename>
    </modified>
    <modified>
      <diff>@@ -47,7 +47,7 @@ Telnet::Telnet() {
 	addr.sin_addr = *((struct in_addr *) he-&gt;h_addr);
 	memset(addr.sin_zero, '\0', sizeof (addr.sin_zero));
 
-	if (connect(sock, (struct sockaddr *) &amp;addr, sizeof (addr)) == -1) {
+	if (connect(sock, (struct sockaddr *) &amp; addr, sizeof (addr)) == -1) {
 		perror(&quot;connect&quot;);
 		exit(1);
 	}</diff>
      <filename>Telnet.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -11,18 +11,18 @@
 #include &quot;Connection.h&quot;
 
 class Telnet : public Connection {
-	public:
-		Telnet();
-		~Telnet();
+public:
+	Telnet();
+	~Telnet();
 
-		int retrieve(char *buffer, int count);
-		int transmit(const char *data, int length);
-		int transmit(const std::string &amp;data);
-		void start();
-		void stop();
+	int retrieve(char *buffer, int count);
+	int transmit(const char *data, int length);
+	int transmit(const std::string &amp;data);
+	void start();
+	void stop();
 
-	private:
-		int sock;
-		char ping[3];
+private:
+	int sock;
+	char ping[3];
 };
 #endif</diff>
      <filename>Telnet.h</filename>
    </modified>
    <modified>
      <diff>@@ -16,8 +16,12 @@ using namespace std;
 
 /* static variables */
 vector&lt;Point&gt; World::changes;
-char World::view[ROWS][COLS + 1] = {{'\0'}};
-int World::color[ROWS][COLS] = {{0}};
+char World::view[ROWS][COLS + 1] = {
+	{'\0'}
+};
+int World::color[ROWS][COLS] = {
+	{0}
+};
 Point World::cursor;
 int World::cur_page = -1;
 int World::max_page = -1;
@@ -35,12 +39,16 @@ Coordinate World::branch[BRANCHES];
 Connection *World::connection = NULL;
 action::Action *World::action = NULL;
 list&lt;action::Action *&gt; World::action_queue;
-bool World::changed[MAP_ROW_END + 1][MAP_COL_END + 1] = {{false}};
+bool World::changed[MAP_ROW_END + 1][MAP_COL_END + 1] = {
+	{false}
+};
 string World::messages = &quot; &quot;;
 bool World::inverse = false;
 bool World::bold = false;
 char World::data[BUFFER_SIZE * 2] = {'\0'};
-char World::effects[MAX_EFFECTS][MAX_TEXT_LENGTH] = {{'\0'}};
+char World::effects[MAX_EFFECTS][MAX_TEXT_LENGTH] = {
+	{'\0'}
+};
 int World::data_size = -1;
 string World::msg_str;
 Point World::last_menu;
@@ -114,71 +122,67 @@ bool World::queueAction(action::Action *action) {
 
 unsigned char World::directLine(Point point, bool ignore_sinks, bool ignore_boulders) {
 	/* is the target in a direct line from the player? */
-	if (point.row &lt; MAP_ROW_BEGIN || point.row &gt; MAP_ROW_END || point.col &lt; MAP_COL_BEGIN || point.col &gt; MAP_COL_END) {
+	if (point.row() &lt; MAP_ROW_BEGIN || point.row() &gt; MAP_ROW_END || point.col() &lt; MAP_COL_BEGIN || point.col() &gt; MAP_COL_END) {
 		/* outside map */
 		return ILLEGAL_DIRECTION;
 	} else if (point == Saiph::position) {
 		/* eh? don't do this */
 		return NOWHERE;
-	} else if (point.row == Saiph::position.row) {
+	} else if (point.row() == Saiph::position.row()) {
 		/* aligned horizontally */
-		if (point.col &gt; Saiph::position.col) {
-			while (--point.col &gt; Saiph::position.col) {
+		if (point.col() &gt; Saiph::position.col()) {
+			while (point.moveWest().col() &gt; Saiph::position.col()) {
 				if (!directLineHelper(point, ignore_sinks, ignore_boulders))
 					return ILLEGAL_DIRECTION;
 			}
 			return E;
 		} else {
-			while (++point.col &lt; Saiph::position.col) {
+			while (point.moveEast().col() &lt; Saiph::position.col()) {
 				if (!directLineHelper(point, ignore_sinks, ignore_boulders))
 					return ILLEGAL_DIRECTION;
 			}
 			return W;
 		}
-	} else if (point.col == Saiph::position.col) {
+	} else if (point.col() == Saiph::position.col()) {
 		/* aligned vertically */
-		if (point.row &gt; Saiph::position.row) {
-			while (--point.row &gt; Saiph::position.row) {
+		if (point.row() &gt; Saiph::position.row()) {
+			while (point.moveNorth().row() &gt; Saiph::position.row()) {
 				if (!directLineHelper(point, ignore_sinks, ignore_boulders))
 					return ILLEGAL_DIRECTION;
 			}
 			return S;
 		} else {
-			while (++point.row &lt; Saiph::position.row) {
+			while (point.moveSouth().row() &lt; Saiph::position.row()) {
 				if (!directLineHelper(point, ignore_sinks, ignore_boulders))
 					return ILLEGAL_DIRECTION;
 			}
 			return N;
 		}
-	} else if (abs(point.row - Saiph::position.row) == abs(point.col - Saiph::position.col)) {
+	} else if (abs(point.row() - Saiph::position.row()) == abs(point.col() - Saiph::position.col())) {
 		/* aligned diagonally */
-		if (point.row &gt; Saiph::position.row) {
-			if (point.col &gt; Saiph::position.col) {
-				while (--point.row &gt; Saiph::position.row) {
-					--point.col;
+		if (point.row() &gt; Saiph::position.row()) {
+			if (point.col() &gt; Saiph::position.col()) {
+				while (point.moveNorthwest().row() &gt; Saiph::position.row()) {
 					if (!directLineHelper(point, ignore_sinks, ignore_boulders))
 						return ILLEGAL_DIRECTION;
 				}
 				return SE;
 			} else {
-				while (--point.row &gt; Saiph::position.row) {
-					++point.col;
+				while (point.moveNortheast().row() &gt; Saiph::position.row()) {
 					if (!directLineHelper(point, ignore_sinks, ignore_boulders))
 						return ILLEGAL_DIRECTION;
 				}
 				return SW;
 			}
 		} else {
-			if (point.col &gt; Saiph::position.col) {
-				while (++point.row &lt; Saiph::position.row) {
-					--point.col;
+			if (point.col() &gt; Saiph::position.col()) {
+				while (point.moveSouthwest().row() &lt; Saiph::position.row()) {
 					if (!directLineHelper(point, ignore_sinks, ignore_boulders))
 						return ILLEGAL_DIRECTION;
 				}
 				return NE;
 			} else {
-				while (++point.row &lt; Saiph::position.row) {
-					++point.col;
+				while (point.moveSoutheast().row() &lt; Saiph::position.row()) {
 					if (!directLineHelper(point, ignore_sinks, ignore_boulders))
 						return ILLEGAL_DIRECTION;
 				}
@@ -195,13 +199,13 @@ PathNode World::shortestPath(unsigned char symbol) {
 	int level_count = 1;
 	PathNode best_pathnode;
 	int level_queue[levels.size()];
-	level_queue[0] = Saiph::position.level;
+	level_queue[0] = Saiph::position.level();
 	bool level_added[levels.size()];
 	for (int a = 0; a &lt; (int) levels.size(); ++a)
 		level_added[a] = false;
-	level_added[Saiph::position.level] = true;
+	level_added[Saiph::position.level()] = true;
 	PathNode level_pathnode[levels.size()];
-	level_pathnode[Saiph::position.level] = PathNode(Point(), NOWHERE, 0, 0);
+	level_pathnode[Saiph::position.level()] = PathNode(Point(), NOWHERE, 0, 0);
 	while (++pivot &lt; level_count) {
 		/* path to symbols on level */
 		for (map&lt;Point, int&gt;::iterator s = levels[level_queue[pivot]].symbols[symbol].begin(); s != levels[level_queue[pivot]].symbols[symbol].end(); ++s) {
@@ -316,27 +320,27 @@ PathNode World::shortestPath(unsigned char symbol) {
 
 PathNode World::shortestPath(const Coordinate &amp;target) {
 	/* returns PathNode for shortest path from player to target */
-	if (target.level &lt; 0 || target.level &gt;= (int) levels.size()) {
+	if (target.level() &lt; 0 || target.level() &gt;= (int) levels.size()) {
 		return PathNode(); // outside the map
-	} else if (target.level == Saiph::position.level) {
+	} else if (target.level() == Saiph::position.level()) {
 		/* target on same level */
-		return levels[Saiph::position.level].shortestPath(target);
+		return levels[Saiph::position.level()].shortestPath(target);
 	} else {
 		int pivot = -1;
 		int level_count = 1;
 		int level_queue[levels.size()];
-		level_queue[0] = Saiph::position.level;
+		level_queue[0] = Saiph::position.level();
 		bool level_added[levels.size()];
 		for (int a = 0; a &lt; (int) levels.size(); ++a)
 			level_added[a] = false;
-		level_added[Saiph::position.level] = true;
+		level_added[Saiph::position.level()] = true;
 		PathNode level_pathnode[levels.size()];
-		level_pathnode[Saiph::position.level] = PathNode(Point(), NOWHERE, 0, 0);
+		level_pathnode[Saiph::position.level()] = PathNode(Point(), NOWHERE, 0, 0);
 		Debug::info() &lt;&lt; SAIPH_DEBUG_NAME &lt;&lt; &quot;Interlevel pathing to &quot; &lt;&lt; target &lt;&lt; endl;
 		while (++pivot &lt; level_count) {
 			Debug::notice() &lt;&lt; SAIPH_DEBUG_NAME &lt;&lt; &quot;interlevel pathing: &quot; &lt;&lt; pivot &lt;&lt; &quot; - &quot; &lt;&lt; level_count &lt;&lt; endl;
 			/* check if target is on level */
-			if (level_queue[pivot] == target.level) {
+			if (level_queue[pivot] == target.level()) {
 				const PathNode &amp;node = levels[level_queue[pivot]].shortestPath(target);
 				if (node.cost == UNREACHABLE)
 					continue;
@@ -448,12 +452,12 @@ void World::run() {
 		/* let Saiph, Inventory and current level parse messages */
 		Saiph::parseMessages(messages);
 		Inventory::parseMessages(messages);
-		levels[Saiph::position.level].parseMessages(messages);
+		levels[Saiph::position.level()].parseMessages(messages);
 
 		/* let Saiph, Inventory and current level analyze */
 		Saiph::analyze();
 		Inventory::analyze();
-		levels[Saiph::position.level].analyze();
+		levels[Saiph::position.level()].analyze();
 
 		/* dump maps */
 		dumpMaps();
@@ -501,7 +505,7 @@ void World::run() {
 				cout &lt;&lt; (unsigned char) 27 &lt;&lt; &quot;[K&quot;; // erase everything to the right
 				cout &lt;&lt; &quot;No idea what to do: s&quot;;
 				/* return cursor back to where it was */
-				cout &lt;&lt; (unsigned char) 27 &lt;&lt; &quot;[&quot; &lt;&lt; cursor.row + 1 &lt;&lt; &quot;;&quot; &lt;&lt; cursor.col + 1 &lt;&lt; &quot;H&quot;;
+				cout &lt;&lt; (unsigned char) 27 &lt;&lt; &quot;[&quot; &lt;&lt; cursor.row() + 1 &lt;&lt; &quot;;&quot; &lt;&lt; cursor.col() + 1 &lt;&lt; &quot;H&quot;;
 				cout.flush();
 				++World::real_turn; // command than may increase turn counter
 				last_action_id = NO_ACTION;
@@ -515,7 +519,7 @@ void World::run() {
 		cout &lt;&lt; (unsigned char) 27 &lt;&lt; &quot;[K&quot;; // erase everything to the right
 		cout &lt;&lt; action-&gt;getAnalyzer()-&gt;name &lt;&lt; &quot; &quot; &lt;&lt; action-&gt;getCommand();
 		/* return cursor back to where it was */
-		cout &lt;&lt; (unsigned char) 27 &lt;&lt; &quot;[&quot; &lt;&lt; cursor.row + 1 &lt;&lt; &quot;;&quot; &lt;&lt; cursor.col + 1 &lt;&lt; &quot;H&quot;;
+		cout &lt;&lt; (unsigned char) 27 &lt;&lt; &quot;[&quot; &lt;&lt; cursor.row() + 1 &lt;&lt; &quot;;&quot; &lt;&lt; cursor.col() + 1 &lt;&lt; &quot;H&quot;;
 		/* and flush cout. if we don't do this our output looks like garbage */
 		cout.flush();
 		Debug::notice() &lt;&lt; &quot;Analyzer &quot; &lt;&lt; action-&gt;getAnalyzer()-&gt;name &lt;&lt; &quot; &quot; &lt;&lt; action-&gt;getCommand() &lt;&lt; endl;
@@ -532,31 +536,31 @@ void World::run() {
 			/* we'll assume we're moving if the command that's stuck is a direction.
 			 * if not, it's probably not a big deal */
 			switch (action-&gt;getCommand().command[0]) {
-				case NW:
-				case NE:
-				case SW:
-				case SE:
-					/* moving diagonally failed.
-					 * we could be trying to move diagonally into a door we're
-					 * unaware of because of an item blocking the door symbol.
-					 * make the tile UNKNOWN_TILE_DIAGONALLY_UNPASSABLE */
-					setDungeonSymbol(directionToPoint((unsigned char) action-&gt;getCommand().command[0]), UNKNOWN_TILE_DIAGONALLY_UNPASSABLE);
-					was_move = true;
-					break;
+			case NW:
+			case NE:
+			case SW:
+			case SE:
+				/* moving diagonally failed.
+				 * we could be trying to move diagonally into a door we're
+				 * unaware of because of an item blocking the door symbol.
+				 * make the tile UNKNOWN_TILE_DIAGONALLY_UNPASSABLE */
+				setDungeonSymbol(directionToPoint((unsigned char) action-&gt;getCommand().command[0]), UNKNOWN_TILE_DIAGONALLY_UNPASSABLE);
+				was_move = true;
+				break;
 
-				case N:
-				case E:
-				case S:
-				case W:
-					/* moving cardinally failed, possibly item in wall.
-					 * make the tile UNKNOWN_TILE_UNPASSABLE */
-					setDungeonSymbol(directionToPoint((unsigned char) action-&gt;getCommand().command[0]), UNKNOWN_TILE_UNPASSABLE);
-					was_move = true;
-					break;
+			case N:
+			case E:
+			case S:
+			case W:
+				/* moving cardinally failed, possibly item in wall.
+				 * make the tile UNKNOWN_TILE_UNPASSABLE */
+				setDungeonSymbol(directionToPoint((unsigned char) action-&gt;getCommand().command[0]), UNKNOWN_TILE_UNPASSABLE);
+				was_move = true;
+				break;
 
-				default:
-					/* certainly not moving */
-					break;
+			default:
+				/* certainly not moving */
+				break;
 			}
 			if (!was_move) {
 				/* not good. we're not moving and we're stuck */
@@ -586,62 +590,62 @@ void World::run() {
 /* private methods */
 void World::addChangedLocation(const Point &amp;point) {
 	/* add a location changed since last frame unless it's already added */
-	if (point.row &lt; MAP_ROW_BEGIN || point.row &gt; MAP_ROW_END || point.col &lt; MAP_COL_BEGIN || point.col &gt; MAP_COL_END || changed[point.row][point.col])
+	if (point.row() &lt; MAP_ROW_BEGIN || point.row() &gt; MAP_ROW_END || point.col() &lt; MAP_COL_BEGIN || point.col() &gt; MAP_COL_END || changed[point.row()][point.col()])
 		return;
 	changes.push_back(point);
 }
 
 void World::detectPosition() {
 	string level = levelname;
-	if (Saiph::position.level &lt; 0) {
+	if (Saiph::position.level() &lt; 0) {
 		/* this happens when we start */
-		Saiph::position.row = cursor.row;
-		Saiph::position.col = cursor.col;
-		Saiph::position.level = levels.size();
+		Saiph::position.row(cursor.row());
+		Saiph::position.col(cursor.col());
+		Saiph::position.level(levels.size());
 		branch[BRANCH_MAIN] = Saiph::position;
 		levels.push_back(Level(level));
-		levelmap[level].push_back(Saiph::position.level);
+		levelmap[level].push_back(Saiph::position.level());
 		return;
 	}
-	if ((int) levels.size() &gt; Saiph::position.level &amp;&amp; level == levels[Saiph::position.level].name) {
+	if ((int) levels.size() &gt; Saiph::position.level() &amp;&amp; level == levels[Saiph::position.level()].name) {
 		/* same level as last frame, update row &amp; col */
-		Saiph::position.row = cursor.row;
-		Saiph::position.col = cursor.col;
-		if (branch[BRANCH_SOKOBAN].level == -1 &amp;&amp; levels[Saiph::position.level].branch == BRANCH_MAIN &amp;&amp; levels[Saiph::position.level].depth &gt;= 5 &amp;&amp; levels[Saiph::position.level].depth &lt;= 9) {
+		Saiph::position.row(cursor.row());
+		Saiph::position.col(cursor.col());
+		if (branch[BRANCH_SOKOBAN].level() == -1 &amp;&amp; levels[Saiph::position.level()].branch == BRANCH_MAIN &amp;&amp; levels[Saiph::position.level()].depth &gt;= 5 &amp;&amp; levels[Saiph::position.level()].depth &lt;= 9) {
 			/* look for sokoban level 1a or 1b */
 			if (getDungeonSymbol(Point(8, 37)) == BOULDER &amp;&amp; getDungeonSymbol(Point(8, 38)) == BOULDER &amp;&amp; getDungeonSymbol(Point(8, 43)) == BOULDER &amp;&amp; getDungeonSymbol(Point(9, 38)) == BOULDER &amp;&amp; getDungeonSymbol(Point(9, 39)) == BOULDER &amp;&amp; getDungeonSymbol(Point(9, 42)) == BOULDER &amp;&amp; getDungeonSymbol(Point(9, 44)) == BOULDER &amp;&amp; getDungeonSymbol(Point(11, 41)) == BOULDER &amp;&amp; getDungeonSymbol(Point(14, 39)) == BOULDER &amp;&amp; getDungeonSymbol(Point(14, 40)) == BOULDER &amp;&amp; getDungeonSymbol(Point(14, 41)) == BOULDER &amp;&amp; getDungeonSymbol(Point(14, 42)) == BOULDER) {
 				/* sokoban 1a */
-				Debug::notice() &lt;&lt; SAIPH_DEBUG_NAME &lt;&lt; &quot;Found Sokoban level 1a: &quot; &lt;&lt; Saiph::position.level &lt;&lt; endl;
-				levels[Saiph::position.level].branch = BRANCH_SOKOBAN;
+				Debug::notice() &lt;&lt; SAIPH_DEBUG_NAME &lt;&lt; &quot;Found Sokoban level 1a: &quot; &lt;&lt; Saiph::position &lt;&lt; endl;
+				levels[Saiph::position.level()].branch = BRANCH_SOKOBAN;
 				branch[BRANCH_SOKOBAN] = Saiph::position;
 			} else if (getDungeonSymbol(Point(8, 34)) == BOULDER &amp;&amp; getDungeonSymbol(Point(8, 42)) == BOULDER &amp;&amp; getDungeonSymbol(Point(9, 34)) == BOULDER &amp;&amp; getDungeonSymbol(Point(9, 41)) == BOULDER &amp;&amp; getDungeonSymbol(Point(10, 42)) == BOULDER &amp;&amp; getDungeonSymbol(Point(13, 40)) == BOULDER &amp;&amp; getDungeonSymbol(Point(14, 41)) == BOULDER &amp;&amp; getDungeonSymbol(Point(15, 41)) == BOULDER &amp;&amp; getDungeonSymbol(Point(16, 40)) == BOULDER &amp;&amp; getDungeonSymbol(Point(16, 42)) == BOULDER) {
 				/* sokoban 1b */
-				Debug::notice() &lt;&lt; SAIPH_DEBUG_NAME &lt;&lt; &quot;Found Sokoban level 1b: &quot; &lt;&lt; Saiph::position.level &lt;&lt; endl;
-				levels[Saiph::position.level].branch = BRANCH_SOKOBAN;
+				Debug::notice() &lt;&lt; SAIPH_DEBUG_NAME &lt;&lt; &quot;Found Sokoban level 1b: &quot; &lt;&lt; Saiph::position &lt;&lt; endl;
+				levels[Saiph::position.level()].branch = BRANCH_SOKOBAN;
 				branch[BRANCH_SOKOBAN] = Saiph::position;
 			}
 
 		}
-		if (levels[Saiph::position.level].branch == BRANCH_MAIN &amp;&amp; levels[Saiph::position.level].depth &gt;= 3 &amp;&amp; levels[Saiph::position.level].depth &lt;= 5) {
+		if (levels[Saiph::position.level()].branch == BRANCH_MAIN &amp;&amp; levels[Saiph::position.level()].depth &gt;= 3 &amp;&amp; levels[Saiph::position.level()].depth &lt;= 5) {
 			/* if mines are not found and depth is between 3 &amp; 5, we should attempt to detect mines */
-			for (map&lt;Point, int&gt;::iterator hw = levels[Saiph::position.level].symbols[(unsigned char) HORIZONTAL_WALL].begin(); hw != levels[Saiph::position.level].symbols[(unsigned char) HORIZONTAL_WALL].end(); ++hw) {
-				if (hw-&gt;first.row &lt;= MAP_ROW_BEGIN || hw-&gt;first.row &gt;= MAP_ROW_END || hw-&gt;first.col &lt;= MAP_COL_BEGIN || hw-&gt;first.col &gt;= MAP_COL_END)
+			for (map&lt;Point, int&gt;::iterator hw = levels[Saiph::position.level()].symbols[(unsigned char) HORIZONTAL_WALL].begin(); hw != levels[Saiph::position.level()].symbols[(unsigned char) HORIZONTAL_WALL].end(); ++hw) {
+				if (hw-&gt;first.row() &lt;= MAP_ROW_BEGIN || hw-&gt;first.row() &gt;= MAP_ROW_END || hw-&gt;first.col() &lt;= MAP_COL_BEGIN || hw-&gt;first.col() &gt;= MAP_COL_END)
 					continue;
 				/* if we see horizontal walls adjacent to this point (except west &amp; east),
 				 * then we're in the mines */
-				if (getDungeonSymbol(Point(hw-&gt;first.row - 1, hw-&gt;first.col - 1)) == HORIZONTAL_WALL || getDungeonSymbol(Point(hw-&gt;first.row - 1, hw-&gt;first.col)) == HORIZONTAL_WALL || getDungeonSymbol(Point(hw-&gt;first.row - 1, hw-&gt;first.col + 1)) == HORIZONTAL_WALL || getDungeonSymbol(Point(hw-&gt;first.row + 1, hw-&gt;first.col - 1)) == HORIZONTAL_WALL || getDungeonSymbol(Point(hw-&gt;first.row + 1, hw-&gt;first.col)) == HORIZONTAL_WALL || getDungeonSymbol(Point(hw-&gt;first.row + 1, hw-&gt;first.col + 1)) == HORIZONTAL_WALL) {
+				if (getDungeonSymbol(Point(hw-&gt;first.row() - 1, hw-&gt;first.col() - 1)) == HORIZONTAL_WALL || getDungeonSymbol(Point(hw-&gt;first.row() - 1, hw-&gt;first.col())) == HORIZONTAL_WALL || getDungeonSymbol(Point(hw-&gt;first.row() - 1, hw-&gt;first.col() + 1)) == HORIZONTAL_WALL || getDungeonSymbol(Point(hw-&gt;first.row() + 1, hw-&gt;first.col() - 1)) == HORIZONTAL_WALL || getDungeonSymbol(Point(hw-&gt;first.row() + 1, hw-&gt;first.col())) == HORIZONTAL_WALL || getDungeonSymbol(Point(hw-&gt;first.row() + 1, hw-&gt;first.col() + 1)) == HORIZONTAL_WALL) {
 					/* we're in the mines */
-					Debug::notice() &lt;&lt; SAIPH_DEBUG_NAME &lt;&lt; &quot;Found the mines: &quot; &lt;&lt; Saiph::position.level &lt;&lt; endl;
-					levels[Saiph::position.level].branch = BRANCH_MINES;
+					Debug::notice() &lt;&lt; SAIPH_DEBUG_NAME &lt;&lt; &quot;Found the mines: &quot; &lt;&lt; Saiph::position &lt;&lt; endl;
+					levels[Saiph::position.level()].branch = BRANCH_MINES;
 					branch[BRANCH_MINES] = Saiph::position;
 					break;
 				}
 			}
 		}
-		if (levels[Saiph::position.level].branch != BRANCH_ROGUE &amp;&amp; view[STATUS_ROW][8] == '*') {
+		if (levels[Saiph::position.level()].branch != BRANCH_ROGUE &amp;&amp; view[STATUS_ROW][8] == '*') {
 			/* rogue level, set branch attribute */
-			Debug::notice() &lt;&lt; SAIPH_DEBUG_NAME &lt;&lt; &quot;Found the rogue level: &quot; &lt;&lt; Saiph::position.level &lt;&lt; endl;
-			levels[Saiph::position.level].branch = BRANCH_ROGUE;
+			Debug::notice() &lt;&lt; SAIPH_DEBUG_NAME &lt;&lt; &quot;Found the rogue level: &quot; &lt;&lt; Saiph::position &lt;&lt; endl;
+			levels[Saiph::position.level()].branch = BRANCH_ROGUE;
 		}
 		return;
 	}
@@ -653,15 +657,15 @@ void World::detectPosition() {
 	if (symbol == STAIRS_DOWN) {
 		/* we did stand on stairs down, and if we don't know where they lead then
 		 * the next line will still just set found to UNKNOWN_SYMBOL_VALUE */
-		found = levels[Saiph::position.level].symbols[(unsigned char) STAIRS_DOWN][Saiph::position];
+		found = levels[Saiph::position.level()].symbols[(unsigned char) STAIRS_DOWN][Saiph::position];
 	} else if (symbol == STAIRS_UP) {
 		/* we did stand on stairs up, and if we don't know where they lead then
 		 * the next line will still just set found to UNKNOWN_SYMBOL_VALUE */
-		found = levels[Saiph::position.level].symbols[(unsigned char) STAIRS_UP][Saiph::position];
+		found = levels[Saiph::position.level()].symbols[(unsigned char) STAIRS_UP][Saiph::position];
 	} else if (symbol == MAGIC_PORTAL) {
 		/* we did stand on a magic portal, and if we don't know where it leads then
 		 * the next line will still just set found to UNKNOWN_SYMBOL_VALUE */
-		found = levels[Saiph::position.level].symbols[(unsigned char) MAGIC_PORTAL][Saiph::position];
+		found = levels[Saiph::position.level()].symbols[(unsigned char) MAGIC_PORTAL][Saiph::position];
 	}
 	if (found == UNKNOWN_SYMBOL_VALUE) {
 		/* we didn't know where the stairs would take us */
@@ -671,12 +675,12 @@ void World::detectPosition() {
 			int total = 0;
 			int matched = 0;
 			for (map&lt;Point, int&gt;::iterator s = levels[*lm].symbols[(unsigned char) VERTICAL_WALL].begin(); s != levels[*lm].symbols[(unsigned char) VERTICAL_WALL].end(); ++s) {
-				if (view[s-&gt;first.row][s-&gt;first.col] == VERTICAL_WALL)
+				if (view[s-&gt;first.row()][s-&gt;first.col()] == VERTICAL_WALL)
 					++matched;
 				++total;
 			}
 			for (map&lt;Point, int&gt;::iterator s = levels[*lm].symbols[(unsigned char) HORIZONTAL_WALL].begin(); s != levels[*lm].symbols[(unsigned char) HORIZONTAL_WALL].end(); ++s) {
-				if (view[s-&gt;first.row][s-&gt;first.col] == HORIZONTAL_WALL)
+				if (view[s-&gt;first.row()][s-&gt;first.col()] == HORIZONTAL_WALL)
 					++matched;
 				++total;
 			}
@@ -693,24 +697,24 @@ void World::detectPosition() {
 		/* when we discover a new level it's highly likely it's in the
 		 * same branch as the previous level.
 		 * exception is rogue level, which really isn't a branch */
-		levels.push_back(Level(level, (levels[Saiph::position.level].branch != BRANCH_ROGUE) ? levels[Saiph::position.level].branch : BRANCH_MAIN));
+		levels.push_back(Level(level, (levels[Saiph::position.level()].branch != BRANCH_ROGUE) ? levels[Saiph::position.level()].branch : BRANCH_MAIN));
 		levelmap[level].push_back(found);
 		Debug::notice() &lt;&lt; SAIPH_DEBUG_NAME &lt;&lt; &quot;Found new level &quot; &lt;&lt; found &lt;&lt; &quot;: &quot; &lt;&lt; level &lt;&lt; endl;
 	}
 	/* were we on stairs on last Saiph::position? */
 	if (symbol == STAIRS_DOWN) {
 		/* yes, we were on stairs down */
-		levels[Saiph::position.level].symbols[(unsigned char) STAIRS_DOWN][Saiph::position] = found;
+		levels[Saiph::position.level()].symbols[(unsigned char) STAIRS_DOWN][Saiph::position] = found;
 	} else if (symbol == STAIRS_UP) {
 		/* yes, we were on stairs up */
-		levels[Saiph::position.level].symbols[(unsigned char) STAIRS_UP][Saiph::position] = found;
+		levels[Saiph::position.level()].symbols[(unsigned char) STAIRS_UP][Saiph::position] = found;
 	} else if (symbol == MAGIC_PORTAL) {
 		/* yes, we were on a magic portal */
-		levels[Saiph::position.level].symbols[(unsigned char) MAGIC_PORTAL][Saiph::position] = found;
+		levels[Saiph::position.level()].symbols[(unsigned char) MAGIC_PORTAL][Saiph::position] = found;
 	}
-	Saiph::position.row = cursor.row;
-	Saiph::position.col = cursor.col;
-	Saiph::position.level = found;
+	Saiph::position.row(cursor.row());
+	Saiph::position.col(cursor.col());
+	Saiph::position.level(found);
 }
 
 Point World::directionToPoint(unsigned char direction) {
@@ -718,39 +722,35 @@ Point World::directionToPoint(unsigned char direction) {
 	Point pos = Saiph::position;
 	switch (direction) {
 	case NW:
-		--pos.row;
-		--pos.col;
+		pos.moveNorthwest();
 		break;
 
 	case N:
-		--pos.row;
+		pos.moveNorth();
 		break;
 
 	case NE:
-		--pos.row;
-		++pos.col;
+		pos.moveNortheast();
 		break;
 
 	case E:
-		++pos.col;
+		pos.moveEast();
 		break;
 
 	case SE:
-		++pos.row;
-		++pos.col;
+		pos.moveSoutheast();
 		break;
 
 	case S:
-		++pos.row;
+		pos.moveSouth();
 		break;
 
 	case SW:
-		++pos.row;
-		--pos.col;
+		pos.moveSouthwest();
 		break;
 
 	case W:
-		--pos.col;
+		pos.moveWest();
 		break;
 	}
 	return pos;
@@ -762,7 +762,7 @@ bool World::directLineHelper(const Point &amp;point, bool ignore_sinks, bool ignore_
 		return false;
 	else if (!ignore_sinks &amp;&amp; symbol == SINK)
 		return false;
-	else if (getMonsterSymbol(point) != ILLEGAL_MONSTER &amp;&amp; levels[Saiph::position.level].monsters[point].visible)
+	else if (getMonsterSymbol(point) != ILLEGAL_MONSTER &amp;&amp; levels[Saiph::position.level()].monsters[point].visible)
 		return false;
 	return true;
 }
@@ -784,11 +784,11 @@ void World::dumpMaps() {
 
 	/* monsters and map as saiph sees it */
 	Point p;
-	for (p.row = MAP_ROW_BEGIN; p.row &lt;= MAP_ROW_END; ++p.row) {
-		cout &lt;&lt; (unsigned char) 27 &lt;&lt; &quot;[&quot; &lt;&lt; p.row + 26 &lt;&lt; &quot;;2H&quot;;
-		for (p.col = MAP_COL_BEGIN; p.col &lt;= MAP_COL_END; ++p.col) {
+	for (p.row(MAP_ROW_BEGIN); p.insideMap(); p.moveSouth()) {
+		cout &lt;&lt; (unsigned char) 27 &lt;&lt; &quot;[&quot; &lt;&lt; p.row() + 26 &lt;&lt; &quot;;2H&quot;;
+		for (p.col(MAP_COL_BEGIN); p.insideMap(); p.moveEast()) {
 			unsigned char monster = getMonsterSymbol(p);
-			if (p.row == Saiph::position.row &amp;&amp; p.col == Saiph::position.col)
+			if (p.row() == Saiph::position.row() &amp;&amp; p.col() == Saiph::position.col())
 				cout &lt;&lt; (unsigned char) 27 &lt;&lt; &quot;[35m@&quot; &lt;&lt; (unsigned char) 27 &lt;&lt; &quot;[m&quot;;
 			else if (monster != ILLEGAL_MONSTER)
 				cout &lt;&lt; monster;
@@ -811,7 +811,7 @@ void World::dumpMaps() {
 				cout &lt;&lt; getDungeonSymbol(p);
 		}
 	}
-	*/
+	 */
 
 	/* status &amp; inventory */
 	cout &lt;&lt; (unsigned char) 27 &lt;&lt; &quot;[2;82H&quot;;
@@ -866,7 +866,7 @@ void World::dumpMaps() {
 bool World::executeCommand(const string &amp;command) {
 	/* send a command to nethack */
 	for (vector&lt;Point&gt;::iterator c = changes.begin(); c != changes.end(); ++c)
-		changed[c-&gt;row][c-&gt;col] = false;
+		changed[c-&gt;row()][c-&gt;col()] = false;
 	changes.clear();
 	messages = &quot;  &quot;; // we want 2 spaces before the first message too
 	if (command.size() &lt;= 0) {
@@ -903,8 +903,8 @@ void World::fetchMessages() {
 	if ((pos = msg_str.find(MORE, 0)) != string::npos) {
 		/* &quot;--More--&quot; found */
 		menu = false; // we don't have a menu then
-		int r = cursor.row;
-		int c = cursor.col - sizeof (MORE) + 1; // +1 because sizeof (MORE) is 9, not 8
+		int r = cursor.row();
+		int c = cursor.col() - sizeof (MORE) + 1; // +1 because sizeof (MORE) is 9, not 8
 		if (r == 0) {
 			/* only one line, remove &quot;--More--&quot; from end of line */
 			msg_str = view[r];
@@ -936,7 +936,7 @@ void World::fetchMessages() {
 		++command_count;
 		update();
 		return;
-	} else if (cursor.row == 0) {
+	} else if (cursor.row() == 0) {
 		/* looks like we got a question.
 		 * we might want to significantly improve this later,
 		 * as we sometimes get partial data */
@@ -947,14 +947,14 @@ void World::fetchMessages() {
 		 * this is pain */
 		if (menu) {
 			/* we had a menu last frame, check if we still do */
-			msg_str = &amp;view[last_menu.row][last_menu.col];
+			msg_str = &amp;view[last_menu.row()][last_menu.col()];
 			cur_page = -1;
 			max_page = -1;
-			if (msg_str.find(END, 0) == string::npos &amp;&amp; sscanf(&amp;view[last_menu.row][last_menu.col], PAGE, &amp;cur_page, &amp;max_page) != 2) {
+			if (msg_str.find(END, 0) == string::npos &amp;&amp; sscanf(&amp;view[last_menu.row()][last_menu.col()], PAGE, &amp;cur_page, &amp;max_page) != 2) {
 				/* nah, last menu is gone */
 				menu = false;
-				last_menu.row = -1;
-				last_menu.col = -1;
+				last_menu.row(-1);
+				last_menu.col(-1);
 			} else {
 				/* still got a menu */
 				if (cur_page == -1) {
@@ -978,16 +978,16 @@ void World::fetchMessages() {
 					max_page = 1;
 				}
 				int c;
-				for (c = cursor.col; c &gt;= 0 &amp;&amp; view[cursor.row][c] != '('; --c)
+				for (c = cursor.col(); c &gt;= 0 &amp;&amp; view[cursor.row()][c] != '('; --c)
 					;
 				menu = true;
-				last_menu.row = cursor.row;
-				last_menu.col = c;
+				last_menu.row(cursor.row());
+				last_menu.col(c);
 			}
 		}
 		if (menu) {
 			/* finally parse the menu */
-			fetchMenuText(last_menu.row - 1, last_menu.col, true); // &quot;r - 1&quot; to avoid the last &quot;(end) &quot; or &quot;(x of y)&quot;
+			fetchMenuText(last_menu.row() - 1, last_menu.col(), true); // &quot;r - 1&quot; to avoid the last &quot;(end) &quot; or &quot;(x of y)&quot;
 		}
 	}
 	if (!menu) {
@@ -1019,50 +1019,51 @@ void World::handleEscapeSequence(int *pos, int *color) {
 				divider = *pos;
 			} else if (data[*pos] == 'A') {
 				/* move cursor up */
-				if (cursor.row &gt; 0)
-					--cursor.row;
+				if (cursor.row() &gt; 0)
+					cursor.moveNorth();
 				break;
 			} else if (data[*pos] == 'B') {
 				/* move cursor down */
-				if (cursor.row &lt; ROWS)
-					++cursor.row;
+				if (cursor.row() &lt; ROWS)
+					cursor.moveSouth();
 				break;
 			} else if (data[*pos] == 'C') {
 				/* move cursor right */
-				if (cursor.col &lt; COLS)
-					++cursor.col;
+				if (cursor.col() &lt; COLS)
+					cursor.moveEast();
 				break;
 			} else if (data[*pos] == 'D') {
 				/* move cursor left */
-				if (cursor.col &gt; 0)
-					--cursor.col;
+				if (cursor.col() &gt; 0)
+					cursor.moveWest();
 				break;
 			} else if (data[*pos] == 'H') {
 				/* set cursor position */
-				cursor.row = 0;
-				cursor.col = 0;
+				cursor.row(0);
+				cursor.col(0);
 				if (divider &lt; 0)
 					break;
 				/* we got a position */
-				int matched = sscanf(&amp;data[start + 1], &quot;%d;%d&quot;, &amp;cursor.row, &amp;cursor.col);
-				--cursor.row; // terminal starts counting from 1
-				--cursor.col; // ditto ^^
-				if (matched &lt; 2) {
+				int tmprow = cursor.row();
+				int tmpcol = cursor.col();
+				if (sscanf(&amp;data[start + 1], &quot;%d;%d&quot;, &amp;tmprow, &amp;tmpcol) &lt; 2) {
 					Debug::error() &lt;&lt; WORLD_DEBUG_NAME &lt;&lt; &quot;Unable to place cursor: &quot; &lt;&lt; &amp;data[start] &lt;&lt; endl;
 					exit(13);
 				}
+				cursor.row(--tmprow); // terminal starts counting from 1
+				cursor.col(--tmpcol); // ditto ^^
 				break;
 			} else if (data[*pos] == 'J') {
 				/* erase in display */
 				if (data[*pos - 1] == '[') {
 					/* erase everything below current position */
-					for (int r = cursor.row + 1; r &lt; ROWS; ++r) {
+					for (int r = cursor.row() + 1; r &lt; ROWS; ++r) {
 						for (int c = 0; c &lt; COLS; ++c)
 							view[r][c] = ' ';
 					}
 				} else if (data[*pos - 1] == '1') {
 					/* erase everything above current position */
-					for (int r = cursor.row - 1; r &gt;= 0; --r) {
+					for (int r = cursor.row() - 1; r &gt;= 0; --r) {
 						for (int c = 0; c &lt; COLS; ++c)
 							view[r][c] = ' ';
 					}
@@ -1071,8 +1072,8 @@ void World::handleEscapeSequence(int *pos, int *color) {
 					memset(view, ' ', sizeof (view));
 					for (int r = 0; r &lt; ROWS; ++r)
 						view[r][COLS] = '\0';
-					cursor.row = 0;
-					cursor.col = 0;
+					cursor.row(0);
+					cursor.col(0);
 					*color = 0;
 				} else {
 					Debug::error() &lt;&lt; WORLD_DEBUG_NAME &lt;&lt; &quot;Unhandled sequence: &quot; &lt;&lt; &amp;data[*pos] &lt;&lt; endl;
@@ -1083,16 +1084,16 @@ void World::handleEscapeSequence(int *pos, int *color) {
 				/* erase in line */
 				if (data[*pos - 1] == '[') {
 					/* erase everything to the right */
-					for (int c = cursor.col; c &lt; COLS; ++c)
-						view[cursor.row][c] = ' ';
+					for (int c = cursor.col(); c &lt; COLS; ++c)
+						view[cursor.row()][c] = ' ';
 				} else if (data[*pos - 1] == '1') {
 					/* erase everything to the left */
-					for (int c = 0; c &lt; cursor.col; ++c)
-						view[cursor.row][c] = ' ';
+					for (int c = 0; c &lt; cursor.col(); ++c)
+						view[cursor.row()][c] = ' ';
 				} else if (data[*pos - 1] == '2') {
 					/* erase entire line */
 					for (int c = 0; c &lt; COLS; ++c)
-						view[cursor.row][c] = ' ';
+						view[cursor.row()][c] = ' ';
 				} else {
 					Debug::error() &lt;&lt; WORLD_DEBUG_NAME &lt;&lt; &quot;Unhandled sequence: &quot; &lt;&lt; &amp;data[*pos] &lt;&lt; endl;
 					exit(9);
@@ -1122,25 +1123,25 @@ void World::handleEscapeSequence(int *pos, int *color) {
 					exit(14);
 				}
 				switch (value) {
-					case NO_COLOR:
-						bold = false;
-						inverse = false;
-						break;
-
-					case BOLD:
-						bold = true;
-						break;
-
-					case INVERSE:
-						inverse = true;
-						break;
-
-					default:
-						if (bold)
-							value += BOLD_OFFSET;
-						if (inverse)
-							value += INVERSE_OFFSET;
-						*color = value;
+				case NO_COLOR:
+					bold = false;
+					inverse = false;
+					break;
+
+				case BOLD:
+					bold = true;
+					break;
+
+				case INVERSE:
+					inverse = true;
+					break;
+
+				default:
+					if (bold)
+						value += BOLD_OFFSET;
+					if (inverse)
+						value += INVERSE_OFFSET;
+					*color = value;
 				}
 				break;
 			} else if (data[*pos] == 'r') {
@@ -1174,8 +1175,8 @@ void World::handleEscapeSequence(int *pos, int *color) {
 		++*pos;
 	} else if (data[*pos] == 'M') {
 		/* reverse linefeed? */
-		if (cursor.row &gt; 0)
-			--cursor.row;
+		if (cursor.row() &gt; 0)
+			cursor.moveNorth();
 	} else if (data[*pos] == '=') {
 		/* application numpad?
 		 * ignore */
@@ -1281,54 +1282,54 @@ void World::update() {
 	Debug::rawCharArray(data, 0, data_size);
 	for (int pos = 0; pos &lt; data_size; ++pos) {
 		switch (data[pos]) {
-			case 0:
-				/* sometimes we get lots of \0 characters.
-				 * seemingly this happens when certain effects happen.
-				 * for example, gas spore explotion, dagger thrown, etc.
-				 * let's simply ignore these */
-				break;
-			case 8:
-				/* backspace.
-				 * make it go 1 char left */
-				if (cursor.col &gt; 0)
-					--cursor.col;
-				break;
-
-			case 10:
-				/* line feed */
-				++cursor.row;
-				break;
-
-			case 13:
-				/* carriage return */
-				cursor.col = 0;
-				break;
-
-			case 14:
-				/* shift out, invoke G1 character set */
-				break;
-
-			case 15:
-				/* shift in, invoke G0 character set */
-				break;
-
-			case 27:
-				/* escape sequence coming up */
-				++pos;
-				handleEscapeSequence(&amp;pos, &amp;charcolor);
-				break;
-
-			default:
-				/* add this char to the view */
-				if (cursor.col &gt;= COLS || cursor.row &gt;= ROWS || cursor.col &lt; 0 || cursor.row &lt; 0) {
-					Debug::warning() &lt;&lt; WORLD_DEBUG_NAME &lt;&lt; &quot;Fell out of the dungeon: &quot; &lt;&lt; cursor.row &lt;&lt; &quot;, &quot; &lt;&lt; cursor.col &lt;&lt; endl;
-					break;
-				}
-				view[cursor.row][cursor.col] = (unsigned char) data[pos];
-				color[cursor.row][cursor.col] = charcolor;
-				addChangedLocation(cursor);
-				cursor.col++;
+		case 0:
+			/* sometimes we get lots of \0 characters.
+			 * seemingly this happens when certain effects happen.
+			 * for example, gas spore explotion, dagger thrown, etc.
+			 * let's simply ignore these */
+			break;
+		case 8:
+			/* backspace.
+			 * make it go 1 char left */
+			if (cursor.col() &gt; 0)
+				cursor.moveWest();
+			break;
+
+		case 10:
+			/* line feed */
+			cursor.moveSouth();
+			break;
+
+		case 13:
+			/* carriage return */
+			cursor.col(0);
+			break;
+
+		case 14:
+			/* shift out, invoke G1 character set */
+			break;
+
+		case 15:
+			/* shift in, invoke G0 character set */
+			break;
+
+		case 27:
+			/* escape sequence coming up */
+			++pos;
+			handleEscapeSequence(&amp;pos, &amp;charcolor);
+			break;
+
+		default:
+			/* add this char to the view */
+			if (cursor.col() &gt;= COLS || cursor.row() &gt;= ROWS || cursor.col() &lt; 0 || cursor.row() &lt; 0) {
+				Debug::warning() &lt;&lt; WORLD_DEBUG_NAME &lt;&lt; &quot;Fell out of the dungeon: &quot; &lt;&lt; cursor.row() &lt;&lt; &quot;, &quot; &lt;&lt; cursor.col() &lt;&lt; endl;
 				break;
+			}
+			view[cursor.row()][cursor.col()] = (unsigned char) data[pos];
+			color[cursor.row()][cursor.col()] = charcolor;
+			addChangedLocation(cursor);
+			cursor.moveEast();
+			break;
 		}
 	}
 
@@ -1338,11 +1339,11 @@ void World::update() {
 	bool parsed_attributes = parseAttributeRow(view[ATTRIBUTES_ROW]);
 	bool parsed_status = parseStatusRow(view[STATUS_ROW]);
 	/* check that the data we received seems ok */
-	if (!menu &amp;&amp; !question &amp;&amp; (!parsed_attributes || !parsed_status || cursor.row &lt; MAP_ROW_BEGIN || cursor.row &gt; MAP_ROW_END || cursor.col &lt; MAP_COL_BEGIN || cursor.col &gt; MAP_COL_END)) {
+	if (!menu &amp;&amp; !question &amp;&amp; (!parsed_attributes || !parsed_status || cursor.row() &lt; MAP_ROW_BEGIN || cursor.row() &gt; MAP_ROW_END || cursor.col() &lt; MAP_COL_BEGIN || cursor.col() &gt; MAP_COL_END)) {
 		/* hmm, what else can it be?
 		 * could we be missing data?
 		 * this is bad, we'll lose messages, this should never happen */
-		Debug::warning() &lt;&lt; WORLD_DEBUG_NAME &lt;&lt; &quot;CURSOR ON UNEXPECTED LOCATION: &quot; &lt;&lt; cursor.row &lt;&lt; &quot;, &quot; &lt;&lt; cursor.col &lt;&lt; endl;
+		Debug::warning() &lt;&lt; WORLD_DEBUG_NAME &lt;&lt; &quot;CURSOR ON UNEXPECTED LOCATION: &quot; &lt;&lt; cursor.row() &lt;&lt; &quot;, &quot; &lt;&lt; cursor.col() &lt;&lt; endl;
 		update();
 		return;
 	}
@@ -1359,7 +1360,7 @@ void World::update() {
 	}
 
 	/* check if we're engulfed */
-	if (cursor.row &gt; MAP_ROW_BEGIN &amp;&amp; cursor.row &lt; MAP_ROW_END &amp;&amp; cursor.col &gt; MAP_COL_BEGIN &amp;&amp; cursor.col &lt; MAP_COL_END &amp;&amp; view[cursor.row - 1][cursor.col - 1] == '/' &amp;&amp; view[cursor.row - 1][cursor.col + 1] == '\\' &amp;&amp; view[cursor.row + 1][cursor.col - 1] == '\\' &amp;&amp; view[cursor.row + 1][cursor.col + 1] == '/')
+	if (cursor.row() &gt; MAP_ROW_BEGIN &amp;&amp; cursor.row() &lt; MAP_ROW_END &amp;&amp; cursor.col() &gt; MAP_COL_BEGIN &amp;&amp; cursor.col() &lt; MAP_COL_END &amp;&amp; view[cursor.row() - 1][cursor.col() - 1] == '/' &amp;&amp; view[cursor.row() - 1][cursor.col() + 1] == '\\' &amp;&amp; view[cursor.row() + 1][cursor.col() - 1] == '\\' &amp;&amp; view[cursor.row() + 1][cursor.col() + 1] == '/')
 		engulfed = true;
 	else
 		engulfed = false;</diff>
      <filename>World.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -115,35 +115,35 @@ inline int World::getLastActionID() {
 
 inline unsigned char World::getDungeonSymbol() {
 	/* return dungeon symbol at player position */
-	return World::levels[Saiph::position.level].getDungeonSymbol(Saiph::position);
+	return World::levels[Saiph::position.level()].getDungeonSymbol(Saiph::position);
 }
 
 inline unsigned char World::getDungeonSymbol(const Coordinate &amp;coordinate) {
 	/* return dungeon symbol at given coordinate */
-	if (coordinate.level &lt; 0 || coordinate.level &gt; (int) World::levels.size())
+	if (coordinate.level() &lt; 0 || coordinate.level() &gt; (int) World::levels.size())
 		return OUTSIDE_MAP;
-	return World::levels[coordinate.level].getDungeonSymbol(coordinate);
+	return World::levels[coordinate.level()].getDungeonSymbol(coordinate);
 }
 
 inline unsigned char World::getDungeonSymbol(const Point &amp;point) {
 	/* return dungeon symbol at given point on current level */
-	return World::levels[Saiph::position.level].getDungeonSymbol(point);
+	return World::levels[Saiph::position.level()].getDungeonSymbol(point);
 }
 
 inline unsigned char World::getDungeonSymbol(unsigned char direction) {
 	/* return dungeon symbol in given direction on current level */
 	switch (direction) {
 	case NW:
-		return getDungeonSymbol(Point(Saiph::position.row - 1, Saiph::position.col - 1));
+		return getDungeonSymbol(Point(Saiph::position.row() - 1, Saiph::position.col() - 1));
 
 	case N:
-		return getDungeonSymbol(Point(Saiph::position.row - 1, Saiph::position.col));
+		return getDungeonSymbol(Point(Saiph::position.row() - 1, Saiph::position.col()));
 
 	case NE:
-		return getDungeonSymbol(Point(Saiph::position.row - 1, Saiph::position.col + 1));
+		return getDungeonSymbol(Point(Saiph::position.row() - 1, Saiph::position.col() + 1));
 
 	case W:
-		return getDungeonSymbol(Point(Saiph::position.row, Saiph::position.col - 1));
+		return getDungeonSymbol(Point(Saiph::position.row(), Saiph::position.col() - 1));
 
 	case NOWHERE:
 	case DOWN:
@@ -151,16 +151,16 @@ inline unsigned char World::getDungeonSymbol(unsigned char direction) {
 		return getDungeonSymbol();
 
 	case E:
-		return getDungeonSymbol(Point(Saiph::position.row, Saiph::position.col + 1));
+		return getDungeonSymbol(Point(Saiph::position.row(), Saiph::position.col() + 1));
 
 	case SW:
-		return getDungeonSymbol(Point(Saiph::position.row + 1, Saiph::position.col - 1));
+		return getDungeonSymbol(Point(Saiph::position.row() + 1, Saiph::position.col() - 1));
 
 	case S:
-		return getDungeonSymbol(Point(Saiph::position.row + 1, Saiph::position.col));
+		return getDungeonSymbol(Point(Saiph::position.row() + 1, Saiph::position.col()));
 
 	case SE:
-		return getDungeonSymbol(Point(Saiph::position.row + 1, Saiph::position.col + 1));
+		return getDungeonSymbol(Point(Saiph::position.row() + 1, Saiph::position.col() + 1));
 
 	default:
 		return OUTSIDE_MAP;
@@ -169,42 +169,42 @@ inline unsigned char World::getDungeonSymbol(unsigned char direction) {
 
 inline unsigned char World::getMonsterSymbol(const Coordinate &amp;coordinate) {
 	/* return monster symbol at given point on current level */
-	if (coordinate.level &lt; 0 || coordinate.level &gt; (int) World::levels.size())
+	if (coordinate.level() &lt; 0 || coordinate.level() &gt; (int) World::levels.size())
 		return ILLEGAL_MONSTER;
-	return World::levels[coordinate.level].getMonsterSymbol(coordinate);
+	return World::levels[coordinate.level()].getMonsterSymbol(coordinate);
 }
 
 inline unsigned char World::getMonsterSymbol(const Point &amp;point) {
 	/* return monster symbol at given point on current level */
-	return World::levels[Saiph::position.level].getMonsterSymbol(point);
+	return World::levels[Saiph::position.level()].getMonsterSymbol(point);
 }
 
 inline void World::setDirtyStash() {
 	/* set stash at player position dirty */
-	std::map&lt;Point, Stash&gt;::iterator s = World::levels[Saiph::position.level].stashes.find(Saiph::position);
-	if (s != World::levels[Saiph::position.level].stashes.end())
+	std::map&lt;Point, Stash&gt;::iterator s = World::levels[Saiph::position.level()].stashes.find(Saiph::position);
+	if (s != World::levels[Saiph::position.level()].stashes.end())
 		s-&gt;second.items.clear();
 }
 
 inline void World::setDungeonSymbol(unsigned char symbol) {
 	/* set dungeon symbol at player position */
-	World::levels[Saiph::position.level].setDungeonSymbol(Saiph::position, symbol);
+	World::levels[Saiph::position.level()].setDungeonSymbol(Saiph::position, symbol);
 }
 
 inline void World::setDungeonSymbol(const Coordinate &amp;coordinate, unsigned char symbol) {
 	/* set dungeon symbol at given coordinate */
-	if (coordinate.level &lt; 0 || coordinate.level &gt; (int) World::levels.size())
+	if (coordinate.level() &lt; 0 || coordinate.level() &gt; (int) World::levels.size())
 		return;
-	World::levels[coordinate.level].setDungeonSymbol(coordinate, symbol);
+	World::levels[coordinate.level()].setDungeonSymbol(coordinate, symbol);
 }
 
 inline void World::setDungeonSymbol(const Point &amp;point, unsigned char symbol) {
 	/* set dungeon symbol at given point on current level */
-	World::levels[Saiph::position.level].setDungeonSymbol(point, symbol);
+	World::levels[Saiph::position.level()].setDungeonSymbol(point, symbol);
 }
 
 inline const PathNode &amp;World::shortestPath(const Point &amp;point) {
 	/* returns PathNode for shortest path from player to target */
-	return World::levels[Saiph::position.level].shortestPath(point);
+	return World::levels[Saiph::position.level()].shortestPath(point);
 }
 #endif</diff>
      <filename>World.h</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>7c29cb148d907065d869ff9c5a354a52639c0a57</id>
    </parent>
  </parents>
  <author>
    <name>Vidar Wahlberg</name>
    <email>canidae@exent.net</email>
  </author>
  <url>http://github.com/canidae/saiph/commit/7b1ad028ec86c37aaf161ed4217e22fa22e8165b</url>
  <id>7b1ad028ec86c37aaf161ed4217e22fa22e8165b</id>
  <committed-date>2009-10-17T04:10:46-07:00</committed-date>
  <authored-date>2009-10-17T04:10:46-07:00</authored-date>
  <message>trying netbeans for this project

changes:
- Point and Coordinate now got a small bunch of methods for changing
  row, col and level instead of directly modifying the variable (ie.
  &quot;getters&quot; and &quot;setters&quot;, although methods are named &quot;row()&quot; rather
  than &quot;getRow()&quot; and that crap).
- files are indented using netbeans, unfortunately there are some bugs
  in the formatter so we end up with &quot;Point * const foo&quot; instead of
  &quot;Point *const foo&quot;. oh well.
- added project files for netbeans, may need to clean up this a bit.</message>
  <tree>838e9e5799c520f442fcceb4881f2606ac431b4a</tree>
  <committer>
    <name>Vidar Wahlberg</name>
    <email>canidae@exent.net</email>
  </committer>
</commit>
