btmux/autom4te.cache/
btmux/doc/.svn/
btmux/event/.svn/
btmux/game/.svn/
btmux/game/bin/.svn/
btmux/game/data/.svn/
btmux/game/logs/.svn/
btmux/game/maps/
btmux/game/maps/.svn/
btmux/game/maps/.svn/prop-base/
btmux/game/maps/.svn/props/
btmux/game/maps/.svn/text-base/
btmux/game/maps/.svn/wcprops/
btmux/game/mechs/
btmux/game/mechs/.svn/
btmux/game/mechs/.svn/prop-base/
btmux/game/mechs/.svn/props/
btmux/game/mechs/.svn/text-base/
btmux/game/mechs/.svn/wcprops/
btmux/game/text/.svn/
btmux/include/.svn/
btmux/misc/
btmux/misc/.svn/
btmux/misc/.svn/prop-base/
btmux/misc/.svn/props/
btmux/misc/.svn/text-base/
btmux/misc/.svn/wcprops/
btmux/python/
btmux/python/.svn/
btmux/python/.svn/prop-base/
btmux/python/.svn/props/
btmux/python/.svn/text-base/
btmux/python/.svn/wcprops/
btmux/src/.svn/prop-base/
btmux/src/.svn/props/
btmux/src/.svn/text-base/
btmux/src/.svn/wcprops/
btmux/src/hcode/.svn/
btmux/src/hcode/btech/
btmux/src/hcode/btech/.svn/
btmux/src/hcode/btech/.svn/prop-base/
btmux/src/hcode/btech/.svn/props/
btmux/src/hcode/btech/.svn/text-base/
btmux/src/hcode/btech/.svn/wcprops/
btmux/src/hcode/include/.svn/
/*
 * $Id: mech.sensor.h,v 1.1.1.1 2005/01/11 21:18:23 kstevens Exp $
 *
 * Author: Markus Stenberg <fingon@iki.fi>
 *
 *  Copyright (c) 1996 Markus Stenberg
 *  Copyright (c) 1998-2002 Thomas Wouters
 *  Copyright (c) 2000-2002 Cord Awtry
 *       All rights reserved
 *
 * Created: Mon Sep  2 14:48:12 1996 fingon
 * Last modified: Tue Sep  2 15:32:05 1997 fingon
 *
 */

#ifndef MECH_SENSOR_H
#define MECH_SENSOR_H

/* 
   For all scanners chance of seeing a foe is modified by:
   - Side arcs are 70% chance
   - Rear arc is 40% chance
 */

typedef struct {
    char *sensorname;
    char *matchletter;

    /* Is the sensor 360 degree with just one of them? */
    int fullvision;

    /* Longest vis this sensor brand sees */
    int maxvis;

    /* Variable factor in maxvis ; it changes by +- 1 every 30 seconds */
    int maxvvar;

    /* Function for retrieving generic chance of spotting foe with
       this scanner at the range */
    /* first int = sensor type #, second = maxrange by conditions,
       third = lightning level */
    int (*seechance_func) (MECH *, MAP *, int, float, int, int);

    /* Do we really see 'em? Mainly checks for various things that
       vary between diff. sensors (and also seechancefunc > 0) */
    int (*cansee_func) (MECH *, MECH *, MAP *, float, int);

    /* Chance of actually hitting someone */
    int (*tohitbonus_func) (MECH * mech, MECH * target, MAP *, int, int);

    /* If <0, not used */
    int min_light;
    int max_light;

    int required_special;
    int specials_set;		/* 1 if the original specials struct, 2 if the extended */

    int attributeCheck;		/* Some special checks here that are done in mech.sensor.c */

    char *range_desc;
    char *block_desc;
    char *special_desc;
} SensorStruct;

#define ESEEFUNC(a) extern int a (MECH *, MAP *, int, float, int, int);
#define SEEFUNC(a,b) \
int a (MECH *t, MAP *map, int num, float r, int c, int l) { return (int) (b); }
ESEEFUNC(vislight_see);
ESEEFUNC(liteamp_see);
ESEEFUNC(infrared_see);
ESEEFUNC(electrom_see);
ESEEFUNC(seismic_see);
ESEEFUNC(radar_see);
ESEEFUNC(bap_see);
ESEEFUNC(blood_see);

#define ECSEEFUNC(a) extern int a (MECH *, MECH *, MAP *, float, int);
#define CSEEFUNC(a,b) \
int a (MECH *m, MECH *t, MAP *map, float r, int f) { return (int) (b); }
ECSEEFUNC(vislight_csee);
ECSEEFUNC(liteamp_csee);
ECSEEFUNC(infrared_csee);
ECSEEFUNC(electrom_csee);
ECSEEFUNC(seismic_csee);
ECSEEFUNC(radar_csee);
ECSEEFUNC(bap_csee);
ECSEEFUNC(blood_csee);

