1 | /* |
1 | /* |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
2 | * This file is part of Deliantra, the Roguelike Realtime MMORPG. |
3 | * |
3 | * |
4 | * Copyright (©) 2005,2006,2007,2008,2009,2010,2011 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
4 | * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016 Marc Alexander Lehmann / Robin Redeker / the Deliantra team |
5 | * Copyright (©) 2001 Mark Wedel & Crossfire Development Team |
5 | * Copyright (©) 2001 Mark Wedel & Crossfire Development Team |
6 | * Copyright (©) 1992 Frank Tore Johansen |
6 | * Copyright (©) 1992 Frank Tore Johansen |
7 | * |
7 | * |
8 | * Deliantra is free software: you can redistribute it and/or modify it under |
8 | * Deliantra is free software: you can redistribute it and/or modify it under |
9 | * the terms of the Affero GNU General Public License as published by the |
9 | * the terms of the Affero GNU General Public License as published by the |
10 | * Free Software Foundation, either version 3 of the License, or (at your |
10 | * Free Software Foundation, either version 3 of the License, or (at your |
11 | * option) any later version. |
11 | * 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, |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
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 Affero GNU General Public License |
18 | * You should have received a copy of the Affero GNU General Public License |
19 | * and the GNU General Public License along with this program. If not, see |
19 | * and the GNU General Public License along with this program. If not, see |
20 | * <http://www.gnu.org/licenses/>. |
20 | * <http://www.gnu.org/licenses/>. |
21 | * |
21 | * |
22 | * The authors can be reached via e-mail to <support@deliantra.net> |
22 | * The authors can be reached via e-mail to <support@deliantra.net> |
23 | */ |
23 | */ |
24 | |
24 | |
25 | #include <global.h> |
25 | #include <global.h> |
26 | #include <rmg.h> |
26 | #include <rmg.h> |
… | |
… | |
223 | the_exit_up->x = upx; |
223 | the_exit_up->x = upx; |
224 | the_exit_up->y = upy; |
224 | the_exit_up->y = upy; |
225 | |
225 | |
226 | /* surround the exits with notices that this is a random map. */ |
226 | /* surround the exits with notices that this is a random map. */ |
227 | for (int j = 1; j < 9; j++) |
227 | for (int j = 1; j < 9; j++) |
228 | if (!wall_blocked (map, the_exit_up->x + freearr_x[j], the_exit_up->y + freearr_y[j])) |
228 | if (!wall_blocked (map, the_exit_up->x + DIRX (j), the_exit_up->y + DIRY (j))) |
229 | { |
229 | { |
230 | object *random_sign = archetype::get (shstr_sign); |
230 | object *random_sign = archetype::get (shstr_sign); |
231 | random_sign->msg = format ("This is a random map.\nLevel: %d of %d.\n", RP->dungeon_level - 1, RP->dungeon_depth); |
231 | random_sign->msg = format ("This is a random map.\nLevel: %d of %d.\n", RP->dungeon_level - 1, RP->dungeon_depth); |
232 | map->insert (random_sign, the_exit_up->x + freearr_x[j], the_exit_up->y + freearr_y[j], 0, 0); |
232 | map->insert (random_sign, the_exit_up->x + DIRX (j), the_exit_up->y + DIRY (j), 0, 0); |
233 | } |
233 | } |
234 | |
234 | |
235 | /* Block the exit so things don't get dumped on top of it. */ |
235 | /* Block the exit so things don't get dumped on top of it. */ |
236 | the_exit_up->move_block = MOVE_ALL; |
236 | the_exit_up->move_block = MOVE_ALL; |
237 | |
237 | |
… | |
… | |
279 | |
279 | |
280 | if (the_exit_down) |
280 | if (the_exit_down) |
281 | { |
281 | { |
282 | int i = rmg_find_free_spot (the_exit_down, map, downx, downy, 1, SIZEOFFREE1 + 1); |
282 | int i = rmg_find_free_spot (the_exit_down, map, downx, downy, 1, SIZEOFFREE1 + 1); |
283 | |
283 | |
284 | the_exit_down->x = downx + freearr_x[i]; |
284 | the_exit_down->x = downx + DIRX (i); |
285 | the_exit_down->y = downy + freearr_y[i]; |
285 | the_exit_down->y = downy + DIRY (i); |
286 | |
286 | |
287 | RP->set ("origin_x", (IV)the_exit_down->x); |
287 | RP->set ("origin_x", (IV)the_exit_down->x); |
288 | RP->set ("origin_y", (IV)the_exit_down->y); |
288 | RP->set ("origin_y", (IV)the_exit_down->y); |
289 | |
289 | |
290 | the_exit_down->msg = RP->as_shstr (); |
290 | the_exit_down->msg = RP->as_shstr (); |