#include <wa_types.h>
#include <ss_types.h>
#include <stdproperties.h>
#include <const.h>
#include <macros.h>
#include "morley.h"
inherit "/std/creature";
inherit "/std/combat/unarmed";
inherit "/std/act/attack";
inherit "/std/act/domove";
inherit "/std/act/action";
int q_att();
mixed przymiotniki = ({ ({"szary", "szarzy"}),
			({"duzy", "duzi"}),
			({"powolny", "powolni"}),
			({"okropny", "okropni"}),
			({"ziemisty", "ziemisci"}),
			({"blyszczacy", "blyszczacy"}),
			({"polyskliwy", "polyskliwi"}),
			({"przysadzisty", "przysadzisci"}),
			({"skrzydlaty", "skrzydlaci"}) });
void
create_creature()
{
    int tmp = random(sizeof(przymiotniki));
    ustaw_odmiane_rasy(({"gargulec", "gargulca", "gargulcowi", 
			     "gargulca", "gargulcem", "gargulcu"}),
		       ({"gargulce", "gargulcow", "gargulcom", 
			     "gargulce", "gargulcami", "gargulcach"}),
		PL_MESKI_NOS_ZYW);
    set_gender(G_MALE);
    dodaj_przym(przymiotniki[tmp][0], przymiotniki[tmp][1]);
    dodaj_przym("kamienny", "kamienni");
    set_long("Gargulec, ktorego masz przed soba, ku twojemu zdumieniu nie rozni sie " +
	     "specjalnie od tych widzianych przez ciebie na przyklad na zamkach. Tak samo " +
	     "posiada spora paszcze wyposazona w ostre kly, cztery lapy nie pozbawione " +
	     "zdradzieckich pazurow, dwa niezbyt duze skrzydla i co najbardziej niepokojace " +
	     "tak jak i jego zamkowy kuzyn jest zbudowany z szarego kamienia. Jedyne co go " +
	     "rozni od spotykanych przez ciebie rzezb to to, ze ten wyglada na dosc zywego " +
	     "i do tego majacego ochote kogos zabic.\n");
    set_stats(({55 + random(10), 40 + random(10), 50 + random(10), 15, 15, 50 + random(10)}));
    set_exp_factor(150);
    add_prop(LIVE_I_NEVERKNOWN, 1);
    add_prop(NPC_I_NO_FEAR, 1);
    add_prop(LIVE_I_SEE_DARK, 3);
    add_prop(LIVE_I_NO_CORPSE, 1);
    add_prop(CONT_I_HEIGHT, 170);
    add_prop(CONT_I_WEIGHT, 150000);
    add_prop(CONT_I_VOLUME, 50000);
    add_prop(OBJ_S_WIZINFO, "by Morley '99\n");
    set_skill(SS_DEFENCE, 30);
    set_hitloc_unarmed(0, ({60, 40, 30}), 15, "kamienna glowe");
    set_hitloc_unarmed(1, ({60, 40, 30}), 45, "kamienny korpus");
    set_hitloc_unarmed(2, ({60, 40, 30}), 20, "kamienne skrzydlo");
    set_hitloc_unarmed(3, ({60, 40, 30}), 20, "kamienna lape");
    set_attack_unarmed(0, 30, 30, W_IMPALE, 40, "kamiennymi zebami");
    set_attack_unarmed(1, 40, 25, W_SLASH, 60, "kamienna lapa");
    set_act_time(20 + random(10));
    
    add_act("warknij przeszywajaco");
    add_act("emote patrzy sie na ciebie zlowrogo.");
    add_act("emote klapie glosno kamienna paszcza.");
    add_act("emote macha lekko kamiennymi skrzydlami.");
    add_act("emote drapie kamiennymi pazurami o posadzke.");
    set_aggressive(q_att);
    set_random_move(30);
}
/*
 * Jako, ze gracz uderza bronia w kamien sa bardzo duze szanse, 
 * ze bron sie stepi lub zlamie. Szczegolnie w przypadku gdy jest 
 * to bron typu impale oraz troche mniej slash. Mozna by jeszcze
 * dodac ranienie samego gracza, jesli probuje bic gargulca
 * unarmed, ale juz mi sie nie chce. ;)
 */
mixed
hit_me(int wcpen, int dt, int tohit, object attacker, int attack_id, int target_hitloc = -1 )
{
    mixed result;
    object bron;
    object *bronie = attacker->query_weapon(-1);
    if ( sizeof(bronie) && ( bronie[0]->query_attack_id() == attack_id ) )
	bron = bronie[0];
    if ( sizeof(bronie) > 1 && ( bronie[1]->query_attack_id() == attack_id ) )
	bron = bronie[1];
    result = ::hit_me(wcpen, dt, tohit, attacker, attack_id, target_hitloc);
    
    if (objectp(bron))
    {
	switch(dt)
	{
	case W_IMPALE:
	    bron->set_weapon_hits(bron->query_weapon_hits() + 30);
	    break;
	    
	case W_SLASH:
	    bron->set_weapon_hits(bron->query_weapon_hits() + 20);
	    break;
	case W_CLUB:
	    bron->set_weapon_hits(bron->query_weapon_hits() + 10);
	    break;
	}
    }
    return result;
}
/*
 * Po gargulcu powinna zostac tylko kupka kamieni.
 */
void
do_die(object killer)
{
    say(QCIMIE(this_object(), PL_MIA) + " nagle rozpryskuje sie, zostawiajac po sobie " +
	"jedynie kupke kamieni.\n");
    clone_object(OBJ_PATH + "kamienie.c")->move(environment());
    ::do_die(killer);
}
int
q_att()
{
    if (this_player()->query_prop(IMPERIUM_STWOR_CHAOSU) == 1)
	return 0;
    return 1;
}
