/*
* 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
*/
#define LO_NEWFILE 2
/* the main routine for making a standalone version. */
#include
#include
#include
#include
#include
#include
#include
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 (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 (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)
{
object *tmp = NULL;
int i;
switch (op->type)
{
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);
op->destroy ();
break;
}
return tmp ? 1 : 0;
}
/* fix_auto_apply goes through the entire map (only the first time
* when an original map is loaded) and performs special actions for
* certain objects (most initialization of chests and creation of
* treasures and stuff). Calls auto_apply if appropriate.
*/
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);
}
}
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);
}
/**
* Those are dummy functions defined to resolve all symboles.
* 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, 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)
{
}