inherit "/d/Imperium/std/weapon";

#include <wa_types.h>
#include <stdproperties.h>
#include <macros.h>
#include <formulas.h>
#include <filter_funs.h>
#include <options.h>

#define LIVE_I_NO_FLESH	"_live_i_no_flesh"
#define TP              this_player()
#define TO              this_object()

object wielder;

create_weapon()
{
    dodaj_nazwy( ({ "topor", "topora", "toporowi", "topor", "toporem",
                   "toporze" }), ({ "topory", "toporow", "toporom",
                   "topory", "toporami", "toporach" }), PL_MESKI_NOS_NZYW );

    dodaj_przym("bialy","biali");
    dodaj_przym("ostry","ostrzy");

    ustaw_nazwe( ({ "topor bojowy", "topora bojowego", "toporowi bojowemu", 
               "topor bojowy", "toporem bojowym", "toporze bojowym" }), 
               ({ "topory bojowe", "toporow bojowych", "toporom bojowym", 
               "topory bojowe", "toporami bojowymi", "toporach bojowych" }), 
               PL_MESKI_NOS_NZYW );

    set_long("@@dlugi"); 

    add_item(({"runy"}),"@@runy");

    set_hit(70);
    set_pen(80);

    add_prop(OBJ_I_VOLUME, 9000);
    add_prop(OBJ_I_WEIGHT, 12000);
    add_prop(OBJ_I_VALUE, F_VALUE_WEAPON(24,34) + 9000);

    set_dt(W_SLASH);
    
    set_wt(W_AXE);

    set_hands(W_RIGHT);

    add_prop(OBJ_M_NO_BUY, 1);
    
    add_prop(OBJ_I_IS_MAGIC_WEAPON, 1);
    
    add_prop(MAGIC_AM_MAGIC, ({ 110, "enchantment"}));
    
    add_prop(MAGIC_AM_ID_INFO,({"Topor ten jest bialy niczym snieg i rownie chlodny "+
        "w dotyku. Odbija nawet najmniejszy blask swiatla, ktore nan pada. "+
        "Oba ostrza, ktorych wolisz nie dotykac wygladaja na niezwykle "+
        "ostre i niebezpieczne, o czym niejeden jego wrog sie zapewne przekonal. "+
        "Przy trzonie pokryty on zostal delikatna, ledwie widoczna warstwa runow.",15}));

    set_wf(this_object());

    set_alarm(0.5,0.0,"add_wielder");

}

string
dlugi()
{
    string str;
    str = "Topor, ktory widzisz jest calkowicie bialy, wliczajac w to "+
       "trzon z dziwnego materialu. Nie wydaje sie byc lekki, a groznie "+
       "wygladajace ostrze nie zacheca do walki przeciw jego wlascicielowi."; 
        if(this_player()->query_prop("norsman") )
      str+=" Wyglada na to, ze jest to dzielo najwiekszych rzemieslnikow "+
       "jakich posiadala Valhalla. Magiczny topor, ktory masz przed soba "+
       "toczyl boje jeszcze w zaswiatach. Legenda glosila, ze przenoszony "+
       "z reki do reki zagubiony on zostal w jednej z najwiekszych walk, "+
       "walki na teczowym moscie.";
    str+="\n";
    return str;
}

string
runy()
{
    string str;
    str="Na obu glowicach widnieje slabe pasmo runow, zapewne magicznych. "+
        "Opierajac sie na swojej wiedzy uznajesz, ze maja na celu one powiekszenie "+
        "sily tej broni.\n";
    if(this_player()->query_prop("norsman") )
      str="Na jednej z glowic, w warstwie bialego metalu wyryte zostalo "+
         "jakies imie, ale za kazdym razem, gdy je obejmiesz wzrokiem "+
         "napis rozplywa sie w metalu, jakby go nigdy nie bylo.\n";    
    return str;
}

mixed
wield(object what)
{
   if(this_player()->query_stat(0) < 50)
     {
         say(QCIMIE(this_player(),PL_MIA) + " proboje dobyc " +
           short(PL_DOP) + ", lecz nie ma dosc sil, by tego dokonac.\n");
         return"Probojesz dobyc "+short(PL_DOP) + ", lecz nie masz dosc "+
           "sil, by tego dokonac.\n";
     }        
   set_alarm(0.1,0.0,"add_wielder");
   write("Czujesz splywajaca na ciebie dziwna moc, gdy dobywasz "+short(PL_DOP)+".\n");
   say(QCIMIE(this_player(),PL_MIA) + " dobywa "+short(PL_DOP)+" obiema rekami.\n");
   this_player()->set_combat_speed(400);
   return 1;
}

void
add_wielder()
{
    wielder = environment(this_object());
}

object
query_wielder()
{
    return wielder;
}    

mixed
unwield(object what)
{
   set_this_player(wielder);
   if(environment(this_object())!=wielder) 
      return 1;
   write("Czujesz, ze dziwna moc ktora czules cie opuscila.\n");
   say(QCIMIE(this_player(),PL_MIA)+" opuszcza "+short(PL_BIE)+".\n");     
   TP->set_combat_speed(TP->query_combat_speed()-400);
   return 1;
}

static void
tell_watcher(string str, object enemy)
{
   object me,*ob;
   int i;

   me = wielder;
   ob = FILTER_LIVE(all_inventory(environment(me))) - ({ me });
   ob -= ({ enemy });
   for (i = 0; i < sizeof(ob); i++)
   if (!ob[i]->query_option(OPT_BLOOD) && CAN_SEE_IN_ROOM(ob[i]))
      {
      if (CAN_SEE(ob[i], me))
         ob[i]->catch_msg(str);
      else
         tell_object(ob[i], "Ktos trafil kogos.\n");
   }
}

public mixed
did_hit(int aid,string hdesc,int phurt,object enemy,int dt,int phit,int dam,int tohit,mixed def_ob,object armour)
{
   object blinding;

   wielder = query_wielded();

   if(enemy->query_prop(LIVE_I_NO_FLESH))
      return ::did_hit(aid,hdesc,phurt,enemy,dt,phit,dam,tohit,def_ob,armour);

   switch(phurt)
   {
      case -1:
      case 0:
      return ::did_hit(aid,hdesc,phurt,enemy,dt,phit,dam,tohit,def_ob,armour);

      case 1..4:
      wielder->catch_msg("Muskasz " + QIMIE(enemy,PL_BIE) + " delikatnie "+
          "trafiajac "+ enemy->koncowka("go","ja","je")+" w " + hdesc + " "+
          " swoim " + short(PL_NAR) + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " delikatnie muska "+
          "cie w " + hdesc + " swoim " + short(PL_NAR) + ".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " delikatnie "+
          "muska " + QIMIE(enemy,PL_BIE) + " "+
          ", trafiajac "+enemy->koncowka("go","ja","je")+ " w " + hdesc +" "+
          "swoim " + short(PL_NAR) + ".\n",enemy);
      break;

      case 5..9:

      wielder->catch_msg("Plynnym ruchem lekko nacinasz "+
          "skore " + QIMIE(enemy,PL_DOP) + " "+
          "swoim " + short(PL_DOP) + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " plynnym ruchem" +
          " nacina twoja skore swoim " + short(PL_DOP) + ".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " plynnym ruchem nacina skore "+
           " "+ QIMIE(enemy,PL_DOP) + ".\n",enemy);
      break;
      
      case 10..19:

      wielder->catch_msg("Blyskawicznym cieciem swojego"+ short(PL_DOP) + " "+
          "ranisz "+ QIMIE(enemy,PL_BIE) +", trafiajac "+enemy->koncowka("go","ja","je")+ " w " + hdesc + ".\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " rani cie blyskawicznym "+
          "cieciem swojego " + short(PL_DOP) + ".\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " rani " + QIMIE(enemy,PL_BIE) + " "+
          "blyskawicznym cieciem swojego " + short(PL_DOP) + ".\n",enemy);
      break;

      case 20..29:
      
      wielder->catch_msg("Zwinnie obracasz " + short(PL_BIE) + " w dloni, "+
          "po czym uderzasz " + QIMIE(enemy,PL_BIE) + " zostawiajac na "+
          ""+enemy->koncowka("nim","niej","nich")+ " spora rane.\n");
      enemy->catch_msg(QCIMIE(wielder,PL_MIA) + " zwinnie "+
          "obraca " + short(PL_BIE) + " w dloni, po czym uderza cie nim "+
          "zostawiajac spora rane w miejscu impetu.\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " zwinnie "+
          "obraca " + short(PL_BIE) + " w dloni, po czym uderza "+
          "nim " + QIMIE(enemy,PL_DOP) + " zostawiajac "+
          "na " +enemy->koncowka("nim","niej","nich") + " spora rane.\n",enemy);
      break;

      case 30..44:

      wielder->catch_msg("Biala smuga towarzyszy twojemu " + short(PL_DOP)+
          ", gdy ten wbija sie w cialo " + QIMIE(enemy,PL_DOP) +".\n");
      enemy->catch_msg("Biala smuga towarzyszy "+ short(PL_DOP) +
          ", gdy "+ QCIMIE(wielder,PL_MIA) +" wbija go w twoje cialo.\n");
      tell_watcher(QCIMIE(wielder,PL_MIA) + " wbija " + short(PL_BIE)+
          " w cialo " + QIMIE(enemy,PL_DOP) + ".\n",enemy);
      break;

      case 45..69:

      wielder->catch_msg("Potezne uderzenie twojego " + short(PL_DOP) +
          " dosiega " + QIMIE(enemy,PL_DOP) + ", zostawiajac glebokie rany na " +
          enemy->koncowka("jego","jej") + " ciele.\n");
      enemy->catch_msg("Potezne uderzenie " + short(PL_DOP) + " " +
          QIMIE(wielder,PL_DOP) + 
          " dosiega cie, zostawiajac glebokie rany na twym ciele.\n");
      tell_watcher("Potezne uderzenie " + short(PL_DOP) + " " +
          QCIMIE(wielder,PL_DOP) + 
          " dosiega " + QIMIE(enemy,PL_DOP) +
          ", zostawiajac glebokie rany na " +
          enemy->koncowka("jego","jej") + " ciele.\n",enemy);
      break;

      case 70..99:

      wielder->catch_msg("Czujesz jak ostrze twojego "+ short(PL_DOP) +" "+
         "wgryza sie potwornie w cialo "+ QIMIE(enemy,PL_DOP) +". Wyszarpawszy "+
         "bron z ciala dostrzegasz potworna dziure w ciele przeciwnika.\n");
      enemy->catch_msg("Czujesz jak ostrze "+short(PL_DOP)+
         " sie potwornie wgryza w twoje cialo. Mimo okropnego bolu dostrzegasz "+
         "jeszcze wyraz zadowolenia na twarzy "+QIMIE(wielder,PL_DOP) + ".\n");
      tell_watcher("Widzisz jak ostrze "+short(PL_DOP)+
         " sie potwornie wgryza w cialo "+ QIMIE(enemy,PL_DOP) +". Wyraz zadowolenia "+
         "na twarzy "+QIMIE(wielder,PL_DOP) + " mowi ci wszystko.\n",enemy);
      break;

      default:
      wielder->catch_msg("Rozmywajace sie w powietrzu "+
         "uderzenie "+short(PL_DOP)+ " miekko przechodzi przez "+
         "czaszke " + QIMIE(enemy,PL_DOP) +" rozpalawiajac ja na dwie czesci. "+
         "Dla twojego przeciwnika to juz koniec walki.\n");
      enemy->catch_msg("Rozmywajacy sie ruch "+short(PL_DOP)+
         " jest ostatnia rzecza jaka widzisz. Potem czujesz juz tylko "+
         "tepy bol w karku, a przed oczami majaczy ci "+
         "sylwetka "+QIMIE(wielder,PL_DOP) + ". Dalej nie pamietasz juz nic.\n");
      tell_watcher("Rozmywajace sie w powietrzu uderzenie "+short(PL_DOP)+
         " rozpalawia czaszke " + QIMIE(enemy,PL_DOP) +" na dwie, identyczne "+
         "czesci. Martwe szczatki padaja "+
         "u nog "+ QIMIE(wielder,PL_DOP) +".\n",enemy);
      break;

   }

   return 1;
}
