View Single Post
Old 10-24-08, 11:27 AM   #6
LoBlo
Subsim Diehard
 
Join Date: May 2006
Location: Texas!
Posts: 971
Downloads: 78
Uploads: 3
Default

So here's what I have so far... mind you that this is *completely* untested and I have no idea if it works. Its up for testing to those with the time and/or patience to do so.

Unfortunately I'm going on vacation today and won't be back until next week to test it myself.

For what its worth, draft #1 is:

CIWS doctrine changes:
Code:
 
; $Header: CIWS.txt   Wed Dec 15 17:34:41 EST 2004   mike $
; $Revision: 4 $
; $Copyrt1: Copyright (c) 2003, Sonalysts, Inc.  All rights reserved. $
;
; CIWS Self-defense
var CMTimer
; New Track
IF NEWTRACK THEN {
 ; Set Tactic
 IF TgtClass $= "MISSILE" OR ( TgtClass $= "AIR" ) THEN {
  SETTACTIC "CIWSAttack"
 } ENDIF
 ; Auto Evade Torps
 IF TgtClass $= "WEAP" AND NOT ( TgtType $= "SONOBUOY" ) THEN {
  SETTACTIC "SurfEvadeWeap"
 } ENDIF
; Steer away from a hostile sub
 IF TgtClass $= "sub" AND ( TgtID $= "Hostile" ) THEN {
  DEBUGOUT "target bearing"
  DEBUGVALUEOUT TgtBrg
  SETTACTIC "SurfAvoidSub"
 } ENDIF
} ENDIF
SurfAvoidSub Doctrine
Code:
 