#define ETOHITFUNC(a) extern int a (MECH *, MECH *, MAP *, int, int);
#define TOHITFUNC(a,b) \
int a (MECH *m, MECH *t, MAP *map, int f, int l) { return (int) (b); }

ETOHITFUNC(vislight_tohit);
ETOHITFUNC(liteamp_tohit);
ETOHITFUNC(infrared_tohit);
ETOHITFUNC(electrom_tohit);
ETOHITFUNC(seismic_tohit);
ETOHITFUNC(radar_tohit);
ETOHITFUNC(bap_tohit);
ETOHITFUNC(blood_tohit);

#define SENSOR_VIS	0
#define SENSOR_LA	1
#define SENSOR_IR	2
#define SENSOR_EM	3
#define SENSOR_SE	4
#define SENSOR_RA	5
#define SENSOR_BAP	6
#define SENSOR_BHAP	7

#define SENSOR_ATTR_NONE		0
#define SENSOR_ATTR_SEISMIC 1

#ifdef _MECH_SENSOR_C
SensorStruct sensors[] = {
    {"Vislight", "V", 0, 60, 0, vislight_see, vislight_csee,
	    vislight_tohit,
	    -1, -1, 0, 1, SENSOR_ATTR_NONE,
	    "Visual",
	    "Fire/Smoke/Obstacles, 3 pt woods, 5 underwater hexes",
	"Bad in night-fighting (BTH)"},
    {"Light-amplification", "L", 0, 60, 0, liteamp_see, liteamp_csee,
	    liteamp_tohit,
	    0, 1, 0 - NS_TECH, 1, SENSOR_ATTR_NONE,
	    "Visual (Dawn/Dusk), 2x Visual (Night)",
	    "Fire/Smoke/Obstacles, 2 pt woods, any water",
	"Somewhat harder enemy detection (than vislight), bad in forests (BTH/range)"},
    {"Infrared", "I", 1, 15, 0, infrared_see, infrared_csee,
	    infrared_tohit,
	    -1, -1, 0 - NS_TECH, 1, SENSOR_ATTR_NONE,
	    "15",
	    "Fire/Obstacles, 6 pt woods",
	"Easy to hit 'hot' targets, not very efficient in forests (BTH)"},
    {"Electromagnetic", "E", 1, 24, 8, electrom_see, electrom_csee,
	    electrom_tohit,
	    -1, -1, 0 - NS_TECH, 1, SENSOR_ATTR_NONE,
	    "16-24",
	    "Mountains/Obstacles, 8 pt woods",
	"Easy to hit heavies, good in forests (BTH), overall unreliable (chances of detection/BTH)"},
    {"Seismic", "S", 1, 8, 4, seismic_see, seismic_csee, seismic_tohit, -1,
	    -1,
	    0 - NS_TECH, 1, SENSOR_ATTR_SEISMIC,
	    "4-8",
	    "Nothing",
	"Easier heavy and/or moving object detection (although overall hard to detect with), somewhat unreliable(BTH)"},
    {"Radar", "R", 1, 180, 0, radar_see, radar_csee, radar_tohit, -1, -1,
	    AA_TECH, 1, SENSOR_ATTR_NONE,
	    "<=180",
	    "Obstacles, enemy elevation (Enemy Z >= 10, range: 180, Enemy Z < 10, range: varies)",
	"Premier anti-aircraft sensor, partially negates partial cover(BTH), doesn't see targets that are too low for detection"},

    {"Beagle ActiveProbe", "B", 1, 6, 0, bap_see, bap_csee, bap_tohit, -1,
	    -1, BEAGLE_PROBE_TECH, 1, SENSOR_ATTR_NONE, "<=6",
	    "Nothing (except range)",
	"Ultimate sensor in close-range detection (slightly varying BTH, but ignores partial/woods/water)"},


    {"Bloodhound ActiveProbe", "H", 1, 8, 0, blood_see, blood_csee,
	    blood_tohit, -1,
	    -1, BLOODHOUND_PROBE_TECH, 2, SENSOR_ATTR_NONE, "<=8",
	    "Nothing (except range)",
	"Superior version of the Beagle Active Probe (slightly varying BTH, but ignores partial/woods/water)"}
};
   
#define NUM_SENSORS (sizeof (sensors) / sizeof(sensors[0]))
#else
extern SensorStruct sensors[];
#endif
#endif				/* MECH_SENSOR_H */