1 | /* |
1 | /* |
2 | * CrossFire, A Multiplayer game |
2 | * This file is part of Crossfire TRT, the Roguelike Realtime MORPG. |
3 | * |
3 | * |
4 | * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team |
4 | * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team |
5 | * Copyright (C) 2001 Mark Wedel & Crossfire Development Team |
5 | * Copyright (©) 2001,2007 Mark Wedel & Crossfire Development Team |
6 | * Copyright (C) 1992 Frank Tore Johansen |
6 | * Copyright (©) 1992,2007 Frank Tore Johansen |
7 | * |
7 | * |
8 | * This program is free software; you can redistribute it and/or modify |
8 | * Crossfire TRT 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 2 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, |
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 GNU General Public License |
18 | * You should have received a copy of the GNU General Public License |
19 | * along with this program; if not, write to the Free Software |
19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
20 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
|
|
21 | * |
20 | * |
22 | * The authors can be reached via e-mail at <crossfire@schmorp.de> |
21 | * The authors can be reached via e-mail to <crossfire@schmorp.de> |
23 | */ |
22 | */ |
24 | |
23 | |
25 | /* placing treasure in maps, where appropriate. */ |
24 | /* placing treasure in maps, where appropriate. */ |
26 | |
25 | |
27 | #include <global.h> |
26 | #include <global.h> |
… | |
… | |
59 | wall_blocked (maptile *m, int x, int y) |
58 | wall_blocked (maptile *m, int x, int y) |
60 | { |
59 | { |
61 | if (OUT_OF_REAL_MAP (m, x, y)) |
60 | if (OUT_OF_REAL_MAP (m, x, y)) |
62 | return 1; |
61 | return 1; |
63 | |
62 | |
|
|
63 | m->at (x, y).update (); |
64 | int r = GET_MAP_MOVE_BLOCK (m, x, y) & ~MOVE_BLOCK_DEFAULT; |
64 | return GET_MAP_MOVE_BLOCK (m, x, y) & MOVE_WALK; |
65 | return r; |
|
|
66 | } |
65 | } |
67 | |
66 | |
68 | /* place treasures in the map, given the |
67 | /* place treasures in the map, given the |
69 | map, (required) |
68 | map, (required) |
70 | layout, (required) |
69 | layout, (required) |
… | |
… | |
250 | the_chest->randomitems = tlist; |
249 | the_chest->randomitems = tlist; |
251 | the_chest->stats.hp = n_treasures; |
250 | the_chest->stats.hp = n_treasures; |
252 | } |
251 | } |
253 | #endif |
252 | #endif |
254 | { /* neither style_map no treasure list given */ |
253 | { /* neither style_map no treasure list given */ |
255 | treasurelist *tlist = find_treasurelist ("chest"); |
254 | treasurelist *tlist = treasurelist::find ("chest"); |
256 | |
255 | |
257 | the_chest->randomitems = tlist; |
256 | the_chest->randomitems = tlist; |
258 | the_chest->stats.hp = n_treasures; |
257 | the_chest->stats.hp = n_treasures; |
259 | } |
258 | } |
260 | |
259 | |
… | |
… | |
429 | the_key->y = ky; |
428 | the_key->y = ky; |
430 | insert_ob_in_map (the_key, map, NULL, 0); |
429 | insert_ob_in_map (the_key, map, NULL, 0); |
431 | return 1; |
430 | return 1; |
432 | } |
431 | } |
433 | |
432 | |
434 | insert_ob_in_ob (the_key, the_keymaster); |
433 | insert_ob_in_ob (the_key, the_keymaster->head_ ()); |
435 | return 1; |
434 | return 1; |
436 | } |
435 | } |
437 | |
436 | |
438 | |
437 | |
439 | |
438 | |
… | |
… | |
658 | *cy = ly; |
657 | *cy = ly; |
659 | return; |
658 | return; |
660 | } |
659 | } |
661 | } |
660 | } |
662 | /* give up and return the closest free spot. */ |
661 | /* give up and return the closest free spot. */ |
663 | i = find_free_spot (&archetype::find ("chest")->clone, map, x, y, 1, SIZEOFFREE1 + 1); |
662 | i = find_free_spot (archetype::find ("chest"), map, x, y, 1, SIZEOFFREE1 + 1); |
664 | |
663 | |
665 | if (i != -1) |
664 | if (i != -1) |
666 | { |
665 | { |
667 | *cx = x + freearr_x[i]; |
666 | *cx = x + freearr_x[i]; |
668 | *cy = y + freearr_y[i]; |
667 | *cy = y + freearr_y[i]; |
… | |
… | |
698 | it'll remove any monsters it finds.*/ |
697 | it'll remove any monsters it finds.*/ |
699 | object ** |
698 | object ** |
700 | surround_by_doors (maptile *map, char **layout, int x, int y, int opts) |
699 | surround_by_doors (maptile *map, char **layout, int x, int y, int opts) |
701 | { |
700 | { |
702 | int i; |
701 | int i; |
703 | char *doors[2]; |
702 | const char *doors[2]; |
704 | object **doorlist; |
703 | object **doorlist; |
705 | int ndoors_made = 0; |
704 | int ndoors_made = 0; |
706 | doorlist = (object **) calloc (9, sizeof (object *)); /* 9 doors so we can hold termination null */ |
705 | doorlist = (object **) calloc (9, sizeof (object *)); /* 9 doors so we can hold termination null */ |
707 | |
706 | |
708 | /* this is a list we pick from, for horizontal and vertical doors */ |
707 | /* this is a list we pick from, for horizontal and vertical doors */ |