--- deliantra/server/random_maps/exit.C 2008/09/29 09:04:51 1.31
+++ deliantra/server/random_maps/exit.C 2010/07/02 15:03:57 1.45
@@ -1,22 +1,23 @@
/*
* This file is part of Deliantra, the Roguelike Realtime MMORPG.
*
- * Copyright (©) 2005,2006,2007,2008 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
- * Copyright (©) 2001,2007 Mark Wedel & Crossfire Development Team
- * Copyright (©) 1992,2007 Frank Tore Johansen
+ * Copyright (©) 2005,2006,2007,2008,2009,2010 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
+ * Copyright (©) 2001 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 GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
+ * 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 GNU General Public License
- * along with this program. If not, see .
+ * 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
*/
@@ -26,10 +27,10 @@
#include
#include
-/* find a character in the layout. fx and fy are pointers to
+/* find a character in the maze. fx and fy are pointers to
where to find the char. fx,fy = -1 if not found. */
-void
-find_in_layout (int mode, char target, int *fx, int *fy, char **layout, random_map_params *RP)
+static void
+find_in_layout (int mode, char target, int *fx, int *fy, char **maze, random_map_params *RP)
{
int M;
int i, j;
@@ -53,7 +54,7 @@
for (i = 1; i < RP->Xsize; i++)
for (j = 1; j < RP->Ysize; j++)
{
- if (layout[i][j] == target)
+ if (maze[i][j] == target)
{
*fx = i;
*fy = j;
@@ -67,7 +68,7 @@
for (i = RP->Xsize - 2; i > 0; i--)
for (j = 1; j < RP->Ysize - 1; j++)
{
- if (layout[i][j] == target)
+ if (maze[i][j] == target)
{
*fx = i;
*fy = j;
@@ -81,7 +82,7 @@
for (i = 1; i < RP->Xsize - 1; i++)
for (j = RP->Ysize - 2; j > 0; j--)
{
- if (layout[i][j] == target)
+ if (maze[i][j] == target)
{
*fx = i;
*fy = j;
@@ -95,7 +96,7 @@
for (i = RP->Xsize - 2; i > 0; i--)
for (j = RP->Ysize - 2; j > 0; j--)
{
- if (layout[i][j] == target)
+ if (maze[i][j] == target)
{
*fx = i;
*fy = j;
@@ -116,9 +117,8 @@
6 means southward
*/
void
-place_exits (maptile *map, char **maze, char *exitstyle, int orientation, random_map_params *RP)
+place_exits (maptile *map, char **maze, const char *exitstyle, int orientation, random_map_params *RP)
{
- char styledirname[1024];
maptile *style_map_down = 0; /* harder maze */
maptile *style_map_up = 0; /* easier maze */
object *the_exit_down; /* harder maze */
@@ -139,27 +139,22 @@
{
case 1:
{
- sprintf (styledirname, "/styles/exitstyles/up");
- style_map_up = find_style (styledirname, exitstyle, -1);
- sprintf (styledirname, "/styles/exitstyles/down");
- style_map_down = find_style (styledirname, exitstyle, -1);
+ style_map_up = find_style ("/styles/exitstyles/up" , exitstyle, RP->difficulty);
+ style_map_down = find_style ("/styles/exitstyles/down", exitstyle, RP->difficulty);
break;
}
case 2:
{
- sprintf (styledirname, "/styles/exitstyles/down");
- style_map_up = find_style (styledirname, exitstyle, -1);
- sprintf (styledirname, "/styles/exitstyles/up");
- style_map_down = find_style (styledirname, exitstyle, -1);
+ style_map_up = find_style ("/styles/exitstyles/down", exitstyle, RP->difficulty);
+ style_map_down = find_style ("/styles/exitstyles/up" , exitstyle, RP->difficulty);
break;
}
default:
{
- sprintf (styledirname, "/styles/exitstyles/generic");
- style_map_up = find_style (styledirname, exitstyle, -1);
- style_map_down = style_map_up;
+ style_map_up =
+ style_map_down = find_style ("/styles/exitstyles/generic", exitstyle, RP->difficulty);
break;
}
}
@@ -283,21 +278,19 @@
if (the_exit_down)
{
- char buf[16384];
-
- int i = find_free_spot (the_exit_down, map, downx, downy, 1, SIZEOFFREE1 + 1);
+ int i = rmg_find_free_spot (the_exit_down, map, downx, downy, 1, SIZEOFFREE1 + 1);
the_exit_down->x = downx + freearr_x[i];
the_exit_down->y = downy + freearr_y[i];
RP->origin_x = the_exit_down->x;
RP->origin_y = the_exit_down->y;
- write_map_parameters_to_string (buf, RP);
- the_exit_down->msg = buf;
+
+ the_exit_down->msg = RP->as_shstr ();
/* the identifier for making a random map. */
if (RP->dungeon_level >= RP->dungeon_depth && *RP->final_map)
{
maptile *new_map;
- object *the_exit_back = arch_to_object (the_exit_up->arch);
+ object *the_exit_back = the_exit_up->arch->instance ();
/* load it */
if (!(new_map = maptile::find_sync (RP->final_map)))
@@ -313,9 +306,9 @@
* would require keeping a 'next' pointer, ad free_object kills tmp, which
* breaks the for loop.
*/
- if (tmp->type == EXIT && EXIT_PATH (tmp) && !strncmp (EXIT_PATH (tmp), "?random/", 8))
+ if (tmp->type == EXIT && EXIT_PATH (tmp).starts_with ("?random/"))
{
- tmp->destroy (true);
+ tmp->destroy ();
break;
}
@@ -332,7 +325,7 @@
}
}
else
- the_exit_down->slaying = "/!";
+ the_exit_down->slaying = shstr_random_map_exit;
/* Block the exit so things don't get dumped on top of it. */
the_exit_down->move_block = MOVE_ALL;