; Wakefollow Doctrine -- RA addon ver 1.41

var PreEnableCourse
var PreEnableSpeed
var PreEnableDepth
var RunToEnable
var Enabled
var Homing
var SearchDepth
var Floor
var Ceiling
var AcousticMode
var spdmin
var InitX
var InitY
var Run
var CorrInterogg
var TRange
var fuel
var FSR
var K
var FSRMIN
VAR DMAX
VAR DMIN
var TorpMaxDepth
var PreSet
VAR CALCALT
var fwake
var TransitSpd
var mission
var SilStart

IF INIT THEN {
TorpMaxDepth = ( MinAlt * 3.28 )
CorrInterogg = Time
Enabled = 0
Homing = 0
InitX = OwnX
InitY = OwnY
IF ( DBUser1Flags & 2 ) == 2 THEN { SetSnorkel On SilStart = 1 } ENDIF
IF ( OwnName $= "53-65M Torpedo" ) THEN { TransitSpd = 50 spdmin = 50 TRange = 22000 DMAX = 12000
} elseIF ( OwnName $= "53-65K Torpedo" ) THEN { TransitSpd = 45 spdmin = 44 TRange = 19100 DMAX = 19250
} elseIF ( OwnName $= "65-76 Torpedo" ) THEN { TransitSpd = 40 spdmin = 30 TRange = 50004 DMAX = 27002
} elseIF ( OwnName $= "Yu-1 Torpedo" ) THEN { TransitSpd = 40 spdmin = 40 TRange = 19100 DMAX = 12595
} elseIF ( OwnName $= "53-65KE Torpedo" ) THEN { TransitSpd = 45 spdmin = 44 TRange = 19100 DMAX = 19250 } ENDIF
FUEL = 1000
DMIN = ( Trange / 1852 )
DMAX = ( DMAX / 1852 )
FSRMIN = ( FUEL / ( DMIN / ( spdmin / 3600 ) ) )
IF ( MAXSPD > spdmin ) THEN {
K = ( ( ( FUEL / ( DMAX / ( MAXSPD / 3600 ) ) ) - FSRMIN ) / ( MAXSPD - spdmin ) ) } ELSE {
K = ( ( FUEL / ( DMAX / ( MAXSPD / 3600 ) ) ) - FSRMIN ) } ENDIF
Floor = TorpMaxDepth
Ceiling = -0.5
SearchDepth = -20
PreSet = 1
PreEnableDepth = Ownalt
CALCALT = OWNALT
if ownalt > -15 then { PreEnableDepth = -15 } endif
} ELSEIF FUEL < 0 THEN {
SHUTDOWN
} ELSE {
IF PreSet THEN {
PreSet = 0
IF ( RunToEnable < 926 ) THEN { RunToEnable = 926 } ENDIF

IF ( ( OwnName $= "53-65K Torpedo" ) OR ( OwnName $= "53-65KE Torpedo" ) OR ( OwnName $= "53-65M Torpedo" ) ) THEN {
IF ( SearchDepth <= -45 ) THEN { ( SearchDepth = -20 ) } ELSE { SearchDepth = SearchDepth } ENDIF } ENDIF
IF ( ( OwnName $= "65-76 Torpedo" ) OR ( OwnName $= "Yu-1 Torpedo" ) ) THEN {
IF ( PreEnableDepth < -46 ) THEN { ( PreEnableDepth = -46 ) } ENDIF } ENDIF
} ENDIF
CorrInterogg = ( Time - CorrInterogg )
IF ( OWNALT < 0 ) AND ( ( OWNSPD >= ( spdmin - 1 ) ) OR ( OWNSPD <= ( MAXSPD + 1 ) ) ) THEN {
FSR = ( FSRMIN + ( ( OWNSPD - spdmin ) * K ) )
FSR = ( FSR * CorrInterogg )
FUEL = ( FUEL - FSR )	
} ENDIF
CorrInterogg = Time
IF SilStart THEN {
	IF ( OwnSpd <= PreEnableSpeed ) AND ( mission != 1 ) THEN {
		SetPriority 255
		SetSnorkel OFF
		mission = 1
	} ENDIF
} ENDIF
IF NEWTRACK AND ( NOT ( TgtClass $= "Weap" ) ) THEN {
SETTACTIC "Terminal_Home_Wake"
} ENDIF
Run += XYRng ( OwnX - InitX ) ( OwnY - InitY )
InitX = OwnX
InitY = OwnY
IF not Homing THEN {
SETPRIORITY 252 SetAlt CALCALT
IF Enabled THEN {
if fwake < time then { fwake = ( time + 1 ) SETPRIORITY 245 SetCrs PreEnableCourse SETPRIORITY 252 WakeFollow } endif
IF CALCALT < SearchDepth THEN { CALCALT += 40 } ELSE { CALCALT = SearchDepth } ENDIF
} ELSE {
SETPRIORITY 252	SetCrs PreEnableCourse
SETPRIORITY 252	SetSpd TransitSpd
IF CALCALT < PreEnableDepth THEN { CALCALT += 40 } ELSE { CALCALT = PreEnableDepth } ENDIF
IF ( RunToEnable != -1 ) AND ( Run >= RunToEnable ) THEN {
RunToEnable = -1
Enabled = 1
PASSIVEENABLE
} ENDIF
} ENDIF
} ENDIF
Homing = 0
if ownalt > -8 then { SETPRIORITY 255 setalt -20 } endif
} ENDIF