--- deliantra/server/common/arch.C 2009/11/05 15:43:21 1.92 +++ deliantra/server/common/arch.C 2010/03/26 00:59:20 1.100 @@ -2,8 +2,8 @@ * This file is part of Deliantra, the Roguelike Realtime MMORPG. * * Copyright (©) 2005,2006,2007,2008 Marc Alexander Lehmann / Robin Redeker / the Deliantra team - * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team - * Copyright (©) 1992,2007 Frank Tore Johansen + * Copyright (©) 2002 Mark Wedel & Crossfire Development Team + * Copyright (©) 1992 Frank Tore Johansen * * Deliantra is free software: you can redistribute it and/or modify it under * the terms of the Affero GNU General Public License as published by the @@ -25,7 +25,6 @@ #include #include -#include #include #include @@ -55,6 +54,26 @@ //+GPL +/* + * Creates an object. This function is called by get_archetype () + * if it fails to find the appropriate archetype. + * Thus get_archetype() will be guaranteed to always return + * an object, and never NULL. + */ +static object * +create_singularity (const char *name) +{ + LOG (llevError | logBacktrace, "FATAL: creating singularity for '%s'.\n", name); + + if (!strcmp (name, "bug")) + abort (); + + object *op = archetype::get (shstr_bug); + op->name = op->name_pl = format ("bug, please report (missing archetype %s)", name); + + return op; +} + /** * GROS - This function retrieves an archetype given the name that appears * during the game (for example, "writing pen" instead of "stylus"). @@ -331,6 +350,14 @@ return i->second; } +void +archetype::post_load_check () +{ + object::post_load_check (); + + assert (("obj_original MUST NOT be set for archetypes", !flag [FLAG_OBJ_ORIGINAL])); +} + archetype * archetype::read (object_thawer &f) { @@ -416,8 +443,7 @@ } // assemble new chain - new_head->min_x = new_head->max_x = new_head->x; - new_head->min_y = new_head->max_y = new_head->y; + new_head->max_x = new_head->x; archetype *less = new_head; for (auto (p, parts.begin () + 1); p != parts.end (); ++p) @@ -432,10 +458,7 @@ at->flag [FLAG_MONSTER] = new_head->flag [FLAG_MONSTER]; at->flag [FLAG_IS_FLOOR] = new_head->flag [FLAG_IS_FLOOR]; - new_head->min_x = min (new_head->min_x, at->x); - new_head->min_y = min (new_head->min_y, at->y); new_head->max_x = max (new_head->max_x, at->x); - new_head->max_y = max (new_head->max_y, at->y); at->head = new_head; less->more = at; @@ -550,26 +573,6 @@ //+GPL /* - * Creates an object. This function is called by get_archetype() - * if it fails to find the appropriate archetype. - * Thus get_archetype() will be guaranteed to always return - * an object, and never NULL. - */ -object * -create_singularity (const char *name) -{ - LOG (llevError | logBacktrace, "FATAL: creating singularity for '%s'.\n", name); - - if (!strcmp (name, "bug")) - abort (); - - object *op = archetype::get (shstr_bug); - op->name = op->name_pl = format ("bug, please report (missing archetype %s)", name); - - return op; -} - -/* * Finds which archetype matches the given name, and returns a new * object containing a copy of the archetype. */ @@ -594,7 +597,7 @@ * Returns the first archetype using the given type. * Used in treasure-generation. */ -archetype * +static archetype * type_to_archetype (int type) { for_all_archetypes (at)