
*** Modified files in JOE when it aborted on Tue Jun  2 14:09:27 1998
*** JOE was aborted because the terminal closed

*** File '(Unnamed)'
258

*** File 'd/Imperium/morley/Zakon/mlot.silvy'

#include "mith.h"
#include "ryc_zak.h"
/* 
 * Trudnosc specjala - w tej chwili wartosc jest taka jaka mi przyszla
 * jaka mi przyszla do glowy :)) Alvin musi sie tym zajac :)
 * Zreszta innymi wartosciami liczbowymi tez...
 */
#define TRUDNOSC 500
#define ZMECZENIE(ob) (100 - (ob)->query_fatigue() * 100 / (ob)->query_max_fatigue())
#define OBCIAZENIE(ob) ((ob)->query_encumberance_weight())
#define VOLUME(ob) ((ob)->query_encumberance_volume())
#define QS(a) query_skill(a)
#define CO(ob) ob->query_combat_object()

// Prototypes
void trafienie(object gracz, object cel, object bron);
void nietrafienie(object gracz, object cel, object bron);
void mlot_attack(object gracz, object cel, object bron);
int fixnorm(int offence, int defence);

/*
 * Wywolywane kiedy gracz wpisze komende
 */
int
mlot(string str)
{
    object bron;
    object cel;
    float czas;

    bron = TP->query_weapon(W_BOTH);
    if(!objectp(bron))
    {
	notify_fail("Musisz dzierzyc obureczny mlot zeby moc " +
		    "wykonac ten atak!\n");
	return 0;
    }
    if(!bron->query_wt() == W_WARHAMMER)
    {
	notify_fail("Musisz dzierzyc obureczny mlot zeby " +
		    "wykonac ten atak!\n");
	return 0;    
    }
    if(!objectp(TP->query_attack()))
    {
	notify_fail("Tego ataku mozesz uzyc tylko w walce!\n");
	return 0;
    }
    else
	cel = TP->query_attack();
    if(TP->query_prop(RZ_SPECJAL))
    {
	notify_fail("Musisz chwile odpoczac zanim bedziesz mogl wykonac " +
		    "nastepny zamach.\n");
	return 0;
    }
    if(!TP->query_skill(RZ_MLOT))
    {
	notify_fail("Musisz znac przynajmniej podstawy wykonywania tego " +
		    "ataku!\n");
	return 0;
    }
    if(TP->query_prop(RZ_TEMP))
    {
	notify_fail("Wlasnie jestes w trakcie przygotowan do zadania ciosu!" +
		    "\n");
	return 0;
    }

    write("Przygotowujesz sie do wykonania morderczego zamachu swoim " +
	  bron->short(TP, PL_NAR) + ".\n");

    czas = 10.0 - itof((random(TP->QS(RZ_MLOT) / 2) + TP->QS(RZ_MLOT) / 2) * 6) / 100.0;
    TP->add_prop(RZ_TEMP, set_alarm(czas, 0.0, "zamach_mlotem", TP, cel,
				    bron));
    return 1;
}

/*
 * Wywolywana alarmem kiedy skonczy sie czas oczekiwania
 */
void
zamach_mlotem(object gracz, object cel, object bron)
{
    set_this_player(gracz);
    if(!(TP->query_attack() == cel))
    {
	write("Nie atakujesz juz osoby ktora chciales uderzyc mlotem.\n");
	TP->remove_prop(RZ_TEMP);
	return;	
    }
    if(TP->query_weapon(W_BOTH) != bron)
    {
	write("Nie mozesz zmieniac broni podczas wykonywania zamachu mlotem!\n");
	TP->remove_prop(RZ_TEMP);
	return;
    }
    mlot_attack(gracz, cel, bron);
}


void
mlot_attack(object gracz, object cel, object bron)
{
    int zmeczenie;
    int obciazenie;
    int volume;
    float czas_o;
    int thit;
    int norm;
    // Debug begin
    int ilosc_sukcesow = 0;
    int licznik;
    // Debug end

    set_this_player(gracz);
    TP->remove_prop(RZ_TEMP);

    /*
     * Przy okreslaniu sukcesu brane pod uwage sa:
     * Rycerz:               Przeciwnik:
     * Sk. specjala          Zrecznosc
     * Um. w mlotach         Uniki
     * Zrecznosc             -Obciazenie
     * To hit broni          -Zmeczenie
     * -Obciazenie
     * -Zmeczenie
     * W efekcie koncowym powinno byc kolo 70% szansy na trafienie
     * rownego przeciwnika...
     */

    // tohit broni moze miec wartosc od 0 nawet do 120... ale w przypadku
    // mlota nie powinna przekroczyc 60, 70...
    thit = bron->query_hit() * 3;

    // znormalizowana wartosc modyfikatora wynikajacego ze
    // zmeczenia, obciazenia i zaladowania gracza i jego celu
    // przyjmuje wartosci od -40 do 40
    // ale w normalnych warunkach nie powinna specjalnie odbiegac od 0
    norm = fixnorm(2 * ZMECZENIE(gracz) + OBCIAZENIE(gracz) + VOLUME(gracz) + 50,
		   2 * ZMECZENIE(cel) + OBCIAZENIE(cel) + VOLUME(cel) + 50);
//     dump_array(norm+"\nzm:" + ZMECZENIE(gracz) + " ob:"+ OBCIAZENIE(gracz) + 
// 	       " vol:" + VOLUME(gracz) + "\nprzeciwnik:\nzm:" + ZMECZENIE(cel)
// 	       + " ob:" + OBCIAZENIE(cel) + " vol:" + VOLUME(cel));
    
    //    for(licznik = 0 ; licznik < 500 ; licznik++) // Do spr. balansu
    if(TP->resolve_task(TRUDNOSC + norm - thit,
			({SKILL_WEIGHT, 50, RZ_MLOT, SKILL_WEIGHT, 30, 
			      SS_WEP_WARHAMMER, SKILL_WEIGHT, 20, SS_DEX,
			      }),
			cel,
			({SKILL_WEIGHT, 50, SS_DEX, SKILL_WEIGHT, 50,
			      SS_DEFENCE})) > 0)
	//  dump_array("Prawdopodobienstwo:" + (ilosc_sukcesow * 100 / 500));
    {
	trafienie(gracz, cel, bron);
    }
    else
    {
	nietrafienie(gracz, cel, bron);
    }

    /*
     * Obliczanie zmeczenia
     * od 5 - 10 (w zasadzie 9) w zaleznosci od obciazenia...
     */
    zmeczenie = 5 + 5 * OBCIAZENIE(TP) / 100;
    TP->add_fatigue(-zmeczenie);
    /*
     * Czas oczekiwania na mozliwosc wykonania nastepnego ciosu
     * 15 - 25 s w zaleznosci od zmeczenia i obciazenia.
     */
    zmeczenie = ZMECZENIE(TP);
    zmeczenie = (zmeczenie - 30 > 0) ? (zmeczenie - 30) : 0;
    obciazenie = OBCIAZENIE(TP);
    obciazenie = obciazenie - 40 > 0 ? obciazenie - 40 : 0;
    czas_o = 15.0 + 10.0 * itof(zmeczenie + obciazenie) / 130.0;
    TP->add_prop(RZ_SPECJAL, set_alarm(czas_o, 0.0, "gotow_ponownie", TP));
    return;
}

void
trafienie(object gracz, object cel, object bron)
{
    int hit_loc;
    object co = cel->query_combat_object();
    object cotp = gracz->query_combat_object();
    object zbroja;
    mixed hitlocs = ({}), hit_result;
    int *hitlocs_ids;
    int trafienie_w;
    int a, ac, wcpen, dam, percent_dam;
    int skill = (gracz->query_skill(RZ_MLOT) + 
		 gracz->query_skill(SS_WEP_WARHAMMER)) / 2;
    
    wcpen = bron->query_pen();
    /*
     * Humanoidy :
     */
    wcpen = F_PENMOD(wcpen, skill);
    wcpen += F_STRENGTH_DAMAGE_MOD(gracz->query_stat(SS_STR));
    // Tutaj zwiekszamy pena o dodatkowa wartosc... zalezna od skilla
    // i gildiowego stata... wedlug wyliczen Alvina i Mithandira
    // powinno to byc okolo 20 / 7 normalnego ataku po zmodyfikowaniu
    // o odpowiednia wielkosc wynikajaca z mniejszego prawdopodobienstwa
    // sukcesu : 26 / 7 czyli dodaje do 19 / 7 wczesniejszego pena...
    //dump_array("wcpen przed:" + wcpen);
    wcpen += (wcpen * ((gracz->query_skill(RZ_MLOT) * 3) + gracz->query_stat(SS_OCCUP) +
		      gracz->query_skill(SS_WEP_WARHAMMER)) * 19) / (5 * 100 * 7);
    //dump_array("wc_pen po:" + wcpen);
    //dump_array("hp przed:" + cel->query_hp());
    if(cel->query_humanoid())
	hit_result = CO(cel)->cb_hit_me(wcpen, W_BLUDGEON, 0 /*???*/, gracz, -1,
					A_HEAD);
    else
	hit_result = CO(cel)->cb_hit_me(wcpen, W_BLUDGEON, 0 /*???*/, gracz, -1);
    //dump_array("hp po:" + cel->query_hp());
    percent_dam = hit_result[0];
    dam = hit_result[3];
    zbroja = hit_result[4];
    //dump_array(hit_result);

    /*
     * Opisy trafien...
     */
    if(cel->query_humanoid()) //Humanoidy...
    {
	if(!cel->query_hp())
	{
	    gracz->catch_msg("Bierzesz potezny zamach " + QSHORT(bron, PL_NAR) +
                   ". Przez twoja twarz przechodzi grymas wysilku, gdy wkladasz " +
                   "w cios wszystkie dostepne ci sily. Z " +
                   "zadziwiajaca latwoscia uderzasz " + QIMIE(cel, PL_DOP) +
                   " w glowe. Slychac ochydne chrupniecie pekajacej czaszki, " +
                   "a w powietrze wylatuja okruchy kosci zmieszane z kropelkami " +
                   "krwi tworzac prawdziwie makabryczny widok. " + 
                   QCIMIE(cel, PL_MIA) + " pada martw" + cel->koncowka("y","a","e")+
                   " na ziemie.\n");
	    if(interactive(cel))
	    	cel->catch_msg(QCIMIE(gracz, PL_MIA) + " bierze potezny zamach " + 
                   QSHORT(bron, PL_NAR) + ". Przez " + 
                   gracz->koncowka("jego", "jej", "jego") + " twarz przechodzi " +
                   "grymas wysilku, gdy wklada w cios wszystkie dostepne sily. " +
		   "Uderzenie trafia w twa glowe. " +
                   "Czujesz, ze ziemia usuwa ci sie spod nog, a przed twoimi " +
                   "oczami zalega ciemnosc...\n");
	    cotp->tell_watcher(QCIMIE(gracz, PL_MIA) + " bierze potezny zamach " + 
                   QSHORT(bron, PL_NAR) + ". Przez " + 
                   gracz->koncowka("jego", "jej", "jego") + " twarz przechodzi " +
                   "grymas wysilku, gdy wklada w cios wszystkie dostepne sily. " +
                   " Z zadziwiajaca latwoscia uderza " +
                   QIMIE(cel, PL_DOP) + " w glowe. Slychac przy tym ochydne " +
                   "chrupniecie pekajacej czaszki, " +
                   "a w powietrze wylatuja okruchy kosci zmieszane z kropelkami " +
                   "krwi tworzac prawdziwie makabryczny widok. " + 
                   QCIMIE(cel, PL_MIA) + " pada martw" + cel->koncowka("y","a","e")+
                   " na ziemie.\n");
             
	    cel->do_die();
	    return;
	}
	
	if(percent_dam <= 0) // Nie zadano obrazen...
	{
	    if(objectp(zbroja)) // Jesli byla zbroja
	    {
	        gracz->catch_msg("Wykonujesz silny zamach " + 
		       QSHORT(bron, PL_NAR) + " i trafiasz " + QIMIE(cel, PL_BIE) +
                       " w glowe, jednak caly impet ciosu zostaje wyparowany " +
                       "przez " + QSHORT(zbroja, PL_BIE) + ".\n");
	        if(interactive(cel))
		    cel->catch_msg(QCIMIE(gracz, PL_MIA) + " wykonuje obszerny " +
                       "zamach " + QSHORT(bron, PL_NAR) + " i trafia cie " +
                       " w glowe, jednak caly impet ciosu zostaje wyparowany " +
                       "przez " + QSHORT(zbroja, PL_BIE) + ".\n");
	        cotp->tell_watcher(QCIMIE(gracz, PL_MIA) + " wykonuje obszerny " +
                       "zamach " + QSHORT(bron, PL_NAR) + " i trafia " +
                       QIMIE(cel, PL_BIE) + " w glowe, jednak caly impet ciosu " +
                       "zostaje wyparowany przez " + QSHORT(zbroja, PL_BIE) +
		       ".\n");
	    }
	    else // Nie bylo zbroi (hehehe to sie chyba moze zdazyc raz na tysiac)
	    {
	        gracz->catch_msg("Wykonujesz silny zamach " + 
		       QSHORT(bron, PL_NAR) + " i trafiasz " + QIMIE(cel, PL_BIE) +
                       " w glowe, nie powodujac jednak wiekszych " +
                       "obrazen.\n");
	        if(interactive(cel))
		    cel->catch_msg(QCIMIE(gracz, PL_MIA) + " wykonuje obszerny " +
                       "zamach " + QSHORT(bron, PL_NAR) + " i trafia cie " +
                       "w glowe, nie powodujac jednak wiekszych " +
                       "obrazen.\n");
	        cotp->tell_watcher(QCIMIE(gracz, PL_MIA) + " wykonuje obszerny " +
                       "zamach " + QSHORT(bron, PL_NAR) + " i trafia " +
                       QIMIE(cel, PL_BIE) + " w glowe, nie powodujac jednak " +
		       " wiekszych obrazen.\n");
	    }
	    return;
	}

	switch(percent_dam)
	{
	    case 0..7:
 	    gracz->catch_msg("Bierzesz mocny zamach " + QSHORT(bron, PL_NAR) +
		   ", mierzac w glowe " + QIMIE(cel, PL_DOP) + ", lecz muskasz " +
		   cel->koncowka("go", "ja", "go") + " zaledwie, " +
 		   "pozostawiajac nieznaczne zadrapania.\n");
	    if(interactive(cel))
	    	cel->catch_msg(QCIMIE(gracz, PL_MIA) + " bierze mocny zamach " + 
                   QSHORT(bron, PL_NAR) + ", mierzac w twoja glowe, lecz " +
                   "muska cie zaledwie, pozostawiajac nieznaczne zadrapania.\n");
	    cotp->tell_watcher(QCIMIE(gracz, PL_MIA) + " bierze mocny zamach " + 
                   QSHORT(bron, PL_NAR) + ", mierzac w glowe " + 
                   QIMIE(cel, PL_DOP) + ", lecz muska "+ 
                   cel->koncowka("go", "ja", "go") + " zaledwie, pozostawiajac " +
                   "nieznaczne zadrapania.\n");
	    break;
	
	    case 8..24:
	    gracz->catch_msg("Bierzesz mocny zamach " + QSHORT(bron, PL_NAR) +
                   " i z powodzeniem trafiasz " + QIMIE(cel, PL_DOP) +
                   ", pozostawiajac na " + cel->koncowka("jego", "jej", "jego") +
                   " glowie krwawiaca rane.\n");
	    if(interactive(cel))
	    	cel->catch_msg(QCIMIE(gracz, PL_MIA) + " bierze mocny zamach " + 
                   QSHORT(bron, PL_NAR) + " i z powodzeniem trafia cie, " +
                   "pozostawiajac na twojej glowie spora, krwawiaca rane.\n");
	    cotp->tell_watcher(QCIMIE(gracz, PL_MIA) + " bierze mocny zamach " + 
                   QSHORT(bron, PL_NAR) + " i z powodzeniem trafia " +
                   QIMIE(cel, PL_DOP) + " pozostawiajac na " +
                   cel->koncowka("jego", "jej", "jego") + " glowie spora, " +
                   "krwawiaca rane.\n");
	    break;
	    
	    case 25..49:
		gracz->catch_msg("Bierzesz potezny zamach " + QSHORT(bron, PL_NAR) +
                   " i z latwoscia trafiasz " + QIMIE(cel, PL_DOP) +
                   " pozostawiajac na " + cel->koncowka("jego", "jej", "jego") +
                   " glowie duza, krwawiaca rane. " + QCIMIE(cel, PL_DOP) +
                   " chwieje sie jeszcze przez chwile probojac otrzasnac sie " +
                   "po sile ciosu.\n");
	    if(interactive(cel))
	    	cel->catch_msg(QCIMIE(gracz, PL_MIA) + " bierze potezny zamach " + 
                   QSHORT(bron, PL_NAR) + " i z latwoscia trafia cie " +
                   " pozostawiajac na twojej glowie duza, krwawiaca rane. " +
                   "Lekko chwiejesz sie czujac jeszcze nadspodziewanie duza " +
                   "sile ciosu.\n");
	    cotp->tell_watcher(QCIMIE(gracz, PL_MIA) + " bierze potezny zamach " + 
                   QSHORT(bron, PL_NAR) + " i z latwoscia trafia " +
                   QIMIE(cel, PL_DOP) + " pozostawiajac na " + 
                   cel->koncowka("jego", "jej", "jego") + " glowie duza, " +
                   "krwawiaca rane. " + QCIMIE(cel, PL_DOP) +
                   " chwieje sie jeszcze przez chwile probojac otrzasnac sie " +
                   "po sile ciosu.\n");
	    break;
	    
	    default:
		gracz->catch_msg("Bierzesz potezny zamach " + QSHORT(bron, PL_NAR) +
                   ", przez twoja twarz przechodzi grymas wysilku gdy wkladasz " +
                   "w cios wszystkie dostepne sily. Z ogromna sila i zadziwiajaca " + 
                   "latwoscia uderzasz " + QIMIE(cel, PL_DOP) + " w glowe. Niemalze " +
                   "natychmiast " + cel->koncowka("jego", "jej", "jego") +
                   " twarz zalewaja strumienie krwi plynace z ogromnej rany, a " +
                   cel->koncowka("on sam", "ona sama", "ono samo") + " z trudem " +
                   "proboje utrzymac rownowage ledwo trzymajac sie na nogach.\n");
	    if(interactive(cel))
	    	cel->catch_msg(QCIMIE(gracz, PL_MIA) + " bierze potezny zamach " + 
                   QSHORT(bron, PL_NAR) + ", przez " + 
                   gracz->koncowka("jego", "jej", "jego") + " twarz przechodzi " +
                   "grymas wysilku gdy wklada w cios wszystkie dostepne sily. " +
		   "Gdy chwile potem z ogromna sila trafia cie w glowe na " +
		   "moment tracisz swiadomosc. Z ogromnym trudem udaje ci sie " +
                   "utrzymac na nogach, a chwile pozniej stwierdzasz, ze cala " +
                   "twoja twarz pokrywa krew.\n");
	    cotp->tell_watcher(QCIMIE(gracz, PL_MIA) + " bierze potezny zamach " + 
                   QSHORT(bron, PL_NAR) + ", przez " +
                   gracz->koncowka("jego", "jej", "jego") + " twarz przechodzi " +
                   "grymas wysilku gdy wklada w cios wszystkie dostepne sily. " +
                   "Z ogromna sila i zadziwiajaca latwoscia uderza " +
                   QIMIE(cel, PL_DOP) + " w glowe. Niemalze " +
                   "natychmiast twarz " + gracz->koncowka("jego", "jej", "jego") +
                   " przeciwni" + cel->koncowka("ka", "czki", "ka") + 
                   " zalewaja strumienie krwi plynace z ogromnej rany, a " +
                   cel->koncowka("on sam", "ona sama", "ono samo") + " z trudem " +
                   "proboje utrzymac rownowage ledwo trzymajac sie na nogach.\n");
	    break;
	}
    }
    else // Niehumanoidy... 
    {
    	if(!cel->query_hp())
	{
	    gracz->catch_msg("Bierzesz potezny zamach " + QSHORT(bron, PL_NAR) +
                   ", przez twoja twarz przechodzi grymas wysilku gdy wkladasz " +
                   "w cios wszystkie dostepne sily. Z przeogromna sila i " +
                   "zadziwiajaca latwoscia uderzasz " + QIMIE(cel, PL_DOP) +
                   " w glowe, slychac przy tym ochydne chrupniecie pekajacej czaszki, " +
                   "a w powietrze wylatuja okruchy kosci zmieszane z kropelkami " +
                   "krwi tworzac prawdziwie makabryczny widok. " + 
                   QCIMIE(cel, PL_MIA) + " pada martw" + cel->koncowka("y","a","e")+
                   " na ziemie, a ciebie ogarnia obrzydzenie gdy przez wybita " +
                   "w czaszce dziure zauwazasz mozg.\n");
	    if(interactive(cel))
	    	cel->catch_msg(QCIMIE(gracz, PL_MIA) + " bierze potezny zamach " + 
                   QSHORT(bron, PL_NAR) + ", przez " + 
                   gracz->koncowka("jego", "jej", "jego") + " twarz przechodzi " +
                   "grymas wysilku gdy wklada w cios wszystkie dostepne sily. " +
		   "Chwile pozniej z przeogromna sila uderza cie w glowe, " +
                   "czujesz, ze ziemia usuwa ci sie spod nog. Z ogromna " +
                   "szybkoscia zaczynasz zblizac sie do niej, a przed twoimi " +
                   "oczami zalega ciemnosc...\n");
	    cotp->tell_watcher(QCIMIE(gracz, PL_MIA) + " bierze potezny zamach " + 
                   QSHORT(bron, PL_NAR) + ", przez " + 
                   gracz->koncowka("jego", "jej", "jego") + " twarz przechodzi " +
                   "grymas wysilku gdy wklada w cios wszystkie dostepne sily. " +
                   " Z przeogromna sila i zadziwiajaca latwoscia uderza " +
                   QIMIE(cel, PL_DOP) + " w glowe, slychac przy tym ochydne " +
                   "chrupniecie pekajacej czaszki, " +
                   "a w powietrze wylatuja okruchy kosci zmieszane z kropelkami " +
                   "krwi tworzac prawdziwie makabryczny widok. " + 
                   QCIMIE(cel, PL_MIA) + " pada martw" + cel->koncowka("y","a","e")+
                   " na ziemie, a ciebie ogarnia obrzydzenie gdy przez wybita " +
                   "w czaszce dziure zauwazasz mozg.\n");
             
	    cel->do_die();
	    return;
	}
	
	if(percent_dam <= 0) // Nie zadano obrazen...
	{
	        gracz->catch_msg("Wykonujesz obszerny zamach " + 
		       QSHORT(bron, PL_NAR) + " i trafiasz " + QIMIE(cel, PL_BIE) +
                       " w glowe, nie powodujac jednak zadnych zauwazalnych " +
                       "obrazen.\n");
	        if(interactive(cel))
		    cel->catch_msg(QCIMIE(gracz, PL_MIA) + " wykonuje obszerny " +
                       "zamach " + QSHORT(bron, PL_NAR) + " i trafia cie " +
                       "w glowe, nie powodujac jednak zadnych odczuwalnych " +
                       "obrazen.\n");
	        cotp->tell_watcher(QCIMIE(gracz, PL_MIA) + " wykonuje obszerny " +
                       "zamach " + QSHORT(bron, PL_NAR) + " i trafia " +
                       QIMIE(cel, PL_BIE) + " w glowe, nie powodujac jednak " +
		       " zadnych zauwazalnych obrazen.\n");
	    return;
	}

	switch(percent_dam)
	{
	    case 0..7:
 	    gracz->catch_msg("Bierzesz mocny zamach " + QSHORT(bron, PL_NAR) +
		   " mierzac w glowe " + QIMIE(cel, PL_DOP) + ", lecz " +
		   "zaledwie " + cel->koncowka("go", "ja", "go") + " muskasz " +
		   "pozostawiajac jedynie zadrapania.\n");
	    if(interactive(cel))
	    	cel->catch_msg(QCIMIE(gracz, PL_MIA) + " bierze mocny zamach " + 
                   QSHORT(bron, PL_NAR) + " mierzac w twoja glowe, lecz " +
                   "zaledwie cie muska pozostawiajac jedynie zadrapania.\n");
	    cotp->tell_watcher(QCIMIE(gracz, PL_MIA) + " bierze mocny zamach " + 
                   QSHORT(bron, PL_NAR) + " mierzac w glowe " + 
                   QIMIE(cel, PL_DOP) + ", lecz zaledwie " + 
                   cel->koncowka("go", "ja", "go") + " muska pozostawiajac " +
                   "jedynie zadrapania.\n");
	    break;
	
	    case 8..24:
	    gracz->catch_msg("Bierzesz mocny zamach " + QSHORT(bron, PL_NAR) +
                   " i z powodzeniem trafiasz " + QIMIE(cel, PL_DOP) +
                   " pozostawiajac na " + cel->koncowka("jego", "jej", "jego") +
                   " glowie spora, krwawiaca rane.\n");
	    if(interactive(cel))
	    	cel->catch_msg(QCIMIE(gracz, PL_MIA) + " bierze mocny zamach " + 
                   QSHORT(bron, PL_NAR) + " i z powodzeniem trafia cie " +
                   "pozostawiajac na twojej glowie spora, krwawiaca rane.\n");
	    cotp->tell_watcher(QCIMIE(gracz, PL_MIA) + " bierze mocny zamach " + 
                   QSHORT(bron, PL_NAR) + " i z powodzeniem trafia " +
                   QIMIE(cel, PL_DOP) + " pozostawiajac na " +
                   cel->koncowka("jego", "jej", "jego") + " glowie spora, " +
                   "krwawiaca rane.\n");
	    break;
	    
	    case 25..49:
		gracz->catch_msg("Bierzesz potezny zamach " + QSHORT(bron, PL_NAR) +
                   " i z latwoscia trafiasz " + QIMIE(cel, PL_DOP) +
                   " pozostawiajac na " + cel->koncowka("jego", "jej", "jego") +
                   " glowie duza, krwawiaca rane. " + QCIMIE(cel, PL_DOP) +
                   " chwieje sie jeszcze przez chwile probojac otrzasnac sie " +
                   "po sile ciosu.\n");
	    if(interactive(cel))
	    	cel->catch_msg(QCIMIE(gracz, PL_MIA) + " bierze potezny zamach " + 
                   QSHORT(bron, PL_NAR) + " i z latwoscia trafia cie " +
                   " pozostawiajac na twojej glowie duza, krwawiaca rane. " +
                   "Lekko chwiejesz sie czujac jeszcze nadspodziewanie duza " +
                   "sile ciosu.\n");
	    cotp->tell_watcher(QCIMIE(gracz, PL_MIA) + " bierze potezny zamach " + 
                   QSHORT(bron, PL_NAR) + " i z latwoscia trafia " +
                   QIMIE(cel, PL_DOP) + " pozostawiajac na " + 
                   cel->koncowka("jego", "jej", "jego") + " glowie duza, " +
                   "krwawiaca rane. " + QCIMIE(cel, PL_DOP) +
                   " chwieje sie jeszcze przez chwile probojac otrzasnac sie " +
                   "po sile ciosu.\n");
	    break;
	    
	    default:
		gracz->catch_msg("Bierzesz potezny zamach " + QSHORT(bron, PL_NAR) +
                   ", przez twoja twarz przechodzi grymas wysilku gdy wkladasz " +
                   "w cios wszystkie dostepne sily. Z ogromna sila i zadziwiajaca " + 
                   "latwoscia uderzasz " + QIMIE(cel, PL_DOP) + " w glowe. Niemalze " +
                   "natychmiast " + cel->koncowka("jego", "jej", "jego") +
                   " twarz zalewaja strumienie krwi plynace z ogromnej rany, a " +
                   cel->koncowka("on sam", "ona sama", "ono samo") + " z trudem " +
                   "proboje utrzymac rownowage ledwo trzymajac sie na nogach.\n");
	    if(interactive(cel))
	    	cel->catch_msg(QCIMIE(gracz, PL_MIA) + " bierze potezny zamach " + 
                   QSHORT(bron, PL_NAR) + ", przez " + 
                   gracz->koncowka("jego", "jej", "jego") + " twarz przechodzi " +
                   "grymas wysilku gdy wklada w cios wszystkie dostepne sily. " +
		   "Gdy chwile potem z ogromna sila trafia cie w glowe na " +
		   "moment tracisz swiadomosc. Z ogromnym trudem udaje ci sie " +
                   "utrzymac na nogach, a chwile pozniej stwierdzasz, ze cala " +
                   "twoja twarz pokrywa krew.\n");
	    cotp->tell_watcher(QCIMIE(gracz, PL_MIA) + " bierze potezny zamach " + 
                   QSHORT(bron, PL_NAR) + ", przez " +
                   gracz->koncowka("jego", "jej", "jego") + " twarz przechodzi " +
                   "grymas wysilku gdy wklada w cios wszystkie dostepne sily. " +
                   "Z ogromna sila i zadziwiajaca latwoscia uderza " +
                   QIMIE(cel, PL_DOP) + " w glowe. Niemalze " +
                   "natychmiast twarz " + gracz->koncowka("jego", "jej", "jego") +
                   " przeciwni" + cel->koncowka("ka", "czki", "ka") + 
                   " zalewaja strumienie krwi plynace z ogromnej rany, a " +
                   cel->koncowka("on sam", "ona sama", "ono samo") + " z trudem " +
                   "proboje utrzymac rownowage ledwo trzymajac sie na nogach.\n");
	    break;
	}
    }
    return;
}

void
nietrafienie(object gracz, object cel, object bron)
{
    if(random(100) < cel->query_skill(SS_DEFENCE))
    {
	gracz->catch_msg("Bierzesz potezny zamach znad glowy swoim " +
	      bron->short(gracz, PL_NAR) + ", jednak " + QIMIE(cel, PL_MIA)
	      + " wykonuje zreczny unik i cios przeszywa powietrze.\n");
	if(interactive(cel))
	    cel->catch_msg(QCIMIE(gracz, PL_MIA) + " bierze potezny zamach " +
		"znad glowy swoim " + bron->short(cel, PL_NAR) + ", udaje " +
	        "ci sie jednak wykonac unik i cios przeszywa powietrze.\n");
	gracz->query_combat_object()->tell_watcher(QCIMIE(gracz, PL_MIA) +
	      " bierze potezny zamach znad glowy swoim " + QSHORT(bron, PL_NAR) +
	      ", jednak " + QIMIE(cel, PL_MIA) + " wykonuje zreczny unik " +
	      "i cios przeszywa powietrze.\n");
		  
    }
    else
    {
	gracz->catch_msg("Wykonujesz potezny zamach " + QSHORT(bron, PL_NAR) +
	       " mierzac w glowe " + QIMIE(cel, PL_DOP) + ", lecz nie udaje ci " +
	       "sie " + cel->koncowka("go", "jej", "go") + " trafic.\n");
	if(interactive(cel))
	    cel->catch_msg(QCIMIE(gracz, PL_MIA) + " wykonuje potezny zamach " +
                 QSHORT(bron, PL_NAR) + " mierzac w twoja glowe, lecz nie " + 
                 "udaje " + gracz->koncowka("mu", "jej", "mu") + " sie ciebie " +
		 "trafic.\n");
	gracz->query_combat_object()->tell_wather(QCIMIE(gracz, PL_MIA) +
              " wykonuje potezny zamach " + QSHORT(bron, PL_NAR) + " mierzac " +
              "w glowe " + QIMIE(gracz, PL_DOP) + ", lecz nie udaje " +
	      gracz->koncowka("mu", "jej", "mu") + " sie trafic.\n");
    }
}

void
gotow_ponownie(object gracz)
{
    gracz->remove_prop(RZ_SPECJAL);
    gracz->catch_msg("Jestes gotowy do wykonania kolejnego zamachu.\n");
    return;
}

int
fixnorm(int offence, int defence)
{
    if(offence + defence == 0)
	return 0;

    return ((offence * 100) / (offence + defence)) - 50;
}
