skylib_fluffos_v3/
skylib_fluffos_v3/bin/
skylib_fluffos_v3/bin/db/
skylib_fluffos_v3/fluffos-2.9-ds2.04/
skylib_fluffos_v3/fluffos-2.9-ds2.04/ChangeLog.old/
skylib_fluffos_v3/fluffos-2.9-ds2.04/Win32/
skylib_fluffos_v3/fluffos-2.9-ds2.04/compat/
skylib_fluffos_v3/fluffos-2.9-ds2.04/compat/simuls/
skylib_fluffos_v3/fluffos-2.9-ds2.04/include/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/clone/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/command/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/data/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/etc/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/include/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/inherit/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/inherit/master/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/log/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/single/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/single/tests/compiler/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/single/tests/efuns/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/single/tests/operators/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/u/
skylib_fluffos_v3/fluffos-2.9-ds2.04/tmp/
skylib_fluffos_v3/fluffos-2.9-ds2.04/windows/
skylib_fluffos_v3/mudlib/
skylib_fluffos_v3/mudlib/cmds/
skylib_fluffos_v3/mudlib/cmds/admin/
skylib_fluffos_v3/mudlib/cmds/guild-race/
skylib_fluffos_v3/mudlib/cmds/living/broken/
skylib_fluffos_v3/mudlib/cmds/player/group_cmds/
skylib_fluffos_v3/mudlib/cmds/playtester/
skylib_fluffos_v3/mudlib/d/admin/
skylib_fluffos_v3/mudlib/d/admin/room/
skylib_fluffos_v3/mudlib/d/admin/room/we_care/
skylib_fluffos_v3/mudlib/d/admin/save/
skylib_fluffos_v3/mudlib/d/admin/text/
skylib_fluffos_v3/mudlib/d/learning/TinyTown/buildings/
skylib_fluffos_v3/mudlib/d/learning/TinyTown/map/
skylib_fluffos_v3/mudlib/d/learning/TinyTown/roads/
skylib_fluffos_v3/mudlib/d/learning/chars/
skylib_fluffos_v3/mudlib/d/learning/functions/
skylib_fluffos_v3/mudlib/d/learning/handlers/
skylib_fluffos_v3/mudlib/d/learning/help_topics/
skylib_fluffos_v3/mudlib/d/learning/help_topics/npcs/
skylib_fluffos_v3/mudlib/d/learning/help_topics/objects/
skylib_fluffos_v3/mudlib/d/learning/help_topics/rcs_demo/
skylib_fluffos_v3/mudlib/d/learning/help_topics/rcs_demo/RCS/
skylib_fluffos_v3/mudlib/d/learning/help_topics/rooms/
skylib_fluffos_v3/mudlib/d/learning/help_topics/rooms/crowd/
skylib_fluffos_v3/mudlib/d/learning/help_topics/rooms/situations/
skylib_fluffos_v3/mudlib/d/learning/save/
skylib_fluffos_v3/mudlib/d/learning/school/
skylib_fluffos_v3/mudlib/d/learning/school/add_sc/
skylib_fluffos_v3/mudlib/d/learning/school/characters/
skylib_fluffos_v3/mudlib/d/learning/school/general/
skylib_fluffos_v3/mudlib/d/learning/school/getting-started/
skylib_fluffos_v3/mudlib/d/learning/school/getting-started/basic_commands/
skylib_fluffos_v3/mudlib/d/learning/school/getting-started/edtutor/
skylib_fluffos_v3/mudlib/d/learning/school/getting-started/unix_tutor/
skylib_fluffos_v3/mudlib/d/learning/school/items/
skylib_fluffos_v3/mudlib/d/learning/school/npc_school/
skylib_fluffos_v3/mudlib/d/learning/school/room_school/
skylib_fluffos_v3/mudlib/d/learning/school/room_school/room_basic/
skylib_fluffos_v3/mudlib/d/learning/school/room_school/situations/
skylib_fluffos_v3/mudlib/d/learning/school/room_school/terrain_tutor/
skylib_fluffos_v3/mudlib/d/learning/text/
skylib_fluffos_v3/mudlib/d/liaison/
skylib_fluffos_v3/mudlib/d/mudlib/
skylib_fluffos_v3/mudlib/d/mudlib/changes/
skylib_fluffos_v3/mudlib/d/playtesters/
skylib_fluffos_v3/mudlib/d/playtesters/effects/
skylib_fluffos_v3/mudlib/d/playtesters/handlers/
skylib_fluffos_v3/mudlib/d/playtesters/items/
skylib_fluffos_v3/mudlib/d/sage/
skylib_fluffos_v3/mudlib/doc/
skylib_fluffos_v3/mudlib/doc/creator/
skylib_fluffos_v3/mudlib/doc/driver/
skylib_fluffos_v3/mudlib/doc/driver/efuns/arrays/
skylib_fluffos_v3/mudlib/doc/driver/efuns/buffers/
skylib_fluffos_v3/mudlib/doc/driver/efuns/calls/
skylib_fluffos_v3/mudlib/doc/driver/efuns/compile/
skylib_fluffos_v3/mudlib/doc/driver/efuns/filesystem/
skylib_fluffos_v3/mudlib/doc/driver/efuns/floats/
skylib_fluffos_v3/mudlib/doc/driver/efuns/functions/
skylib_fluffos_v3/mudlib/doc/driver/efuns/general/
skylib_fluffos_v3/mudlib/doc/driver/efuns/mappings/
skylib_fluffos_v3/mudlib/doc/driver/efuns/mixed/
skylib_fluffos_v3/mudlib/doc/driver/efuns/mudlib/
skylib_fluffos_v3/mudlib/doc/driver/efuns/numbers/
skylib_fluffos_v3/mudlib/doc/driver/efuns/parsing/
skylib_fluffos_v3/mudlib/doc/login/
skylib_fluffos_v3/mudlib/doc/lpc/basic_manual/
skylib_fluffos_v3/mudlib/doc/lpc/intermediate/
skylib_fluffos_v3/mudlib/doc/new/add_command/
skylib_fluffos_v3/mudlib/doc/new/events/
skylib_fluffos_v3/mudlib/doc/new/handlers/
skylib_fluffos_v3/mudlib/doc/new/living/race/
skylib_fluffos_v3/mudlib/doc/new/living/spells/
skylib_fluffos_v3/mudlib/doc/new/object/
skylib_fluffos_v3/mudlib/doc/new/player/
skylib_fluffos_v3/mudlib/doc/new/room/guild/
skylib_fluffos_v3/mudlib/doc/new/room/outside/
skylib_fluffos_v3/mudlib/doc/new/room/storeroom/
skylib_fluffos_v3/mudlib/doc/object/
skylib_fluffos_v3/mudlib/doc/playtesters/
skylib_fluffos_v3/mudlib/doc/policy/
skylib_fluffos_v3/mudlib/doc/weapons/
skylib_fluffos_v3/mudlib/global/
skylib_fluffos_v3/mudlib/global/creator/
skylib_fluffos_v3/mudlib/handlers/
skylib_fluffos_v3/mudlib/include/casino/
skylib_fluffos_v3/mudlib/include/cmds/
skylib_fluffos_v3/mudlib/include/effects/
skylib_fluffos_v3/mudlib/include/npc/
skylib_fluffos_v3/mudlib/include/room/
skylib_fluffos_v3/mudlib/include/shops/
skylib_fluffos_v3/mudlib/net/daemon/
skylib_fluffos_v3/mudlib/net/daemon/chars/
skylib_fluffos_v3/mudlib/net/inherit/
skylib_fluffos_v3/mudlib/net/obj/
skylib_fluffos_v3/mudlib/net/obj/BACKUPS/
skylib_fluffos_v3/mudlib/obj/amulets/
skylib_fluffos_v3/mudlib/obj/armours/plate/
skylib_fluffos_v3/mudlib/obj/b_day/
skylib_fluffos_v3/mudlib/obj/clothes/transport/horse/
skylib_fluffos_v3/mudlib/obj/faith/symbols/
skylib_fluffos_v3/mudlib/obj/fungi/
skylib_fluffos_v3/mudlib/obj/gatherables/
skylib_fluffos_v3/mudlib/obj/instruments/
skylib_fluffos_v3/mudlib/obj/media/
skylib_fluffos_v3/mudlib/obj/misc/player_shop/
skylib_fluffos_v3/mudlib/obj/monster/godmother/
skylib_fluffos_v3/mudlib/obj/monster/transport/
skylib_fluffos_v3/mudlib/obj/rings/
skylib_fluffos_v3/mudlib/obj/scabbards/
skylib_fluffos_v3/mudlib/obj/spells/
skylib_fluffos_v3/mudlib/obj/stationery/
skylib_fluffos_v3/mudlib/obj/stationery/envelopes/
skylib_fluffos_v3/mudlib/obj/toys/
skylib_fluffos_v3/mudlib/obj/vessels/
skylib_fluffos_v3/mudlib/obj/weapons/axes/
skylib_fluffos_v3/mudlib/obj/weapons/chains/
skylib_fluffos_v3/mudlib/obj/weapons/maces/BACKUPS/
skylib_fluffos_v3/mudlib/save/autodoc/
skylib_fluffos_v3/mudlib/save/book_handler/
skylib_fluffos_v3/mudlib/save/books/history/calarien/
skylib_fluffos_v3/mudlib/save/mail/
skylib_fluffos_v3/mudlib/save/new_soul/data/
skylib_fluffos_v3/mudlib/save/parcels/
skylib_fluffos_v3/mudlib/save/playerinfo/
skylib_fluffos_v3/mudlib/save/players/d/
skylib_fluffos_v3/mudlib/save/players/s/
skylib_fluffos_v3/mudlib/save/random_names/
skylib_fluffos_v3/mudlib/save/random_names/data/
skylib_fluffos_v3/mudlib/save/terrains/
skylib_fluffos_v3/mudlib/save/terrains/tutorial_desert/
skylib_fluffos_v3/mudlib/save/terrains/tutorial_grassy_field/
skylib_fluffos_v3/mudlib/save/terrains/tutorial_mountain/
skylib_fluffos_v3/mudlib/save/todo_lists/
skylib_fluffos_v3/mudlib/secure/
skylib_fluffos_v3/mudlib/secure/cmds/admin/
skylib_fluffos_v3/mudlib/secure/cmds/lord/
skylib_fluffos_v3/mudlib/secure/config/
skylib_fluffos_v3/mudlib/secure/handlers/autodoc/
skylib_fluffos_v3/mudlib/secure/handlers/intermud/
skylib_fluffos_v3/mudlib/secure/include/global/
skylib_fluffos_v3/mudlib/secure/save/
skylib_fluffos_v3/mudlib/secure/save/handlers/
skylib_fluffos_v3/mudlib/secure/std/
skylib_fluffos_v3/mudlib/secure/std/classes/
skylib_fluffos_v3/mudlib/secure/std/modules/
skylib_fluffos_v3/mudlib/std/creator/
skylib_fluffos_v3/mudlib/std/dom/
skylib_fluffos_v3/mudlib/std/effects/
skylib_fluffos_v3/mudlib/std/effects/external/
skylib_fluffos_v3/mudlib/std/effects/fighting/
skylib_fluffos_v3/mudlib/std/effects/magic/
skylib_fluffos_v3/mudlib/std/effects/magic/BACKUPS/
skylib_fluffos_v3/mudlib/std/effects/other/BACKUPS/
skylib_fluffos_v3/mudlib/std/effects/priest/
skylib_fluffos_v3/mudlib/std/effects/room/
skylib_fluffos_v3/mudlib/std/environ/
skylib_fluffos_v3/mudlib/std/guilds/
skylib_fluffos_v3/mudlib/std/guilds/old/
skylib_fluffos_v3/mudlib/std/languages/
skylib_fluffos_v3/mudlib/std/liquids/
skylib_fluffos_v3/mudlib/std/npc/
skylib_fluffos_v3/mudlib/std/npc/goals/
skylib_fluffos_v3/mudlib/std/npc/goals/basic/
skylib_fluffos_v3/mudlib/std/npc/goals/misc/
skylib_fluffos_v3/mudlib/std/npc/plans/
skylib_fluffos_v3/mudlib/std/npc/plans/basic/
skylib_fluffos_v3/mudlib/std/npc/types/
skylib_fluffos_v3/mudlib/std/npc/types/helper/
skylib_fluffos_v3/mudlib/std/npcs/
skylib_fluffos_v3/mudlib/std/outsides/
skylib_fluffos_v3/mudlib/std/races/shadows/
skylib_fluffos_v3/mudlib/std/room/basic/BACKUPS/
skylib_fluffos_v3/mudlib/std/room/basic/topography/
skylib_fluffos_v3/mudlib/std/room/controller/
skylib_fluffos_v3/mudlib/std/room/inherit/topography/
skylib_fluffos_v3/mudlib/std/room/topography/area/
skylib_fluffos_v3/mudlib/std/room/topography/iroom/
skylib_fluffos_v3/mudlib/std/room/topography/milestone/
skylib_fluffos_v3/mudlib/std/shadows/curses/
skylib_fluffos_v3/mudlib/std/shadows/disease/
skylib_fluffos_v3/mudlib/std/shadows/fighting/
skylib_fluffos_v3/mudlib/std/shadows/healing/
skylib_fluffos_v3/mudlib/std/shadows/magic/
skylib_fluffos_v3/mudlib/std/shadows/poison/
skylib_fluffos_v3/mudlib/std/shadows/room/
skylib_fluffos_v3/mudlib/std/shops/controllers/
skylib_fluffos_v3/mudlib/std/shops/objs/
skylib_fluffos_v3/mudlib/std/shops/player_shop/
skylib_fluffos_v3/mudlib/std/socket/
skylib_fluffos_v3/mudlib/std/soul/d/
skylib_fluffos_v3/mudlib/std/soul/e/
skylib_fluffos_v3/mudlib/std/soul/i/
skylib_fluffos_v3/mudlib/std/soul/j/
skylib_fluffos_v3/mudlib/std/soul/k/
skylib_fluffos_v3/mudlib/std/soul/l/
skylib_fluffos_v3/mudlib/std/soul/n/
skylib_fluffos_v3/mudlib/std/soul/o/
skylib_fluffos_v3/mudlib/std/soul/q/
skylib_fluffos_v3/mudlib/std/soul/r/
skylib_fluffos_v3/mudlib/std/soul/u/
skylib_fluffos_v3/mudlib/std/soul/v/
skylib_fluffos_v3/mudlib/std/soul/y/
skylib_fluffos_v3/mudlib/std/soul/z/
skylib_fluffos_v3/mudlib/std/stationery/
skylib_fluffos_v3/mudlib/w/
skylib_fluffos_v3/mudlib/w/default/
skylib_fluffos_v3/mudlib/w/default/armour/
skylib_fluffos_v3/mudlib/w/default/clothes/
skylib_fluffos_v3/mudlib/w/default/item/
skylib_fluffos_v3/mudlib/w/default/npc/
skylib_fluffos_v3/mudlib/w/default/room/
skylib_fluffos_v3/mudlib/w/default/weapon/
skylib_fluffos_v3/mudlib/www/
skylib_fluffos_v3/mudlib/www/java/
skylib_fluffos_v3/mudlib/www/secure/
skylib_fluffos_v3/mudlib/www/secure/lpc/advanced/
skylib_fluffos_v3/mudlib/www/secure/lpc/intermediate/
skylib_fluffos_v3/win32/
#include <weapon.h>

