--- deliantra/server/random_maps/standalone.C 2006/08/29 08:01:36 1.2
+++ deliantra/server/random_maps/standalone.C 2008/04/11 21:09:53 1.17
@@ -1,31 +1,26 @@
/*
- * static char *rcsid_standalone_c =
- * "$Id: standalone.C,v 1.2 2006/08/29 08:01:36 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 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 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. */
@@ -38,85 +33,96 @@
#include
#include
-int main(int argc, char *argv[]) {
- char InFileName[1024],OutFileName[1024];
- mapstruct *newMap;
- RMParms rp;
+int
+main (int argc, char *argv[])
+{
+ char InFileName[1024], OutFileName[1024];
+ maptile *newMap;
+ random_map_params rp;
FILE *fp;
- if(argc < 3) {
- printf("\nUsage: %s inputfile outputfile\n",argv[0]);
- exit(0);
- }
- strcpy(InFileName,argv[1]);
- strcpy(OutFileName,argv[2]);
-
- init_globals();
- init_library();
- init_archetypes();
- init_artifacts();
- init_formulae();
- init_readable();
-
- init_gods();
- memset(&rp, 0, sizeof(RMParms));
- rp.Xsize=-1;
- rp.Ysize=-1;
- if ((fp=fopen(InFileName, "r"))==NULL) {
- fprintf(stderr,"\nError: can not open %s\n", InFileName);
- exit(1);
- }
- load_parameters(fp, LO_NEWFILE, &rp);
- fclose(fp);
- newMap = generate_random_map(OutFileName, &rp);
- new_save_map(newMap,1);
- exit(0);
+ if (argc < 3)
+ {
+ printf ("\nUsage: %s inputfile outputfile\n", argv[0]);
+ exit (0);
+ }
+
+ strcpy (InFileName, argv[1]);
+ strcpy (OutFileName, argv[2]);
+
+ init_globals ();
+ init_library ();
+ init_archetypes ();
+ init_artifacts ();
+ init_formulae ();
+ init_readable ();
+
+ init_gods ();
+ memset (&rp, 0, sizeof (random_map_params));
+ rp.Xsize = -1;
+ rp.Ysize = -1;
+ if ((fp = fopen (InFileName, "r")) == NULL)
+ {
+ fprintf (stderr, "\nError: can not open %s\n", InFileName);
+ exit (1);
+ }
+ load_parameters (fp, LO_NEWFILE, &rp);
+ fclose (fp);
+ newMap = generate_random_map (OutFileName, &rp);
+ new_save_map (newMap, 1);
+ exit (0);
}
-void set_map_timeout(mapstruct *) {} /* doesn't need to do anything */
+void
+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 auto_apply (object *op) {
+int
+auto_apply (object *op)
+{
object *tmp = NULL;
int i;
- 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)
+ switch (op->type)
+ {
+ case SHOP_FLOOR:
+ if (!op->has_random_items ())
return 0;
- if(QUERY_FLAG(tmp, FLAG_CURSED) || QUERY_FLAG(tmp, FLAG_DAMNED))
- {
- free_object(tmp);
- 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 (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;
- }
+ 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))
+ {
+ 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);
+ op->remove ();
+ op->destroy ();
+ break;
+ }
return tmp ? 1 : 0;
}
@@ -126,43 +132,43 @@
* certain objects (most initialization of chests and creation of
* treasures and stuff). Calls auto_apply if appropriate.
*/
-
-void fix_auto_apply(mapstruct *m) {
- object *tmp,*above=NULL;
- int x,y;
-
- for(x=0;xabove;
-
- if(QUERY_FLAG(tmp,FLAG_AUTO_APPLY))
- auto_apply(tmp);
- else if(tmp->type==TREASURE) {
- if (HAS_RANDOM_ITEMS(tmp))
- while ((tmp->stats.hp--)>0)
- create_treasure(tmp->randomitems, tmp, 0,
- m->difficulty,0);
+void
+fix_auto_apply (maptile *m)
+{
+ object *tmp, *above = NULL;
+ int x, y;
+
+ 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;
+
+ if (QUERY_FLAG (tmp, FLAG_AUTO_APPLY))
+ auto_apply (tmp);
+ else if (tmp->type == TREASURE)
+ {
+ if (tmp->has_random_items ())
+ while ((tmp->stats.hp--) > 0)
+ create_treasure (tmp->randomitems, tmp, 0, m->difficulty, 0);
+ }
+ if (tmp && tmp->arch && tmp->type != PLAYER && tmp->type != TREASURE && tmp->randomitems)
+ {
+ if (tmp->type == CONTAINER)
+ {
+ if (tmp->has_random_items ())
+ while ((tmp->stats.hp--) > 0)
+ create_treasure (tmp->randomitems, tmp, 0, m->difficulty, 0);
+ }
+ else if (tmp->has_random_items ())
+ create_treasure (tmp->randomitems, tmp, GT_APPLY, m->difficulty, 0);
+ }
}
- if(tmp && tmp->arch && tmp->type!=PLAYER && tmp->type!=TREASURE &&
- tmp->randomitems){
- if(tmp->type==CONTAINER) {
- if (HAS_RANDOM_ITEMS(tmp))
- while ((tmp->stats.hp--)>0)
- create_treasure(tmp->randomitems, tmp, 0,
- m->difficulty,0);
- }
- else if (HAS_RANDOM_ITEMS(tmp))
- create_treasure(tmp->randomitems, tmp, GT_APPLY,
- m->difficulty,0);
- }
- }
- for(x=0;xabove)
- if (tmp->above
- && (tmp->type == TRIGGER_BUTTON || tmp->type == TRIGGER_PEDESTAL))
- check_trigger(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);
}
/**
@@ -170,81 +176,102 @@
* Added as part of glue cleaning.
* Ryo 2005-07-15
**/
-
-void new_draw_info(int a, int b, const object *ob, const char *txt)
- {
- fprintf(logfile, "%s\n", txt);
- }
-void new_info_map(int color, mapstruct *map, const char *str)
- {
- fprintf(logfile, "new_info_map: %s\n", str);
- }
-
-void move_teleporter( object* ob)
- {
- }
-
-void move_firewall( object* ob)
- {
- }
-
-void move_duplicator( object* ob)
- {
- }
-
-void move_marker( object* ob)
- {
- }
-
-void move_creator( object* ob)
- {
- }
-
-void emergency_save( int x )
- {
- }
-
-void clean_tmp_files( void )
- {
- }
-
-void esrv_send_item( object* ob, object* obx )
- {
- }
-
-void dragon_ability_gain( object* ob, int x, int y )
- {
- }
-
-void weather_effect( const char* c )
- {
- }
-
-void set_darkness_map( mapstruct* m)
- {
- }
-
-void move_apply( object* ob, object* obt, object* obx )
- {
- }
-
-object* find_skill_by_number( object* ob, int x )
- {
- return NULL;
- }
-
-void esrv_del_item(player *pl, int tag)
- {
- }
-
-void esrv_update_spells(player *pl)
- {
- }
-void monster_check_apply( object* ob, object* obt )
- {
- }
-
-void trap_adjust( object* ob, int x )
- {
- }
+void
+new_draw_info (int a, int b, const object *ob, const char *txt)
+{
+ fprintf (logfile, "%s\n", txt);
+}
+
+void
+new_info_map (int color, maptile *map, const char *str)
+{
+ fprintf (logfile, "new_info_map: %s\n", str);
+}
+
+void
+move_teleporter (object *ob)
+{
+}
+
+void
+move_firewall (object *ob)
+{
+}
+
+void
+move_duplicator (object *ob)
+{
+}
+
+void
+move_marker (object *ob)
+{
+}
+
+void
+move_creator (object *ob)
+{
+}
+
+void
+emergency_save (int x)
+{
+}
+
+void
+clean_tmp_files (void)
+{
+}
+
+void
+esrv_send_item (object *ob, object *obx)
+{
+}
+
+void
+dragon_ability_gain (object *ob, int x, int y)
+{
+}
+
+void
+weather_effect (const char *c)
+{
+}
+
+void
+set_darkness_map (maptile *m)
+{
+}
+
+void
+move_apply (object *ob, object *obt, object *obx)
+{
+}
+
+object *
+find_skill_by_number (object *ob, int x)
+{
+ return NULL;
+}
+
+void
+esrv_del_item (player *pl, int tag)
+{
+}
+
+void
+esrv_update_spells (player *pl)
+{
+}
+
+void
+monster_check_apply (object *ob, object *obt)
+{
+}
+
+void
+trap_adjust (object *ob, int x)
+{
+}
+