--- 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)
{
}
+