#include <stdproperties.h>
#include <pl.h>
#include <wa_types.h>
#include <const.h>
#include <ss_types.h>

#include "morley.h"

inherit "/d/Imperium/std/undead";
inherit "/std/combat/unarmed";

mixed przymiotniki1 = ({ ({"pozolkly", "pozolkli"}), ({"sczernialy", "sczerniali"}),
			 ({"bialy", "biali"}), ({"trzeszczacy", "trzeszczacy"}) });

mixed przymiotniki2 = ({ ({"zlowrogi", "zlowrodzy"}), ({"gniewny", "gniewni"}),
			 ({"wysoki", "wysocy"}), ({"niski", "niscy"}),
			 ({"posepny", "posepni"}) });

string *bronie = ({WEP_PATH + "miecz1.c",
                   WEP_PATH + "miecz2.c",
                   WEP_PATH + "topor1.c"});

string *tarcze = ({ARM_PATH + "tarcza1.c",
                   ARM_PATH + "tarcza2.c" });

int q_att();

void
create_undead()
{
    int tmp;
    
    ustaw_odmiane_rasy(({ "szkielet", "szkieleta", "szkieletowi", "szkielet",
			      "szkieletem", "szkielecie" }), ({ "szkielety", "szkieletow",
			       "szkieletom", "szkielety", "szkieletami", "szkieletach" }),
			      PL_MESKI_NOS_NZYW);
            
    set_gender(G_MALE);
	
    tmp = random(sizeof(przymiotniki1));
    dodaj_przym(przymiotniki1[tmp][0], przymiotniki1[tmp][1]);
    tmp = random(sizeof(przymiotniki2));
    dodaj_przym(przymiotniki2[tmp][0], przymiotniki2[tmp][1]);
	
    set_long("Osobnik ow wyglada jak wiekowy, oczyszczony juz przez czas " +
	     "ludzki szkielet, ktory nagle zapragnal na nowo zaczac stapac " +
	     "po ziemi. Jedyne co go odroznia od swych spokojnie spoczywajaych " +
	     "braci to dziwne, zle swiatlo ktore tli sie w glebi jego oczodolow, " +
	     "a z jego palakowatej zwisa ryngraf ze znakiem Slaanesha.\n");

    set_stats(({50 + random(10), 40 + random(10), 30 + random(10), 20, 20, 45}));

    add_prop(LIVE_I_NO_CORPSE, 1);
    add_prop(LIVE_I_SEE_DARK, 10);
    add_prop(LIVE_I_UNDEAD, 1);
    add_prop(NPC_I_NO_FEAR, 1);
    add_prop(CONT_I_VOLUME, 350);
    add_prop(CONT_I_WEIGHT, 50000);
    add_prop(CONT_I_HEIGHT, 160 + random(40));
    add_prop(NPC_M_NO_ACCEPT_GIVE, " nie jest na tyle glupi zeby cos od ciebie brac.\n");
    add_prop(OBJ_S_WIZINFO, "czesciowo by Morley '99\n");

    set_alignment(-500-random(200));

    set_attack_unarmed(W_RIGHT, 40, 50, W_SLASH, 45, 
		       "dlugimi ostrymi szponami");
    set_attack_unarmed(W_LEFT, 40, 50, W_SLASH, 45, 
		       "dlugimi ostrymi szponami");
    set_attack_unarmed(1, 40, 50, W_IMPALE, 45, 
		       "pozoklymi zebiskami");
    set_hitloc_unarmed(A_HEAD, 10, 10, "pozolka czaszke");
    set_hitloc_unarmed(A_R_ARM, 10, 10, "prawe szponiaste ramie");
    set_hitloc_unarmed(A_L_ARM, 10, 10, "lewe szponiaste ramie");
    set_hitloc_unarmed(A_TORSO, 10, 60, "pozokle zebra");
    set_hitloc_unarmed(A_LEGS, 10, 30, "pozolke kosci nog");
	
    set_skill(SS_DEFENCE, 30);
    set_skill(SS_UNARM_COMBAT, 40);
    set_skill(SS_WEP_SWORD, 50);
    set_skill(SS_WEP_AXE, 50);
    set_skill(SS_AWARENESS, 50);
    set_skill(SS_PARRY, 40);
    set_skill(SS_SHIELD_PARRY, 40);
    set_skill(SS_HUNTING, 40);
	
    set_aggressive(q_att);

    if ( tmp = sizeof(bronie) )
	add_weapon(bronie[random(tmp)]);
    if ( tmp = sizeof(tarcze) )
	add_armour(tarcze[random(tmp)]);

    set_act_time(20 + random(20));
    set_cact_time(5);

    add_act("emote postukuje koscmi o posadzke.");
    add_act("emote oglada swoje uzbrojenie.");
    add_act("emote przyglada sie ziemi uwaznie.");
    add_act("emote skrobie sie reka po bielejacej czaszce.");
    add_act("emote stuka groznie zebami.");

    add_cact("emote smaga cie spojrzeniem swoich swiecacych oczu.");
    add_cact("emote chrzesci glucho skladajac sie do ciosu.");
    add_cact("emote wymachyje gniewnie w twoja strone koscista dlonia.");

    set_random_move(30);
}

mixed
hit_me(int wcpen, int dt, int tohit, object attacker, int attack_id, int target_hitloc = -1)
{
    if (dt == W_CLUB)
	return ::hit_me(wcpen, dt, tohit, attacker, attack_id, target_hitloc);
            
    if (dt == W_SLASH && !attacker->query_prop("_cialem_szkieleta") )
    {
        attacker->catch_msg("Ze zdziwieniem stwierdzasz, ze twoje ciecie w pozolkle " + 
                            "kosci szkieletu nie zadaje tak duzych obrazen, jak powinno.\n");
	attacker->add_prop("_cialem_szkieleta", 1);
    }
                                                                        
    if (dt == W_IMPALE && !attacker->query_prop("_pchnalem_szkieleta") )
    {
        attacker->catch_msg("Kiedy twoje pchniecie omija kosci szkieletu i przechodzi na " +
			    "wylot nie czyniac mu zadnej szkody, stwierdzasz, ze niezwykle " +
			    "trudno bedzie go uszkodzic atakujac w ten sposob.\n");
	attacker->add_prop("_pchnalem_zombiego", 1);
    }

    switch (dt)
    {
    case W_SLASH:
	wcpen /= 2;
	break;

    case W_IMPALE:
	if (random(100) >= 5)
	    wcpen = 0;
	break;
    }
    return ::hit_me(wcpen, dt, tohit, attacker, attack_id, target_hitloc);
}

int
q_att()
{
    if (this_player()->query_prop(IMPERIUM_STWOR_CHAOSU) == 1)
	return 0;
    return 1;
}

