-#define ITEMS_FOREACH(pred, body) do { \
- for (int i = 0; i < ITEM_COUNT; i++) { \
- const noref entity it = ITEMS[i]; \
- if (pred) { body } \
- } \
-} while(0)
+#include "item.qh"
+
+REGISTRY(Items, BITS(5))
+#define Items_from(i) _Items_from(i, NULL)
+REGISTER_REGISTRY(Items)
+/** If you register a new item, make sure to add it to all.inc */
+#define REGISTER_ITEM(id, class) REGISTER(Items, ITEM, id, m_id, NEW(class))
+
+REGISTRY_SORT(Items)
+REGISTRY_CHECK(Items)
+STATIC_INIT(Items) { FOREACH(Items, true, LAMBDA(it.m_id = i)); }