/* walka, a wlasciewie, jej opis... byc moze cos jeszcze...
 * napisane przez Alfena
 * o ile zdecyduje sie na jakiekolwiek przerobki
 */
#include "local.h"
#include <pl.h>
#include "/std/combat/combat.h"
#include <wa_types.h>
#include <macros.h>
inherit "/std/combat/ctool";
void
create_ctool()
{
	if (me)
		return ;
	this_object()->create_cwalka();
}
/*
 * Function name: cb_did_hit
 * Description:   Tells us that we hit something. Should produce combat
 *                messages to all relevant parties. This is supposed to be
 *                replaced by a more intelligent routine in creature and
 *                humanoid combat. (called from heart_beat)
 * Arguments:     aid:    The attack id
 *                hdesc:  The hitlocation description.
 *                phurt:  The %hurt made on the enemy
 *                enemy:  The enemy who got hit
 *		  dt:	  The current damagetype
 *		  phit:   The %success that we made with our weapon
 *			  If this is negative, it indicates fail
 *		  dam:    Damage we did in hit points
 *		  tohit:  How well did we hit
 *		  def_ob: Obj that defended or how we defended (if miss)
 *		  armour: Armour on the hitlocation being hit
 */
public varargs void
cb_did_hit(int aid, string hdesc, int phurt, object enemy, int dt,
	   int phit, int dam, int tohit, mixed def_ob, object armour)
{
    object wep;
    string zaimek;
    string what;
    string with;
    string zbroja;
    string index;
    mixed *jak = ({	({"biorac potezny zamach","wykonujac lekki zamach",
    			  "bierac lekki zamach","blyskawicznie" }),
    			({"biorac potezny zamach","wykonujac lekki zamach",
    			  "biorac lekki zamach","blyskawicznie" }),
    			({"rzucajac sie do przodu",
    			  "lekko sie przechylajac",
    			  "wykonujac zwod"}) });
    if (!objectp(enemy)|| !me)
    {
	return;
    }
    
    with = cb_attack_desc(aid);
    
    if (phurt == -1)
    {
	cb_add_panic(1);
        if (objectp(def_ob))
        {
	    zaimek = enemy->koncowka("ten", "ta", "ono");
	    if (def_ob->check_weapon()) // paruje bron
	    {
                if (dt == W_IMPALE)
                {
                    if (i_am_real)
                    {
                        me->catch_msg("Wyprowadzasz szybkie pchniecie " + with +
                            " w " + enemy->query_imie(me, PL_BIE) +
                            ", lecz " + zaimek + " zbija je z linii ataku " + 
                            def_ob->short(me, PL_NAR) + ".\n");
                    }
                    if (interactive(enemy))
                    {
                        enemy->catch_msg(me->query_Imie(enemy, PL_MIA) +
                            " wyprowadza szybkie pchniecie " + with + 
                            " w ciebie, lecz tobie udaje sie zbic je z linii " + 
                            "ataku " + def_ob->short(enemy, PL_NAR) + ".\n");
                    }
                    tell_watcher(QCIMIE(me, PL_MIA) + " wyprowadza " +
                        "szybkie pchniecie " + with + " w " + 
                        QIMIE(enemy, PL_BIE) + ", lecz " + zaimek + " zbija je " +
                        "z linii ataku " + QSHORT(def_ob, PL_NAR) + ".\n", enemy);
                    
                    return ;
                }
                
                if (dt == W_BLUDGEON)
                {
                    if (i_am_real)
                    {
                        me->catch_msg("Robisz zamach " + with + " mierzac w " +
                            enemy->query_imie(me, PL_BIE) + ", lecz " + zaimek + 
                            " paruje go " + def_ob->short(me, PL_NAR) + ".\n");
                    }
                    if (interactive(enemy))
                    {
                        enemy->catch_msg(me->query_Imie(enemy, PL_MIA) + 
                            " wykonuje zamach " + with + " mierzac w ciebie, " +
                            "lecz tobie udaje sie go sparowac " + 
                            def_ob->short(enemy, PL_NAR) + ".\n");
                    }
                    tell_watcher(QCIMIE(me, PL_MIA) + " wykonuje zamach " +
                        with + " mierzac w " + QIMIE(enemy, PL_BIE) + ", lecz " +
                        zaimek + " paruje go " + QSHORT(def_ob, PL_NAR) + ".\n", 
                        enemy);
                    
                    return ;
                }
                if (dt == W_SLASH)
                {
                    if (i_am_real)
                    {
                        me->catch_msg("Wykonujesz zamaszyste ciecie " + with +
                            " mierzac w " + enemy->query_imie(me, PL_BIE) +
                            ", lecz " + zaimek + " odbija je " + 
                            def_ob->short(enemy, PL_NAR) + ".\n");
                    }
                    if (interactive(enemy))
                    {
                        enemy->catch_msg(me->query_Imie(enemy, PL_MIA) + 
                            " wykonuje zamaszyste ciecie " + with + " mierzac w " +
                            "ciebie, lecz udaje ci sie je odbic " + 
                            def_ob->short(me, PL_NAR) + ".\n");
                    }
                    tell_watcher(QCIMIE(me, PL_MIA) + " wykonuje " +
                        "zamaszyste ciecie " + with + " mierzac w " +
                        QIMIE(enemy, PL_BIE) + ", lecz " + zaimek + 
                        " odbija je " + QSHORT(def_ob, PL_NAR) + ".\n", enemy);
                    
                    return ;
                }
            }
            else
            {
                if (dt == W_IMPALE)
                {
                    if (i_am_real)
                    {
                        me->catch_msg("Wyprowadzasz szybkie pchniecie " + with +
                            " w " + enemy->query_imie(me, PL_BIE) +
                            ", lecz " + zaimek + " oslania sie " + 
                            def_ob->short(me, PL_NAR) + ".\n");
                    }
                    if (interactive(enemy))
                    {
                        enemy->catch_msg(me->query_Imie(enemy, PL_MIA) +
                            " wyprowadza szybkie pchniecie " + with + 
                            " w ciebie, lecz tobie udaje sie oslonic " + 
                            def_ob->short(enemy, PL_NAR) + ".\n");
                    }
                    tell_watcher(QCIMIE(me, PL_MIA) + " wyprowadza " +
                        "szybkie pchniecie " + with + " w " + 
                        QIMIE(enemy, PL_BIE) + ", lecz " + zaimek + " oslania " +
                        "sie " + QSHORT(def_ob, PL_NAR) + ".\n", enemy);
                    
                    return ;
                }
                
                if (dt == W_BLUDGEON)
                {
                    if (i_am_real)
                    {
                        me->catch_msg("Robisz zamach " + with + " mierzac w " +
                            enemy->query_imie(me, PL_BIE) + ", lecz " + zaimek + 
                            " oslania sie " + def_ob->short(me, PL_NAR) + ".\n");
                    }
                    if (interactive(enemy))
                    {
                        enemy->catch_msg(me->query_Imie(enemy, PL_MIA) + 
                            " wykonuje zamach " + with + " mierzac w ciebie, " +
                            "lecz tobie udaje sie oslonic " + 
                            def_ob->short(enemy, PL_NAR) + ".\n");
                    }
                    tell_watcher(QCIMIE(me, PL_MIA) + " wykonuje zamach " +
                        with + " mierzac w " + QIMIE(enemy, PL_BIE) + ", lecz " +
                        zaimek + " paruje go " + QSHORT(def_ob, PL_NAR) + ".\n", 
                        enemy);
                    
                    return ;
                }
                if (dt == W_SLASH)
                {
                    if (i_am_real)
                    {
                        me->catch_msg("Wykonujesz zamaszyste ciecie " + with +
                            " mierzac w " + enemy->query_imie(me, PL_BIE) +
                            ", lecz " + zaimek + " oslania sie " + 
                            def_ob->short(enemy, PL_NAR) + ".\n");
                    }
                    if (interactive(enemy))
                    {
                        enemy->catch_msg(me->query_Imie(enemy, PL_MIA) + 
                            " wykonuje zamaszyste ciecie " + with + " mierzac w " +
                            "ciebie, lecz udaje ci sie oslonic " + 
                            def_ob->short(me, PL_NAR) + ".\n");
                    }
                    tell_watcher(QCIMIE(me, PL_MIA) + " wykonuje " +
                        "zamaszyste ciecie " + with + " mierzac w " +
                        QIMIE(enemy, PL_BIE) + ", lecz " + zaimek + 
                        " oslania sie " + QSHORT(def_ob, PL_NAR) + ".\n", enemy);
                    
                    return ;
                }
            }
        }
// Nie udaje ci sie trafic xxx'a yyy'em.
// Nie trafiasz xxx'a yyy'em.
	if (def_ob == 1) /* nietrafienie (nieumiejetnosc atakujacego) */
	{
	    if (i_am_real)
	    {
		me->catch_msg("Nie udaje ci sie trafic " + 
		    enemy->query_imie(me, PL_DOP) + " " + with + ".\n");
	    }
	    if (interactive(enemy))
	    {
	        enemy->catch_msg(me->query_Imie(enemy, PL_CEL) + " nie udaje " +
	            "sie trafic ciebie " + with + ".\n");
	    }
	    tell_watcher(QCIMIE(me, PL_CEL) + " nie udaje sie trafic " +
	        QIMIE(enemy, PL_DOP) + " " + with + ".\n", enemy);
	    return;
	}
	else /* unik broniacego */
	{
/*
+1:Probujesz trafic <kogo> <czym>, ale nie udaje ci sie <go/jej> trafic.
0:Probujesz trafic <kogo> <czym>, lecz <ten,ta,to> unika twego ciosu.
+0:Probujesz trafic <kogo> <czym>, lecz <ten,ta,to> uskakuje przed twoim ciosem.
*/
	    zaimek = enemy->koncowka("ten", "ta", "ono");
	    if (i_am_real)
	    {
        	me->catch_msg("Probujesz trafic " + 
        	    enemy->query_imie(me, PL_BIE) + " " + with + ", lecz " +
        	    zaimek + " uskakuje przed twoim ciosem.\n");
	    }
	    if (interactive(enemy))
	    {
	        enemy->catch_msg(me->query_Imie(enemy, PL_MIA) + " probuje " +
	            "cie trafic " + with + ", lecz tobie udaje sie uniknac " +
	            "tego uderzenia.\n");
	    }
	    tell_watcher(QCIMIE(me, PL_MIA) + " probuje trafic " +
	        QIMIE(enemy, PL_BIE) + " " + with + ", lecz " + zaimek +
	        " uskakuje przed tym atakiem.\n", enemy);
	    return;
	}
    }
    
    if ((phurt == 0) && armour) // zbroja wyparowala
    {
        zbroja = armour->short(PL_BIE);
	if (i_am_real)
	{
	    me->catch_msg("Trafiasz " + enemy->query_imie(me, PL_BIE) + " " +
	        with + " w " + hdesc + ", lecz caly impet uderzenia " +
	        "wyparowany zostaje przez " + zbroja + ".\n");
	}
	if (interactive(enemy))
	{
	    enemy->catch_msg(me->query_Imie(enemy, PL_MIA) + " trafia cie " + 
	        with + " w " + hdesc + ", lecz caly impet uderzenia " +
	        "wyparowany zostaje przez " + zbroja + ".\n");
	}
	tell_watcher(QCIMIE(me, PL_MIA) + " trafia " + QIMIE(enemy, PL_BIE) +
	    " " + with + " w " + hdesc + ", lecz caly impet uderzenia " +
	    "wyparowany zostaje przez " + zbroja + ".\n", enemy);
    
	return ;
    }
    cb_add_panic(-3 - (phurt / 5));
    zaimek = enemy->query_zaimek(PL_BIE, 0);
/*
dobrze/kiepsko trafiasz Genowefe dlugim mieczem w glowe, zadajac 
  lekkie/powazne obrazenia.
  
Trafiasz Genowefe dlugim mieczem w glowe, zadajac lekkie/powazne obrazenia.
Ciezko ranisz Genowefe w glowe, zadajac lekkie/powazne obrazenia.
Ciezko ranisz Genowefe, trafiajac ja w glowe dlugim mieczem.
Ciezko ranisz Genowefe dlugim mieczem, trafiajac ja w glowe.
ledwo muskasz		5
lekko ranisz		5
ranisz			10
powaznie ranisz		30
bardzo ciezko ranisz	30
masakrujesz		20
stare:
[0..4, 5..9, 10..19, 20..29, 30..49, 50..69, 70..89, 90..100]
    5,    5,     10,     10,     20,     20,     20,      10
*/
    if (dt==W_SLASH ||  dt==W_BLUDGEON || dt==W_IMPALE)
    {
    if(dt==W_BLUDGEON)
    switch (phurt)
    {
    case 0..4:   /* [5] */
	what = (random(2)?"bolesnie uderza":"siniaczy cialo");
	break;
    case 5..9:   /* [5] */
	what = (random(2)?"wywoluje chwilowy paraliz":"odrzuca kawalek dalej");
	break;
    case 10..19: /* [10] */
	what = (random(2)?"wywoluje przenikliwy bol":"wywoluje paralizujacy bol");
	break;
    case 20..49: /* [30] */
	what = (random(2)?"prawie gruchocze kosci":"wywoluje ogromny bol");
	break;
    case 50..79: /* [30] */
	what = (random(2)?"gruchocze kosci":"lamie kosci");
	break;
    default:     /* [20] */
	what = (random(2)?"masakruje":"bija w ziemie");
    }
    if (dt==W_SLASH)
    switch (phurt)
    {
    case 0..4:   /* [5] */
	what = (random(2)?"nadcina cialo":"otwiera mala ranke");
	break;
    case 5..9:   /* [5] */
	what = (random(2)?"otwiera rane":"rozcina cialo");
	break;
    case 10..19: /* [10] */
	what = (random(2)?"otwiera gleboka rane":"gleboko rozciana cialo");
	break;
    case 20..49: /* [30] */
	what = (random(2)?"gleboko i gladko tnie":"z latwoscia rozcina cialo");
	break;
    case 50..79: /* [30] */
	what = (random(2)?"prawie przecina cialo":"bardzo powaznie rani");
	break;
    default:     /* [20] */
	what = (random(2)?"masakruje":"rozprowa");
    }
    if(dt== W_IMPALE)
    switch(phurt)
    {
    	case 0..4:   /* [5] */
	what = (random(2)?"lekko kluje":"lekko przebija cialo");
	break;
    case 5..9:   /* [5] */
	what = (random(2)?"plytko wbija sie w cialo":"pytko przebija cialo");
	break;
    case 10..19: /* [10] */
	what = (random(2)?"perfidnie przeszywa cialo":"przeszywa cialo");
	break;
    case 20..49: /* [30] */
	what = (random(2)?"przebija cialo":"bolesnie przeszywa cialo");
	break;
    case 50..79: /* [30] */
	what = (random(2)?"z latwoscia przebija cialo":"gleboko wbija sie w cialo");
	break;
    default:     /* [20] */
	what = (random(2)?"partoszy":"masakruje");
    }
    }
    
    if (!what || what == "")
    {
    	dump_array("hmm what !=");
    }
    index = "";
    // jak
    switch(dt)
    {
    	case W_SLASH:
    		index = jak[0][random(sizeof(jak[0]))];
    		break;
    	case W_BLUDGEON:
    		index = jak[1][random(sizeof(jak[1]))];
    		break;
    		
    	case W_IMPALE:
    		index = jak[2][random(sizeof(jak[2]))];
    	default :
    		index = jak[1][random(sizeof(jak[2]))];
    }
    
    if (i_am_real)
    {
	me->catch_msg(capitalize(what) + "sz " + enemy->query_imie(me, PL_BIE)
	    + " " + with + ", trafiajac "+zaimek+" w " + hdesc + ".\n");
    }
    if (interactive(enemy))
    {
	enemy->catch_msg(me->query_Imie(enemy, PL_MIA) + ", " +index+", "+ what +
	    " " + with + ", trafiajac cie w " + hdesc + ".\n");
    }
    tell_watcher(QCIMIE(me, PL_MIA) + ", " +index + ", " + what + " " + QIMIE(enemy, PL_BIE) +
        " " + with + ", trafiajac " + zaimek + " w " + hdesc + ".\n", enemy);
        
}
