ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/map.c
(Generate patch)

Comparing deliantra/server/common/map.c (file contents):
Revision 1.6 by root, Mon Mar 6 22:59:26 2006 UTC vs.
Revision 1.10 by root, Sat Apr 1 15:39:58 2006 UTC

1/* 1/*
2 * static char *rcsid_map_c = 2 * static char *rcsid_map_c =
3 * "$Id: map.c,v 1.6 2006/03/06 22:59:26 root Exp $"; 3 * "$Id: map.c,v 1.10 2006/04/01 15:39:58 root Exp $";
4 */ 4 */
5 5
6/* 6/*
7 CrossFire, A Multiplayer game for X-windows 7 CrossFire, A Multiplayer game for X-windows
8 8
38#include "path.h" 38#include "path.h"
39 39
40 40
41extern int nrofallocobjects,nroffreeobjects; 41extern int nrofallocobjects,nroffreeobjects;
42 42
43void (*load_original_map_callback)(mapstruct *map);
44void (*load_temporary_map_callback)(mapstruct *map);
45void (*clean_temporary_map_callback)(mapstruct *map);
43 46
44/* 47/*
45 * Returns the mapstruct which has a name matching the given argument. 48 * Returns the mapstruct which has a name matching the given argument.
46 * return NULL if no match is found. 49 * return NULL if no match is found.
47 */ 50 */
587 * and we only save the head of multi part objects - this is needed 590 * and we only save the head of multi part objects - this is needed
588 * in order to do map tiling properly. 591 * in order to do map tiling properly.
589 */ 592 */
590void save_objects (mapstruct *m, FILE *fp, FILE *fp2, int flag) { 593void save_objects (mapstruct *m, FILE *fp, FILE *fp2, int flag) {
591 int i, j = 0,unique=0; 594 int i, j = 0,unique=0;
592 object *op, *otmp; 595 object *op;
593 /* first pass - save one-part objects */ 596 /* first pass - save one-part objects */
594 for(i = 0; i < MAP_WIDTH(m); i++) 597 for(i = 0; i < MAP_WIDTH(m); i++)
595 for (j = 0; j < MAP_HEIGHT(m); j++) { 598 for (j = 0; j < MAP_HEIGHT(m); j++) {
596 unique=0; 599 unique=0;
597 for(op = get_map_ob (m, i, j); op; op = otmp) { 600 for(op = get_map_ob (m, i, j); op; op = op->above) {
598 otmp = op->above;
599
600 if (QUERY_FLAG(op,FLAG_IS_FLOOR) && QUERY_FLAG(op, FLAG_UNIQUE)) 601 if (QUERY_FLAG(op,FLAG_IS_FLOOR) && QUERY_FLAG(op, FLAG_UNIQUE))
601 unique=1; 602 unique=1;
602 603
603 if(op->type == PLAYER) { 604 if(op->type == PLAYER) {
604 LOG(llevDebug, "Player on map that is being saved\n"); 605 LOG(llevDebug, "Player on map that is being saved\n");
676 677
677 if(m->spaces==NULL) 678 if(m->spaces==NULL)
678 fatal(OUT_OF_MEMORY); 679 fatal(OUT_OF_MEMORY);
679} 680}
680 681
681/* Creatures and returns a map of the specific size. Used 682/* Create and returns a map of the specific size. Used
682 * in random map code and the editor. 683 * in random map code and the editor.
683 */ 684 */
684mapstruct *get_empty_map(int sizex, int sizey) { 685mapstruct *get_empty_map(int sizex, int sizey) {
685 mapstruct *m = get_linked_map(); 686 mapstruct *m = get_linked_map();
686 m->width = sizex; 687 m->width = sizex;
1010 * cases, no matter if this flag is set or not. 1011 * cases, no matter if this flag is set or not.
1011 * MAP_STYLE: style map - don't add active objects, don't add to server 1012 * MAP_STYLE: style map - don't add active objects, don't add to server
1012 * managed map list. 1013 * managed map list.
1013 */ 1014 */
1014 1015
1015void (*load_original_map_callback)(mapstruct *map);
1016void (*load_temporary_map_callback)(mapstruct *map);
1017
1018mapstruct *load_original_map(const char *filename, int flags) { 1016mapstruct *load_original_map(const char *filename, int flags) {
1019 FILE *fp; 1017 FILE *fp;
1020 mapstruct *m; 1018 mapstruct *m;
1021 int comp; 1019 int comp;
1022 char pathname[MAX_BUF]; 1020 char pathname[MAX_BUF];
1150 *****************************************************************************/ 1148 *****************************************************************************/
1151 1149
1152/* This goes through map 'm' and removed any unique items on the map. */ 1150/* This goes through map 'm' and removed any unique items on the map. */
1153static void delete_unique_items(mapstruct *m) 1151static void delete_unique_items(mapstruct *m)
1154{ 1152{
1155 int i,j,unique=0; 1153 int i,j,unique;
1156 object *op, *next; 1154 object *op, *next;
1157 1155
1158 for(i=0; i<MAP_WIDTH(m); i++) 1156 for(i=0; i<MAP_WIDTH(m); i++)
1159 for(j=0; j<MAP_HEIGHT(m); j++) { 1157 for(j=0; j<MAP_HEIGHT(m); j++) {
1160 unique=0; 1158 unique=0;
1664} 1662}
1665 1663
1666void clean_tmp_map(mapstruct *m) { 1664void clean_tmp_map(mapstruct *m) {
1667 if(m->tmpname == NULL) 1665 if(m->tmpname == NULL)
1668 return; 1666 return;
1667 if (clean_temporary_map_callback)
1668 clean_temporary_map_callback (m);
1669 (void) unlink(m->tmpname); 1669 (void) unlink(m->tmpname);
1670} 1670}
1671 1671
1672void free_all_maps(void) 1672void free_all_maps(void)
1673{ 1673{
1701 return 0; 1701 return 0;
1702 } 1702 }
1703 1703
1704 /* inform all players on the map */ 1704 /* inform all players on the map */
1705 if (change>0) 1705 if (change>0)
1706 new_info_map(NDI_BLACK, m,"It becomes darker."); 1706 new_info_map(NDI_BLACK|NDI_UNIQUE, m,"It becomes darker.");
1707 else 1707 else
1708 new_info_map(NDI_BLACK, m,"It becomes brighter."); 1708 new_info_map(NDI_BLACK|NDI_UNIQUE, m,"It becomes brighter.");
1709 1709
1710 /* Do extra checking. since m->darkness is a unsigned value, 1710 /* Do extra checking. since m->darkness is a unsigned value,
1711 * we need to be extra careful about negative values. 1711 * we need to be extra careful about negative values.
1712 * In general, the checks below are only needed if change 1712 * In general, the checks below are only needed if change
1713 * is not +/-1 1713 * is not +/-1

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines