--- orig/rpggame/rpgobj.h
+++ mod/rpggame/rpgobj.h
@@ -124,9 +124,20 @@
 
     rpgobj &selectedweapon()
     {
-        if(selected) return *selected;
-        else { loopinventorytype(IF_INVENTORY) if(o->s_usetype && o->s_damage) return *o; };
-        return *this;
+        rpgobj *bestObj = this;
+        int bestDamage = s_damage;
+
+        if (selected) return *selected;
+
+        loopinventorytype(IF_INVENTORY)
+        {
+            if (o->s_usetype && (o->s_damage > bestDamage) && ((o->s_usetype != 3) || (o->s_manacost<=s_mana)))
+            {
+                bestDamage = o->s_damage;
+                bestObj = o;
+            }
+        }
+        return *bestObj;
     }
 
     void placeinworld(rpgent *_ent)
