--- ds3.1a10-stock/lib/verbs/players/cast.c	2009-12-30 08:55:05.000000000 -0600
+++ ds3.1a10/lib/verbs/players/cast.c	2010-12-17 20:19:07.000000000 -0600
@@ -14,16 +14,31 @@
     verb::create();
     SetVerb("cast");
     SetRules("STR", "STR on OBJ", "STR on STR", "STR on STR of OBJ",
-            "STR against STR");
+	     "STR against STR", "");
     SetErrorMessage("Cast what spell? On whom?");
     SetHelp("Syntax: cast <SPELL>\n"
+	    "        cast\n"
             "        cast <SPELL> on <LIMB>\n"
             "        cast <SPELL> against <STRING>\n"
             "        cast <SPELL> on <TARGET>\n"
             "        cast <SPELL> on <LIMB> of <TARGET>\n\n"
             "Allows you to cast any spell using whatever syntax the "
-            "spell in question requires.  To heal someone, for example, "
-            "\"cast heal on descartes\".");
+            "spell in question requires. If the syntax you use does not "
+            "require a spell, the spell you have readied (see \"Help ready\") "
+	    "is used. To heal someone, for example, \"cast heal on descartes\".");
+}
+
+int has_readied_spell()
+{
+  if (!(this_player()->GetProperty("readied spell") == 0))
+    return 1;
+  return 0;
+}
+
+string readied_spell()
+{
+  /*Please have called has_readied_spell first*/
+  return this_player()->GetProperty("readied spell");
 }
 
 mixed can_cast_str(string spell) {
@@ -55,6 +70,10 @@
     return can_cast_str(spell);
 }
 
+mixed can_cast(string spell) {
+  return has_readied_spell() && can_cast_str(readied_spell());
+}
+
 mixed do_cast_str(string spell) {
     return this_player()->eventPrepareCast(spell);
 }
@@ -74,3 +93,8 @@
 mixed do_cast_str_on_str_of_obj(string spell, string limb, object target) {
     return this_player()->eventPrepareCast(spell, limb, target);
 }
+
+mixed do_cast() {
+    return this_player()->eventPrepareCast(readied_spell());
+}
+