; RA DWX CM Doctrine 1.37

var ExpireTimer
var OrderedDepth
var LaunchCourse
var LaunchDepth
var LaunchTime
var Ceiling
var InitTime
var Hovertime
var SHALL
var DEEP
var ControlDepth
var ArrivalShallow
var ArrivalDeep
var TrigDepth
var Counter
var Preset
var Stop
var Lock
var VertRng
var VertSpd
var DestDpt
var SD
var SU
var DD
var DU
var SWUsed
var AICM
var MUsed
var IUsed

IF ( INIT ) THEN {
	InitTime = ( Time + 2 )
	Lock = 0
	Counter = 0	
	Preset = 1
	Shall = 0
	Deep = 0
	LaunchDepth = ( OwnAlt )
	Stop = false
	Ceiling = -66
	ExpireTimer = ( TIME + 360 + RND 60 )
	HoverTime = ( Time + 60 )
	LaunchTime = ( Time + 2 )
	LaunchCourse = OwnCrs
} Else {
IF Preset Then {
	Preset = 0
IF ( ( OrderedDepth > -101 ) And ( OrderedDepth < -99 ) ) Then { SHALL = 1 MUsed = true
} else {
IF ( ( OrderedDepth > -801 ) And ( OrderedDepth < -799 ) ) Then { DEEP = 1 MUsed = true } Endif } Endif
IF ( ( Not Deep ) And ( Not Shall ) ) Then {
IF ( ( ( OrderedDepth * 3.28 ) <= ( LaunchDepth - -3 ) ) AND ( ( OrderedDepth * 3.28 ) >= ( LaunchDepth - 3 ) ) ) Then { AICM = 1 } Endif } Endif
IF ( ( OrderedDepth < 1 ) AND ( OrderedDepth > -1 ) ) OR ( ( OrderedDepth < -1 ) AND ( OrderedDepth > -3 ) ) Then { IUsed = 1 DEEP = 1 HoverTime = 8 } ENDIF
IF ( ( NOT MUsed ) AND ( NOT AICM ) AND ( NOT IUsed ) ) Then { SWUsed = 1 } ENDIF
IF AICM AND NOT SWUsed Then { AICM = True If RND ( 10 ) >= 5 Then { SHALL = 1 } ELSE { DEEP = 1 HoverTime = ( 120 + RND 240 ) } ENDIF } ENDIF
IF SWUsed THEN { If ( OrderedDepth >= LaunchDepth ) Then { SHALL = 1 } ELSE { DEEP = 1 } ENDIF } ENDIF
IF Not SWUsed Then { If Shall Then { OrderedDepth = ( OwnAlt - -656 ) } ELSE { OrderedDepth = ( OwnAlt - 656 ) } Endif
IF Shall Then {	If ( OrderedDepth >= 0 ) Then { OrderedDepth = Ceiling
} ELSEIF ( Ceiling <= TerrainAlt ) Then { OrderedDepth = ( TerrainAlt / 2 ) } Endif } Endif } ENDIF 
IF DEEP Then { If ( OrderedDepth <= TerrainAlt ) Then { OrderedDepth = ( TerrainAlt + 10 ) } ENDIF } ENDIF
IF ( LaunchDepth > OrderedDepth ) And SHALL Then { SD = 1
} ELSEIF ( LaunchDepth < OrderedDepth ) And SHALL Then { SU = 1
} ELSEIF ( LaunchDepth > OrderedDepth ) And DEEP Then { DD = 1
} ELSEIF ( LaunchDepth < OrderedDepth ) And DEEP Then { DU = 1 } ENDIF
If LaunchDepth > OrderedDepth Then {
	If Shall == 1 Then {
		ControlDepth = -10
	} Else {
		ControlDepth = ( OrderedDepth / 2 )
	} endif
	TrigDepth = ( OrderedDepth - ControlDepth )
} endif
If LaunchDepth < OrderedDepth Then {
	If Shall == 1 Then {
		ControlDepth = -10 ; SU -110
	} Else {
		ControlDepth = -10 ; DU -810
	} endif
	TrigDepth = ( OrderedDepth + ControlDepth )
} endif
IF DU OR SU Then { HoverTime = 0 LaunchTime = 1 LaunchDepth = ( OwnAlt + 20 ) } Endif
	} ENDIF
} ENDIF
; Core
IF ( Time > ExpireTimer ) THEN { Shutdown } ENDIF

IF Not Lock Then {
IF ( Time > HoverTime ) THEN {
IF DD Then {
	SetPriority 255
	SetPitch 89.9999
	SetPriority 255
	SetSpd -19.06
} ELSEIF SU Then {
	SetPriority 255
	SetAlt OrderedDepth
	SetPriority 255
	SetSpd 25
} ELSE {
	SetCrs LaunchCourse
	SetAlt LaunchDepth
} ENDIF } ENDIF } ENDIF

If ( Time >= InitTime ) Then {
	If DU Then {
		DestDpt = OrderedDepth + ControlDepth
	IF OwnAlt > DestDpt Then {
		ArrivalDeep = 1
} Endif } Endif

If DD Then {
DestDpt = OrderedDepth - ControlDepth
	IF OwnAlt < DestDpt Then {
	ArrivalDeep = 1
} Endif } Endif

If SU Then {
DestDpt = OrderedDepth + ControlDepth
	IF OwnAlt > DestDpt Then {
		ArrivalShallow = 1
} Endif } Endif
If SD Then {
	DestDpt = OrderedDepth - ControlDepth
	IF OwnAlt < DestDpt Then {
	ArrivalShallow = 1
} Endif } Endif } Endif

If ( ( ArrivalDeep ) OR ( ArrivalShallow ) ) Then {
	Lock = 1
	SetPriority 255
	SetPersist ExpireTimer
	SetPriority 255
	SetAlt OrderedDepth
	SetPriority 255
	SetSpd 0
} Endif
