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

Comparing deliantra/server/random_maps/treasure.C (file contents):
Revision 1.9 by root, Tue Dec 12 21:39:56 2006 UTC vs.
Revision 1.15 by root, Mon Jan 15 01:50:33 2007 UTC

1
1/* 2/*
2 CrossFire, A Multiplayer game for X-windows 3 CrossFire, A Multiplayer game for X-windows
3 4
5 Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team
4 Copyright (C) 2001 Mark Wedel & Crossfire Development Team 6 Copyright (C) 2001 Mark Wedel & Crossfire Development Team
5 Copyright (C) 1992 Frank Tore Johansen 7 Copyright (C) 1992 Frank Tore Johansen
6 8
7 This program is free software; you can redistribute it and/or modify 9 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by 10 it under the terms of the GNU General Public License as published by
67treasure style (may be empty or NULL, or "none" to cause no treasure.) 69treasure style (may be empty or NULL, or "none" to cause no treasure.)
68treasureoptions (may be 0 for random choices or positive) 70treasureoptions (may be 0 for random choices or positive)
69*/ 71*/
70 72
71void 73void
72place_treasure (maptile *map, char **layout, char *treasure_style, int treasureoptions, RMParms * RP) 74place_treasure (maptile *map, char **layout, char *treasure_style, int treasureoptions, random_map_params *RP)
73{ 75{
74 char styledirname[256]; 76 char styledirname[1024];
75 char stylefilepath[256]; 77 char stylefilepath[1024];
76 maptile *style_map = 0; 78 maptile *style_map = 0;
77 int num_treasures; 79 int num_treasures;
78 80
79 /* bail out if treasure isn't wanted. */ 81 /* bail out if treasure isn't wanted. */
80 if (treasure_style) 82 if (treasure_style)
113 { 115 {
114 116
115 /* map_layout_style global, and is previously set */ 117 /* map_layout_style global, and is previously set */
116 switch (RP->map_layout_style) 118 switch (RP->map_layout_style)
117 { 119 {
118 case ONION_LAYOUT: 120 case LAYOUT_ONION:
119 case SPIRAL_LAYOUT: 121 case LAYOUT_SPIRAL:
120 case SQUARE_SPIRAL_LAYOUT: 122 case LAYOUT_SQUARE_SPIRAL:
121 { 123 {
122 int i, j; 124 int i, j;
123 125
124 /* search the onion for C's or '>', and put treasure there. */ 126 /* search the onion for C's or '>', and put treasure there. */
125 for (i = 0; i < RP->Xsize; i++) 127 for (i = 0; i < RP->Xsize; i++)
126 { 128 {
127 for (j = 0; j < RP->Ysize; j++) 129 for (j = 0; j < RP->Ysize; j++)
128 { 130 {
129 if (layout[i][j] == 'C' || layout[i][j] == '>') 131 if (layout[i][j] == 'C' || layout[i][j] == '>')
130 { 132 {
131 int tdiv = RP->symmetry_used; 133 int tdiv = RP->symmetry_used;
132 object **doorlist; 134 object **doorlist;
133 object *chest; 135 object *chest;
134 136
135 if (tdiv == 3) 137 if (tdiv == 3)
136 tdiv = 2; /* this symmetry uses a divisor of 2 */ 138 tdiv = 2; /* this symmetry uses a divisor of 2 */
137 /* don't put a chest on an exit. */ 139 /* don't put a chest on an exit. */
138 chest = place_chest (treasureoptions, i, j, map, style_map, num_treasures / tdiv, RP); 140 chest = place_chest (treasureoptions, i, j, map, style_map, num_treasures / tdiv, RP);
139 if (!chest) 141 if (!chest)
140 continue; /* if no chest was placed NEXT */ 142 continue; /* if no chest was placed NEXT */
141 if (treasureoptions & (DOORED | HIDDEN)) 143 if (treasureoptions & (DOORED | HIDDEN))
142 { 144 {
143 doorlist = find_doors_in_room (map, i, j, RP); 145 doorlist = find_doors_in_room (map, i, j, RP);
144 lock_and_hide_doors (doorlist, map, treasureoptions, RP); 146 lock_and_hide_doors (doorlist, map, treasureoptions, RP);
145 free (doorlist); 147 free (doorlist);
146 } 148 }
147 } 149 }
148 } 150 }
149 } 151 }
150 break; 152 break;
151 } 153 }
152 default: 154 default:
153 { 155 {
154 int i, j, tries; 156 int i, j, tries;
155 object *chest; 157 object *chest;
156 object **doorlist; 158 object **doorlist;
157 159
158 i = j = -1; 160 i = j = -1;
159 tries = 0; 161 tries = 0;
160 while (i == -1 && tries < 100) 162 while (i == -1 && tries < 100)
161 { 163 {
162 i = RANDOM () % (RP->Xsize - 2) + 1; 164 i = RANDOM () % (RP->Xsize - 2) + 1;
163 j = RANDOM () % (RP->Ysize - 2) + 1; 165 j = RANDOM () % (RP->Ysize - 2) + 1;
164 find_enclosed_spot (map, &i, &j, RP); 166 find_enclosed_spot (map, &i, &j, RP);
165 if (wall_blocked (map, i, j)) 167 if (wall_blocked (map, i, j))
166 i = -1; 168 i = -1;
167 tries++; 169 tries++;
168 } 170 }
169 chest = place_chest (treasureoptions, i, j, map, style_map, num_treasures, RP); 171 chest = place_chest (treasureoptions, i, j, map, style_map, num_treasures, RP);
170 if (!chest) 172 if (!chest)
171 return; 173 return;
172 i = chest->x; 174 i = chest->x;
173 j = chest->y; 175 j = chest->y;
174 if (treasureoptions & (DOORED | HIDDEN)) 176 if (treasureoptions & (DOORED | HIDDEN))
175 { 177 {
176 doorlist = surround_by_doors (map, layout, i, j, treasureoptions); 178 doorlist = surround_by_doors (map, layout, i, j, treasureoptions);
177 lock_and_hide_doors (doorlist, map, treasureoptions, RP); 179 lock_and_hide_doors (doorlist, map, treasureoptions, RP);
178 free (doorlist); 180 free (doorlist);
179 } 181 }
180 } 182 }
181 } 183 }
182 } 184 }
183 else 185 else
184 { /* DIFFUSE treasure layout */ 186 { /* DIFFUSE treasure layout */
185 int ti, i, j; 187 int ti, i, j;
191 place_chest (treasureoptions, i, j, map, style_map, 1, RP); 193 place_chest (treasureoptions, i, j, map, style_map, 1, RP);
192 } 194 }
193 } 195 }
194} 196}
195 197
196
197
198/* put a chest into the map, near x and y, with the treasure style 198/* put a chest into the map, near x and y, with the treasure style
199 determined (may be null, or may be a treasure list from lib/treasures, 199 determined (may be null, or may be a treasure list from lib/treasures,
200 if the global variable "treasurestyle" is set to that treasure list's name */ 200 if the global variable "treasurestyle" is set to that treasure list's name */
201 201
202object * 202object *
203place_chest (int treasureoptions, int x, int y, maptile *map, maptile *style_map, int n_treasures, RMParms * RP) 203place_chest (int treasureoptions, int x, int y, maptile *map, maptile *style_map, int n_treasures, random_map_params *RP)
204{ 204{
205 object *the_chest; 205 object *the_chest;
206 int i, xl, yl; 206 int i, xl, yl;
207 207
208 the_chest = get_archetype ("chest"); /* was "chest_2" */ 208 the_chest = get_archetype ("chest"); /* was "chest_2" */
218 yl = y + freearr_y[i]; 218 yl = y + freearr_y[i];
219 219
220 /* if the placement is blocked, return a fail. */ 220 /* if the placement is blocked, return a fail. */
221 if (wall_blocked (map, xl, yl)) 221 if (wall_blocked (map, xl, yl))
222 return 0; 222 return 0;
223
224 223
225 /* put the treasures in the chest. */ 224 /* put the treasures in the chest. */
226 /* if(style_map) { */ 225 /* if(style_map) { */
227#if 0 /* don't use treasure style maps for now! */ 226#if 0 /* don't use treasure style maps for now! */
228 int ti; 227 int ti;
241 { /* use the style map */ 240 { /* use the style map */
242 the_chest->randomitems = tlist; 241 the_chest->randomitems = tlist;
243 the_chest->stats.hp = n_treasures; 242 the_chest->stats.hp = n_treasures;
244 } 243 }
245#endif 244#endif
246 else
247 { /* neither style_map no treasure list given */ 245 { /* neither style_map no treasure list given */
248 treasurelist *tlist = find_treasurelist ("chest"); 246 treasurelist *tlist = find_treasurelist ("chest");
249 247
250 the_chest->randomitems = tlist; 248 the_chest->randomitems = tlist;
251 the_chest->stats.hp = n_treasures; 249 the_chest->stats.hp = n_treasures;
279 the lockcode. It's not worth bothering to lock the chest if 277 the lockcode. It's not worth bothering to lock the chest if
280 there's only 1 treasure.... */ 278 there's only 1 treasure.... */
281 279
282 if ((treasureoptions & KEYREQUIRED) && n_treasures > 1) 280 if ((treasureoptions & KEYREQUIRED) && n_treasures > 1)
283 { 281 {
284 char keybuf[256]; 282 char keybuf[1024];
285 283
286 sprintf (keybuf, "%d", (int) RANDOM ()); 284 sprintf (keybuf, "%d", (int) RANDOM ());
287 the_chest->slaying = keybuf; 285 the_chest->slaying = keybuf;
288 keyplace (map, x, y, keybuf, PASS_DOORS, 1, RP); 286 keyplace (map, x, y, keybuf, PASS_DOORS, 1, RP);
289 } 287 }
297 295
298 296
299/* finds the closest monster and returns him, regardless of doors 297/* finds the closest monster and returns him, regardless of doors
300 or walls */ 298 or walls */
301object * 299object *
302find_closest_monster (maptile *map, int x, int y, RMParms * RP) 300find_closest_monster (maptile *map, int x, int y, random_map_params *RP)
303{ 301{
304 int i; 302 int i;
305 303
306 for (i = 0; i < SIZEOFFREE; i++) 304 for (i = 0; i < SIZEOFFREE; i++)
307 { 305 {
312 /* boundscheck */ 310 /* boundscheck */
313 if (lx >= 0 && ly >= 0 && lx < RP->Xsize && ly < RP->Ysize) 311 if (lx >= 0 && ly >= 0 && lx < RP->Xsize && ly < RP->Ysize)
314 /* don't bother searching this square unless the map says life exists. */ 312 /* don't bother searching this square unless the map says life exists. */
315 if (GET_MAP_FLAGS (map, lx, ly) & P_IS_ALIVE) 313 if (GET_MAP_FLAGS (map, lx, ly) & P_IS_ALIVE)
316 { 314 {
317 object *the_monster = get_map_ob (map, lx, ly); 315 object *the_monster = GET_MAP_OB (map, lx, ly);
318 316
319 for (; the_monster != NULL && (!QUERY_FLAG (the_monster, FLAG_MONSTER)); the_monster = the_monster->above); 317 for (; the_monster != NULL && (!QUERY_FLAG (the_monster, FLAG_MONSTER)); the_monster = the_monster->above);
320 if (the_monster && QUERY_FLAG (the_monster, FLAG_MONSTER)) 318 if (the_monster && QUERY_FLAG (the_monster, FLAG_MONSTER))
321 return the_monster; 319 return the_monster;
322 } 320 }
336 The idea is that you call keyplace on x,y where a door is, and it'll make 334 The idea is that you call keyplace on x,y where a door is, and it'll make
337 sure a key is placed on both sides of the door. 335 sure a key is placed on both sides of the door.
338*/ 336*/
339 337
340int 338int
341keyplace (maptile *map, int x, int y, char *keycode, int door_flag, int n_keys, RMParms * RP) 339keyplace (maptile *map, int x, int y, char *keycode, int door_flag, int n_keys, random_map_params *RP)
342{ 340{
343 int i, j; 341 int i, j;
344 int kx, ky; 342 int kx, ky;
345 object *the_keymaster; /* the monster that gets the key. */ 343 object *the_keymaster; /* the monster that gets the key. */
346 object *the_key; 344 object *the_key;
371 { 369 {
372 kx = (RANDOM () % (RP->Xsize - 2)) + 1; 370 kx = (RANDOM () % (RP->Xsize - 2)) + 1;
373 ky = (RANDOM () % (RP->Ysize - 2)) + 1; 371 ky = (RANDOM () % (RP->Ysize - 2)) + 1;
374 freeindex = find_first_free_spot (the_key, map, kx, ky); 372 freeindex = find_first_free_spot (the_key, map, kx, ky);
375 } 373 }
374
376 if (freeindex != -1) 375 if (freeindex != -1)
377 { 376 {
378 kx += freearr_x[freeindex]; 377 kx += freearr_x[freeindex];
379 ky += freearr_y[freeindex]; 378 ky += freearr_y[freeindex];
380 } 379 }
386 NO_PASS_DOORS is set. */ 385 NO_PASS_DOORS is set. */
387 if (n_keys == 1) 386 if (n_keys == 1)
388 { 387 {
389 if (wall_blocked (map, x, y)) 388 if (wall_blocked (map, x, y))
390 return 0; 389 return 0;
390
391 the_keymaster = find_monster_in_room (map, x, y, RP); 391 the_keymaster = find_monster_in_room (map, x, y, RP);
392 if (the_keymaster == NULL) /* if fail, find a spot to drop the key. */ 392 if (the_keymaster == NULL) /* if fail, find a spot to drop the key. */
393 find_spot_in_room (map, x, y, &kx, &ky, RP); 393 find_spot_in_room (map, x, y, &kx, &ky, RP);
394 } 394 }
395 else 395 else
432 432
433/* a recursive routine which will return a monster, eventually,if there is one. 433/* a recursive routine which will return a monster, eventually,if there is one.
434 it does a check-off on the layout, converting 0's to 1's */ 434 it does a check-off on the layout, converting 0's to 1's */
435 435
436object * 436object *
437find_monster_in_room_recursive (char **layout, maptile *map, int x, int y, RMParms * RP) 437find_monster_in_room_recursive (char **layout, maptile *map, int x, int y, random_map_params *RP)
438{ 438{
439 int i, j; 439 int i, j;
440 440
441 /* if we've found a monster already, leave */ 441 /* if we've found a monster already, leave */
442 if (theMonsterToFind != NULL) 442 if (theMonsterToFind != NULL)
453 /* check the current square for a monster. If there is one, 453 /* check the current square for a monster. If there is one,
454 set theMonsterToFind and return it. */ 454 set theMonsterToFind and return it. */
455 layout[x][y] = 1; 455 layout[x][y] = 1;
456 if (GET_MAP_FLAGS (map, x, y) & P_IS_ALIVE) 456 if (GET_MAP_FLAGS (map, x, y) & P_IS_ALIVE)
457 { 457 {
458 object *the_monster = get_map_ob (map, x, y); 458 object *the_monster = GET_MAP_OB (map, x, y);
459 459
460 /* check off this point */ 460 /* check off this point */
461 for (; the_monster != NULL && (!QUERY_FLAG (the_monster, FLAG_ALIVE)); the_monster = the_monster->above); 461 for (; the_monster != NULL && (!QUERY_FLAG (the_monster, FLAG_ALIVE)); the_monster = the_monster->above);
462 if (the_monster && QUERY_FLAG (the_monster, FLAG_ALIVE)) 462 if (the_monster && QUERY_FLAG (the_monster, FLAG_ALIVE))
463 { 463 {
479 479
480/* sets up some data structures: the _recursive form does the 480/* sets up some data structures: the _recursive form does the
481 real work. */ 481 real work. */
482 482
483object * 483object *
484find_monster_in_room (maptile *map, int x, int y, RMParms * RP) 484find_monster_in_room (maptile *map, int x, int y, random_map_params *RP)
485{ 485{
486 char **layout2; 486 char **layout2;
487 int i, j; 487 int i, j;
488 488
489 theMonsterToFind = 0; 489 theMonsterToFind = 0;
521/* the workhorse routine, which finds the free spots in a room: 521/* the workhorse routine, which finds the free spots in a room:
522a datastructure of free points is set up, and a position chosen from 522a datastructure of free points is set up, and a position chosen from
523that datastructure. */ 523that datastructure. */
524 524
525void 525void
526find_spot_in_room_recursive (char **layout, int x, int y, RMParms * RP) 526find_spot_in_room_recursive (char **layout, int x, int y, random_map_params *RP)
527{ 527{
528 int i, j; 528 int i, j;
529 529
530 /* bounds check x and y */ 530 /* bounds check x and y */
531 if (!(x >= 0 && y >= 0 && x < RP->Xsize && y < RP->Ysize)) 531 if (!(x >= 0 && y >= 0 && x < RP->Xsize && y < RP->Ysize))
550 550
551} 551}
552 552
553/* find a random non-blocked spot in this room to drop a key. */ 553/* find a random non-blocked spot in this room to drop a key. */
554void 554void
555find_spot_in_room (maptile *map, int x, int y, int *kx, int *ky, RMParms * RP) 555find_spot_in_room (maptile *map, int x, int y, int *kx, int *ky, random_map_params *RP)
556{ 556{
557 char **layout2; 557 char **layout2;
558 int i, j; 558 int i, j;
559 559
560 number_of_free_spots_in_room = 0; 560 number_of_free_spots_in_room = 0;
597/* searches the map for a spot with walls around it. The more 597/* searches the map for a spot with walls around it. The more
598 walls the better, but it'll settle for 1 wall, or even 0, but 598 walls the better, but it'll settle for 1 wall, or even 0, but
599 it'll return 0 if no FREE spots are found.*/ 599 it'll return 0 if no FREE spots are found.*/
600 600
601void 601void
602find_enclosed_spot (maptile *map, int *cx, int *cy, RMParms * RP) 602find_enclosed_spot (maptile *map, int *cx, int *cy, random_map_params *RP)
603{ 603{
604 int x, y; 604 int x, y;
605 int i; 605 int i;
606 606
607 x = *cx; 607 x = *cx;
673void 673void
674remove_monsters (int x, int y, maptile *map) 674remove_monsters (int x, int y, maptile *map)
675{ 675{
676 object *tmp; 676 object *tmp;
677 677
678 for (tmp = get_map_ob (map, x, y); tmp != NULL; tmp = tmp->above) 678 for (tmp = GET_MAP_OB (map, x, y); tmp != NULL; tmp = tmp->above)
679 if (QUERY_FLAG (tmp, FLAG_ALIVE)) 679 if (QUERY_FLAG (tmp, FLAG_ALIVE))
680 { 680 {
681 if (tmp->head) 681 if (tmp->head)
682 tmp = tmp->head; 682 tmp = tmp->head;
683 tmp->remove (); 683 tmp->remove ();
684 tmp->destroy (); 684 tmp->destroy ();
685 tmp = get_map_ob (map, x, y); 685 tmp = GET_MAP_OB (map, x, y);
686 if (tmp == NULL) 686 if (tmp == NULL)
687 break; 687 break;
688 }; 688 };
689} 689}
690 690
739object * 739object *
740door_in_square (maptile *map, int x, int y) 740door_in_square (maptile *map, int x, int y)
741{ 741{
742 object *tmp; 742 object *tmp;
743 743
744 for (tmp = get_map_ob (map, x, y); tmp != NULL; tmp = tmp->above) 744 for (tmp = GET_MAP_OB (map, x, y); tmp != NULL; tmp = tmp->above)
745 if (tmp->type == DOOR || tmp->type == LOCKED_DOOR) 745 if (tmp->type == DOOR || tmp->type == LOCKED_DOOR)
746 return tmp; 746 return tmp;
747 return NULL; 747 return NULL;
748} 748}
749 749
750 750
751/* the workhorse routine, which finds the doors in a room */ 751/* the workhorse routine, which finds the doors in a room */
752void 752void
753find_doors_in_room_recursive (char **layout, maptile *map, int x, int y, object **doorlist, int *ndoors, RMParms * RP) 753find_doors_in_room_recursive (char **layout, maptile *map, int x, int y, object **doorlist, int *ndoors, random_map_params *RP)
754{ 754{
755 int i, j; 755 int i, j;
756 object *door; 756 object *door;
757 757
758 /* bounds check x and y */ 758 /* bounds check x and y */
766 /* check off this point */ 766 /* check off this point */
767 if (layout[x][y] == '#') 767 if (layout[x][y] == '#')
768 { /* there could be a door here */ 768 { /* there could be a door here */
769 layout[x][y] = 1; 769 layout[x][y] = 1;
770 door = door_in_square (map, x, y); 770 door = door_in_square (map, x, y);
771 if (door != NULL) 771 if (door)
772 { 772 {
773 doorlist[*ndoors] = door; 773 doorlist[*ndoors] = door;
774 if (*ndoors > 254) /* eek! out of memory */ 774 if (*ndoors > 1022) /* eek! out of memory */
775 { 775 {
776 LOG (llevError, "find_doors_in_room_recursive:Too many doors for memory allocated!\n"); 776 LOG (llevError, "find_doors_in_room_recursive:Too many doors for memory allocated!\n");
777 return; 777 return;
778 } 778 }
779
779 *ndoors = *ndoors + 1; 780 *ndoors = *ndoors + 1;
780 } 781 }
781 } 782 }
782 else 783 else
783 { 784 {
784 layout[x][y] = 1; 785 layout[x][y] = 1;
785 /* now search all the 8 squares around recursively for free spots,in random order */ 786 /* now search all the 8 squares around recursively for free spots,in random order */
786 for (i = RANDOM () % 8, j = 0; j < 8 && theMonsterToFind == NULL; i++, j++) 787 for (i = RANDOM () % 8, j = 0; j < 8 && theMonsterToFind == NULL; i++, j++)
787 {
788 find_doors_in_room_recursive (layout, map, x + freearr_x[i % 8 + 1], y + freearr_y[i % 8 + 1], doorlist, ndoors, RP); 788 find_doors_in_room_recursive (layout, map, x + freearr_x[i % 8 + 1], y + freearr_y[i % 8 + 1], doorlist, ndoors, RP);
789 }
790 } 789 }
791} 790}
792 791
793/* find a random non-blocked spot in this room to drop a key. */ 792/* find a random non-blocked spot in this room to drop a key. */
794object ** 793object **
795find_doors_in_room (maptile *map, int x, int y, RMParms * RP) 794find_doors_in_room (maptile *map, int x, int y, random_map_params *RP)
796{ 795{
797 char **layout2; 796 char **layout2;
798 object **doorlist; 797 object **doorlist;
799 int i, j; 798 int i, j;
800 int ndoors = 0; 799 int ndoors = 0;
801 800
802 doorlist = (object **) calloc (sizeof (int), 256); 801 doorlist = (object **) calloc (sizeof (int), 1024);
803
804 802
805 layout2 = (char **) calloc (sizeof (char *), RP->Xsize); 803 layout2 = (char **) calloc (sizeof (char *), RP->Xsize);
806 /* allocate and copy the layout, converting C to 0. */ 804 /* allocate and copy the layout, converting C to 0. */
807 for (i = 0; i < RP->Xsize; i++) 805 for (i = 0; i < RP->Xsize; i++)
808 { 806 {
817 /* setup num_free_spots and room_free_spots */ 815 /* setup num_free_spots and room_free_spots */
818 find_doors_in_room_recursive (layout2, map, x, y, doorlist, &ndoors, RP); 816 find_doors_in_room_recursive (layout2, map, x, y, doorlist, &ndoors, RP);
819 817
820 /* deallocate the temp. layout */ 818 /* deallocate the temp. layout */
821 for (i = 0; i < RP->Xsize; i++) 819 for (i = 0; i < RP->Xsize; i++)
822 {
823 free (layout2[i]); 820 free (layout2[i]);
824 } 821
825 free (layout2); 822 free (layout2);
826 return doorlist; 823 return doorlist;
827} 824}
828 825
829 826
830 827
831/* locks and/or hides all the doors in doorlist, or does nothing if 828/* locks and/or hides all the doors in doorlist, or does nothing if
832 opts doesn't say to lock/hide doors. */ 829 opts doesn't say to lock/hide doors. */
833 830
834void 831void
835lock_and_hide_doors (object **doorlist, maptile *map, int opts, RMParms * RP) 832lock_and_hide_doors (object **doorlist, maptile *map, int opts, random_map_params *RP)
836{ 833{
837 object *door; 834 object *door;
838 int i; 835 int i;
839 836
840 /* lock the doors and hide the keys. */ 837 /* lock the doors and hide the keys. */
842 if (opts & DOORED) 839 if (opts & DOORED)
843 { 840 {
844 for (i = 0, door = doorlist[0]; doorlist[i] != NULL; i++) 841 for (i = 0, door = doorlist[0]; doorlist[i] != NULL; i++)
845 { 842 {
846 object *new_door = get_archetype ("locked_door1"); 843 object *new_door = get_archetype ("locked_door1");
847 char keybuf[256]; 844 char keybuf[1024];
848 845
849 door = doorlist[i]; 846 door = doorlist[i];
850 new_door->face = door->face; 847 new_door->face = door->face;
851 new_door->x = door->x; 848 new_door->x = door->x;
852 new_door->y = door->y; 849 new_door->y = door->y;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines