; -RA- DWX v1.41 Addon Doctrine

var PreEnableSpeed
var RunToEnable
var CircleSearchPattern
var Enabled
var Homing
var SearchDepth
var Floor
var Ceiling
var AcousticMode
var spdmin
var InitTime
var TRange
var CorrInterogg
var Fuel
var Fsr
var K
var FsrMin
var DmaX
var DmiN
var TIW
var snakeleft
var TorpMaxDepth
var SrcSpd
var FIRST
VAR CalcSpd
VAR mspd
VAR DELAY
VAR OrdDpth
var GotHim
var ColT
VAR DELTA1
VAR OLDBRG
var trng
var tbrg
var tage
var talt
var TSILOS
var FTERM
var mode
VAR RULCIRK
VAR RULDEP
VAR DENGON
VAR DSENSON
VAR SpdFreeFall
var temp
VAR N_FGLUBPOISK
VAR NumbNG
var UM
VAR Tconf
var SFloor
var SCeiling
var FKORIDOR
var FS
var DFS

func ALTITUDE {
TEMP = ABS DELTA1
IF TEMP > 80 THEN { Colt = XYBRG TEMP ( 200 * 3.28 ) } ELSE { Colt = XYBRG TEMP ( 400 * 3.28 ) } ENDIF
if DELTA1 < 0 then { ColT = ( -1 * ColT ) } endif
SETPRIORITY 250 SETPITCH ColT
}
func SearchON {
IF AcousticMode THEN {
; DebugOut "Active Sensor Enable"
ENABLE
SensorEnable "268" 0
SensorEnable "547" 0
SensorEnable "548" 0
} ELSE {
; DebugOut "Passive Sensor Enable"
PASSIVEENABLE
SensorEnable "268" 0
} ENDIF
}
IF INIT THEN {
spdmin = 35
FIRST = 1
Tiw = 0
Enabled = 0
Homing = 0
RunToEnable = 1000
Ceiling = -10
SearchDepth = -100
IF OwnName $= "APR-2E Torpedo U" THEN { TRange = 4630 DMAX = 3010 TorpMaxDepth = -2150 DFS = 900 } ENDIF
IF OwnName $= "APR-3E Torpedo U" THEN { TRange = 5556 DMAX = 3333 TorpMaxDepth = -2624 DFS = 1000 } ENDIF
Floor = TorpMaxDepth
InitTime = ( Time + 1000 )
FUEL = 1000
DMIN = ( Trange / 1852 )
DMAX = ( DMAX / 1852 )
FSRMIN = ( FUEL / ( DMIN / ( spdmin / 3600 ) ) )
K = ( ( ( FUEL / ( DMAX / ( MAXSPD / 3600 ) ) ) - FSRMIN ) / ( MAXSPD - spdmin ) )
N_FGLUBPOISK = 1
UM = 60
Tconf = 0
} ELSE {
IF FIRST Then {
FIRST = 0
delta1 = abs floor
if ( ( delta1 / 3000 ) mod 2 ) >= 1 then {
	delta1 -= 3000
	MODE = -3
} elseif ( ( delta1 / 2000 ) mod 2 ) >= 1 then {
	delta1 -= 2000
	MODE = -2
} elseif ( ( delta1 / 1000 ) mod 2 ) >= 1 then {
	delta1 -= 1000
	MODE = -1
} else {
	MODE = 0
} endif
floor = ( -3.28 * delta1 )
SearchDepth = ( SearchDepth * 3.28 )
Ceiling = ( Ceiling * 3.28 )
IF Floor < TorpMaxDepth THEN { Floor = TorpMaxDepth } ENDIF
SFloor = Floor
SCeiling = Ceiling
Floor = TorpMaxDepth
Ceiling = -7
IF ( MODE == -3 ) AND ( Floor == -2555 ) THEN { ; MODE = "DIRECT MOVE"
} ELSEIF ( MODE == -3 ) AND CircleSearchPattern THEN { RULCIRK = 3 RULDEP = -20 SpdFreeFall = 20 MODE = "RightSide - Wide CIRCLE,Accelerated Diving."
} ELSEIF ( MODE == -2 ) AND CircleSearchPattern THEN { RULCIRK = -3 RULDEP = -20 SpdFreeFall = 20 MODE = "LeftSide - Wide CIRCLE,Accelerated Diving."
} ELSEIF ( MODE == -1 ) AND CircleSearchPattern THEN { RULCIRK = 10 RULDEP = -20 SpdFreeFall = 20 MODE = "RightSide - Narrow CIRCLE,Accelerated Diving."
} ELSEIF ( MODE == 0 ) AND CircleSearchPattern THEN { RULCIRK = -10 RULDEP = -20 SpdFreeFall = 20 MODE = "LeftSide - Narrow CIRCLE,Accelerated Diving."
} ELSEIF ( MODE == -3 ) THEN { RULCIRK = 3 RULDEP = -10 SpdFreeFall = 10 MODE = "RightSide - WIDE CIRCLE, Normal Diving."
} ELSEIF ( MODE == -2 ) THEN { RULCIRK = -3 RULDEP = -10 SpdFreeFall = 10 MODE = "LeftSide - WIDE CIRCLE,Normal Diving."
} ELSEIF ( MODE == -1 ) THEN { RULCIRK = 10 RULDEP = -10 SpdFreeFall = 10 MODE = "RightSide - Narrow CIRCLE,Normal Diving."
} ELSEIF ( MODE == 0 ) THEN { RULCIRK = -10 RULDEP = -10 SpdFreeFall = 10 MODE = "LeftSide - Narrow CIRCLE,Normal Diving."
} ENDIF
PreEnableSpeed = SpdFreeFall
SrcSpd = 35
DENGON = SearchDepth
IF SearchDepth < -656 THEN { DENGON = -656 } ENDIF
DSENSON = -1
IF RunToEnable < 1 THEN { DSENSON = ( SearchDepth + 30 ) } ENDIF
} ENDIF
IF ( OwnAlt > 0 ) Then { SetPriority 255 SetPitch -10 } Endif
IF ( OwnAlt <= 0 ) AND ( OwnSpd <= ( MAXSPD + 1 ) ) AND not TIW THEN {
TIW = 1
InitTime = ( Time + 1 )
CorrInterogg = TIME
} ENDIF
IF TIW THEN {
IF FUEL < 0 THEN {
	SHUTDOWN
} ELSE {
	CorrInterogg = ( Time - CorrInterogg )
	IF ( PreEnableSpeed == 35 ) AND ( 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 PreEnableSpeed != 35 THEN {
IF OWNALT < DENGON THEN {
	PreEnableSpeed = 35
	} ENDIF
} ENDIF
IF NEWTRACK THEN {
if ( ( ownalt >= Layer ) and ( tgtalt < Layer ) ) or ( ( ownalt < Layer ) and ( tgtalt >= Layer ) ) then { ColT = 1 } else { ColT = 0 } endif
if ColT and ( ( AcousticMode and ( tgtrng > dfs ) ) or ( ( tgtconf < 50 ) and not AcousticMode ) ) then {
	SETTACTIC "SBROS_T"
} else {
IF ( tgtalt > ( SCeiling + 10 ) ) OR ( tgtalt < SFloor ) THEN { SETTACTIC "SBROS"
} else {	
	if tconf < tgtconf then {
		PreEnableSpeed = 35
		TRNG = TGTRNG
		TALT = TGTALT
		TBRG = TGTBRG
		TSILOS = TGTSILOS
		GotHim = 0
	} endif
IF ( ( TgtClass $= "Weap" ) AND NOT ( TargetName $= "Towed Decoy" ) ) OR ( TgtType $= "Bio" ) THEN { SETTACTIC "TorpHomCMN" } else { SETTACTIC "TorpHom" } ENDIF
} ENDIF
} ENDIF
} ENDIF
IF LOSTTRACK THEN {
IF Enabled Then { SearchON } ENDIF
} ENDIF
if Time < InitTime THEN {
	SETPRIORITY 250 SetSpd PreEnableSpeed
	SETPRIORITY 250 SetRudder RULCIRK
	SETPRIORITY 250 SETPITCH RULDEP
} ELSEIF NOT Enabled THEN {
	SETPRIORITY 250	SetSpd PreEnableSpeed
IF PreEnableSpeed == 35 THEN {
	SetRudder RULCIRK
	DELTA1 = ( SearchDepth - OWNALT - 20 )
	ALTITUDE
} else {
	IF RULCIRK > 0 THEN { SetRudder 75 } ELSE { SetRudder -75 } ENDIF
		DELTA1 = ( SearchDepth - OWNALT )
		TEMP = ABS DELTA1
IF TEMP > 100 THEN { SETPRIORITY 255 SETPITCH RULDEP } ELSE { SETPRIORITY 255 SETPITCH -1 } ENDIF
} endif
IF DSENSON >= OWNALT THEN {
	SearchON
	Enabled = 1
} ENDIF
} ELSEIF not Homing THEN {
	Tconf = 0
IF PreEnableSpeed == 35 THEN {
IF ( OWNALT < ( SearchDepth + 30 ) ) AND ( N_FGLUBPOISK ) THEN { N_FGLUBPOISK = 0 } ENDIF
IF N_FGLUBPOISK and ( DSENSON == -1 ) THEN {
SETPRIORITY 250 SETPITCH RULDEP
} else {
DELTA1 = ( SearchDepth - OWNALT )
ALTITUDE
} endif
} ELSE {
SETPRIORITY 250 SETPITCH RULDEP } ENDIF
SETPRIORITY 250	SetSpd PreEnableSpeed
IF PreEnableSpeed == 35 THEN {
	SetRudder RULCIRK
} elseIF RULCIRK > 0 THEN { SetRudder 75 } ELSE { SetRudder -75	} ENDIF
} ENDIF
if Homing then {
fs = 0
if ( ( ownalt >= Layer ) and ( talt < Layer ) ) or ( ( ownalt < Layer ) and ( talt >= Layer ) ) then { ColT = 1
} else { ColT = 0 } endif
if ColT and ( ( AcousticMode and ( trng > dfs ) ) or ( ( tconf < 50 ) and not AcousticMode ) ) then {
fs = 1
} else {
IF not GotHim THEN {
	FTERM = 0
	GotHim = 1
	mspd = ( spdmin + 10 )
	IF DBBuoyFlags & 3 THEN { mspd = MaxSpd } ENDIF
	OLDBRG = TBRG
	IF AcousticMode THEN {
		mspd = MAXSPD
		DELAY = 7
	} ELSE {
		DELAY = 3
	} ENDIF
TAGE = 0
} ENDIF
if ( ( talt - 11 ) > Ceiling ) or ( talt < floor ) then { FKORIDOR = 1 } else { FKORIDOR = 0 } endif
CalcSpd = ownspd
IF TAGE < DELAY THEN {
	CalcSpd = ( CalcSpd + 3 )
	IF CalcSpd > mspd THEN { CalcSpd = mspd } ENDIF
} ELSE {
	IF OWNSPD > spdmin THEN {
	CalcSpd = ( CalcSpd - 3 )
IF CalcSpd < spdmin THEN { CalcSpd = spdmin } ENDIF
	} endif
} ENDIF
IF TRNG >= 180 THEN {
OrdDpth = TALT
DELTA1 = ( OrdDpth - ownalt )
ColT = ( ( ownspd * 1852 ) / 3600 )
if ColT != 0 then { 
ColT = ( TRNG / ColT ) } else { ColT = 0.001 } endif
if ( TRNG > 1300 ) OR ( ABS TSILOS < 11 ) then { SETPRIORITY 252 SETCRS TBRG
fterm = 0
} elseif ( TRNG > 500 ) OR ( ABS TSILOS < 30 ) then {
fterm = 0
IF ColT > 20 THEN { ColT = 20 } ENDIF
ColT += 3
OLDBRG = ( ( ColT * TBRG ) - ( ( ColT - 1 ) * OLDBRG ) )
OLDBRG = ( OLDBRG + 720 )
OLDBRG = ( OLDBRG MOD 360 )
SETPRIORITY 252 SETCRS OLDBRG
} else { fterm = 1 } endif
ColT = XYBRG ABS DELTA1 ( TRNG * 3.28 )
if DELTA1 < 0 then { ColT = ( -1 * ColT ) } endif
SETPRIORITY 252 setpitch ColT
} ENDIF
SETPRIORITY 252
SETSPD CalcSpd
OLDBRG = TBRG
} endif
} ENDIF
} ENDIF
} ENDIF
} ENDIF
if ownalt > -8 then { SETPRIORITY 255 setalt -27 } endif
Homing = 0