--- orig/rpggame/rpgobjset.h
+++ mod/rpggame/rpgobjset.h
@@ -7,6 +7,14 @@
 #define RPGSTACKSIZE 10
 struct rpgobjset
 {
+
+    struct rsleepcmd
+    {
+        int millis;
+        char *command;
+        vector<rpgobj *> stack;
+    };
+
     rpgclient &cl;
 
     vector<rpgobj *> set, stack;
@@ -17,6 +25,7 @@
     rpgobj *selected;
 
     vector<rpgaigroup> aigroups;
+    vector<rsleepcmd> rsleepcmds;
 
     rpgquest *quests;
     rpgquest *currentquest;
@@ -62,6 +71,7 @@
         CCOMMAND(r_x,           "f",   (rpgobjset *self, float *val), { if (self->stack[0]->ent) self->stack[0]->ent->o.x = *val; });
         CCOMMAND(r_y,           "f",   (rpgobjset *self, float *val), { if (self->stack[0]->ent) self->stack[0]->ent->o.y = *val; });
         CCOMMAND(r_z,           "f",   (rpgobjset *self, float *val), { if (self->stack[0]->ent) self->stack[0]->ent->o.z = *val; });
+        CCOMMAND(r_sleep,       "is",  (rpgobjset *self, int *msec, char *cmd), { self->r_sleep(*msec, cmd); });
         clearworld();
     }
 
@@ -111,6 +121,7 @@
     {
         extern vec worldpos;
         pointingat = NULL;
+        checksleep();
         loopv(set)
         {
             set[i]->update(curtime);
@@ -240,6 +251,33 @@
         return (aigroups[owngroup].friends & (1 << friendgroup));
     }
 
+    void r_sleep(int msec, char *cmd)
+    {
+        rsleepcmd &s = rsleepcmds.add();
+        s.millis = msec+cl.lastmillis;
+        s.command = newstring(cmd);
+        s.stack = stack;
+    }
+
+    void checksleep()
+    {
+        loopv(rsleepcmds)
+        {
+            rsleepcmd &s = rsleepcmds[i];
+            if (s.millis && cl.lastmillis>s.millis)
+            {
+                vector<rpgobj *> curstack = stack;
+                char *cmd = s.command;
+                stack = s.stack;
+                execute(cmd);
+                stack = curstack;
+                delete[] cmd;
+                s.stack.setsize(0);
+                rsleepcmds.remove(i--);
+            }
+        }
+    }
+
     char *stringpool(char *name)
     {
         char **n = names.access(name);



