; Reinforce Alert ver.1.41 Doctrine
; Surface Ship Evade Torpedo version 10.0_c

var LegTimer
var RecognitionDelay
var Snapshot
var LegCourse
var EvadeSpeed
var jammerIdx
var decoyIdx
var towedIdx
var PaketIdx
var PaketCount
var PaketQnty2
var Paket
var LegTimerPaket
var OriginSpd
var OriginCrs
var LegTimerCM
var CMCount
var CMqnty
var l_r
var pero

var Mode
var SafeSpeed
var PassiveControl
var IncptControl
var OBSERVATION
var TorpedoTracking
var TorpPosBrg
var TorpPosCrs
var TorpPosRng
var TorpPosSil
var TorpPosAOB

var TorpPosBrgOLD
var TorpPosCrsOLD
var TorpPosRngOLD
var TorpPosSilOLD
var TorpPosAOBOLD
var RTB

IF INIT THEN {
	RecognitionDelay = ( Time + 30 + RND 30 )
	If ( TgtConf >= 100 ) Then { RecognitionDelay = ( Time + 15 ) } Endif
	If 5 > ( rnd 10 ) then { Mode = 1 EvadeSpeed = SafeSpeed } else { EvadeSpeed = ( 20 + RND ( MaxSpd - 20 ) ) } endif
	LegTimer = -1
	LegTimerPaket = -1
	LegTimerCM = -1
	l_r = -1
	Snapshot = False
	jammerIdx = DBIdxFromRecNum 1414
	decoyIdx = DBIdxFromRecNum 1412
	towedIdx = DBIdxFromRecNum 1413
	PaketIdx = DBIdxFromRecNum 4207
	SafeSpeed = ( GetEntVar "PassiveWashout" )
	PaketQnty2 = ( GetEntVar "PaketQnty" )
	OriginSpd = OwnSpd
	OriginCrs = OwnCrs
	CMqnty = 16
	TorpPosBrg = TgtBrg
	TorpPosCrs = TgtCrs
	TorpPosRng = TgtRng
	TorpPosSil = TgtSilos
	TorpPosAOB = TgtAOB
	If ( EvadeSpeed < 5 ) Then { EvadeSpeed = MaxSpd } endif
	If GetEntVar "PaketQnty" > 0 Then { Paket = 1 } endif
} ELSEIF ( LegTimer == -1 ) THEN {
	Setpriority 200
	SetSpd OriginSpd
	SetCrs OriginCrs
	IF ( TIME > RecognitionDelay ) THEN {
		Observation = 1
		IF TorpedoTracking THEN {
		IF ( Not Snapshot ) and not ( TgtID $= "FRIEND" ) THEN {
			FireBest
			Snapshot = True
			SetPriority 210
			SetSpd EvadeSpeed
		} ENDIF
		IF ( ( TorpPosRng < ( 13890 + RND 4630 ) ) AND ( TorpPosSil < 0 ) AND ( ABS RelativeBearing TorpPosCrs ( TorpPosBrg + 180 MOD 360 ) < 30 ) ) THEN {
;			DEBUGOUT "Ship Evading Torpedo!"
			TorpPosBrgOLD = TorpPosBrg
			TorpPosCrsOLD = TorpPosCrs
			TorpPosRngOLD = TorpPosRng
			TorpPosSilOLD = TorpPosSil
			TorpPosAOBOLD = TorpPosAOB

			IF ( CMCount < CMqnty ) Then {
;				DebugOut "DROP CM"
				CountermeasureIdx decoyIdx 
				CountermeasureIdx jammerIdx 
				CMCount += 1
			} endif
		} endif
			IF ( GetEntVar "TowedCounter" < 1 ) Then {
				CountermeasureIdx towedIdx 
				SetEntVar "TowedCounter" ( GetEntVar "TowedCounter" + 1 )
			} endif
				LegTimer = ( 180 + ( RND 180 ) )
				RTB = RND 10
		IF ( TorpPosAOB < 0 ) THEN {
			LegCourse = ( ( TorpPosBrg + 75 ) + RND 60 MOD 360 )
		} ELSE {
			LegCourse = ( ( TorpPosBrg + 225 ) + RND 60 MOD 360 )
		} ENDIF
		LegTimer = ( TIME + LegTimer )
;		SetPriority 255
;		SetSpd EvadeSpeed
	} ENDIF
} ENDIF
} ELSEIF ( Time > LegTimer ) THEN {
	LegTimer = -1
	l_r = -1
} ELSE {
	if ( Time > ( LegTimer - 30 ) ) AND ( TorpedoTracking != 1 ) then {
		if l_r == -1 then {
			l_r = 1
if 5 > ( rnd 10 ) then { pero = ( ( OwnCrs - 270 ) mod 360 ) } else { Pero = ( ( OwnCrs + 270 ) mod 360 ) } endif
		} endif
		SetPriority 255
		SetCrs Pero
	} else {
IF TorpedoTracking AND Mode Then {
	IF RTB >= 7 Then {
		IF ( TorpPosAOB < 0 ) THEN {
			LegCourse = ( TorpPosBrg + 90 MOD 360 )
		} ELSE {
			LegCourse = ( TorpPosBrg + 270 MOD 360 )
		} ENDIF
	} ENDIF
} endif
		SetPriority 255
		SetCrs LegCourse
	} endif
	IF ( TorpPosRng < 2778 ) THEN {
		SetPriority 255
		SetSpd MaxSpd	
	} ELSE {
		SetPriority 255
		SetSpd EvadeSpeed
	} ENDIF
} ENDIF

IF ( GetEntVar "CMPaketCount" < PaketQnty2 ) AND Paket Then {
 	If ( Time >= LegTimerPaket ) Then {
		IF ( ( TorpPosRng < 3000 ) AND ( TorpPosSil < 0 ) AND ( abs RelativeBearing TorpPosCrs ( TorpPosBrg + 180 mod 360 ) < 30 ) ) THEN {
			TorpPosRngOLD = TorpPosRng
		 	LegTimerPaket = ( Time + 91 )
			SetEntVar "CMPaketCount" ( GetEntVar "CMPaketCount" + 1 )
			CountermeasureIdx PaketIdx 
		} endif
	} endif
} endif
IF ( CMCount < CMqnty ) Then {
	If ( Time >= LegTimerCM ) Then {
		IF ( ( TorpPosRng < 2778 ) AND ( TorpPosSil < 0 ) AND ( abs RelativeBearing TorpPosCrs ( TorpPosBrg + 180 mod 360 ) < 30 ) ) THEN {
			TorpPosRngOLD = TorpPosRng
			TorpPosBrgOLD = TorpPosBrg
			TorpPosCrsOLD = TorpPosCrs
			TorpPosSilOLD = TorpPosSil
			TorpPosAOBOLD = TorpPosAOB
		 	LegTimerCM = ( Time + 60 + RND 60 )
			CountermeasureIdx decoyIdx 
			CountermeasureIdx jammerIdx 
			CMCount += 1
		} endif
	} endif
} endif
; ----------AI Sonarman -----------------
If TgtSource $= "PASSIVE SONAR" THEN {
	If TgtAge <= 5 THEN {
		PassiveControl = 1
	} ELSE {
		PassiveControl = 0
	} ENDIF
} ENDIF
If TgtSource $= "Active Intercept" THEN {
	If TgtAge <= 30 THEN {
		IncptControl = 1
	} ELSE {
		IncptControl = 0
	} ENDIF
} ENDIF
IF OBSERVATION THEN {
	If ( ( PassiveControl == 1 ) OR ( IncptControl == 1 ) ) THEN {
		TorpedoTracking = 1
		TorpPosBrg = TgtBrg
		TorpPosCrs = TgtCrs
		TorpPosRng = TgtRng
		TorpPosSil = TgtSilos
		TorpPosAOB = TgtAOB
		TorpPosBrgOLD = TorpPosBrg
		TorpPosCrsOLD = TorpPosCrs
		TorpPosRngOLD = TorpPosRng
		TorpPosSilOLD = TorpPosSil
		TorpPosAOBOLD = TorpPosAOB
	} ELSE {
		TorpedoTracking = 0
		TorpPosBrg = TorpPosBrgOLD
		TorpPosCrs = TorpPosCrsOLD
		TorpPosRng = TorpPosRngOLD
		TorpPosSil = TorpPosSilOLD
		TorpPosAOB = TorpPosAOBOLD
	} ENDIF
} ENDIF