inherit NPC_OBJ;

int attack_dummy( );

object *greeters = ({ });

#define GREETINGS ({ \
   "Welcome to Combat Boot Camp, $name$.",\
   "This here course is set up to teach you the basics of fighting.",\
   "You can attack this here dummy and I'll tell ya how well ya done.",\
   "Arr!  You have the look of a fine fighter, $name$." \
})

int ability, counts, damage, told_attack, told_parry, last_damage;
object training, weapon;

void setup() {
  set_race( "human" );
  set_class( "fighter" );
  set_gender( 1 );
  set_level( 100 );
} /* setup() */

void whichone(string name) {
  switch(name) {
  case "xrazzicaz":
    set_name( "xrazzicaz" );
    add_alias( "xraz" );
    add_property( "determinate", "" );
    set_short( "Xrazzicaz" );
    set_long( "This is the ex-fighter's guild dummy.  After being replaced by "
              "the newer mechanical dummy, Xrazzicaz decided to stay on as an "
              "instructor.\n");
    break;
  case "zazzifraz":
  set_name( "zazzifraz" );
  add_alias( "zazz" );
  add_property( "determinate", "" );
  set_short( "Zazzifraz" );
  set_long( "This is Xrazzicaz' brother, an ex-fighter's guild dummy.  After "
            "being replaced by the newer mechanical dummy, Zazzifraz, like "
            "his brother, decided to stay on as an instructor.\n");
  break;
  case "john":
    set_name( "john" );
    add_property( "determinate", "" );
    set_short( "John" );
    set_long( "This is Xrazzicaz' other brother, John.  He was the fighters "
              "guild dummy in Ohulan Cutash until he was replaced by a "
              "mechanical dummy.  Like Xrazzicaz and Zazzifraz he got a "
              "job teaching after retirement.\n");
  }
}

int attack_by(object thing) {
  write(this_object()->the_short() + " glares at you before swiftly knocking you to the ground.\n");
  this_object()->stop_fight(thing);
  thing->stop_fight(this_object());
  return 0;
} /* attack_by() */

int attack_ob(object thing) {
  this_object()->stop_fight(thing);
  thing->stop_fight(this_object());
  return 0;
} /* attack_ob() */

void init() {
  if(!this_player()) {
    return;
  }
  if(environment() == find_object("/room/rubbish")) {
    return;
  }
  if(this_player()->query_property("dead")) {
    return;
  }
  if(!this_player()->query_visible(this_object())) {
    return;
  }
  if(!userp(this_player())) {
    return;
  }
  if(this_player()->query_property("player")) {
    greeters += ({this_player()});
    call_out("do_greeting", 1, this_player());
  }
  ::init();
  this_player()->add_command("attack", this_object(), "<indirect:object:here>", (: attack_dummy :));
  this_player()->add_command("kill", this_object(), "<indirect:object:here>", (: attack_dummy :));
} /* init() */

void do_greeting() {
  string str;
  
  if(!sizeof(greeters)) {
    return;
  }
  greeters = filter(greeters, 
    (: $1 && environment($1) == environment(this_object()) &&
     $1->query_visible(this_object()) :));
  uniq_array(greeters);
  foreach(str in GREETINGS) {
    str = replace(str, "$name$", query_multiple_short(greeters));
    do_command("'" + str);
  }
  greeters = ({ });
} /* do_greeting() */

int attack_dummy( ) {
  object dummy;

  dummy = present("dummy", environment());
  debug_printf("Attack_dummy called");
   if ( training ) {
     if((environment( training ) == environment()) &&
        interactive(training) && training->query_fighting()) {
       if(training == this_player()) {
         write("You are already using "+
               the_short() +".\n" );
         return 1;
       }
       write((string)training->one_short() +
             " is currently using "+ the_short() +
             ".\n" );
       return 1;
     }
     training = 0;
     weapon = 0;
     ability = 0;
     counts = 0;
     told_attack = 0;
     told_parry = 0;
   }
   this_player()->attack_ob( dummy );
   training = this_player();
   weapon = 0;
   ability = 0;
   counts = 0;
   write( "You attack "+ dummy->the_short() +".\n" );
   return 1;
} /* attack_dummy() */

void stop_them( object attacker, object dummy ) {
  tell_object( attacker, one_short() +" stops you attacking "+
               (string)dummy->the_short() +".\n" );
  tell_room( environment(), one_short() +" stops "+
             (string)attacker->the_short() +" attacking "+
             (string)dummy->the_short() +".\n", attacker );
  attacker->stop_fight( dummy );
  training = 0;
  weapon = 0;
  ability = 0;
  counts = 0;
  told_attack = 0;
  told_parry = 0;
} /* stop_them() */

int check_attack( object thing) {
  int number, *rating;
  string what, skill;
  object *weapons;
  mixed *attacks;
  
  if(!training)
    return 0;
  
  if(training != thing ) {
    if(previous_object())
      stop_them( thing, previous_object() );
    
    do_command( "say "+ convert_message( (string)training->the_short() +
            " is using the training dummy at the moment." ) );
    return 0;
  }

  if ( damage && weapon ) {
    rating = (int *)"/cmds/guild-race/other/judge"->calc_rating( weapon );
    number = ( ( 32 * damage ) / rating[ 0 ] +
               ( 15 * damage ) / rating[ 1 ] ) / 5;
    ability += number;
    if ( number > 14 )
      number = 14;
    do_command( "say That's "+ ({ "an atrocius", "an extremely poor",
            "a very poor", "a rather poor", "a poor", "a pretty poor",
            "quite a poor", "a reasonable", "quite a good", "a pretty good",
            "a good", "a rather good", "a very good", "an extremely good",
            "an excellent" })[ number ] +" attack for "+
            convert_message( (string)weapon->the_short() ) +"." );
  }
  weapons = (object *)thing->query_weapons();
  if ( !sizeof( weapons ) ) {
    stop_them( thing, previous_object() );
    do_command( "say You need a weapon!" );
    return 0;
   }
  if ( sizeof( weapons ) > 1 ) {
    stop_them( thing, previous_object() );
    do_command( "say Just use one weapon, I get confused if you use more "
                "than one!" );
    return 0;
  }
  if ( !weapon )
    weapon = weapons[ 0 ];
  if ( weapon != weapons[ 0 ] ) {
    stop_them( thing, previous_object() );
    do_command( "say You've changed weapons!" );
    return 0;
  }
  damage = 0;
  counts++;
  if(!last_damage && !told_attack &&
     thing->query_tactics()[0] != "offensive") {
    told_attack = 1;
    do_command("say You can improve your chances of hitting your opponent "
               "by setting your tactics to a more offensive attitude.");
  } else {
    // This hands out skill advances very generously up to lvl 5 then it
    // stops.
    attacks = weapon->query_attack_data();
    skill = attacks[random(sizeof(attacks) / W_ARRAY_SIZE) * W_ARRAY_SIZE +
                   W_SKILL];
    if(thing->query_skill("fighting.combat.melee." + skill) < 5 &&
       !random(3*(thing->query_skill("fighting.combat.melee." + skill))) &&
       thing->add_skill_level("fighting.combat.melee." + skill, 1, 1)) {
      tell_object(thing, "%^YELLOW%^You feel you've learned something about "
                  "using " + weapon->a_short() + ".%^RESET%^\n");
    }
  }
  
  if ( counts < 8 )
    return 1;
  number = ( 2 * ability + counts ) / ( 2 * counts );
  if(weapon)
    what = convert_message((string)weapon->the_short());
  else
    what = "whatever it was you were using";
  stop_them( thing, previous_object() );
  
  do_command( "think" );
  switch ( number ) {
  case 0 .. 1 :
    if(strsrch(what, "knife") == -1 && strsrch(what, "dagger") == -1)
      do_command( "say Well, you're rather hopeless with "+ what +
                  ", really.  A simpler weapon may help." );
    else
      do_command( "say Well, you're rather hopeless with "+ what +
                  ", really, but with practice you'll get better.");

         break;
  case 2 .. 3 :
    do_command( "say Hmmm... You have some skill with "+ what +
                ", at any rate, as you practice you'll get better." );

    break;
  case 4 .. 6 :
    do_command( "say You're getting there.  Keep training with "+
                what +" and you'll be pretty good with it soon." );
    break;
  default :
    do_command( "say I'd say you've more or less mastered "+ what +
                ".  Well done!" );
  }
  return 0;
}

int analyse_attack( int number, object thing ) {
  last_damage = number;
  damage += number;
   return 1;
} /* analyse_attack() */

void failed_parry(object thing) {
  if(training && training == thing) {
    if(thing->query_tactics()[0] != "defensive" && !told_parry) {
      told_parry = 1;
      do_command("say You can improve your chances of defending by setting "
                 "your tactics to a more defensive attitude.");
    }
  }
}