/* most 
 * napisane przez Alfena
 */
 

#include "local.h"
#include <macros.h>
#include <stdproperties.h>
#include <pl.h>
#include <ss_types.h>
#define VOID LPATH + "otchlan"

inherit TPATH + "std/twierdza";

void blokada();

int p_kolor=3;
string *s_kolor = ({"czerwonych","czarnych","bialych"});

void
set_pulapka(int k)
{
	if (k)
		p_kolor = random(3);
	else
		p_kolor = 3;
}


int
query_pulapka()
{
	return ((p_kolor==3)?0:1);
}



void
create_most()
{
	setuid();
	seteuid(getuid());
	set_short("Most");
	
	set_long("Znajdujesz sie na moscie laczacym skraje przepasci. "+
		"Ta niewielka ilosc swiatla jaka posiadasz nie pozwala "+
		"na dokladna ocene wielkosci jaskini, w ktorej zostal "+
		"wybudowany most. Daleko w gorze dostrzegasz jakby czubki "+
		"stalaktytow. "+query_long()+" Nigdzie nie dostrzegasz poreczy, a widok "+
		"ogromnej czelusci, jaka rozposciera sie pod twymi nogami, "+
		"przyprawia cie o zawroty glowy. Polnocna i poludniowa "+
		"czesc mostu pokrywaja czarne, czerwone i biale plytki.\n");
	
	add_item(({"stalaktyty","czubki stalaktytow"}),
		"Ciemne czubki stalaktytow zwisaja nad twoja glowa. "+
		"Masz dziwne wrazenie, ze za chwile moga spasc i przeszyc "+
		"Twe cialo, niczym wlocznia rzucona reka msciwego Boga.\n");
	add_item("czelusc","Czarna, niezglebiona tylko skok moglby ci "+
		"pomoc ocenic jej rozmiary.\n");
	add_item(({"plytki"}),"Plytki "+
		"zostaly wykoname z marmuru od odpowiednim kolorze. "+
		"Wyraznie odcinaja sie od reszty kamieni, jakimi wybrukowano "+
		"most. Ich rozmiar odpowiada dokladnie rozmiarowi stopy ogra. "+
		"Na upartego mozna swobodnie po nich przejsc na druga strone.\n");
	add_item("czerwone plytki","Plytki "+
		"zostaly wykoname z marmuru w czerwonym kolorze. "+
		"Wyraznie odcinaja sie od reszty kamieni, jakimi wybrukowano "+
		"most. Ich rozmiar odpowiada dokladnie rozmiarowi stopy ogra. "+
		"Na upartego mozna swobodnie po nich przejsc na druga strone. "+
		"@@zaglebienie|0@@");
	add_item("czarne plytki","Plytki "+
		"zostaly wykoname z marmuru w czerwonym kolorze. "+
		"Wyraznie odcinaja sie od reszty kamieni, jakimi wybrukowano "+
		"most. Ich rozmiar odpowiada dokladnie rozmiarowi stopy ogra. "+
		"Na upartego mozna swobodnie po nich przejsc na druga strone. "+
		"@@zaglebienie|1@@");
	add_item("biale plytki","Plytki "+
		"zostaly wykoname z marmuru w czerwonym kolorze. "+
		"Wyraznie odcinaja sie od reszty kamieni, jakimi wybrukowano "+
		"most. Ich rozmiar odpowiada dokladnie rozmiarowi stopy ogra. "+
		"Na upartego mozna swobodnie po nich przejsc na druga strone. "+
		"@@zaglebienie|2@@");
	add_cmd_item(({"w czelusc","w czarna czelusc","do czelusci",
		"do czarnej czelusci"}), ({"wskocz","skocz"}),({"@@wskocz",
		"@@wskocz"}));
	add_cmd_item(({"z mostu"}),({"skocz"}),({"@@wskocz"}));
	
	add_exit(LPATH + "kor30", "poludnie", "@@blokada", 1);
	add_exit(LPATH + "kor28", "polnoc", "@@blokada", 1);
}


string
zaglebienie(string s)
{
	if ((s[0]-48)==p_kolor)
		return "Dostrzegasz, iz sa lekko zaglebine w powierzchni "+
			"mostu.\n";
	return "\n";
}


string
wskocz()
{
	object tp = this_player();
	setuid();
	seteuid(getuid());
	say(QCIMIE(tp, PL_MIA)+" skoczyl z mostu w nieprzeniknio"+
		"na, czarna czelusc.\n");
	tp->move(VOID);
	tp->set_hp(0);
	tp->heal_hp(-100);
	tp->do_die(tp);
	return "Skoczyles z mostu w nieprzenikniona, czarna czelusc.\n";
}



void
create_twierdza()
{
	create_most();
}


void
init()
{
	::init();
	add_action("do_przejdz","przejdz");
}


