; User MobileDecoy Doctrine For -RA- v.1.41

var AcousticMode
var Ceiling
var CircleSearchPattern
var ContinuousPing
var CorrInterogg
var CrushDpth
var dept
var DL
VAR DMAX
VAR DMIN
var Done
var Enabled
var Enabled1
var Explode
var fenab
var Floor
var FSR
var FSRMIN
var fuel
var HFMode
var ImpactTime
var InitTime
var InitX
var InitY
var K
var LS
var Mode
var OPSPD
var OPSPD1
var OPSPD2
var PassMode
var Period
var PreEnableCourse
var PreenableDepth
var PreEnableSpeed
var PRESET
var Rng_Ping
var Run
var Runout
var RunToEnable
var SearchDepth
var SilentRun
var Snorkeling
var scale
var STOP_PING
var STOP_FLOW
var TakeTactic
var tfd
var TorpMaxDepth
var Trange
var TransitSPD
var InitAlt
var Arrival
var ImpulseEnergyFlow
var VariablePulse

func Operative {
IF Mode == 1 THEN {
	SensorEnable "494" 1
	SensorEnable "1628" 1
	STOP_PING = ( TIME + 10 )
} ELSEIF Mode == 3 Then {
	If Enabled1 == 1 Then {
	Snorkeling = 1
} ELSEIF Enabled1 == 2 Then {
	SensorEnable "494" 1
	SensorEnable "1628" 1
	STOP_PING = ( TIME + 10 )
	} ENDIF
} ENDIF
}
IF INIT THEN {
	Snorkeling = -1
	STOP_PING = -1
	fenab = 1
	tfd = -1
	CorrInterogg = Time
	InitAlt = OwnAlt
	DL = InitAlt
	TorpMaxDepth = ( MinAlt * 3.28 )
	Explode = RND 10
	ImpactTime = 0
	CrushDpth = 0
	InitTime = ( Time + 2 )
	Enabled = 0
	Enabled1 = 0
	InitX = OwnX
	InitY = OwnY
	LS = 0.005
	PRESET = 1
	TorpMaxDepth = -1312
	FUEL = 1000
	TRange = 75000
	DMAX = 15001
	DMIN = ( Trange / 1852 )
	DMAX = ( DMAX / 1852 )
	FSRMIN = ( FUEL / ( DMIN / ( LS / 3600 ) ) )
	K = ( ( ( FUEL / ( DMAX / ( MAXSPD / 3600 ) ) ) - FSRMIN ) / ( MAXSPD - LS ) )
	RunToEnable = 1000
	Runout = -1
	SearchDepth = PreEnableDepth
	dept = ownalt
} ELSE {
	IF PRESET THEN {
	HFMode = false
	PassMode = false
IF AcousticMode Then {
	HFMode = true
	Mode = "HFMode"
} ELSE {
	PassMode = true
	Mode = "PassMode"
} ENDIF
IF Not CircleSearchPattern Then {
	ContinuousPing = False
} ELSE {
	ContinuousPing = True
} ENDIF
IF HFMode And Not ContinuousPing THEN {
	Mode = 1
} ELSEIF HFMode And ContinuousPing THEN {
	Mode = 2
} ELSEIF PassMode THEN {
	PassMode = true
	Mode = 3
} ENDIF
If Mode != 10 Then {
IF ( Ceiling == -118 ) Then { OPSPD1 = 1
} ELSEIF ( Ceiling == -7 ) Then { OPSPD1 = 2
} ELSEIF ( Ceiling == -10 ) Then { OPSPD1 = 3
} ELSEIF ( Ceiling == -13 ) Then { OPSPD1 = 4
} ELSEIF ( Ceiling == -16 ) Then { OPSPD1 = 5
} ELSEIF ( Ceiling == -20 ) Then { OPSPD1 = 6
} ELSEIF ( Ceiling == -23 ) Then { OPSPD1 = 7
} ELSEIF ( Ceiling == -26 ) Then { OPSPD1 = 8
} ELSEIF ( Ceiling == -30 ) Then { OPSPD1 = 9
} ELSEIF ( Ceiling == -33 ) Then { OPSPD1 = 10
} ELSEIF ( Ceiling == -36 ) Then { OPSPD1 = 11
} ELSEIF ( Ceiling == -39 ) Then { OPSPD1 = 12
} ELSEIF ( Ceiling == -43 ) Then { OPSPD1 = 13
} ELSEIF ( Ceiling == -46 ) Then { OPSPD1 = 14
} ELSEIF ( Ceiling == -49 ) Then { OPSPD1 = 15
} ELSEIF ( Ceiling == -52 ) Then { OPSPD1 = 16
} ELSEIF ( Ceiling == -56 ) Then { OPSPD1 = 17
} ELSEIF ( Ceiling == -59 ) Then { OPSPD1 = 18
} ELSEIF ( Ceiling == -62 ) Then { OPSPD1 = 19
} ELSEIF ( Ceiling == -66 ) Then { OPSPD1 = 20
} ELSEIF ( Ceiling == -69 ) Then { OPSPD1 = 21
} ELSEIF ( Ceiling == -72 ) Then { OPSPD1 = 22
} ELSEIF ( Ceiling == -75 ) Then { OPSPD1 = 23
} ELSEIF ( Ceiling == -79 ) Then { OPSPD1 = 24
} ELSEIF ( Ceiling == -82 ) Then { OPSPD1 = 25
} ELSEIF ( Ceiling == -85 ) Then { OPSPD1 = 26
} ELSEIF ( Ceiling == -89 ) Then { OPSPD1 = 27
} ELSEIF ( Ceiling == -92 ) Then { OPSPD1 = 28
} ELSEIF ( Ceiling == -95 ) Then { OPSPD1 = 29
} ELSEIF ( Ceiling == -98 ) Then { OPSPD1 = 30
} ELSEIF ( Ceiling == -102 ) Then { OPSPD1 = 31
} ELSEIF ( Ceiling == -105 ) Then { OPSPD1 = 32
} ELSEIF ( Ceiling == -108 ) Then { OPSPD1 = 33
} ELSEIF ( Ceiling == -112 ) Then { OPSPD1 = 34
} ELSEIF ( Ceiling == -115 ) Then { OPSPD1 = 35
} ELSEIF ( Ceiling == -118 ) Then { OPSPD1 = 1
} ELSEIF ( Ceiling == -121 ) Then { OPSPD1 = 1
} ELSEIF ( Ceiling < -122 ) Then { OPSPD1 = 35
} ENDIF
IF ( Floor == -820 ) Then { OPSPD2 = 35
} ELSEIF ( Floor == -6565 ) Then { OPSPD2 = 1
} ELSEIF ( Floor == -6568 ) Then { OPSPD2 = 2
} ELSEIF ( Floor == -6571 ) Then { OPSPD2 = 3
} ELSEIF ( Floor == -6575 ) Then { OPSPD2 = 4
} ELSEIF ( Floor == -6578 ) Then { OPSPD2 = 5
} ELSEIF ( Floor == -6581 ) Then { OPSPD2 = 6
} ELSEIF ( Floor == -6585 ) Then { OPSPD2 = 7
} ELSEIF ( Floor == -6588 ) Then { OPSPD2 = 8
} ELSEIF ( Floor == -6591 ) Then { OPSPD2 = 9
} ELSEIF ( Floor == -6594 ) Then { OPSPD2 = 10
} ELSEIF ( Floor == -6598 ) Then { OPSPD2 = 11
} ELSEIF ( Floor == -6601 ) Then { OPSPD2 = 12
} ELSEIF ( Floor == -6604 ) Then { OPSPD2 = 13
} ELSEIF ( Floor == -6608 ) Then { OPSPD2 = 14
} ELSEIF ( Floor == -6611 ) Then { OPSPD2 = 15
} ELSEIF ( Floor == -6614 ) Then { OPSPD2 = 16
} ELSEIF ( Floor == -6617 ) Then { OPSPD2 = 17
} ELSEIF ( Floor == -6621 ) Then { OPSPD2 = 18
} ELSEIF ( Floor == -6624 ) Then { OPSPD2 = 19
} ELSEIF ( Floor == -6627 ) Then { OPSPD2 = 20
} ELSEIF ( Floor == -6630 ) Then { OPSPD2 = 21
} ELSEIF ( Floor == -6634 ) Then { OPSPD2 = 22
} ELSEIF ( Floor == -6637 ) Then { OPSPD2 = 23
} ELSEIF ( Floor == -6640 ) Then { OPSPD2 = 24
} ELSEIF ( Floor == -6644 ) Then { OPSPD2 = 25
} ELSEIF ( Floor == -6647 ) Then { OPSPD2 = 26
} ELSEIF ( Floor == -6650 ) Then { OPSPD2 = 27
} ELSEIF ( Floor == -6653 ) Then { OPSPD2 = 28
} ELSEIF ( Floor == -6657 ) Then { OPSPD2 = 29
} ELSEIF ( Floor == -6660 ) Then { OPSPD2 = 30
} ELSEIF ( Floor == -6663 ) Then { OPSPD2 = 31
} ELSEIF ( Floor == -6667 ) Then { OPSPD2 = 32
} ELSEIF ( Floor == -6670 ) Then { OPSPD2 = 33
} ELSEIF ( Floor == -6673 ) Then { OPSPD2 = 34
} ELSEIF ( Floor == -6676 ) Then { OPSPD2 = 35
} ELSEIF ( Floor < -6677 ) Then { OPSPD2 = 35
} ENDIF
	TransitSpd = PreEnableSpeed
If ( TransitSpd <= 0 ) Then { TransitSpd = 5 } ENDIF
If ( OPSPD1 <= 0 ) Then { OPSPD1 = 5 } ENDIF
If ( OPSPD2 <= 0 ) Then { OPSPD2 = 15 } ENDIF
IF RunToEnable == 5 Then {
	RNG_Ping = 150
} ELSEIF RunToEnable == 10 Then {
	RNG_Ping = 450
} ELSEIF RunToEnable == 20 Then {
	RNG_Ping = 650
} ELSEIF RunToEnable == 40 Then {
	RNG_Ping = 850
} ELSEIF RunToEnable == 50 Then {
	RNG_Ping = 950
} ELSEIF RunToEnable == 9144 Then {
	VariablePulse = 1
} Endif
RunToEnable = 3704
} ENDIF
	PRESET = 0
} ENDIF
} ENDIF
IF FUEL < 0 THEN {
	SHUTDOWN
} ELSE {
	CorrInterogg = ( Time - CorrInterogg )
	IF ( ( OWNALT < 0 ) AND ( ( OWNSPD >= ( LS - 1 ) ) OR ( OWNSPD <= ( MAXSPD + 1 ) ) ) ) THEN {
	FSR = ( FSRMIN + ( ( OWNSPD - LS ) * K ) )
	FSR = ( FSR * CorrInterogg )
} ELSE {
	FSR = 0
} ENDIF	
	FUEL = ( FUEL - FSR )	
} ENDIF
	CorrInterogg = Time
	Run = XYRng ( OwnX - InitX ) ( OwnY - InitY )
IF NOT Enabled THEN {
	IF ( RunToEnable != -1 ) AND ( Run >= RunToEnable ) THEN {
		Enabled1 += 1
		Enabled = 1
		RunToEnable = -1
if fenab then { Done = 1 fenab = 0 TFD = ( TIME + 8 ) } endif
	} ENDIF
} ENDIF
IF ( TFD != -1 ) AND ( TFD < TIME ) THEN {
	fenab = 1
	TFD = -1
	TakeTactic = 1
	Done = 0
If VariablePulse Then {
	Rng_Ping = ( RND 1000 )
} Endif
If ( ( Mode == 1 ) OR ( Mode == 2 ) ) Then {
	If ( ( Enabled1 != 2 ) AND ( Enabled1 != 3 ) ) Then {
If RNG_Ping > 900 Then {
SensorEnable "512" 1
SensorEnable "1630" 1
	scale = 32
} ELSEIF RNG_Ping >= 800 Then {
SensorEnable "504" 1
SensorEnable "1629" 1
	scale = 25
} ELSEIF RNG_Ping >= 600 Then {
SensorEnable "494" 1
SensorEnable "1628" 1
	scale = 13
} ELSEIF RNG_Ping >= 400 Then {
SensorEnable "467" 1
SensorEnable "1627" 1
	scale = 6
} ELSEIF RNG_Ping > 0 Then {
SensorEnable "426" 1
SensorEnable "1626" 1
	scale = 3
		} endif
	} endif
} endif
If TakeTactic And Enabled AND ( Enabled1 >= 1 ) Then {
IF Enabled1 == 1 Then {
	OPSpd = TransitSpd
	dept = DL
If ( ( Mode == 1 ) OR ( Mode == 2 ) ) Then {
	Fuel = ( Fuel - 15 )
} endif	
} ELSEIF Enabled1 == 2 THEN {
	OPSpd = OPSPD1
	dept = SearchDepth
	SilentRun = 1
If ( Mode == 3 ) Then {
	Fuel = ( Fuel - 15 )
} endif	
} ELSEIF Enabled1 == 3 THEN {
	OPSpd = OPSPD2
	dept = SearchDepth
	SilentRun = 1
} ELSEIF Enabled1 == 4 THEN {
	OPSpd = OPSPD1
	dept = SearchDepth
If ( ( Mode == 1 ) OR ( Mode == 2 ) ) Then {
	ImpulseEnergyFlow = 1
} endif	
} ELSEIF Enabled1 == 5 THEN {
	OPSpd = OPSPD2
	dept = SearchDepth
If ( ( Mode == 1 ) OR ( Mode == 2 ) ) Then {
	ImpulseEnergyFlow = 1
	} endif	
} ENDIF
If Not ContinuousPing And ( Mode == 3 ) Then {
	IF Enabled1 == 2 Then {
		OPSpd = OwnSpd
		dept = OwnAlt
		Operative
		} endif
	} endif
} ENDIF
If Not Done Then {
	If Not SilentRun Then {
		Operative
	} ENDIF
		Done = 1
		Enabled1 = 0
		fenab = 1
	} endif
} endif
IF Enabled != 1 Then {
	OPSPD = TransitSpd
	SetSpd OPSPD
	SetAlt DL
	SETPRIORITY 250 SetCrs PreEnableCourse
	Done = 0
	SilentRun = 0
	scale = 0
	ImpulseEnergyFlow = 0
} ELSE {
	SetSpd OPSPD
	SetAlt dept 
	SETPRIORITY 250 SetCrs PreEnableCourse
} ENDIF
If ImpulseEnergyFlow Then {
	If Enabled Then {
	If ( STOP_FLOW == -1 ) Then {
	If ( Time >= Period ) Then {
		Period = ( Time + Scale )
		Stop_Flow = ( Time + 2 )
		Fuel = ( Fuel - 15 )
		} endif
	} endif
} endif
IF ( STOP_FLOW != -1 ) THEN {
	IF TIME > ( STOP_FLOW ) THEN {
		STOP_FLOW = -1
		} ENDIF
	} Endif
} endif
IF ( STOP_PING != -1 ) THEN {
	IF TIME > ( STOP_PING ) THEN {
		STOP_PING = -1
		SETPRIORITY 255
		PREENABLE
	} ENDIF
} Endif
If ( Snorkeling != -1 ) And Enabled Then {
	If Not Arrival Then {
		OPSPD = 5
		dept = ( PeriDepth + 1 )
		SetSnorkel ON
	} Endif
IF ( OwnAlt > PeriDepth ) THEN {
	Arrival = 1
	SetPriority 250
	OPSPD = 5
	dept = ( PeriDepth + 1 )
	} ENDIF
} ENDIF
IF ( Snorkeling == 1 ) And Not Enabled Then {
	Snorkeling = -1
	SetSnorkel OFF
	Arrival = 0
} Endif
