/*
* $Id: btspath.c,v 1.1.1.1 2005/01/11 21:18:04 kstevens Exp $
*
* Author: Markus Stenberg <fingon@iki.fi>
*
* Copyright (c) 1997 Markus Stenberg
* All rights reserved
*
* Created: Tue Sep 23 19:49:20 1997 fingon
* Last modified: Thu Mar 5 18:50:58 1998 fingon
*
*/
#include "mech.h"
extern MAP *spath_map;
#define XSIZE spath_map->map_width
#define YSIZE spath_map->map_height
extern int (*TileCost) (int fx, int fy, int tx, int ty);
int MechTileCost(int fx, int fy, int tx, int ty)
{
int z1, z2;
int bonus;
char terr;
if (tx < 0 || ty >= XSIZE || ty < 0 || ty >= YSIZE)
return 0;
z1 = Elevation(spath_map, fx, fy);
z2 = Elevation(spath_map, tx, ty);
if ((bonus = abs(z1 - z2)) > 2)
return 0;
terr = GetRTerrain(spath_map, tx, ty);
if (terr == WATER && z2) /* No waterwalking, yet */
return 0;
if (terr == GRASSLAND)
return 1 + bonus;
switch (terr) {
case LIGHT_FOREST:
case ROUGH:
bonus++;
break;
case HEAVY_FOREST:
case MOUNTAINS:
bonus += 2;
break;
}
return bonus + 1;
}
int HoverTankTileCost(int fx, int fy, int tx, int ty)
{
int z1, z2;
int bonus;
char terr;
if (tx < 0 || ty >= XSIZE || ty < 0 || ty >= YSIZE)
return 0;
z1 = Elevation(spath_map, fx, fy);
z2 = Elevation(spath_map, tx, ty);
if ((bonus = abs(z1 - z2)) > 1)
return 0;
terr = GetRTerrain(spath_map, tx, ty);
if (terr == WATER) /* Hovers LOVE water */
return 1;
if (terr == GRASSLAND)
return 1 + bonus;
if (terr == HEAVY_FOREST)
return 0;
switch (terr) {
case LIGHT_FOREST:
case ROUGH:
bonus++;
break;
case MOUNTAINS:
bonus += 2;
break;
}
return bonus + 1;
}
int TrackedTankTileCost(int fx, int fy, int tx, int ty)
{
int z1, z2;
int bonus;
char terr;
if (tx < 0 || ty >= XSIZE || ty < 0 || ty >= YSIZE)
return 0;
z1 = Elevation(spath_map, fx, fy);
z2 = Elevation(spath_map, tx, ty);
if ((bonus = abs(z1 - z2)) > 1)
return 0;
terr = GetRTerrain(spath_map, tx, ty);
if (terr == GRASSLAND)
return 1 + bonus;
if (terr == WATER)
return 0;
if (terr == HEAVY_FOREST)
return 0;
switch (terr) {
case LIGHT_FOREST:
case ROUGH:
bonus++;
break;
case HEAVY_FOREST:
case MOUNTAINS:
bonus += 2;
break;
}
return bonus + 1;
}