; SurfAvoidSubDef 
var LegTimer
var Avoid
var DoctrinePriority
var InitSpeed
var LegTimer
var RunTime
var InitTime
IF INIT THEN {
 Avoid = true
 InitSpeed = OwnSpd
 LegTimer = -1
 InitTime = TIME
} ELSEIF ( LegTimer = -1 ) AND NOT ( LostTrack ) THEN {
 SetPriority DoctrinePriority
 
 IF TgtRng < ( ( 80000 + RND 5000 ) ) AND ( TgTID $= "HOSTILE" ) THEN {
 
  IF ( TgtID $= "HOSTILE" ) and ( Order $= "ENGAGE" ) THEN {
   IF AssignedTarget THEN {
   DebugOut "Switching from Avoid to Attack"
   Avoid = False
   SetTactic "SurfAtkSub"
 
  } ELSEIF TgtID $= "HOSTILE" AND NOT AssignedTarget THEN {
   DebugOut "Avoiding Hostile Sub!" 
 
   IF ( TgtRng < ( 50000 + RND 10000 ) ) THEN {
    DEBUGOUT "Very Close! Evading!"
    SetCrs ( TgtBrg + 70 + Rnd 50 )
    SetSpd MaxSpd
    LegTimer = 900 + Rnd 300
    IniTime = Time
   } ELSE { 
    DEBUGOUT "Enemy afar, circuling around"
    SetCrs ( TgtBrg + 80 + Rnd 10 )
    LegTimer = TgtRng / OwnSpd
   } ENDIF
  } ENDIF
 
 IF TIME > InitTime + LegTimer THEN {
  LegTimer = -1
 } ENDIF
} ENDIF
SurfAtkSub Doctrine
Code:
 
; SubAtkSubDef -- SCX 1.3
Edited by LoBlo 10/20/2008 for surface ships
 
var LegTimer
var MinFiringRng
var OrigSpeed
var ClosingSpeed
var TargetOpening  ; 0 = Closing target, 1 = Receding target 
var ApproachAngle
var DoctrinePriority  ; priority of this action, modified by game
var SnapShot   ; indicates if we did a shot already at active pinger
var PingSolve   ; Wait for Ping ... Plot Snapshot
var Solution2
var Solution3
IF ( INIT ) THEN {
 MinFiringRng = ( 4500 + RND 2500 )
 DoctrinePriority = 200
 ApproachAngle = TgtBrg
 SnapShot = FALSE
 PingSolve = ( Time + 15 + ( TgtRng / 1700 ) )
 Solution2 = ( 30 + RND 20 )
 Solution3 = ( 50 + RND 20 )
} ELSE {
 
 ; let surf attack sub
 IF ( DoctrinePriority > 0 ) THEN {
  ; if the guy is actively pinging us, lets waste him!
  ; attack active intercept
  IF ( ( TgtSource $= "Active Intercept" ) AND ( TgtID $= "Hostile" ) ) AND NOT ( SnapShot ) THEN {
    IF ( TIME >= PingSolve ) AND TgtRng <= AttackRng THEN {
    DebugOut Ownname
    DEBUGOUT "Attacking Active Ping"
    ATTACKBEST
    snapshot = TRUE
    } ENDIF
  } ELSE {
   SETPRIORITY DoctrinePriority
   ; Store current speed
   IF ( NEWTRACK ) THEN {
    OrigSpeed = OWNSPD
   } ENDIF
   ; Avoid Friendly
   ; ID
   IF ( TgtID $= "UPD" ) THEN {
    SETPRIORITY DoctrinePriority
;    DebugOut "Prosecuting UPD"
    ; New Leg
    IF ( TIME > LegTimer ) THEN {
     ; Approaching?
     IF ( TgtSilos > 0 ) THEN {
      TargetOpening = TRUE
      ClosingSpeed = ( OWNSPD + TgtSilos + 10 + RND 2 )
     } ELSE {
      TargetOpening = FALSE
      ClosingSpeed = Abs ( TgtSilo ) + RND 10 )
      ; Compute oblique angle for leg
      IF ( TgtAOB < 0 ) THEN {
       ApproachAngle = ( TgtBrg - 30 - RND 30 )
      } ELSE {
       ApproachAngle = ( TgtBrg + 30 + RND 30 )
      } ENDIF
     } ENDIF
     LegTimer = ( TIME + 300 + RND 120 )
    } ENDIF
    ; Proceed on leg, or pursue
    IF NOT ( TargetOpening ) THEN {
     SETCRS ApproachAngle
    } ELSEIF ( TgtRng > 2000 ) THEN {
     STEERTO
    } ENDIF
    ; Minimum speed
    IF ( ClosingSpeed < 4 ) THEN {
     ClosingSpeed = 4
    } ENDIF
    SETSPD ClosingSpeed 
 
   } ELSEIF ( TgtID $= "HOSTILE" ) OR ( TgtID $= "UAE" ) THEN {
    SETPRIORITY DoctrinePriority
;    DebugOut Ownname
    DebugOut "Prosecuting Hostile"
    ; New Closing Leg
    IF ( TgtRng > MinFiringRng ) AND ( TIME > LegTimer ) THEN {
     ; Approaching?
     IF ( TgtSilos > 0 ) THEN {
      TargetOpening = TRUE
      ClosingSpeed = ( OWNSPD + TgtSilos + 3 + RND 2 )
     } ELSE {
      TargetOpening = FALSE
      ClosingSpeed = Abs ( TgtSilo ) + RND 10 )
      ; Compute oblique angle for leg
      IF ( TgtAOB < 0 ) THEN {
       ApproachAngle = ( TgtBrg - 30 - RND 30 )
      } ELSE {
       ApproachAngle = ( TgtBrg + 30 + RND 30 )
      } ENDIF
     } ENDIF
     LegTimer = ( TIME + 480 + RND 120 )
    } ENDIF
    ; Proceed on leg, or pursue
    IF NOT ( TargetOpening ) THEN {
     SETCRS ApproachAngle
    } ELSEIF ( TgtRng > 2000 ) THEN {
     STEERTO
    } ENDIF
    ; Minimum speed
    IF ( ClosingSpeed < 4 ) THEN {
     ClosingSpeed = 4
    } ENDIF
    SETSPD ClosingSpeed 
    ; Attack
    IF TgtRng < AttackRng THEN {
     ATTACKBEST
     SnapShot = True
    } ENDIF
   } ENDIF
   ; PostLaunch
   IF ( WEAPONAWAY ) THEN {
      DEBUGOUT "Avoid after shooting"
    SteerEvasive
   } ENDIF
  } ENDIF ; if not active ping
 } ENDIF ; let sub engage
} ENDIF
__________________
"Seek not to offend or annoy... only to speak the truth"-a wise man
LoBlo is offline   Reply With Quote