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.29 by root, Sun Sep 10 16:00:23 2006 UTC vs.
Revision 1.32 by root, Thu Oct 5 16:50:06 2006 UTC

1
2/*
3 * static char *rcsid_map_c =
4 * "$Id: map.C,v 1.29 2006/09/10 16:00:23 root Exp $";
5 */
6
7/* 1/*
8 CrossFire, A Multiplayer game for X-windows 2 CrossFire, A Multiplayer game for X-windows
9 3
10 Copyright (C) 2001-2003 Mark Wedel & Crossfire Development Team 4 Copyright (C) 2001-2003 Mark Wedel & Crossfire Development Team
11 Copyright (C) 1992 Frank Tore Johansen 5 Copyright (C) 1992 Frank Tore Johansen
22 16
23 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
25 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 20
27 The authors can be reached via e-mail at crossfire-devel@real-time.com 21 The authors can be reached via e-mail at <crossfire@schmorp.de>
28*/ 22*/
29 23
30 24
31#include <global.h> 25#include <global.h>
32#include <funcpoint.h> 26#include <funcpoint.h>
40 34
41 35
42extern int nrofallocobjects, nroffreeobjects; 36extern int nrofallocobjects, nroffreeobjects;
43 37
44/* 38/*
45 * Returns the mapstruct which has a name matching the given argument. 39 * Returns the maptile which has a name matching the given argument.
46 * return NULL if no match is found. 40 * return NULL if no match is found.
47 */ 41 */
48 42
49mapstruct * 43maptile *
50has_been_loaded (const char *name) 44has_been_loaded (const char *name)
51{ 45{
52 mapstruct *map; 46 maptile *map;
53 47
54 if (!name || !*name) 48 if (!name || !*name)
55 return 0; 49 return 0;
56 for (map = first_map; map; map = map->next) 50 for (map = first_map; map; map = map->next)
57 if (!strcmp (name, map->path)) 51 if (!strcmp (name, map->path))
210 * Dumping these at llevError doesn't seem right, but is 204 * Dumping these at llevError doesn't seem right, but is
211 * necessary to make sure the information is in fact logged. 205 * necessary to make sure the information is in fact logged.
212 */ 206 */
213 207
214void 208void
215dump_map (const mapstruct *m) 209dump_map (const maptile *m)
216{ 210{
217 LOG (llevError, "Map %s status: %d.\n", m->path, m->in_memory); 211 LOG (llevError, "Map %s status: %d.\n", m->path, m->in_memory);
218 LOG (llevError, "Size: %dx%d Start: %d,%d\n", MAP_WIDTH (m), MAP_HEIGHT (m), MAP_ENTER_X (m), MAP_ENTER_Y (m)); 212 LOG (llevError, "Size: %dx%d Start: %d,%d\n", MAP_WIDTH (m), MAP_HEIGHT (m), MAP_ENTER_X (m), MAP_ENTER_Y (m));
219 213
220 if (m->msg != NULL) 214 if (m->msg != NULL)
237 */ 231 */
238 232
239void 233void
240dump_all_maps (void) 234dump_all_maps (void)
241{ 235{
242 mapstruct *m; 236 maptile *m;
243 237
244 for (m = first_map; m != NULL; m = m->next) 238 for (m = first_map; m != NULL; m = m->next)
245 { 239 {
246 dump_map (m); 240 dump_map (m);
247 } 241 }
256 * is needed. The case of not passing values is if we're just 250 * is needed. The case of not passing values is if we're just
257 * checking for the existence of something on those spaces, but 251 * checking for the existence of something on those spaces, but
258 * don't expect to insert/remove anything from those spaces. 252 * don't expect to insert/remove anything from those spaces.
259 */ 253 */
260int 254int
261get_map_flags (mapstruct *oldmap, mapstruct **newmap, sint16 x, sint16 y, sint16 * nx, sint16 * ny) 255get_map_flags (maptile *oldmap, maptile **newmap, sint16 x, sint16 y, sint16 * nx, sint16 * ny)
262{ 256{
263 sint16 newx, newy; 257 sint16 newx, newy;
264 int retval = 0; 258 int retval = 0;
265 mapstruct *mp; 259 maptile *mp;
266 260
267 if (out_of_map (oldmap, x, y)) 261 if (out_of_map (oldmap, x, y))
268 return P_OUT_OF_MAP; 262 return P_OUT_OF_MAP;
269 newx = x; 263 newx = x;
270 newy = y; 264 newy = y;
281 retval |= mp->spaces[newx + mp->width * newy].flags; 275 retval |= mp->spaces[newx + mp->width * newy].flags;
282 276
283 return retval; 277 return retval;
284} 278}
285 279
286
287/* 280/*
288 * Returns true if the given coordinate is blocked except by the 281 * Returns true if the given coordinate is blocked except by the
289 * object passed is not blocking. This is used with 282 * object passed is not blocking. This is used with
290 * multipart monsters - if we want to see if a 2x2 monster 283 * multipart monsters - if we want to see if a 2x2 monster
291 * can move 1 space to the left, we don't want its own area 284 * can move 1 space to the left, we don't want its own area
294 * monster. 287 * monster.
295 * m, x, y are the target map/coordinates - needed for map tiling. 288 * m, x, y are the target map/coordinates - needed for map tiling.
296 * the coordinates & map passed in should have been updated for tiling 289 * the coordinates & map passed in should have been updated for tiling
297 * by the caller. 290 * by the caller.
298 */ 291 */
299
300int 292int
301blocked_link (object *ob, mapstruct *m, int sx, int sy) 293blocked_link (object *ob, maptile *m, int sx, int sy)
302{ 294{
303 object *tmp; 295 object *tmp;
304 int mflags, blocked; 296 int mflags, blocked;
305 297
306 /* Make sure the coordinates are valid - they should be, as caller should 298 /* Make sure the coordinates are valid - they should be, as caller should
418 * code, we need to have actual object to check its move_type 410 * code, we need to have actual object to check its move_type
419 * against the move_block values. 411 * against the move_block values.
420 */ 412 */
421 413
422int 414int
423ob_blocked (const object *ob, mapstruct *m, sint16 x, sint16 y) 415ob_blocked (const object *ob, maptile *m, sint16 x, sint16 y)
424{ 416{
425 archetype *tmp; 417 archetype *tmp;
426 int flag; 418 int flag;
427 mapstruct *m1; 419 maptile *m1;
428 sint16 sx, sy; 420 sint16 sx, sy;
429 421
430 if (ob == NULL) 422 if (ob == NULL)
431 { 423 {
432 flag = get_map_flags (m, &m1, x, y, &sx, &sy); 424 flag = get_map_flags (m, &m1, x, y, &sx, &sy);
497 * they are saved). We do have to look for the old maps that did save 489 * they are saved). We do have to look for the old maps that did save
498 * the more sections and not re-add sections for them. 490 * the more sections and not re-add sections for them.
499 */ 491 */
500 492
501static void 493static void
502link_multipart_objects (mapstruct *m) 494link_multipart_objects (maptile *m)
503{ 495{
504 int x, y; 496 int x, y;
505 object *tmp, *op, *last, *above; 497 object *tmp, *op, *last, *above;
506 archetype *at; 498 archetype *at;
507 499
544 * Loads (ands parses) the objects into a given map from the specified 536 * Loads (ands parses) the objects into a given map from the specified
545 * file pointer. 537 * file pointer.
546 * mapflags is the same as we get with load_original_map 538 * mapflags is the same as we get with load_original_map
547 */ 539 */
548void 540void
549load_objects (mapstruct *m, object_thawer & fp, int mapflags) 541load_objects (maptile *m, object_thawer & fp, int mapflags)
550{ 542{
551 int i, j; 543 int i, j;
552 int unique; 544 int unique;
553 object *op, *prev = NULL, *last_more = NULL, *otmp; 545 object *op, *prev = NULL, *last_more = NULL, *otmp;
554 546
620 * Modified by MSW 2001-07-01 to do in a single pass - reduces code, 612 * Modified by MSW 2001-07-01 to do in a single pass - reduces code,
621 * and we only save the head of multi part objects - this is needed 613 * and we only save the head of multi part objects - this is needed
622 * in order to do map tiling properly. 614 * in order to do map tiling properly.
623 */ 615 */
624void 616void
625save_objects (mapstruct *m, object_freezer & fp, object_freezer & fp2, int flag) 617save_objects (maptile *m, object_freezer & fp, object_freezer & fp2, int flag)
626{ 618{
627 int i, j = 0, unique = 0; 619 int i, j = 0, unique = 0;
628 object *op; 620 object *op;
629 621
630 /* first pass - save one-part objects */ 622 /* first pass - save one-part objects */
654 } /* for this space */ 646 } /* for this space */
655 } /* for this j */ 647 } /* for this j */
656} 648}
657 649
658/* 650/*
659 * Allocates, initialises, and returns a pointer to a mapstruct. 651 * Allocates, initialises, and returns a pointer to a maptile.
660 * Modified to no longer take a path option which was not being 652 * Modified to no longer take a path option which was not being
661 * used anyways. MSW 2001-07-01 653 * used anyways. MSW 2001-07-01
662 */ 654 */
663 655
664mapstruct * 656maptile *
665get_linked_map (void) 657get_linked_map (void)
666{ 658{
667 mapstruct *map = new mapstruct; 659 maptile *map = new maptile;
668 mapstruct *mp; 660 maptile *mp;
669 661
670 for (mp = first_map; mp != NULL && mp->next != NULL; mp = mp->next); 662 for (mp = first_map; mp != NULL && mp->next != NULL; mp = mp->next);
671 if (mp == NULL) 663 if (mp == NULL)
672 first_map = map; 664 first_map = map;
673 else 665 else
688 MAP_WORLDPARTY (map) = -1; 680 MAP_WORLDPARTY (map) = -1;
689 return map; 681 return map;
690} 682}
691 683
692/* 684/*
693 * Allocates the arrays contained in a mapstruct. 685 * Allocates the arrays contained in a maptile.
694 * This basically allocates the dynamic array of spaces for the 686 * This basically allocates the dynamic array of spaces for the
695 * map. 687 * map.
696 */ 688 */
697 689
698void 690void
699allocate_map (mapstruct *m) 691allocate_map (maptile *m)
700{ 692{
701 m->in_memory = MAP_IN_MEMORY; 693 m->in_memory = MAP_IN_MEMORY;
702 /* Log this condition and free the storage. We could I suppose 694 /* Log this condition and free the storage. We could I suppose
703 * realloc, but if the caller is presuming the data will be intact, 695 * realloc, but if the caller is presuming the data will be intact,
704 * that is their poor assumption. 696 * that is their poor assumption.
716} 708}
717 709
718/* Create and returns a map of the specific size. Used 710/* Create and returns a map of the specific size. Used
719 * in random map code and the editor. 711 * in random map code and the editor.
720 */ 712 */
721mapstruct * 713maptile *
722get_empty_map (int sizex, int sizey) 714get_empty_map (int sizex, int sizey)
723{ 715{
724 mapstruct *m = get_linked_map (); 716 maptile *m = get_linked_map ();
725 717
726 m->width = sizex; 718 m->width = sizex;
727 m->height = sizey; 719 m->height = sizey;
728 m->in_memory = MAP_SWAPPED; 720 m->in_memory = MAP_SWAPPED;
729 allocate_map (m); 721 allocate_map (m);
811} 803}
812 804
813/* opposite of parse string, this puts the string that was originally fed in to 805/* opposite of parse string, this puts the string that was originally fed in to
814 * the map (or something equivilent) into output_string. */ 806 * the map (or something equivilent) into output_string. */
815static void 807static void
816print_shop_string (mapstruct *m, char *output_string) 808print_shop_string (maptile *m, char *output_string)
817{ 809{
818 int i; 810 int i;
819 char tmp[MAX_BUF]; 811 char tmp[MAX_BUF];
820 812
821 strcpy (output_string, ""); 813 strcpy (output_string, "");
855 * MSW 2001-07-01 847 * MSW 2001-07-01
856 * return 0 on success, 1 on failure. 848 * return 0 on success, 1 on failure.
857 */ 849 */
858 850
859static int 851static int
860load_map_header (object_thawer & fp, mapstruct *m) 852load_map_header (object_thawer & fp, maptile *m)
861{ 853{
862 char buf[HUGE_BUF], msgbuf[HUGE_BUF], maplorebuf[HUGE_BUF], *key = NULL, *value, *end; 854 char buf[HUGE_BUF], msgbuf[HUGE_BUF], maplorebuf[HUGE_BUF], *key = NULL, *value, *end;
863 int msgpos = 0; 855 int msgpos = 0;
864 int maplorepos = 0; 856 int maplorepos = 0;
865 857
1153} 1145}
1154 1146
1155/* 1147/*
1156 * Opens the file "filename" and reads information about the map 1148 * Opens the file "filename" and reads information about the map
1157 * from the given file, and stores it in a newly allocated 1149 * from the given file, and stores it in a newly allocated
1158 * mapstruct. A pointer to this structure is returned, or NULL on failure. 1150 * maptile. A pointer to this structure is returned, or NULL on failure.
1159 * flags correspond to those in map.h. Main ones used are 1151 * flags correspond to those in map.h. Main ones used are
1160 * MAP_PLAYER_UNIQUE, in which case we don't do any name changes, and 1152 * MAP_PLAYER_UNIQUE, in which case we don't do any name changes, and
1161 * MAP_BLOCK, in which case we block on this load. This happens in all 1153 * MAP_BLOCK, in which case we block on this load. This happens in all
1162 * cases, no matter if this flag is set or not. 1154 * cases, no matter if this flag is set or not.
1163 * MAP_STYLE: style map - don't add active objects, don't add to server 1155 * MAP_STYLE: style map - don't add active objects, don't add to server
1164 * managed map list. 1156 * managed map list.
1165 */ 1157 */
1166 1158
1167mapstruct * 1159maptile *
1168load_original_map (const char *filename, int flags) 1160load_original_map (const char *filename, int flags)
1169{ 1161{
1170 mapstruct *m; 1162 maptile *m;
1171 char pathname[MAX_BUF]; 1163 char pathname[MAX_BUF];
1172 1164
1173 if (flags & MAP_PLAYER_UNIQUE) 1165 if (flags & MAP_PLAYER_UNIQUE)
1174 strcpy (pathname, filename); 1166 strcpy (pathname, filename);
1175 else if (flags & MAP_OVERLAY) 1167 else if (flags & MAP_OVERLAY)
1211 * Loads a map, which has been loaded earlier, from file. 1203 * Loads a map, which has been loaded earlier, from file.
1212 * Return the map object we load into (this can change from the passed 1204 * Return the map object we load into (this can change from the passed
1213 * option if we can't find the original map) 1205 * option if we can't find the original map)
1214 */ 1206 */
1215 1207
1216static mapstruct * 1208static maptile *
1217load_temporary_map (mapstruct *m) 1209load_temporary_map (maptile *m)
1218{ 1210{
1219 char buf[MAX_BUF]; 1211 char buf[MAX_BUF];
1220 1212
1221 if (!m->tmpname) 1213 if (!m->tmpname)
1222 { 1214 {
1264 * Loads a map, which has been loaded earlier, from file. 1256 * Loads a map, which has been loaded earlier, from file.
1265 * Return the map object we load into (this can change from the passed 1257 * Return the map object we load into (this can change from the passed
1266 * option if we can't find the original map) 1258 * option if we can't find the original map)
1267 */ 1259 */
1268 1260
1269mapstruct * 1261maptile *
1270load_overlay_map (const char *filename, mapstruct *m) 1262load_overlay_map (const char *filename, maptile *m)
1271{ 1263{
1272 char pathname[MAX_BUF]; 1264 char pathname[MAX_BUF];
1273 1265
1274 strcpy (pathname, create_overlay_pathname (filename)); 1266 strcpy (pathname, create_overlay_pathname (filename));
1275 1267
1298 * This is the start of unique map handling code 1290 * This is the start of unique map handling code
1299 *****************************************************************************/ 1291 *****************************************************************************/
1300 1292
1301/* This goes through map 'm' and removed any unique items on the map. */ 1293/* This goes through map 'm' and removed any unique items on the map. */
1302static void 1294static void
1303delete_unique_items (mapstruct *m) 1295delete_unique_items (maptile *m)
1304{ 1296{
1305 int i, j, unique; 1297 int i, j, unique;
1306 object *op, *next; 1298 object *op, *next;
1307 1299
1308 for (i = 0; i < MAP_WIDTH (m); i++) 1300 for (i = 0; i < MAP_WIDTH (m); i++)
1330/* 1322/*
1331 * Loads unique objects from file(s) into the map which is in memory 1323 * Loads unique objects from file(s) into the map which is in memory
1332 * m is the map to load unique items into. 1324 * m is the map to load unique items into.
1333 */ 1325 */
1334static void 1326static void
1335load_unique_objects (mapstruct *m) 1327load_unique_objects (maptile *m)
1336{ 1328{
1337 int count; 1329 int count;
1338 char firstname[MAX_BUF]; 1330 char firstname[MAX_BUF];
1339 1331
1340 for (count = 0; count < 10; count++) 1332 for (count = 0; count < 10; count++)
1363 1355
1364/* 1356/*
1365 * Saves a map to file. If flag is set, it is saved into the same 1357 * Saves a map to file. If flag is set, it is saved into the same
1366 * file it was (originally) loaded from. Otherwise a temporary 1358 * file it was (originally) loaded from. Otherwise a temporary
1367 * filename will be genarated, and the file will be stored there. 1359 * filename will be genarated, and the file will be stored there.
1368 * The temporary filename will be stored in the mapstructure. 1360 * The temporary filename will be stored in the maptileure.
1369 * If the map is unique, we also save to the filename in the map 1361 * If the map is unique, we also save to the filename in the map
1370 * (this should have been updated when first loaded) 1362 * (this should have been updated when first loaded)
1371 */ 1363 */
1372 1364
1373int 1365int
1374new_save_map (mapstruct *m, int flag) 1366new_save_map (maptile *m, int flag)
1375{ 1367{
1376 char filename[MAX_BUF], buf[MAX_BUF], shop[MAX_BUF]; 1368 char filename[MAX_BUF], buf[MAX_BUF], shop[MAX_BUF];
1377 int i; 1369 int i;
1378 1370
1379 if (flag && !*m->path) 1371 if (flag && !*m->path)
1543/* 1535/*
1544 * Remove and free all objects in the given map. 1536 * Remove and free all objects in the given map.
1545 */ 1537 */
1546 1538
1547void 1539void
1548free_all_objects (mapstruct *m) 1540free_all_objects (maptile *m)
1549{ 1541{
1550 int i, j; 1542 int i, j;
1551 object *op; 1543 object *op;
1552 1544
1553 for (i = 0; i < MAP_WIDTH (m); i++) 1545 for (i = 0; i < MAP_WIDTH (m); i++)
1576 } 1568 }
1577 } 1569 }
1578} 1570}
1579 1571
1580/* 1572/*
1581 * Frees everything allocated by the given mapstructure. 1573 * Frees everything allocated by the given maptileure.
1582 * don't free tmpname - our caller is left to do that 1574 * don't free tmpname - our caller is left to do that
1583 */ 1575 */
1584 1576
1585void 1577void
1586free_map (mapstruct *m, int flag) 1578free_map (maptile *m, int flag)
1587{ 1579{
1588 int i; 1580 int i;
1589 1581
1590 if (!m->in_memory) 1582 if (!m->in_memory)
1591 { 1583 {
1618 } 1610 }
1619 m->in_memory = MAP_SWAPPED; 1611 m->in_memory = MAP_SWAPPED;
1620} 1612}
1621 1613
1622/* 1614/*
1623 * function: vanish mapstruct 1615 * function: vanish maptile
1624 * m : pointer to mapstruct, if NULL no action 1616 * m : pointer to maptile, if NULL no action
1625 * this deletes all the data on the map (freeing pointers) 1617 * this deletes all the data on the map (freeing pointers)
1626 * and then removes this map from the global linked list of maps. 1618 * and then removes this map from the global linked list of maps.
1627 */ 1619 */
1628 1620
1629void 1621void
1630delete_map (mapstruct *m) 1622delete_map (maptile *m)
1631{ 1623{
1632 mapstruct *tmp, *last; 1624 maptile *tmp, *last;
1633 int i; 1625 int i;
1634 1626
1635 if (!m) 1627 if (!m)
1636 return; 1628 return;
1637 1629
1699 * dont do any more name translation on it. 1691 * dont do any more name translation on it.
1700 * 1692 *
1701 * Returns a pointer to the given map. 1693 * Returns a pointer to the given map.
1702 */ 1694 */
1703 1695
1704mapstruct * 1696maptile *
1705ready_map_name (const char *name, int flags) 1697ready_map_name (const char *name, int flags)
1706{ 1698{
1707 mapstruct *m; 1699 maptile *m;
1708 1700
1709 if (!name) 1701 if (!name)
1710 return (NULL); 1702 return (NULL);
1711 1703
1712 /* Have we been at this level before? */ 1704 /* Have we been at this level before? */
1814 * have a difficulty set than using this function - human calculation 1806 * have a difficulty set than using this function - human calculation
1815 * is much better than this functions guesswork. 1807 * is much better than this functions guesswork.
1816 */ 1808 */
1817 1809
1818int 1810int
1819calculate_difficulty (mapstruct *m) 1811calculate_difficulty (maptile *m)
1820{ 1812{
1821 object *op; 1813 object *op;
1822 archetype *at; 1814 archetype *at;
1823 int x, y, i; 1815 int x, y, i;
1824 long monster_cnt = 0; 1816 long monster_cnt = 0;
1866 1858
1867 return 1; 1859 return 1;
1868} 1860}
1869 1861
1870void 1862void
1871clean_tmp_map (mapstruct *m) 1863clean_tmp_map (maptile *m)
1872{ 1864{
1873 if (m->tmpname == NULL) 1865 if (m->tmpname == NULL)
1874 return; 1866 return;
1875 INVOKE_MAP (CLEAN, m); 1867 INVOKE_MAP (CLEAN, m);
1876 (void) unlink (m->tmpname); 1868 (void) unlink (m->tmpname);
1901 * to maps than los. 1893 * to maps than los.
1902 * postive values make it darker, negative make it brighter 1894 * postive values make it darker, negative make it brighter
1903 */ 1895 */
1904 1896
1905int 1897int
1906change_map_light (mapstruct *m, int change) 1898change_map_light (maptile *m, int change)
1907{ 1899{
1908 int new_level = m->darkness + change; 1900 int new_level = m->darkness + change;
1909 1901
1910 /* Nothing to do */ 1902 /* Nothing to do */
1911 if (!change || (new_level <= 0 && m->darkness == 0) || (new_level >= MAX_DARKNESS && m->darkness >= MAX_DARKNESS)) 1903 if (!change || (new_level <= 0 && m->darkness == 0) || (new_level >= MAX_DARKNESS && m->darkness >= MAX_DARKNESS))
1942 * on the map (what it looks like, whether it blocks magic, 1934 * on the map (what it looks like, whether it blocks magic,
1943 * has a living creatures, prevents people from passing 1935 * has a living creatures, prevents people from passing
1944 * through, etc) 1936 * through, etc)
1945 */ 1937 */
1946void 1938void
1947update_position (mapstruct *m, int x, int y) 1939update_position (maptile *m, int x, int y)
1948{ 1940{
1949 object *tmp, *last = NULL; 1941 object *tmp, *last = NULL;
1950 uint8 flags = 0, oldflags, light = 0, anywhere = 0; 1942 uint8 flags = 0, oldflags, light = 0, anywhere = 0;
1951 New_Face *top, *floor, *middle; 1943 New_Face *top, *floor, *middle;
1952 object *top_obj, *floor_obj, *middle_obj; 1944 object *top_obj, *floor_obj, *middle_obj;
2145 SET_MAP_LIGHT (m, x, y, light); 2137 SET_MAP_LIGHT (m, x, y, light);
2146} 2138}
2147 2139
2148 2140
2149void 2141void
2150set_map_reset_time (mapstruct *map) 2142set_map_reset_time (maptile *map)
2151{ 2143{
2152 int timeout; 2144 int timeout;
2153 2145
2154 timeout = MAP_RESET_TIMEOUT (map); 2146 timeout = MAP_RESET_TIMEOUT (map);
2155 if (timeout <= 0) 2147 if (timeout <= 0)
2164 * maps tile_map values if it tiles back to this one. It returns 2156 * maps tile_map values if it tiles back to this one. It returns
2165 * the value of orig_map->tile_map[tile_num]. It really only does this 2157 * the value of orig_map->tile_map[tile_num]. It really only does this
2166 * so that it is easier for calling functions to verify success. 2158 * so that it is easier for calling functions to verify success.
2167 */ 2159 */
2168 2160
2169static mapstruct * 2161static maptile *
2170load_and_link_tiled_map (mapstruct *orig_map, int tile_num) 2162load_and_link_tiled_map (maptile *orig_map, int tile_num)
2171{ 2163{
2172 int dest_tile = (tile_num + 2) % 4; 2164 int dest_tile = (tile_num + 2) % 4;
2173 char *path = path_combine_and_normalize (orig_map->path, orig_map->tile_path[tile_num]); 2165 char *path = path_combine_and_normalize (orig_map->path, orig_map->tile_path[tile_num]);
2174 2166
2175 orig_map->tile_map[tile_num] = ready_map_name (path, 0); 2167 orig_map->tile_map[tile_num] = ready_map_name (path, 0);
2190 * tiled maps. 2182 * tiled maps.
2191 * 2183 *
2192 * 2184 *
2193 */ 2185 */
2194int 2186int
2195out_of_map (mapstruct *m, int x, int y) 2187out_of_map (maptile *m, int x, int y)
2196{ 2188{
2197 2189
2198 /* If we get passed a null map, this is obviously the 2190 /* If we get passed a null map, this is obviously the
2199 * case. This generally shouldn't happen, but if the 2191 * case. This generally shouldn't happen, but if the
2200 * map loads fail below, it could happen. 2192 * map loads fail below, it could happen.
2255 * the map as that the coordinates are really on, and 2247 * the map as that the coordinates are really on, and
2256 * updates x and y to be the localized coordinates. 2248 * updates x and y to be the localized coordinates.
2257 * Using this is more efficient of calling out_of_map 2249 * Using this is more efficient of calling out_of_map
2258 * and then figuring out what the real map is 2250 * and then figuring out what the real map is
2259 */ 2251 */
2260mapstruct * 2252maptile *
2261get_map_from_coord (mapstruct *m, sint16 * x, sint16 * y) 2253get_map_from_coord (maptile *m, sint16 * x, sint16 * y)
2262{ 2254{
2263 2255
2264 if (*x < 0) 2256 if (*x < 0)
2265 { 2257 {
2266 if (!m->tile_path[3]) 2258 if (!m->tile_path[3])
2312/** 2304/**
2313 * Return whether map2 is adjacent to map1. If so, store the distance from 2305 * Return whether map2 is adjacent to map1. If so, store the distance from
2314 * map1 to map2 in dx/dy. 2306 * map1 to map2 in dx/dy.
2315 */ 2307 */
2316static int 2308static int
2317adjacent_map (const mapstruct *map1, const mapstruct *map2, int *dx, int *dy) 2309adjacent_map (const maptile *map1, const maptile *map2, int *dx, int *dy)
2318{ 2310{
2319 if (!map1 || !map2) 2311 if (!map1 || !map2)
2320 return 0; 2312 return 0;
2321 2313
2322 if (map1 == map2) 2314 if (map1 == map2)
2480 * for something in the future. Also, since no object is pasted, the best 2472 * for something in the future. Also, since no object is pasted, the best
2481 * field of the rv_vector is set to NULL. 2473 * field of the rv_vector is set to NULL.
2482 */ 2474 */
2483 2475
2484void 2476void
2485get_rangevector_from_mapcoord (const mapstruct *m, int x, int y, const object *op2, rv_vector * retval, int flags) 2477get_rangevector_from_mapcoord (const maptile *m, int x, int y, const object *op2, rv_vector * retval, int flags)
2486{ 2478{
2487 if (!adjacent_map (m, op2->map, &retval->distance_x, &retval->distance_y)) 2479 if (!adjacent_map (m, op2->map, &retval->distance_x, &retval->distance_y))
2488 { 2480 {
2489 /* be conservative and fill in _some_ data */ 2481 /* be conservative and fill in _some_ data */
2490 retval->distance = 100000; 2482 retval->distance = 100000;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines