protected Behaviour getNextStep() {
    if (eventsVerbose && begun()) {
      I.sayAbout(actor, "NEXT COMBAT STEP "+this.hashCode()) ;
    }
    //
    //  This might need to be tweaked in cases of self-defence, where you just
    //  want to see off an attacker.
    if (isDowned(target)) {  //  TODO:  This might need to be varied-
      if (eventsVerbose && begun()) I.sayAbout(actor, "COMBAT COMPLETE") ;
      return null ;
    }
    Action strike = null ;
    final DeviceType DT = actor.gear.deviceType() ;
    final boolean melee = actor.gear.meleeWeapon() ;
    final boolean razes = target instanceof Venue ;
    final float danger = Retreat.dangerAtSpot(
      actor.origin(), actor, razes ? null : (Actor) target
    ) ;
    
    final String strikeAnim = DT == null ? Action.STRIKE : DT.animName ;
    if (razes) {
      strike = new Action(
        actor, target,
        this, "actionSiege",
        strikeAnim, "Razing"
      ) ;
    }
    else {
      strike = new Action(
        actor, target,
        this, "actionStrike",
        strikeAnim, "Striking at"
      ) ;
    }
    //
    //  Depending on the type of target, and how dangerous the area is, a bit
    //  of dancing around may be in order.
    if (melee) configMeleeAction(strike, razes, danger) ;
    else configRangedAction(strike, razes, danger) ;
    ///if (eventsVerbose) I.sayAbout(actor, "NEXT STRIKE "+strike) ;
    return strike ;
  }