unit uHCDefines;

{$ifdef FPC}
{$mode objfpc}{H+}
{$endif}

interface

type
  // ALE 20150911 Plane.c
  THCMissionType =
  (
    MISSION_FERRY=0,
    MISSION_ASSAULT=1,
    MISSION_TANKER=2,
    MISSION_PATROL=3,
    MISSION_NUCLEAR=4,
    MISSION_STANDOFF=5,
    MISSION_SEAD=6,
    MISSION_GUIDED=7,
    MISSION_UNGUIDED=8,
    MISSION_ANTIRUN=9,
    MISSION_ATA=10,
    MISSION_ASW=11,
    MISSION_AARMR=12,
    MISSION_DECOY=13,
    MISSION_COUNT // This needs to be last - it is a dummy entry
  );

  // ALE 20230303 introduced for MessageEvent message text encoding/decoding
  THCTextTypes =
  (
    ASCII     = 0,
    UTF16     = 1,
    Markdown  = 2,
    HTML      = 3
  );

  // ALE 20250528 introduced for SaveGame type
  THCSaveGameTypes =
  (
    Normal    = 0, // ALE 20250528 user hotkey or menu access in game
    AutoSave  = 1,
    ExportDLL = 2
  );

  // ALE 20250618 introduced for staff message box buttons
  //  Defines.h ~line 230
  THCStaff =
  (
    OK_ONLY       = $0001,
    YES_NO        = $0002,
    OK_CONTINUE   = $0004,
    OK_CONT_MOVE  = $0008,
    OK_STATUS     = $0010,
    YES_NO_STATUS = $0020,
    OK_CONT_RADAR = $0040,
    OK_CONT_SONAR = $0080,
    OK_CONT_INT   = $0100,
    OK_SHOW	  = $0200,	// added by gw 7/94 show the unit or group
    OK_SELECT	  = $0400,	// added by gw 7/94 select the unit or group
    OK_BASE_MOVE  = $0800	// gw 10/96 newer
  );

