#ifndef BASE_H #define BASE_H #define NULL (null_entity) #define world NULL .string classname; .string vtblname; .entity vtblbase; entity spawnVtbl(entity this, entity base) { entity vtbl = spawn(); copyentity(this, vtbl); vtbl.vtblname = vtbl.classname; vtbl.classname = "vtbl"; vtbl.vtblbase = base ? base : vtbl; // Top level objects use vtbl as base return vtbl; } entity Object_vtbl; entity spawnObject(entity this, entity) { this = spawn(); this.classname = "Object"; if (!Object_vtbl) Object_vtbl = spawnVtbl(this, null_entity); return this; } #define NEW(cname) (spawn##cname(null_entity, null_entity)) #endif