int
do_przejdz(string s)
{
	string kolor, kierunek;
	int index;
	
	notify_fail("Slucham?\n");
	if (!s||s=="")
		return 0;
	
	if (!CAN_SEE_IN_ROOM(this_player()))
		return 0;
	if (!parse_command(s, ({}), " 'po' %w 'plytkach' 'na' %w ", kolor, 
		kierunek))
		if (!parse_command(s, ({}), " 'na' %w 'po' %w 'plytkach' ", 
			kierunek, kolor))
			return 0;
	if (kolor!="czerwonych" && kolor!="czarnych" && kolor!="bialych")
	{
		notify_fail("Po jakiego koloru plytkach?\n");
		return 0;
	}
	if (kierunek!="polnoc" && kierunek!="poludnie" &&
		kierunek!="n" && kierunek!="s")
	{
		notify_fail("W ktorym kierunku przejsc po plytkach?\n");
		return 0;
	}
	if ((index = member_array(kierunek, query_exit_cmds()))==-1)
		return 0;
	if (p_kolor < 3 && s_kolor[p_kolor]!=kolor)
	{
		blokada();
		return 1;
	}
	this_player()->move_living("na "+kierunek+
		", stapajac po "+kolor+" plytkach", query_exit_rooms()[index]);
	return 1;
}


int
blokada()
{
	object tp = this_player();
	int uniki = 0;
	int ok = 0;
	int dod = 0;
	
	if (p_kolor > 2)
		return 0;
	if (!CAN_SEE_IN_ROOM(tp))
		dod = 20;
	if (tp->query_skill(SS_AWARENESS) > (60+dod))
	{
		if (tp->query_skill(SS_DEFENCE) > (dod+49))
			uniki = 1;
	}
	else
		if (tp->query_skill(SS_DEFENCE) > (dod+79))
			uniki = 1;
	if (uniki && (tp->query_skill(SS_ACROBAT) > (9+dod) || 
		tp->query_stat(1) > (dod+90)))
		ok = 1;
	else
		if (tp->query_skill(SS_ACROBAT) > (dod+50) || 
			tp->query_stat(1) > (dod+90))
			ok=1;
	if (uniki && ok)
	{
		say("Nagle z boku z glosnym swistem wylecialo ostrze. "+
			"Tylko dzieki nadnaturalnej spostrzegawczosci i "+
			"kociej wrecz zrecznosci "+QIMIE(tp, PL_CEL)+
			"udalo sie uniknac straszliwego ciecia oraz "+
			"stracenia do otchlani.\n");
		write("Nagle z boku z glosnym swistem wylecialo ostrze. "+
			"Tylko dzieki nadnaturalnej spostrzegawczosci i "+
			"kociej wrecz zrecznosci "+
			"udalo ci sie uniknac straszliwego ciecia oraz "+
			"stracenia do otchlani.\n");
		return 0;
	}
	if (!uniki && ok)
	{
		say("Nagle z boku z glosnym swistem wylecialo ostrze. "+
			"Straszliwe ciecie rozplatalo cialo "+
			QIMIE(tp, PL_DOP)+", ktory tylko "+
			"dzieki kociej wrecz zrecznosci nie spadl "+
			"do otchlani.\n");
		write("Nagle z boku z glosnym swistem wylecialo ostrze. "+
			"Straszliwe ciecie rozplatalo twe cialo. "+
			"Tylko "+
			"dzieki kociej wrecz zrecznosci nie spadles "+
			"do otchlani.\n");
		tp->heal_hp((-1)*(500+random(300)));
		if (tp->query_hp() <= 0)
		{
			tp->do_die(this_object());
			return 1;
		}
		return 0;
	}
	write("Nagle z boku z glosnym swistem wylecialo ostrze. ");
	if (uniki)
		write("Udalo ci sie z trudem uniknac straszliwego ciecia. "+
			"Niestety straciles rownowage i spadles "+
			"w otchlan.....\n");
	else
		write("Straszliwe ciecie obrocilo cie, niczym szmaciana lalke. "+
			"Stracies rownowage i spadles w otchlan.\n");
	say("Nagle z boku z glosnym swistem wylecialo ostrze. ");
	if (uniki)
		say(QCIMIE(tp, PL_CEL) +
			" udalo sie z trudem uniknac straszliwego "+
			"ciecia. Niestety stracil"+tp->koncowka("","a")+
			" rownowage i spadl"+tp->koncowka("","a")+
			" w otchlan.....\n");
	else
		say("Straszliwe ciecie obrocilo "+QIMIE(tp, PL_BIE)+
			", niczym szmaciana lalka, zrzucajac "+
			tp->koncowka("go","ja")+ " z mostu w bezdenna "+
			"otchlan.\n");
	tp->move(VOID);
	tp->set_hp(0);
	tp->heal_hp(-100);
	tp->do_die(this_object());
	return 1;
}
