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 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 | /* placing treasure in maps, where appropriate. */ |
25 | /* placing treasure in maps, where appropriate. */ |
26 | |
26 | |
27 | #include <global.h> |
27 | #include <global.h> |
28 | #include <random_map.h> |
28 | #include <rmg.h> |
29 | #include <rproto.h> |
29 | #include <rproto.h> |
30 | |
30 | |
31 | /* some defines for various options which can be set. */ |
31 | /* some defines for various options which can be set. */ |
32 | |
32 | |
33 | #define CONCENTRATED 1 /* all the treasure is at the C's for onions. */ |
33 | #define CONCENTRATED 1 /* all the treasure is at the C's for onions. */ |
… | |
… | |
67 | object *key = archetype::get (shstr_key_random_map); |
67 | object *key = archetype::get (shstr_key_random_map); |
68 | key->slaying = keycode; |
68 | key->slaying = keycode; |
69 | return key; |
69 | return key; |
70 | } |
70 | } |
71 | |
71 | |
72 | /* places keys in the map, preferably in something alive. |
72 | /* places keys in the map, preferably in something alive. |
73 | keycode is the key's code, |
73 | keycode is the key's code, |
74 | door_flag is either PASS_DOORS or NO_PASS_DOORS. |
74 | door_flag is either PASS_DOORS or NO_PASS_DOORS. |
75 | NO_PASS_DOORS won't cross doors or walls to keyplace, PASS_DOORS will. |
75 | NO_PASS_DOORS won't cross doors or walls to keyplace, PASS_DOORS will. |
76 | if n_keys is 1, it will place 1 key. if n_keys >1, it will place 2-4 keys: |
76 | if n_keys is 1, it will place 1 key. if n_keys >1, it will place 2-4 keys: |
77 | it will place 2-4 keys regardless of what nkeys is provided nkeys > 1. |
77 | it will place 2-4 keys regardless of what nkeys is provided nkeys > 1. |
… | |
… | |
184 | |
184 | |
185 | m->at (x, y).update (); |
185 | m->at (x, y).update (); |
186 | return GET_MAP_MOVE_BLOCK (m, x, y) & MOVE_WALK; |
186 | return GET_MAP_MOVE_BLOCK (m, x, y) & MOVE_WALK; |
187 | } |
187 | } |
188 | |
188 | |
189 | /* place treasures in the map, given the |
189 | /* place treasures in the map, given the |
190 | map, (required) |
190 | map, (required) |
191 | maze, (required) |
191 | maze, (required) |
192 | treasure style (may be empty or NULL, or "none" to cause no treasure.) |
192 | treasure style (may be empty or NULL, or "none" to cause no treasure.) |
193 | treasureoptions (may be 0 for random choices or positive) |
193 | treasureoptions (may be 0 for random choices or positive) |
194 | */ |
194 | */ |
… | |
… | |
688 | |
688 | |
689 | if (!wall_blocked (map, x1, y1) && maze[x1][y1] == '>') |
689 | if (!wall_blocked (map, x1, y1) && maze[x1][y1] == '>') |
690 | { /* place a door */ |
690 | { /* place a door */ |
691 | remove_monsters (x1, y1, map); |
691 | remove_monsters (x1, y1, map); |
692 | |
692 | |
693 | object *new_door = get_archetype (freearr_x[i] == 0 ? doors[1] : doors[0]); |
693 | object *new_door = archetype::get (freearr_x[i] == 0 ? doors[1] : doors[0]); |
694 | map->insert (new_door, x1, y1); |
694 | map->insert (new_door, x1, y1); |
695 | doorlist[ndoors_made] = new_door; |
695 | doorlist[ndoors_made] = new_door; |
696 | ndoors_made++; |
696 | ndoors_made++; |
697 | } |
697 | } |
698 | } |
698 | } |
… | |
… | |
791 | |
791 | |
792 | if (opts & DOORED) |
792 | if (opts & DOORED) |
793 | { |
793 | { |
794 | for (i = 0, door = doorlist[0]; doorlist[i]; i++) |
794 | for (i = 0, door = doorlist[0]; doorlist[i]; i++) |
795 | { |
795 | { |
796 | object *new_door = get_archetype (shstr_locked_door1); |
796 | object *new_door = archetype::get (shstr_locked_door1); |
797 | |
797 | |
798 | door = doorlist[i]; |
798 | door = doorlist[i]; |
799 | new_door->face = door->face; |
799 | new_door->face = door->face; |
800 | new_door->x = door->x; |
800 | new_door->x = door->x; |
801 | new_door->y = door->y; |
801 | new_door->y = door->y; |