--- orig/rpggame/rpgobjset.h
+++ mod/rpggame/rpgobjset.h
@@ -80,6 +80,7 @@
         CCOMMAND(r_rotate,      "f",   (rpgobjset *self, float *angle), { if (self->stack[0]->ent) self->stack[0]->ent->r_rotate(*angle); });
         CCOMMAND(r_turnto,      "f",   (rpgobjset *self), { if (self->stack[0]->ent && self->stack[1]->ent) self->stack[1]->ent->r_turnto(self->stack[0]->ent->o); });
         CCOMMAND(r_move,        "i",   (rpgobjset *self, int *yes), { if (self->stack[0]->ent) self->stack[0]->ent->r_move(*yes); });
+        CCOMMAND(r_loop_inv,    "is",  (rpgobjset *self, int *itemflags, char *body), { self->stack[0]->loop_inv(*itemflags, body); });
         clearworld();
     }
 
--- orig/rpggame/rpgobj.h
+++ mod/rpggame/rpgobj.h
@@ -232,6 +232,16 @@
         return os.checkfriend(s_aigroup, aigroup);
     }
 
+    void loop_inv(int itemflags, char *body)
+    {
+        loopinventorytype(itemflags ? itemflags : -1)
+        {
+            os.pushobj(o);
+            execute(body);
+            os.popobj();
+        }
+    }
+
     void takedamage(int damage, rpgobj &attacker)
     {
         ent->enemy = attacker.ent;
