ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/random_maps/square_spiral.C
(Generate patch)

Comparing deliantra/server/random_maps/square_spiral.C (file contents):
Revision 1.10 by root, Sun Jul 1 05:00:19 2007 UTC vs.
Revision 1.13 by root, Mon Apr 14 22:41:17 2008 UTC

1/* 1/*
2 * This file is part of Crossfire TRT, the Roguelike Realtime MORPG. 2 * This file is part of Deliantra, the Roguelike Realtime MMORPG.
3 * 3 *
4 * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team 4 * Copyright (©) 2005,2006,2007,2008 Marc Alexander Lehmann / Robin Redeker / the Deliantra team
5 * Copyright (©) 2001,2007 Mark Wedel & Crossfire Development Team 5 * Copyright (©) 2001,2007 Mark Wedel & Crossfire Development Team
6 * Copyright (©) 1992,2007 Frank Tore Johansen 6 * Copyright (©) 1992,2007 Frank Tore Johansen
7 * 7 *
8 * Crossfire TRT is free software: you can redistribute it and/or modify 8 * Deliantra is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by 9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or 10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version. 11 * (at your option) any later version.
12 * 12 *
13 * This program is distributed in the hope that it will be useful, 13 * This program is distributed in the hope that it will be useful,
16 * GNU General Public License for more details. 16 * GNU General Public License for more details.
17 * 17 *
18 * You should have received a copy of the GNU General Public License 18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>. 19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 * 20 *
21 * The authors can be reached via e-mail to <crossfire@schmorp.de> 21 * The authors can be reached via e-mail to <support@deliantra.net>
22 */ 22 */
23 23
24/* peterm@langmuir.eecs.berkeley.edu: this function generates a random 24/* peterm@langmuir.eecs.berkeley.edu: this function generates a random
25snake-type layout. 25snake-type layout.
26 26
30a char value of 0 represents a blank space: a '#' is 30a char value of 0 represents a blank space: a '#' is
31a wall. 31a wall.
32 32
33*/ 33*/
34 34
35#include <global.h>
35 36
36#include <stdio.h>
37#include <global.h>
38#include <time.h>
39
40#include <maze_gen.h>
41#include <room_gen.h>
42#include <random_map.h> 37#include "random_map.h"
43#include <sproto.h>
44#include <rproto.h> 38#include "rproto.h"
45
46
47char **map_gen_onion (int xsize, int ysize, int option, int layers);
48
49 39
50/* These are some helper functions which help with 40/* These are some helper functions which help with
51 manipulating a centered onion and turning it into 41 manipulating a centered onion and turning it into
52 a square spiral */ 42 a square spiral */
53 43
70 ++(*cx); 60 ++(*cx);
71 61
72 /* cx and cy should now be the top-right corner of the onion layer */ 62 /* cx and cy should now be the top-right corner of the onion layer */
73} 63}
74 64
75 65void
76char ** 66make_square_spiral_layout (Maze maze, int options)
77make_square_spiral_layout (int xsize, int ysize, int options)
78{ 67{
79 int i, j; 68 int i, j;
80 int cx, cy; 69 int cx, cy;
81 int tx, ty; 70 int tx, ty;
82 71
83 /* generate and allocate a doorless, centered onion */ 72 /* generate and allocate a doorless, centered onion */
84 char **maze = map_gen_onion (xsize, ysize, RMOPT_CENTERED | RMOPT_NO_DOORS, 0); 73 map_gen_onion (maze, RMOPT_CENTERED | RMOPT_NO_DOORS, 0);
74
75 int xsize = maze->w;
76 int ysize = maze->h;
85 77
86 /* find the layout center. */ 78 /* find the layout center. */
87 cx = 0; 79 cx = 0;
88 cy = 0; 80 cy = 0;
89 for (i = 0; i < xsize; i++) 81 for (i = 0; i < xsize; i++)
107 99
108 maze[tx][ty - 1] = '#'; /* convert the door that make_wall puts here to a wall */ 100 maze[tx][ty - 1] = '#'; /* convert the door that make_wall puts here to a wall */
109 maze[tx - 1][ty] = 'D'; /* make a doorway out of this layer */ 101 maze[tx - 1][ty] = 'D'; /* make a doorway out of this layer */
110 102
111 /* walk left until we find the top-left corner */ 103 /* walk left until we find the top-left corner */
112 while ((tx > 2) && maze[tx - 1][ty]) 104 while ((tx > 2) && maze[tx - 1, ty])
113 tx--; 105 tx--;
114 106
115 make_wall (maze, tx - 1, ty, 0); /* make a horizontal wall with a door */ 107 make_wall (maze, tx - 1, ty, 0); /* make a horizontal wall with a door */
116 108
117 /* walk down until we find the bottom-left corner */ 109 /* walk down until we find the bottom-left corner */
138 else 130 else
139 { 131 {
140 maze[cx][cy] = '<'; 132 maze[cx][cy] = '<';
141 maze[xsize - 2][1] = '>'; 133 maze[xsize - 2][1] = '>';
142 } 134 }
143
144 return maze;
145} 135}
146 136

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines