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.45 by root, Mon Oct 12 14:00:58 2009 UTC vs.
Revision 1.46 by root, Fri Nov 6 12:49:19 2009 UTC

41#define LAST_OPTION 64 /* set this to the last real option, for random */ 41#define LAST_OPTION 64 /* set this to the last real option, for random */
42 42
43#define NO_PASS_DOORS 0 43#define NO_PASS_DOORS 0
44#define PASS_DOORS 1 44#define PASS_DOORS 1
45 45
46static object *find_closest_monster (maptile *map, int x, int y, random_map_params *RP);
47static object *find_monster_in_room (maptile *map, int x, int y, random_map_params *RP);
48static void find_spot_in_room_recursive (char **layout, int x, int y, random_map_params *RP);
49static void find_spot_in_room (maptile *map, int x, int y, int *kx, int *ky, random_map_params *RP);
50static object *place_chest (int treasureoptions, int x, int y, maptile *map, maptile *style_map, int n_treasures, random_map_params *RP);
51static object **find_doors_in_room (maptile *map, int x, int y, random_map_params *RP);
52static void lock_and_hide_doors (object **doorlist, maptile *map, int opts, random_map_params *RP);
53static void find_enclosed_spot (maptile *map, int *cx, int *cy, random_map_params *RP);
54static object **surround_by_doors (maptile *map, char **layout, int x, int y, int opts);
55
46/* a macro to get a strongly centered random distribution, 56/* a macro to get a strongly centered random distribution,
47 from 0 to x, centered at x/2 */ 57 from 0 to x, centered at x/2 */
48static int 58static int
49bc_random (int x) 59bc_random (int x)
50{ 60{
410 the_chest->y = yl; 420 the_chest->y = yl;
411 insert_ob_in_map (the_chest, map, NULL, 0); 421 insert_ob_in_map (the_chest, map, NULL, 0);
412 return the_chest; 422 return the_chest;
413} 423}
414 424
415
416/* finds the closest monster and returns him, regardless of doors 425/* finds the closest monster and returns him, regardless of doors or walls */
417 or walls */ 426static object *
418object *
419find_closest_monster (maptile *map, int x, int y, random_map_params *RP) 427find_closest_monster (maptile *map, int x, int y, random_map_params *RP)
420{ 428{
421 int i; 429 int i;
422 430
423 for (i = 0; i < SIZEOFFREE; i++) 431 for (i = 0; i < SIZEOFFREE; i++)
441 return NULL; 449 return NULL;
442} 450}
443 451
444/* both find_monster_in_room routines need to have access to this. */ 452/* both find_monster_in_room routines need to have access to this. */
445 453
446object *theMonsterToFind; 454static object *theMonsterToFind;
447 455
448/* a recursive routine which will return a monster, eventually,if there is one. 456/* a recursive routine which will return a monster, eventually,if there is one.
449 it does a check-off on the layout, converting 0's to 1's */ 457 it does a check-off on the layout, converting 0's to 1's */
450 458static object *
451object *
452find_monster_in_room_recursive (char **layout, maptile *map, int x, int y, random_map_params *RP) 459find_monster_in_room_recursive (char **layout, maptile *map, int x, int y, random_map_params *RP)
453{ 460{
454 int i, j; 461 int i, j;
455 462
456 /* if we've found a monster already, leave */ 463 /* if we've found a monster already, leave */
514 521
515 return theMonsterToFind; 522 return theMonsterToFind;
516} 523}
517 524
518/* a datastructure needed by find_spot_in_room and find_spot_in_room_recursive */ 525/* a datastructure needed by find_spot_in_room and find_spot_in_room_recursive */
519int *room_free_spots_x; 526static int *room_free_spots_x;
520int *room_free_spots_y; 527static int *room_free_spots_y;
521int number_of_free_spots_in_room; 528static int number_of_free_spots_in_room;
522 529
523/* the workhorse routine, which finds the free spots in a room: 530/* the workhorse routine, which finds the free spots in a room:
524a datastructure of free points is set up, and a position chosen from 531a datastructure of free points is set up, and a position chosen from
525that datastructure. */ 532that datastructure. */
526void 533static void
527find_spot_in_room_recursive (char **layout, int x, int y, random_map_params *RP) 534find_spot_in_room_recursive (char **layout, int x, int y, random_map_params *RP)
528{ 535{
529 int i, j; 536 int i, j;
530 537
531 /* bounds check x and y */ 538 /* bounds check x and y */
549 find_spot_in_room_recursive (layout, x + freearr_x[i % 8 + 1], y + freearr_y[i % 8 + 1], RP); 556 find_spot_in_room_recursive (layout, x + freearr_x[i % 8 + 1], y + freearr_y[i % 8 + 1], RP);
550 557
551} 558}
552 559
553/* find a random non-blocked spot in this room to drop a key. */ 560/* find a random non-blocked spot in this room to drop a key. */
554void 561static void
555find_spot_in_room (maptile *map, int x, int y, int *kx, int *ky, random_map_params *RP) 562find_spot_in_room (maptile *map, int x, int y, int *kx, int *ky, random_map_params *RP)
556{ 563{
557 char **layout2; 564 char **layout2;
558 int i, j; 565 int i, j;
559 566
592 599
593 600
594/* searches the map for a spot with walls around it. The more 601/* searches the map for a spot with walls around it. The more
595 walls the better, but it'll settle for 1 wall, or even 0, but 602 walls the better, but it'll settle for 1 wall, or even 0, but
596 it'll return 0 if no FREE spots are found.*/ 603 it'll return 0 if no FREE spots are found.*/
597void 604static void
598find_enclosed_spot (maptile *map, int *cx, int *cy, random_map_params *RP) 605find_enclosed_spot (maptile *map, int *cx, int *cy, random_map_params *RP)
599{ 606{
600 int x, y; 607 int x, y;
601 int i; 608 int i;
602 609
684} 691}
685 692
686/* surrounds the point x,y by doors, so as to enclose something, like 693/* surrounds the point x,y by doors, so as to enclose something, like
687 a chest. It only goes as far as the 8 squares surrounding, and 694 a chest. It only goes as far as the 8 squares surrounding, and
688 it'll remove any monsters it finds.*/ 695 it'll remove any monsters it finds.*/
689object ** 696static object **
690surround_by_doors (maptile *map, char **layout, int x, int y, int opts) 697surround_by_doors (maptile *map, char **layout, int x, int y, int opts)
691{ 698{
692 int i; 699 int i;
693 const char *doors[2]; 700 const char *doors[2];
694 object **doorlist; 701 object **doorlist;
724 } 731 }
725 732
726 return doorlist; 733 return doorlist;
727} 734}
728 735
729
730/* returns the first door in this square, or NULL if there isn't a door. */ 736/* returns the first door in this square, or NULL if there isn't a door. */
731object * 737static object *
732door_in_square (maptile *map, int x, int y) 738door_in_square (maptile *map, int x, int y)
733{ 739{
734 object *tmp;
735
736 for (tmp = GET_MAP_OB (map, x, y); tmp != NULL; tmp = tmp->above) 740 for (object *tmp = GET_MAP_OB (map, x, y); tmp; tmp = tmp->above)
737 if (tmp->type == DOOR || tmp->type == LOCKED_DOOR) 741 if (tmp->type == DOOR || tmp->type == LOCKED_DOOR)
738 return tmp; 742 return tmp;
743
739 return NULL; 744 return NULL;
740} 745}
741 746
742/* the workhorse routine, which finds the doors in a room */ 747/* the workhorse routine, which finds the doors in a room */
743void 748static void
744find_doors_in_room_recursive (char **layout, maptile *map, int x, int y, object **doorlist, int *ndoors, random_map_params *RP) 749find_doors_in_room_recursive (char **layout, maptile *map, int x, int y, object **doorlist, int *ndoors, random_map_params *RP)
745{ 750{
746 int i, j; 751 int i, j;
747 object *door; 752 object *door;
748 753
783 doorlist, ndoors, RP); 788 doorlist, ndoors, RP);
784 } 789 }
785} 790}
786 791
787/* 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. */
788object ** 793static object **
789find_doors_in_room (maptile *map, int x, int y, random_map_params *RP) 794find_doors_in_room (maptile *map, int x, int y, random_map_params *RP)
790{ 795{
791 int i, j; 796 int i, j;
792 int ndoors = 0; 797 int ndoors = 0;
793 798
807 return doorlist; 812 return doorlist;
808} 813}
809 814
810/* locks and/or hides all the doors in doorlist, or does nothing if 815/* locks and/or hides all the doors in doorlist, or does nothing if
811 opts doesn't say to lock/hide doors. */ 816 opts doesn't say to lock/hide doors. */
812void 817static void
813lock_and_hide_doors (object **doorlist, maptile *map, int opts, random_map_params *RP) 818lock_and_hide_doors (object **doorlist, maptile *map, int opts, random_map_params *RP)
814{ 819{
815 object *door; 820 object *door;
816 int i; 821 int i;
817 822

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines