; Reinforce Alert v1.41 Add-On Doctrine

var DipTimer
var WPTR
var Pinging
var Dipping
VAR TIME_ZVON
VAR FPAD
VAR T_NOPADENIE
VAR OLD_SPD 
var GaugesOn
var GaugesOff
var TR1
var TakeOff
VAR ROK
VAR RX
VAR RY
VAR RokRng
VAR PROZVON
VAR TEMP
VAR Delay
var Lock
var RadarON
var RadarOFF
var RadarMode
var VVRAG
var prad
var opastnost
var T_opas
VAR FR
VAR FD
VAR FIRST
VAR TIME_LAND
VAR FNAP
VAR FUSURF
VAR FUSUB
VAR FHSURF
VAR FASM
VAR FHSUB
VAR RASTROK
VAR RASTSURF
VAR RASTSUB
VAR RASTHSURF
VAR RASTHSUB
VAR DIDESURF
VAR DIDESUB
VAR DIDEHSURF
VAR DIDEHSUB
VAR FUELEND
VAR MXSPD
VAR TIMEVZLET
VAR FARB
VAR FLAND
var TOTLETA
VAR FAOFF
VAR FAON
VAR FRADOFF
VAR FRADON
var Chaff
var Flare
var JamFC
var JamRad


Func AcousticsON {
IF FAON THEN {
FAON = 0
FAOFF = 1
SensorEnable "34" 1
SensorEnable "38" 1
SensorEnable "513" 1
SensorEnable "514" 1
SensorEnable "515" 1
SensorEnable "516" 1
SensorEnable "517" 1
SensorEnable "518" 1
SensorEnable "519" 1
SensorEnable "520" 1
SensorEnable "521" 1
SensorEnable "561" 1
SensorEnable "562" 1
SensorEnable "563" 1
SensorEnable "564" 1
SensorEnable "565" 1
SensorEnable "566" 1
SensorEnable "567" 1
SensorEnable "581" 1
SensorEnable "582" 1
SensorEnable "849" 1
SensorEnable "850" 1
SensorEnable "851" 1
SensorEnable "852" 1
SensorEnable "853" 1
SensorEnable "854" 1
SensorEnable "855" 1
SensorEnable "856" 1
SensorEnable "857" 1
SensorEnable "858" 1
SensorEnable "859" 1
SensorEnable "860" 1
SensorEnable "1644" 1
SensorEnable "1651" 1
} ENDIF
}

Func AcousticsOFF {
IF FAOFF THEN {
FAOFF = 0
FAON = 1
SensorEnable "34" 0
SensorEnable "38" 0
SensorEnable "513" 0
SensorEnable "514" 0
SensorEnable "515" 0
SensorEnable "516" 0
SensorEnable "517" 0
SensorEnable "518" 0
SensorEnable "519" 0
SensorEnable "520" 0
SensorEnable "521" 0
SensorEnable "561" 0
SensorEnable "562" 0
SensorEnable "563" 0
SensorEnable "564" 0
SensorEnable "565" 0
SensorEnable "566" 0
SensorEnable "567" 0
SensorEnable "581" 0
SensorEnable "582" 0
SensorEnable "849" 0
SensorEnable "850" 0
SensorEnable "851" 0
SensorEnable "852" 0
SensorEnable "853" 0
SensorEnable "854" 0
SensorEnable "855" 0
SensorEnable "856" 0
SensorEnable "857" 0
SensorEnable "858" 0
SensorEnable "859" 0
SensorEnable "860" 0
SensorEnable "1644" 0
SensorEnable "1651" 0
} ENDIF
}

Func RadiationON {
IF FRADON THEN {
FRADON = 0
FRADOFF = 1
SensorEnable "AHV-16" 1
SensorEnable "AN/APN-130" 1
SensorEnable "AN/APS-124" 1
SensorEnable "AN/APS-147" 1
SensorEnable "AN/APS-705" 1
SensorEnable "Initsiativa-2K" 1
SensorEnable "MEL-5955" 1
SensorEnable "Omera-31" 1
SensorEnable "ORB-32" 1
SensorEnable "Sea Spray" 1
SensorEnable "AN/APS-83" 1
SensorEnable "MEL-SS" 1
SensorEnable "AN/APS-503" 1
SensorEnable "Blue Kestrel" 1
SensorEnable "Ocean Master" 1
} ENDIF
}

Func RadiationOFF {
IF FRADOFF THEN {
FRADOFF = 0
FRADON = 1
SensorEnable "AHV-16" 0
SensorEnable "AN/APN-130" 0
SensorEnable "AN/APS-124" 0
SensorEnable "AN/APS-147" 0
SensorEnable "AN/APS-705" 0
SensorEnable "Initsiativa-2K" 0
SensorEnable "MEL-5955" 0
SensorEnable "Omera-31" 0
SensorEnable "ORB-32" 0
SensorEnable "Sea Spray" 0
SensorEnable "AN/APS-83" 0
SensorEnable "MEL-SS" 0
SensorEnable "AN/APS-503" 0
SensorEnable "Blue Kestrel" 0
SensorEnable "Ocean Master" 0
} ENDIF
}

IF INIT THEN {
FAOFF = 1
FAON = 1
FRADOFF = 1
FRADON = 1
; IF TIME < 5 THEN { FLAND = 1 } ELSE { FLAND = 0 } ENDIF
	IF ( DBCMFlags & 1 ) == 1 THEN { Chaff = 1 } ENDIF
	IF ( DBCMFlags & 2 ) == 2 THEN { Flare = 1 } ENDIF
	IF ( DBCMFlags & 4 ) == 4 THEN { JamRad = 1 } ENDIF
	IF ( DBCMFlags & 16 ) == 16 THEN { JamFC = 1 } ENDIF
	SensorEnable "FCRadarJam" 0
	SensorEnable "RadarJam" 0
FLAND = 1
MxSpd = ( MaxSpd * 0.98 )
PROZVON = 0
ROK = 0
GaugesOn = -1
GaugesOff = 0
TR1 = True
TakeOff = True
TIME_LAND = -1
FPAD = 0
TIME_ZVON = -1
Lock = 0
Delay = 0
WPTR = 0
DipTimer = -1
VVRAG = 0
prad = 0
RadarMode = 1
opastnost = 0
t_opas = -1
FR = 0
FIRST = 1
RadarOFF = -1
FNAP = 0
FUSURF = 0
FUSUB = 0
FHSURF = 0
FASM = 0
FHSUB = 0
RASTROK = -1
RASTSURF = -1
RASTSUB = -1
RASTHSURF = -1
RASTHSUB = -1
DIDESURF = 0
DIDESUB = 0
DIDEHSURF = 0
DIDEHSUB = 0
FUELEND = 0
IF ( ORDER $= "TRANSIT" ) THEN { FR = 1 RadarMode = 1 } ENDIF

} ELSEIF LOSTTRACK THEN {
	vvrag = 0
} ELSE {
	IF fuelpercent == 100 THEN { FUELEND = 0 } ENDIF

IF ( fuelpercent < 10 ) THEN { FUELEND = 1 IF FLAND THEN { SETPRIORITY 252 LAND } ENDIF } ENDIF

IF ( TIME_LAND != -1 ) AND ( TIME > TIME_LAND ) THEN {
	TIME_LAND = -1
	IF FLAND THEN { SETPRIORITY 252 LAND } ENDIF
} ENDIF

IF FUELEND THEN {
	TR1 = 1
	TAKEOFF = 1
	FR = 0
} ELSE { TakeOff = 0 } ENDIF

IF TOTLETA < TIME THEN {

IF NOT FARB THEN {
	AcousticsOFF
	IF OWNSPD > 8 THEN { FARB = 1 } ENDIF
} ELSE {
	IF ( WAYPTX < 0 ) OR ( WAYPTY < 0 ) THEN {
	TOTLETA = ( TIME + 20 )
	TACTICCENTER
	} ENDIF

IF NOT TakeOff THEN {
IF ( OwnSpd <= 5 ) AND ( OWNALT > 150 ) AND ( ( TIME_ZVON == -1 ) OR ( TIME > TIME_ZVON ) ) THEN {
	IF terrainalt > -20 then {
		SETPRIORITY 250
		SETPERSIST 10
		SETSPD MXSPD
	} elseif NOT TakeOff THEN {
		SETPRIORITY 250
		SETPERSIST 90
		SETSPD 0
		SETALT 45
		DipTimer = ( TIME + 90 )
		TIME_ZVON = ( TIME + 300 )
	} ENDIF
} ENDIF

; Search only
IF ( NOT ( ORDER $= "Transit" ) ) THEN {
; Dip
	IF WPTR OR PROZVON THEN {
; game has just clued us we've reached a waypoint
;		DEBUGOUT "Waypoint Reached,Lower Dipping Sonars"
		SETPRIORITY 250
		SETPERSIST 90
		SETSPD 0
		SETALT 45
		Pinging = 0
		WPTR = 0
		PROZVON = 0
		Dipping = True
	} ENDIF

	; Start pinging
	IF ( ( Pinging == 0 ) AND ( Dipping == 1 ) AND ( OwnAlt < 50 ) ) THEN {
;		DEBUGOUT "Commence Check Point"
		DipTimer = ( TIME + 60 )
		SETPRIORITY 249
		SETPERSIST DipTimer
		SETSPD 0
		SETALT 45
		Pinging = 1
	} ENDIF
} ENDIF
} ENDIF
	; Stop Dip
	IF ( ( DipTimer != -1 ) AND ( TIME > DipTimer ) ) THEN {
;		DEBUGOUT "Check Is Completed, Raise Dipping Sonars"
		SETPRIORITY 250
		SETPERSIST 60
		SETSPD MXSPD
		SETALT 300
		Pinging = 0
		DipTimer = -1
		Dipping = False
IF NOT ( TGTTYPE $= "SUB" ) THEN {
	TACTICCENTER
} ENDIF
IF ( FASM AND ( NOT ROK ) ) THEN { FASM = 0 RASTROK = -1 } ENDIF
} ENDIF

IF ( GaugesOn != -1 ) THEN {
	IF ( ( OwnAlt < 50 ) AND ( NOT TakeOff ) AND ( OwnSpd <= 5 ) ) THEN {
		AcousticsON
		Lock = 1
;		DebugOut OwnName
;		Debugout "DebugOut ACOUSTISC ON"
		GaugesOff = 0 
		GaugesOn = -1
	} ENDIF
} ENDIF

IF ( GaugesOff != -1 ) THEN {
	IF ( ( OwnAlt > 50 ) OR ( OwnSpd > 5 ) ) THEN {
		AcousticsOFF
;		DebugOut OwnName
;		DebugOut "ACOUSTISC OFF"
		Lock = 0
		GaugesOff = -1
		GaugesOn = 0
	} ENDIF
} ENDIF
} ENDIF

} ELSE { AcousticsOFF SETPRIORITY 253 SETSPD MXSPD } ENDIF

IF ( ( Lock == 0 ) AND ( GaugesOff == -1 ) ) THEN { Delay = ( Delay + 1 ) } ENDIF
	IF ( Delay > 2 ) AND RadarMode THEN {
		RadiationOFF
;		DebugOut OwnName
;		DEBUGOUT "RADAR OFF"
		Delay = 0
		Lock = 1
	} ENDIF

; Radar Periodicity Work
IF ( TIME > RADAROFF ) THEN {
; Radar Sweep Period
	RadarON = ( time + 15 + ( RND 20 ) )
; Periodicity Time
	RadarOFF = ( RadarON + 100 + ( RND 30 ) )
;	DEBUGOUT "RestartRadarPeriodicityTime"
} ENDIF

IF ( Lock == 1 ) AND ( RadarMode == 1 ) THEN {
	IF NOT OPASTNOST THEN { FR = 1 } ENDIF
IF ( TIME < RADARON ) THEN { FR = 1 } ENDIF
IF ( TIME >= RADARON ) AND OPASTNOST THEN { FR = 0 } ENDIF
IF PRAD > TIME THEN { FR = 0 } ENDIF
IF VVRAG THEN { FR = 0 } ENDIF
	IF FR Then {
		RadiationON
;		DebugOut OwnName
;		DEBUGOUT "RADAR ON"
	} ENDIF
} ENDIF
; RADAR NERABOTAET
IF ( TIME >= RADARON ) AND OPASTNOST THEN { FR = 0 } ENDIF
IF PRAD > TIME THEN { FR = 0
} ENDIF
IF VVRAG THEN { FR = 0
} ENDIF
	IF NOT FR THEN {
		RadiationOFF
;		DebugOut OwnName
;		DEBUGOUT "RADAR OFF"
	} ENDIF
IF ( TgtID $= "HOSTILE" ) Then { VVrag = 1 } ENDIF
; Assign Dipping Tactic
IF NEWTRACK AND NOT ( TgtSource $= "UNKNOWN" ) THEN {
IF NOT ( TgtID $= "NEUTRAL" ) THEN {
	; Sub?
	IF ( ( ( TgtClass $= "SUB" ) OR ( TgtClass $= "SURF" ) ) AND ( ( NOT ( ORDER $= "TRANSIT" ) ) ) ) THEN {
	TOTLETA = 0
	IF RadarMode Then { VVrag = 1 } endif
;		DEBUGOUT "Assigned Dipping Sonar"
		SETTACTIC "DippingSonar"
	IF NOT FASM THEN {
		Pinging = 0
		WPTR = 0
		DipTimer = -1
	} ENDIF

	} ENDIF
} ENDIF
	; Missile?
	IF ( ( TgtClass $= "MISSILE" ) AND ( ( TgtMissileClass "AAM" ) OR ( TgtMissileClass "SAM" ) ) ) THEN {
;	DEBUGOUT "ZRK Missile"
		IF ( ( TgtSource $= "Visual" ) OR ( TgtALT > -22 ) ) AND ( RadarMode == 1 ) Then { VVrag = 1 } endif
		IF RadarMode Then { VVrag = 1 } endif
		SETTACTIC "AirEvadeMissile"
	; Underwater launch missile ID
	} ELSEIF ( ( TgtClass $= "MISSILE" ) AND ( TgtType $= "Torp" ) ) Or ( TargetName $= "Harpoon UGM" )
		Or ( TargetName $= "TASM UGM-109 B" ) Or ( TargetName $= "SS-N-19 Shipwreck UGM" )
		Or ( TargetName $= "SS-N-19 Shipwreck UGM AI" ) Or ( TargetName $= "SS-N-19 Nuklear UGM" )
		Or ( TargetName $= "SS-N-22 Sunburn UGM" ) Or ( TargetName $= "C 801 UGM" )
		Or ( TargetName $= "Exocet UGM" ) Or ( TargetName $= "SM.39 Exocet UGM" )
		Or ( TargetName $= "SS-N-12 SandBox UGM" ) Or ( TargetName $= "SS-N-7 Starbright UGM" )
		Or ( TargetName $= "SS-N-9 Siren UGM" )	Or ( TargetName $= "Skorpioen SSM UGM" )
		Or ( TargetName $= "SS-N-3 Shaddock UGM" ) Or ( TargetName $= "3M-54E1 Club ASCM" ) Or ( TargetName $= "3M-51 Alfa ASM" )
		Or ( TargetName $= "ASURA SSM" )
		AND ( ( TgtID $= "Hostile" ) OR ( TgtID $= "UAE" ) OR ( TgtID $= "UPD" ) ) THEN {

;		DEBUGOUT "Registry Missile Launch Point"
		TEMP = xyrng ( TGTX - OWNX ) ( TGTY - OWNY )
		IF FHSUB AND ( RASTHSUB > TEMP ) THEN {
		; IfMissileIsFartherThanEnemySub
			RX = TGTX
			RY = TGTY
			ROK = 1
			FASM = 1 RASTROK = TEMP

		} ELSEIF NOT ( FASM OR FHSUB ) THEN {
		; WithoutMissile&Sub
			FASM = 1 RASTROK = TEMP
			RX = TGTX
			RY = TGTY
			ROK = 1

		} ELSEIF ( NOT FHSUB ) AND ( RASTROK > TEMP ) THEN {
		; IsDetectMissileNoSubContact
			FASM = 1 RASTROK = TEMP
			RX = TGTX
			RY = TGTY
			ROK = 1
		} ENDIF

	} ENDIF
	; Enemy Plane?
	IF ( ( TgtClass $= "AIR" ) AND ( TgtID $= "HOSTILE" ) ) THEN {
		IF RadarMode Then { VVrag = 1 } endif
		SETTACTIC "AirEvadeAir"
	} ENDIF
} ENDIF

if fasm then { RASTROK = xyrng ( OwnX - RX ) ( OwnY - RY ) } endif

; Check Up Point Missile Start
IF ROK AND ( NOT ( ORDER $= "TRANSIT" ) ) THEN {
	; TEMP = XYBRG ( RX - OWNX ) ( RY - OWNY )
	SETPRIORITY 252
	STEERXY ( RX - OWNX ) ( RY - OWNY )
	SETPRIORITY 252
	SETSPD ( 110 )
;	DEBUGOUT "FollowToUGMPointLaunch"
	RASTROK = xyrng ( OwnX - RX ) ( OwnY - RY )
	IF ( RASTROK < 500 ) THEN {
;	DEBUGOUT "ArrivalUGMLaunchPoint"
	ROK = 0
	PROZVON = 1
	} ENDIF
} ENDIF

IF ( T_OPAS != -1 ) AND ( TIME > T_OPAS ) THEN { T_OPAS = -1 opastnost = 0 } ENDIF
if ( vvrag and ( not opastnost ) ) then { opastnost = 1 T_OPAS = ( TIME + 540 + ( RND 200 ) ) } endif
IF VVRAG THEN { prad = ( time + 20 + ( rnd 20 ) ) } ENDIF

	;  Don't Dive!
	IF ( ( OwnSpd > 100 ) AND ( OwnAlt < 80 ) AND ( FPAD == 0 ) ) THEN { 
		OLD_SPD = OwnSpd
;		DEBUGOUT "Helo Stall"
		FPAD = 1
		T_NOPADENIE = 0
		SetPriority 251
		SetPersist 20
		SetAlt 150
		SETSPD ( OWNSPD - 15 )
	} ENDIF
	IF ( FPAD == 1 ) THEN { 
		T_NOPADENIE = ( T_NOPADENIE + 1 ) } ENDIF
		IF T_NOPADENIE > 30 THEN {
		SetPriority 251
		SetPersist 40
		SetAlt 200
		SETSPD OLD_SPD
		T_NOPADENIE = 0
		FPAD = 0
;		DEBUGOUT "Refresh Spd"
	} ENDIF
} endif