--- deliantra/server/random_maps/standalone.C 2006/09/10 16:06:37 1.3 +++ deliantra/server/random_maps/standalone.C 2009/10/12 14:00:58 1.21 @@ -1,32 +1,27 @@ - /* - * static char *rcsid_standalone_c = - * "$Id: standalone.C,v 1.3 2006/09/10 16:06:37 root Exp $"; + * 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 + * + * 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 + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the Affero GNU General Public License + * and the GNU General Public License along with this program. If not, see + * . + * + * The authors can be reached via e-mail to */ -/* - CrossFire, A Multiplayer game for X-windows - - Copyright (C) 2002 Mark Wedel & Crossfire Development Team - Copyright (C) 1992 Frank Tore Johansen - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - The authors can be reached via e-mail at crossfire-devel@real-time.com -*/ - #define LO_NEWFILE 2 /* the main routine for making a standalone version. */ @@ -43,8 +38,8 @@ main (int argc, char *argv[]) { char InFileName[1024], OutFileName[1024]; - mapstruct *newMap; - RMParms rp; + maptile *newMap; + random_map_params rp; FILE *fp; if (argc < 3) @@ -52,6 +47,7 @@ printf ("\nUsage: %s inputfile outputfile\n", argv[0]); exit (0); } + strcpy (InFileName, argv[1]); strcpy (OutFileName, argv[2]); @@ -63,7 +59,7 @@ init_readable (); init_gods (); - memset (&rp, 0, sizeof (RMParms)); + memset (&rp, 0, sizeof (random_map_params)); rp.Xsize = -1; rp.Ysize = -1; if ((fp = fopen (InFileName, "r")) == NULL) @@ -79,13 +75,12 @@ } void -set_map_timeout (mapstruct *) +set_map_timeout (maptile *) { } /* doesn't need to do anything */ #include - /* some plagarized code from apply.c--I needed just these two functions without all the rest of the junk, so.... */ int @@ -96,38 +91,43 @@ switch (op->type) { - case SHOP_FLOOR: - if (!HAS_RANDOM_ITEMS (op)) - return 0; - do - { - i = 10; /* let's give it 10 tries */ - while ((tmp = generate_treasure (op->randomitems, op->stats.exp ? op->stats.exp : 5)) == NULL && --i); - if (tmp == NULL) - return 0; - if (QUERY_FLAG (tmp, FLAG_CURSED) || QUERY_FLAG (tmp, FLAG_DAMNED)) - { - free_object (tmp); - tmp = NULL; - } - } - while (!tmp); + case SHOP_FLOOR: + if (!op->has_random_items ()) + return 0; + do + { + i = 10; /* let's give it 10 tries */ + + while (!(tmp = generate_treasure (op->randomitems, op->stats.exp ? op->stats.exp : 5)) + && --i) + ; + + if (tmp == NULL) + return 0; + + if (QUERY_FLAG (tmp, FLAG_CURSED) || QUERY_FLAG (tmp, FLAG_DAMNED)) + { + tmp->destroy (); + tmp = NULL; + } + } + while (!tmp); + + tmp->x = op->x, tmp->y = op->y; + SET_FLAG (tmp, FLAG_UNPAID); + insert_ob_in_map (tmp, op->map, NULL, 0); + CLEAR_FLAG (op, FLAG_AUTO_APPLY); + identify (tmp); + break; + + case TREASURE: + if (op->has_random_items ()) + while ((op->stats.hp--) > 0) + create_treasure (op->randomitems, op, GT_ENVIRONMENT, + op->stats.exp ? op->stats.exp : op->map == NULL ? 14 : op->map->difficulty, 0); - tmp->x = op->x, tmp->y = op->y; - SET_FLAG (tmp, FLAG_UNPAID); - insert_ob_in_map (tmp, op->map, NULL, 0); - CLEAR_FLAG (op, FLAG_AUTO_APPLY); - identify (tmp); - break; - - case TREASURE: - if (HAS_RANDOM_ITEMS (op)) - while ((op->stats.hp--) > 0) - create_treasure (op->randomitems, op, GT_ENVIRONMENT, - op->stats.exp ? op->stats.exp : op->map == NULL ? 14 : op->map->difficulty, 0); - remove_ob (op); - free_object (op); - break; + op->destroy (); + break; } return tmp ? 1 : 0; @@ -138,16 +138,15 @@ * certain objects (most initialization of chests and creation of * treasures and stuff). Calls auto_apply if appropriate. */ - void -fix_auto_apply (mapstruct *m) +fix_auto_apply (maptile *m) { object *tmp, *above = NULL; int x, y; - for (x = 0; x < MAP_WIDTH (m); x++) - for (y = 0; y < MAP_HEIGHT (m); y++) - for (tmp = get_map_ob (m, x, y); tmp != NULL; tmp = above) + for (x = 0; x < m->width; x++) + for (y = 0; y < m->height; y++) + for (tmp = GET_MAP_OB (m, x, y); tmp != NULL; tmp = above) { above = tmp->above; @@ -155,7 +154,7 @@ auto_apply (tmp); else if (tmp->type == TREASURE) { - if (HAS_RANDOM_ITEMS (tmp)) + if (tmp->has_random_items ()) while ((tmp->stats.hp--) > 0) create_treasure (tmp->randomitems, tmp, 0, m->difficulty, 0); } @@ -163,19 +162,19 @@ { if (tmp->type == CONTAINER) { - if (HAS_RANDOM_ITEMS (tmp)) + if (tmp->has_random_items ()) while ((tmp->stats.hp--) > 0) create_treasure (tmp->randomitems, tmp, 0, m->difficulty, 0); } - else if (HAS_RANDOM_ITEMS (tmp)) + else if (tmp->has_random_items ()) create_treasure (tmp->randomitems, tmp, GT_APPLY, m->difficulty, 0); } } - for (x = 0; x < MAP_WIDTH (m); x++) - for (y = 0; y < MAP_HEIGHT (m); y++) - for (tmp = get_map_ob (m, x, y); tmp != NULL; tmp = tmp->above) + for (x = 0; x < m->width; x++) + for (y = 0; y < m->height; y++) + for (tmp = GET_MAP_OB (m, x, y); tmp != NULL; tmp = tmp->above) if (tmp->above && (tmp->type == TRIGGER_BUTTON || tmp->type == TRIGGER_PEDESTAL)) - check_trigger (tmp, tmp->above); + check_trigger (tmp, tmp->above, tmp->above); } /** @@ -191,7 +190,7 @@ } void -new_info_map (int color, mapstruct *map, const char *str) +new_info_map (int color, maptile *map, const char *str) { fprintf (logfile, "new_info_map: %s\n", str); } @@ -247,7 +246,7 @@ } void -set_darkness_map (mapstruct *m) +set_darkness_map (maptile *m) { } @@ -281,3 +280,4 @@ trap_adjust (object *ob, int x) { } +