--- deliantra/server/include/object.h 2006/09/08 16:53:57 1.21 +++ deliantra/server/include/object.h 2006/09/10 00:51:23 1.24 @@ -235,12 +235,29 @@ key_value *key_values; /* Fields not explictly known by the loader. */ }; +#define get_object() object::create () +#define free_object(op) (op)->free (0) +#define free_object2(op, free_inv) (op)->free (free_inv) + struct object : zero_initialised, object_keep, object_copy, object_pod { - static bool can_merge (object * op1, object * op2); + static object *create (); + void free (bool free_inventory = false); + + static void free_mortals (); + static bool can_merge (object *op1, object *op2); void clear (); - void clone (object * destination); + void clone (object *destination); + +protected: + friend struct archetype; + + void link (); + void unlink (); + + object (); + ~object (); }; #define CAN_MERGE(op1,op2) ((op1)->value == (op2)->value && (op1)->name == (op2)->name && object::can_merge ((op1), (op2))) @@ -271,6 +288,9 @@ ACC_CLASS(archetype) struct archetype : zero_initialised { + archetype (); + ~archetype (); + shstr ACC (RW, name); /* More definite name, like "generate_kobold" */ struct archetype *ACC (RW, next); /* Next archetype in a linked list */ struct archetype *ACC (RW, head); /* The main part of a linked object */