const
  // ALE 20200826 General constants
  HCINIFILENAME = 'Winharp32.ini';


  BLUESIDE    = 0;
  REDSIDE     = 1;
  NEUTRALSIDE = 2;
  GREENSIDE   = 2;
  UNKNOWNSIDE = 3;
  ANYSIDE     = 4;
  SIDES       = 3; // ALE 20211210 Playable sides
  INVALID_SIDE = $ff; // ALE 20211210 since 0 is Blue

  // ALE 20140329 Annex.h
  ANNEX_MASK =  $f000;
  NUM_ANNEXES = 16;
  NUM_SPARE_BYTES = 16;

  ARMOR_SECTORS = 6;
  TORPEDO_SPEEDS = 2;
  PLANE_SPEED_LEVELS = 10;

  MAX_SCENINBS = 21; // ALE 20101114 from RES1 layout, scens 0-20

  // ALE 20110419 FALSE and TRUE in HC C code
  CFALSE = 0;
  CTRUE = 1;

  // ALE 20250228 sometimes group and unit windows are identified this way
  //  such as in ZoomWindow calls
  GROUP_ACTIVE: SmallInt   = 3;
  UNIT_ACTIVE: SmallInt    = 7;

  // ALE 20150709 for unit->NameDB when we should use the unit->name field
  //  instead of loading the name from the database
  UNIT_USE_CUSTOM_NAME = -1;
  IGNORE_EXPECTED_OFFSET = -1; // ALE 20150930 for get_class_text sanity check
  INVALID_OFFSET = -1; // ALE 20150930 for get_class_text we have a fishy offset

  // ALE 20150712 for dates and times
  GAMESTARTTIME = 100000;

  DATABASE_FLAVER_LEN = 32; // ALE 20170923 say HCDB2-170922
  HCUUID_LEN = 37; // ALE 20170505 characters in a UUID (no curly braces {})
  LEN_GROUP_ID = 4; // ALE 20160317 Way past time to define this
  LEN_GROUP_ID8	= 8; // ALE 20170509 Making it even longer

  MAX_FORMATION_ZONES   = 64; // ALE 20170508 more formation zones
  UI_FORMATION_ZONES    = 6; // ALE 20170521 moving from 4 to 6 usable zones
  OLD_FORMATION_ZONES	= 4; // ALE 20170521 legacy
  MAX_FORMATION_SECTORS = 64; // ALE 20180409 more formation sectors
  UI_FORMATION_SECTORS  = 8; // ALE 20180409 but we only use 8

  MAX_FORMATION_RADIUS = 1024; // ALE 20170524 artificial limit

  // victory condition constants
  // ALE 20211208 victory conditions level met
  VIC_NONE        = 0;
  VIC_MIN         = 1;
  VIC_TOT         = 2;
  VIC_GAME_OVER   = 3;
  VIC_LEVELS      = VIC_GAME_OVER+1;

  // vicType
  MINIMUM_VICTORY = 0;
  TOTAL_VICTORY   = 1;
  GAME_OVER_MAN   = 2;

  // GCI.c
  PI = 3.1415926535897932384626433832795;
  DR = 3.1415926535897932384626433832795/180; // degress to radians

  INVALID_HEADING =	 -361;         // ALE 20160404
  MAX_DIST_NM     =      26000;        // ALE 20180411 cap ranges below this

  // Used to be Trig
  SLIVER01 =            37283;         // 0.1  deg
  SLIVER05 =           186414;         // 0.5  deg
  SLIVER1 =            372827;         // 1    deg
  SLIVER5 =           1864135;         // 5    deg
  SLIVER15 =          5592405;         // 15   deg
  SLIVER30 =         11184811;         // 15   deg
  SLIVER45 =         16777216;         // 45   deg
  SLIVER90 =         33554432;         // 90   deg
  SLIVER135 =        50331648;         // 135  deg
  SLIVER180 =        67108864;         // 180  deg
  SLIVER225 =        83886080;         // 225  deg
  SLIVER270 =       100663296;         // 270  deg
  SLIVER315 =       117440512;         // 315  deg
  SLIVER360 =       134217728;         // 360  deg

  // Defines.h
  GC_UNK        = 0; // ALE 20250225 Unknown game component
  GC_GE         = 1; // ALE 20250225 Game Engine
  GC_SE         = 2; // ALE 20250225 Scenario Editor

  NM100         =  621080;     // 6210.8 DU's per nm  *  100
  NM10          =   62108;     // 6210.8 DU's per nm  *  10
  NM5           =   31054;
  NM1           =    6211;     // 6210.8 DU's per nautical mile
  NM05          =    3105;     // 3105.4 DU's per 0.5 nautical mile
  NMD10         =     621;     // 621.08 DU's per .1 nautical mile
  NAUTICAL_MILE =     NM1;     // same as NM1


  CLASS_NAME_LEN = 			48;

  V2_MAX_SIDE_NAMES   = 4;
  V2_MAX_COUNTRIES    = 128;
  V2_MAX_SHIP_TYPES   = 128;
  V2_MAX_AC_TYPES     = 128;
  V2_MAX_AC_SHT_TYPES = V2_MAX_AC_TYPES;
  V2_MAX_AC_STAT_STRS = 16;
  V2_MAX_LOADOUT_STRS = 128;
  V2_MAX_BROAD_TYPES  = 128;

  V3_MAX_SIDE_NAMES   = 4;
  V3_MAX_COUNTRIES    = 1024;
  V3_MAX_SHIP_TYPES   = 128;
  V3_MAX_AC_TYPES     = 128;
  V3_MAX_AC_SHT_TYPES = V2_MAX_AC_TYPES;
  V3_MAX_AC_STAT_STRS = 16;
  V3_MAX_LOADOUT_STRS = 128;
  V3_MAX_BROAD_TYPES  = 128;

  V4_MAX_SIDE_NAMES   = 4;
  V4_MAX_COUNTRIES    = 1024;
  V4_MAX_SHIP_TYPES   = 256;
  V4_MAX_AC_TYPES     = 256;
  V4_MAX_AC_SHT_TYPES = V4_MAX_AC_TYPES;
  V4_MAX_AC_STAT_STRS = 16;
  V4_MAX_LOADOUT_STRS = 128;
  V4_MAX_BROAD_TYPES  = 128;

  V5_MAX_SIDE_NAMES   =	4;
  V5_MAX_COUNTRIES    =	1024;
  V5_MAX_SHIP_TYPES   =	256;
  V5_MAX_AC_TYPES     =	256;
  V5_MAX_AC_SHT_TYPES = V5_MAX_AC_TYPES;
  V5_MAX_AC_STAT_STRS =	16;
  V5_MAX_LOADOUT_STRS =	128;
  V5_MAX_BROAD_TYPES  =	128;
  V5_MAX_RUNWAY_SIZES =	128;

  V6_MAX_SIDE_NAMES   =	4;
  V6_MAX_COUNTRIES    =	1024;
  V6_MAX_SHIP_TYPES   =	256;
  V6_MAX_AC_TYPES     =	256;
  V6_MAX_AC_SHT_TYPES = V5_MAX_AC_TYPES;
  V6_MAX_AC_STAT_STRS =	16;
  V6_MAX_LOADOUT_STRS =	128;
  V6_MAX_BROAD_TYPES  =	128;
  V6_MAX_RUNWAY_SIZES =	128;

  MAX_SIDE_NAMES =      	4;
  MAX_COUNTRIES  =      	1024;
  MAX_SHIP_TYPES =      	256;
  MAX_AC_TYPES     =    	256;
  MAX_AC_SHT_TYPES =    	MAX_AC_TYPES;
  MAX_AC_STAT_STRS =    	16;
  MAX_LOADOUT_STRS =    	128;
  MAX_BROAD_TYPES  =    	128;
  MAX_RUNWAY_SIZES =            128;

  V2_SIDE_NAME_SIZE    = 8;
  V2_COUNTRY_NAME_SIZE = 16;
  V2_SHIP_TYPE_SIZE    = 8;
  V2_AC_TYPE_SIZE      = 12;
  V2_AC_SHT_TYPE_SIZE  = 5;
  V2_AC_STAT_STR_SIZE  = 10;
  V2_LOADOUT_STR_SIZE  = 12;
  V2_BROAD_TYPE_SIZE   = 13;

  V3_SIDE_NAME_SIZE    = 8;
  V3_COUNTRY_NAME_SIZE = 32;
  V3_SHIP_TYPE_SIZE    = 8;
  V3_AC_TYPE_SIZE      = 12;
  V3_AC_SHT_TYPE_SIZE  = 5;
  V3_AC_STAT_STR_SIZE  = 10;
  V3_LOADOUT_STR_SIZE  = 12;
  V3_BROAD_TYPE_SIZE   = 13;

  V4_SIDE_NAME_SIZE    = 8;
  V4_COUNTRY_NAME_SIZE = 32;
  V4_SHIP_TYPE_SIZE    = 12;
  V4_AC_TYPE_SIZE      = 12;
  V4_AC_SHT_TYPE_SIZE  = 5;
  V4_AC_STAT_STR_SIZE  = 10;
  V4_LOADOUT_STR_SIZE  = 12;
  V4_BROAD_TYPE_SIZE   = 13;

  V5_SIDE_NAME_SIZE    = 8;
  V5_COUNTRY_NAME_SIZE = 32;
  V5_SHIP_TYPE_SIZE    = 12;
  V5_AC_TYPE_SIZE      = 12;
  V5_AC_SHT_TYPE_SIZE  = 5;
  V5_AC_STAT_STR_SIZE  = 10;
  V5_LOADOUT_STR_SIZE  = 12;
  V5_BROAD_TYPE_SIZE   = 13;
  V5_RUNWAY_STR_SIZE   = 32;

  V6_SIDE_NAME_SIZE    = 8;
  V6_COUNTRY_NAME_SIZE = 32;
  V6_SHIP_TYPE_SIZE    = 12;
  V6_AC_TYPE_SIZE      = 12;
  V6_AC_SHT_TYPE_SIZE  = 5;
  V6_AC_STAT_STR_SIZE  = 10;
  V6_LOADOUT_STR_SIZE  = 12;
  V6_BROAD_TYPE_SIZE   = 13;
  V6_RUNWAY_STR_SIZE   = 32;

  SIDE_NAME_SIZE    = 8;
  COUNTRY_NAME_SIZE = 32;
  SHIP_TYPE_SIZE    = 12;
  AC_TYPE_SIZE	    = 12;
  AC_SHT_TYPE_SIZE  = 5;
  AC_STAT_STR_SIZE  = 10;
  LOADOUT_STR_SIZE  = 12;
  BROAD_TYPE_SIZE   = 13;
  RUNWAY_STR_SIZE   = 32;

  MAX_UNIT_SENSORS =    16;
  MAX_UNIT_MOUNTS =     32;
  MAX_SHIP_MOUNTS =     32;
  MAX_SHIP_SENSORS =    16;
  MAX_SUB_MOUNTS =      16;
  MAX_SUB_SENSORS =     8;
  MAX_PLANE_LOADOUTS =  32;
  MAX_PLANE_SENSORS =   8;
  MAX_BASE_MOUNTS =     16;
  MAX_BASE_SENSORS =    8;
  MAX_LOADOUT_WEAPONS = 8; // must match MOUNTS_PER_MULTI in typedefs.h
  MOUNTS_PER_MULTI =    8; // see MAX_LOADOUT_WEAPONS in Annex.h

  //--- sensors ------------------------------------------------------------
  // ALE 20170221 from 16-bit to 32-bit for 2017.004, verSaveGame = $34803215
  sVISUAL       = $0000000000000001;     //
  sLOWLIGHT     = $0000000000000002;     // starlight (extension of visual)
  sINFRARED     = $0000000000000004;     // special case of visual
  sTCS          = $0000000000000008;     // Television Camera Sensor
  sRADAR        = $0000000000000010;     // active radar
  sESM          = $0000000000000020;     // passive radio/radar detection
  sECM          = $0000000000000040;     // Electronic Counter Measures
  sJAMMED       = $0000000000000060;     // Unit is being actively jammed (radar)
  sMAD          = $0000000000000080;     // Magnetic Anomoly Detection
  sAHSONAR      = $0000000000000100;     // active  hull sonar
  sPHSONAR      = $0000000000000200;     // passive hull sonar
  sHSONAR       = $0000000000000300;     // combined value for hull sonar
  sATDSONAR     = $0000000000000400;     // active  towed/dipping sonar
  sPTDSONAR     = $0000000000000800;     // passive towed/dipping sonar
  sTDSONAR      = $0000000000000C00;     // combined value for towed/dipping sonar
  sASONAR       = $0000000000000500;     // combined value for active sonar
  sPSONAR       = $0000000000000A00;     // combined value for passive sonar
  sSONAR        = $0000000000000F00;     // combined value for above sonar types
  sACTIVE       = $0000000000000510;     // combined for active radar & sonar
  sSONOBUOY     = $0000000000001000;     // sonobuoy
  sSOSUS        = $0000000000002000;     // sosus
  sCZ           = $0000000000004000;     // convergence zone
  sSATELLITE    = $0000000000008000;     // satellite or national intel means
  sRWR          = $0000000000010000;         // radar warning receiver

  NOTsVISUAL    = $FFFFFFFFFFFFFFFE;     // masks to exclude the specified
  NOTsLOWLIGHT  = $FFFFFFFFFFFFFFFD;     //   bit fields
  NOTsINFRARED  = $FFFFFFFFFFFFFFFB;
  NOTsTCS       = $FFFFFFFFFFFFFFF7;
  NOTsRADAR     = $FFFFFFFFFFFFFFEF;
  NOTsESM       = $FFFFFFFFFFFFFFDF;
  NOTsECM       = $FFFFFFFFFFFFFFBF;
  NOTsJAMMED    = $FFFFFFFFFFFFFF9F;
  NOTsMAD       = $FFFFFFFFFFFFFF7F;
  NOTsAHSONAR   = $FFFFFFFFFFFFFEFF;
  NOTsPHSONAR   = $FFFFFFFFFFFFFDFF;
  NOTsHSONAR    = $FFFFFFFFFFFFFCFF;
  NOTsATDSONAR  = $FFFFFFFFFFFFFBFF;
  NOTsPTDSONAR  = $FFFFFFFFFFFFF7FF;
  NOTsTDSONAR   = $FFFFFFFFFFFFF3FF;
  NOTsASONAR    = $FFFFFFFFFFFFFAFF;
  NOTsPSONAR    = $FFFFFFFFFFFFF5FF;
  NOTsSONAR     = $FFFFFFFFFFFFF0FF;
  NOTsACTIVE    = $FFFFFFFFFFFFFAEF;
  NOTsSONOBUOY  = $FFFFFFFFFFFFEFFF;
  NOTsSOSUS     = $FFFFFFFFFFFFDFFF;
  NOTsCZ        = $FFFFFFFFFFFFBFFF;
  NOTsSATELLITE = $FFFFFFFFFFFF7FFF;
  NOTsRWR       = $FFFFFFFFFFFEFFFF;

  // Unit->, Group->showing
  NotShowing       = $00;   // not detected
  SideKnown        = $01;   // side: friendly, hostile, or neutral
  ShowExact        = $02;   // exact location known
  ShowUncertain    = $04;   // exact location not known
  NOTSideKnown     = $FE;   // exclusion mask
  NOTShowExact     = $FD;   // exclusion mask
  NOTShowUncertain = $FB;   // exclusion mask
  //--- contact quality -----------------------------------------------------
  // where
  cBEARING      = $0001;    // bearing only
  cAREA         = $0002;    // MAD or "detection only" sono buoys
  cEXACT        = $0007;    // includes bearing and area
  cHEIGHT       = $0008;    // height of a/c or depth of sub
  // what
  cTYPE         = $0010;
  cSIZE         = $0030;    // includes type
  cCLASS        = $0070;    // includes type & size
  cNAME         = $00F0;    // includes type, size, & class
  // other
  cPROPULSION   = $0100;
  cSENSOR       = $0200;    // esm, and maybe hydro
  cCOURSE       = $0400;    // course and speed
  PassSolution  = $0800;    // passive fire control solution

  //--- altitudes -------------------------------------------------------------
  INVALID_ALTITUDE = -1000000;
  ALT_TOODEEP      =   -32768; // meters       // submerged, sea level
  ALT_VDEEP        =    -1001; // airborne values are
  ALT_DEEP         =     -501; // 1 less than the lower
  ALT_INTERMED     =     -351; // limits for those
  ALT_SHALLOW      =     -201; // altitude bands
  ALT_SNORKEL      =      -21;
  ALT_SEA_LEVEL    =        0; // ALE 201603015 from -1
  ALT_SCOPE_ALT    =        2; // ALE 20160718 from 15 // ALE 20160315 from 1       // 0.15 meter  // surface ship and
  ALT_SMALL_SHIP   =       19; // periscope values
  ALT_MED_SHIP     =       29; // represent radar
  ALT_LRG_SHIP     =       40; // mast altitude
  ALT_VLOW         =       15; // ALE 20160315 from 0
  ALT_LOW          =       30;
  ALT_MEDIUM       =      600;
  ALT_HIGH         =     3500;
  ALT_VHIGH        =    20000;
  ALT_SUBORBIT	   =   100000; // ALE 20160315 added this new

  //--- altitude bands --------------------------------------------------------
  TooDeep        =  0;
  Vdeep          =  1;
  Deep           =  2;
  Intermed       =  3;
  Shallow        =  4;
  Snorkel        =  5;
  SeaLevel       =  6;
  ScopeAlt       =  7;
  SmallShip      =  8;
  MedShip        =  9;
  LrgShip        = 10;
  Vlow           = 11;
  Low            = 12;
  Medium         = 13;
  High           = 14;
  Vhigh          = 15;
  SubOrbit       = 16;
  AltBands       = 16;

  //--- supplemental sensor and detection values ----------------------------
  // Unit->rad_x_val
  xNONE             = 0;         // no         radar cross section
  xVSMALL           = 1;         // very small radar cross section
  xSMALL            = 2;         // small      radar cross section
  xLARGE            = 3;         // large      radar cross section

  // ALE 20130816 HarpoonEvent related
  CommandMask = $3F;          // bits 0-5 */
  TimeMask    = $C0;          // bits 6-7 */
  TimeNow     = $00;          // execute event now */
  TimeDelta   = $80;          // Delta time to event */
  TimeAbs     = $40;          // Absolute time to event */
  NoUnit      = $FF;          // this event is not unit specific */

  ATTACK_EVENT         =   $00;
  ALT_SPEED_EVENT      =   $01;
  READY_EVENT          =   $02;
  LAUNCH_EVENT         =   $03;
  SPLIT_EVENT          =   $04;
  JOIN_EVENT           =   $05;
  SENSOR_EVENT         =   $06;
  FORMATION_EVENT      =   $07;
  REPAIR_EVENT         =   $08;
  RELOAD_EVENT         =   $09;
  SINK_EVENT           =   $0A;
  BREAKDOWN_EVENT      =   $0B;
  SPECIAL_FORCES_EVENT =   $0C;
  INTELLIGENCE_EVENT   =   $0D;
  MESSAGE_EVENT        =   $0E;
  NUKE_FREE_EVENT      =   $0F;
  FALSE_CONTACT_EVENT  =   $10;
  WEATHER_EVENT        =   $11;
  SNORKEL_EVENT        =   $12;
  LANDING_EVENT        =   $13;
  ALT_PATH_EVENT       =   $14;
  ENEMY_AI_EVENT       =   $15;
  DAMAGE_EVENT         =   $16;
  INTERMITTENT_EVENT   =   $17;
  AIR_ATTACK_EVENT     =   $18;
  UNBEND_TAILS_EVENT   =   $19;
  UNUSED_EVENT         =   $1A; // ALE 20130801 sink sonobuoy
  AIR_PATROL_EVENT     =   $1B;
  INTERCEPT_EVENT      =   $1C;
  REPEAT_AIR_EVENT     =   $1D;
  ORDER_ATTACK_EVENT   =   $1E;
  LAUNCHLAND_EVENT     =   $1F;
  VARIABLE_START_EVENT =   $20;
  MISSILE_AVOID_EVENT  =   $21;
  ALT_COURSE_EVENT     =   $22;
  AIR_REFUEL_EVENT     =   $3E;
  ALT_ALTITUDE_EVENT   =   $3F;
  LAST_EVENT           =   $40;  // have to change system if you want more

  // ALE 20140329 Combat.h
  ANNEX_A1  = $0000;
  ANNEX_A2  = $1000;
  ANNEX_B   = $2000;
  ANNEX_C   = $3000;
  ANNEX_D   = $4000;
  ANNEX_E   = $5000;
  ANNEX_F   = $6000;
  ANNEX_G1  = $7000;
  ANNEX_G2  = $8000;
  ANNEX_I1  = $9000;
  ANNEX_J1  = $a000;
  ANNEX_M1  = $b000;
  ANNEX_P1  = $c000;
  ANNEX_Y1  = $d000;
  ANNEX_Z1  = $e000;
  ANNEX_Z2  = $f000;

  // ALE 20180416 Combat.h plane throttle settings
  TH_LOITER = 0;
  TH_CRUISE = 1;
  TH_FULLMP = 4;
  TH_REHEAT = 7;

  // ALE 20180416 Display.c unit types, now known as Marker Types
  // ALE 20211103 Unit and Group types henceforth Marker Types (MT) ASCII 2 DEC
  MT_SUB       = 085; // 'U'
  MT_SHIP      = 083; // 'S'
  MT_CARRIER   = 067; // 'C'
  MT_AC        = 065; // 'A'
  MT_HELO      = 072; // 'H'
  MT_TORP      = 084; // 'T'
  MT_NUKEAREA  = 078; // 'N'
  MT_MISSILE   = 077; // 'M' 20230605 was errantly 79
  MT_REF       = 082; // 'R'  ref points
  MT_VAR_ST_PT = 086; // 'V'
  MT_WEATHER   = 087; // 'W'
  MT_PORT      = 112; // 'p'  land targets are lower case
  MT_AIRFIELD  = 097; // 'a'
  MT_BASE      = 098; // 'b'  combination port and airfield
  MT_CITY      = 099; // 'c'  land base with no port or airfield facilities
  MT_SAMFIXED  = 115; // 's'  Fixed SAM site
  MT_SAMMOBILE = 109; // 'm'  Mobile SAM site
  MT_CONVOY    = 111; // 'o'  Mobile Convoy
  MT_ARMORED   = 114; // 'r' Armored Convoy, Attack group, etc
  MT_SATELLITE = 112; // 'p' Satellite, orbital thing, etc

  // ALE 20211103 dont use the UT_*, consider them deprecated, use MT_* above
  UT_SUB       = 'U';
  UT_SHIP      = 'S';
  UT_CARRIER   = 'C';
  UT_AC        = 'A';
  UT_HELO      = 'H';
  UT_TORP      = 'T';
  UT_NUKEAREA  = 'N';
  UT_MISSILE   = 'M';
  UT_REF       = 'R';  // ref points
  UT_VAR_ST_PT = 'V';
  UT_WEATHER   = 'W';
  UT_PORT      = 'p';  // land targets are lower case
  UT_AIRFIELD  = 'a';
  UT_BASE      = 'b';  // combination port and airfield
  UT_CITY      = 'c';  // land base with no port or airfield facilities
  UT_SAMFIXED  = 's';  // Fixed SAM site
  UT_SAMMOBILE = 'm';  // Mobile SAM site
  UT_CONVOY    = 'o';  // Mobile Convoy
  UT_ARMORED   = 'r';  // Armored Convoy, Attack group, etc


  // ALE 20150911 Plane.c
  HCMissionMap: array[0..127] of Byte =
  (
    Byte(THCMissionType.MISSION_FERRY),		// 000 "Cargo"
    Byte(THCMissionType.MISSION_ASSAULT),	// 001 "Assault"
    Byte(THCMissionType.MISSION_TANKER),		// 002 "Tanker"
    Byte(THCMissionType.MISSION_PATROL),		// 003 "Patrol"
    Byte(THCMissionType.MISSION_NUCLEAR),	// 004 "Nuclear"
    Byte(THCMissionType.MISSION_STANDOFF),	// 005 "ASuW"
    Byte(THCMissionType.MISSION_STANDOFF),	// 006 "ASuW-LR"
    Byte(THCMissionType.MISSION_SEAD),		// 007 "Sead"
    Byte(THCMissionType.MISSION_SEAD),		// 008 "Sead-LR"
    Byte(THCMissionType.MISSION_GUIDED),		// 009 "Precis"
    Byte(THCMissionType.MISSION_GUIDED),		// 010 "Precis-LR"
    Byte(THCMissionType.MISSION_UNGUIDED),	// 011 "GP"
    Byte(THCMissionType.MISSION_UNGUIDED),	// 012 "GP-LR"
    Byte(THCMissionType.MISSION_ANTIRUN),	// 013 "Anti-run"
    Byte(THCMissionType.MISSION_UNGUIDED),	// 014 "BAI"
    Byte(THCMissionType.MISSION_ATA),		// 015 "Intercept"
    Byte(THCMissionType.MISSION_ATA),		// 016 "Escort"
    Byte(THCMissionType.MISSION_ASW),		// 017 "ASW"
    Byte(THCMissionType.MISSION_ASW),		// 018 "ASW-LR"
    Byte(THCMissionType.MISSION_AARMR),		// 019 "AAmr"
    Byte(THCMissionType.MISSION_UNGUIDED),	        // 020 "CAS"
	  Byte(THCMissionType.MISSION_AARMR),		// 021 "AArm-LR"
	  Byte(THCMissionType.MISSION_DECOY),		// 022 "Decoy"
	  Byte(THCMissionType.MISSION_DECOY),		// 023 "Decoy-LR"
	  Byte(THCMissionType.MISSION_FERRY),		// 024 "Ferry"
	  Byte(THCMissionType.MISSION_FERRY),		// 025 "Patrol-2"
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 026 "GP-2"
	  Byte(THCMissionType.MISSION_ATA),		// 027 "Intercept-2"
	  Byte(THCMissionType.MISSION_GUIDED),		// 028 "Precis-2"
	  Byte(THCMissionType.MISSION_NUCLEAR),	        // 029 "SIOP-2"
	  Byte(THCMissionType.MISSION_ATA),		// 030
	  Byte(THCMissionType.MISSION_ATA),		// 031
	  Byte(THCMissionType.MISSION_ATA),		// 032
	  Byte(THCMissionType.MISSION_ATA),		// 033
	  Byte(THCMissionType.MISSION_STANDOFF),	// 034
	  Byte(THCMissionType.MISSION_STANDOFF),	// 035
	  Byte(THCMissionType.MISSION_STANDOFF),	// 036
	  Byte(THCMissionType.MISSION_STANDOFF),	// 037
	  Byte(THCMissionType.MISSION_STANDOFF),	// 038
	  Byte(THCMissionType.MISSION_STANDOFF),	// 039
	  Byte(THCMissionType.MISSION_STANDOFF),	// 040
	  Byte(THCMissionType.MISSION_STANDOFF),	// 041
	  Byte(THCMissionType.MISSION_STANDOFF),	// 042
	  Byte(THCMissionType.MISSION_STANDOFF),	// 043
	  Byte(THCMissionType.MISSION_SEAD),		// 044
	  Byte(THCMissionType.MISSION_SEAD),		// 045
	  Byte(THCMissionType.MISSION_SEAD),		// 046
	  Byte(THCMissionType.MISSION_SEAD),		// 047
	  Byte(THCMissionType.MISSION_ANTIRUN),	        // 048
	  Byte(THCMissionType.MISSION_ANTIRUN),	        // 049
	  Byte(THCMissionType.MISSION_ANTIRUN),	        // 050
	  Byte(THCMissionType.MISSION_GUIDED),		// 051
	  Byte(THCMissionType.MISSION_GUIDED),		// 052
	  Byte(THCMissionType.MISSION_GUIDED),		// 053
	  Byte(THCMissionType.MISSION_GUIDED),		// 054
	  Byte(THCMissionType.MISSION_GUIDED),		// 055
	  Byte(THCMissionType.MISSION_GUIDED),		// 056
	  Byte(THCMissionType.MISSION_GUIDED),		// 057
	  Byte(THCMissionType.MISSION_GUIDED),		// 058
	  Byte(THCMissionType.MISSION_GUIDED),		// 059
	  Byte(THCMissionType.MISSION_GUIDED),		// 060
	  Byte(THCMissionType.MISSION_GUIDED),		// 061
	  Byte(THCMissionType.MISSION_GUIDED),		// 062
	  Byte(THCMissionType.MISSION_GUIDED),		// 063
	  Byte(THCMissionType.MISSION_GUIDED),		// 064
	  Byte(THCMissionType.MISSION_GUIDED),		// 065
	  Byte(THCMissionType.MISSION_GUIDED),		// 066
	  Byte(THCMissionType.MISSION_GUIDED),		// 067
	  Byte(THCMissionType.MISSION_GUIDED),		// 068
	  Byte(THCMissionType.MISSION_GUIDED),		// 069
	  Byte(THCMissionType.MISSION_GUIDED),		// 070
	  Byte(THCMissionType.MISSION_GUIDED),		// 071
	  Byte(THCMissionType.MISSION_ASW),		// 072
	  Byte(THCMissionType.MISSION_ASW),		// 073
	  Byte(THCMissionType.MISSION_ASSAULT),	        // 074
	  Byte(THCMissionType.MISSION_ASSAULT),	        // 075
	  Byte(THCMissionType.MISSION_ASSAULT),	        // 076
	  Byte(THCMissionType.MISSION_FERRY),		// 077
	  Byte(THCMissionType.MISSION_ASSAULT),	        // 078
	  Byte(THCMissionType.MISSION_ASSAULT),	        // 079
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 080
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 081
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 082
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 083
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 084
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 085
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 086
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 087
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 088
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 089
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 090
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 091
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 092
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 093
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 094
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 095
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 096
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 097
	  Byte(THCMissionType.MISSION_UNGUIDED),	// 098
	  Byte(THCMissionType.MISSION_ATA),		// 099
	  Byte(THCMissionType.MISSION_ATA),		// 100
	  Byte(THCMissionType.MISSION_ATA),		// 101
	  Byte(THCMissionType.MISSION_ATA),		// 102
	  Byte(THCMissionType.MISSION_ATA),		// 103
	  Byte(THCMissionType.MISSION_DECOY),		// 104
	  Byte(THCMissionType.MISSION_TANKER),		// 105
	  Byte(THCMissionType.MISSION_TANKER),		// 106
	  Byte(THCMissionType.MISSION_TANKER),		// 107
	  Byte(THCMissionType.MISSION_AARMR),		// 108
	  Byte(THCMissionType.MISSION_AARMR),		// 109
	  Byte(THCMissionType.MISSION_DECOY),		// 110
	  Byte(THCMissionType.MISSION_DECOY),		// 111
	  Byte(THCMissionType.MISSION_DECOY),		// 112
	  Byte(THCMissionType.MISSION_PATROL),		// 113
	  Byte(THCMissionType.MISSION_PATROL),		// 114
	  Byte(THCMissionType.MISSION_PATROL),		// 115
	  Byte(THCMissionType.MISSION_NUCLEAR),	        // 116
	  Byte(THCMissionType.MISSION_NUCLEAR),	        // 117
	  Byte(THCMissionType.MISSION_NUCLEAR),	        // 118
	  Byte(THCMissionType.MISSION_NUCLEAR),	        // 119
	  Byte(THCMissionType.MISSION_ASW),		// 120
	  Byte(THCMissionType.MISSION_ASW),		// 121
	  Byte(THCMissionType.MISSION_ASW),		// 122
	  Byte(THCMissionType.MISSION_ASW),		// 123
	  Byte(THCMissionType.MISSION_ASW),		// 124
	  Byte(THCMissionType.MISSION_ASW),		// 125
	  Byte(THCMissionType.MISSION_ASW),		// 126
	  Byte(THCMissionType.MISSION_ASW)		// 127
  );

  // ALE 20130627 Database level unit flags
  // ship flags for A1 UnitFlag field
  UF_A1_lowlevel	=       $0001;
  UF_A1_silencing	=	$0002;
  UF_A1_RAST		=	$0004; // ALE 20130627 unused
  UF_A1_stabilizer	=	$0008; // ALE 20130627 unused
  UF_A1_stabilizer_dual	=       $0010; // ALE 20130627 unused
  UF_A1_IR		=	$0020; // ALE 20130627 aka SPIR
  UF_A1_ESM		=	$0040;
  UF_A1_shockres	=	$0080; // ALE 20130627 unused

  // sub flags for A2 UnitFlag field
  UF_A2_snorkel		=	$0001; // ALE 20130627 unused
  UF_A2_anechoic	=	$0002;
  UF_A2_radarmast	=	$0004; // ALE 20130627 unused
  UF_A2_DEwarhead	=	$0008; // ALE 20130627 unused
  UF_A2_lowlevel	=	$0010;
  UF_A2_IR		=	$0020;
  UF_A2_ESM		=	$0040;
  UF_A2_shockres	=	$0080; // ALE 20130627 unused
  UF_A2_transient	=	$0100;
  UF_A2_titanium	=	$0200;
  UF_A2_nocavitate	=	$0400; // ALE 20240328 unused
  UF_A2_nonmagnetic     =       $0800; // ALE 20240327 added because someone thinks MAD gear shouldn't detect whales, sheesh!

  // plane flags for B1 UnitFlag field
  UF_B1_IRST		=	$0001;
  UF_B1_MAD		=	$0002;
  UF_B1_TCS		=	$0004;
  UF_B1_FLIR		=	$0008;
  UF_B1_NOE		=	$0010; // ALE 20130627 aka TF (terrain following)
  UF_B1_blipenhance	=	$0020;
  UF_B1_ESM		=	$0040;
  UF_B1_RWR		=	$0080;
  UF_B1_DPS		=	$0100; // ALE 20130627 unused in code, probably for ASW Digital Processing System
  UF_B1_SB		=	$0200; // ALE 20130627 aka SonoBuoy processor
  UF_B1_RadarMod1	=	$0400;
  UF_B1_RadarMod2	=	$0800;
  UF_B1_refuelcapable	=	$1000; // ALE 20130627 capable of being refueled in flight
  UF_B1_allweather	=	$2000;
  UF_B1_midcourse	=	$4000; // ALE 20130627 can provide midcourse guidance
  UF_B1_carrier		=       $8000; // ALE 20130627 can land and take off from a carrier

  // ALE 20230527 MissileFlags definitions
  MF_SMALL_MISSILE      =       $01;
  MF_ALL_ASPECT         =       $02;
  MF_DOGFIGHT           =       $04;
  MF_SNAP_UP_DOWN       =       $08;
  MF_LAND_ATTACK        =       $10;
  MF_SURF_ATTACK	=       $20;

  // ALE 20230531 Guidance Types
  GT_INERTIAL           =       $01;    // inertial launch (bearing only capable)
  GT_TERMINAL           =       $02;    // terminal guidance (fire and forget)
  GT_SEMI_ACTIVE        =       $04;    // semi-active seeker
  GT_ARM                =       $08;    // (also PRH) anit-radiation missile
  GT_IRH                =       $10;    // infra-red homing, laser homing
  GT_RDH                =       $20;    // radar homing
  GT_MIDCOURSE          =       $40;    // mid course guidance
  GT_CMD                =       $80;    // command guidance, also TVM, BR

  // ALE 20230527 weapon flags/types
  WT_ASM                =       000010; // air to sur msl
  WT_SSM                =       000002;          // sur to sur msl
  WT_USM                =       000004;          // sub to sur msl
  WT_AAM                =       000008;          // air to air msl
  WT_SAM                =       000016;         // sur to air msl
  WT_SLM                =       000032;         // sur to sur long range
  WT_LAM                =       000032;         // sur to sur long range
  WT_ULM                =       000064;         // sub to sur long range
  WT_ALM                =       000128;        // air to sur long range
  WT_MSL                =       000255;        // combined value for missiles

  WT_DC                 =       000256;        // depth charge

  WT_TORPV              =       000512;        // torp, sub or ship launched
  WT_TORPA              =       001024;       // torp, air launched
  WT_TORPS              =       001536;       // combined value for torps

  WT_GUNA               =       002048;       // gun, airburst
  WT_GUNI               =       004096;       // gun, impact
  WT_GUN                =       006144;       // combined value for guns

  WT_BOMBG              =       008192;       // bomb, guided
  WT_BOMBU              =       016384;      // bomb, unguided
  WT_BOMB               =       024576;      // combined value for bombs

  WT_AAG                =       000001;          // AAG   anti air gun
  WT_ASG                =       000002;          // ASG   anti surface gun

  // ALE 20180123 formation Ring constants
  MainBodyFlag    = $01;
  AAWRingFlag     = $02;
  ASWRingFlag     = $04;
  PicketRingFlag  = $08;
  PicketRing2Flag = $10;
  PicketRing3Flag = $20;
  AllRingsFlag    = $3F;
  MainBodyZone    = 0;
  AAWRingZone     = 1;
  ASWRingZone     = 2;
  PicketRingZone  = 3;
  PicketRing2Zone = 4;
  PicketRing3Zone = 5;

  FormationSectorNone    = $00;
  FormationSector000_045 = $01;
  FormationSector045_090 = $02;
  FormationSector090_135 = $04;
  FormationSector135_180 = $08;
  FormationSector180_225 = $10;
  FormationSector225_270 = $20;
  FormationSector270_315 = $40;
  FormationSector315_000 = $80;
  FormationSectorAll     = $FF;

  // ALE 20180103 Formation keeping constants
  FM_SLAVED           = 0;
  FM_REFORMING        = 1;
  FM_PATROLLING       = 2;
  FM_DRIFT_START      =	2;
  FM_DRIFT_INSIDE     = 3;
  FM_SPRINT_START     =	4;
  FM_SPRINT_INSIDE    =	5;
  FM_POSITION_REACHED =	9;  // ALE 20180103 9 seems to be used once, when a patrol position is reached
  FM_INDEPENDENT      =	10;
  FM_RTB              = 20; // ALE 20180103 seems to be RTB

  // ALE 20230618 Plane Status
  // PlaneRec status codes
  PS_EMPTY     = $00;
  PS_READYING  = $01;
  PS_FUELED    = $02;

  PS_READY     = $08;
  PS_DAMAGD    = $10;
  PS_LAUNCHING = $20;
  PS_LANDING   = $40;


  // ALE 20220216 ExportDLL.h
  // ALE 20220216 we call the ExportDLL function ScenLoaded twice, once
  //  when internal mechanics are done, a second time when the ExportDLLs
  //  are done.
  SCENLOADED_INTERNAL_DONE = 0;
  SCENLOADED_EXPORTDLLS_DONE = 1;


implementation

end.
