--- orig/rpggame/rpgobjset.h
+++ mod/rpggame/rpgobjset.h
@@ -4,6 +4,7 @@
     unsigned int friends;
 };
 
+#define RPGSTACKSIZE 10
 struct rpgobjset
 {
     rpgclient &cl;
@@ -35,7 +36,7 @@
         CCOMMAND(r_model,       "s",   (rpgobjset *self, char *s), { self->stack[0]->model = self->stringpool(s); });
         CCOMMAND(r_spawn,       "s",   (rpgobjset *self, char *s), { self->spawn(self->stringpool(s)); });
         CCOMMAND(r_contain,     "s",   (rpgobjset *self, char *s), { self->stack[0]->decontain(); self->stack[1]->add(self->stack[0], atoi(s)); });
-        CCOMMAND(r_pop,         "",    (rpgobjset *self), { self->popobj(); });
+        CCOMMAND(r_pop,         "i",   (rpgobjset *self, int *num), { self->popobj(*num); });
         CCOMMAND(r_swap,        "",    (rpgobjset *self), { swap(self->stack[0], self->stack[1]); });
         CCOMMAND(r_say,         "s",   (rpgobjset *self, char *s), { self->stack[0]->abovetext = self->stringpool(s); });
         CCOMMAND(r_quest,       "ss",  (rpgobjset *self, char *s, char *a), { self->stack[0]->addaction(self->stringpool(s), self->stringpool(a), true); });
@@ -59,7 +60,7 @@
     void resetstack()
     {
         stack.setsize(0);
-        loopi(10) stack.add(playerobj);     // determines the stack depth
+        loopi(RPGSTACKSIZE) stack.add(playerobj);     // determines the stack depth
     }
 
     void clearworld()
@@ -132,6 +133,16 @@
         DELETEP(worldobj->ent);
     }
 
+    void popobj(int num)
+    {
+        if (!num)
+            popobj();
+        else if (num < 0)
+            loopi(RPGSTACKSIZE+num) popobj();
+        else
+            loopi(num) popobj();
+    }
+
     void take(rpgobj *worldobj, rpgobj *newowner)
     {
         removefromworld(worldobj);
