/*  
 *  File         :  podroznik.c
 *  Autor        :  Alfen, na podstawie zboj2std.c Hastura.
 *  Data         :  
 *  Opis         :  Ten plik jest dziedziczony (inherit) przez podroznikow.
 *                  Definuje losowo: przymiotniki, plec, rase; odpowiadajace im
 *                  wartosci statsow, skili, bron. 
 *                  Wartosci bazowe skili przyjeto:  WIS - random(10)
 
 * Last update   :  6 XI 1997r przez Alfena
 * OPIS		 :  Dodalem 2 includy ialfen.h i podroznik.h
 *		    w pliku ialfen.h znajduje sie funkcja ustaw_krotki_opis
 *		    podroznik.h definicja PODROZNIK - talica z nazwa
 *		    Zmienilem takze rase, obecnie zboj jest czlowiekiem
 *		    Dodalem funkcje create_podroznik, do pokrywania przez
 *		    obiekty dziedziczace.
    
    UWAGA:          Ze wzgledu na skomplikowanie pliku prosze zapisywac
                    ostatnia date modyfikacji, osobe i co zmieniala.
 */

#include "local.h"
inherit GPATH + "std/monster";
inherit "/std/act/add_things";

#include <ss_types.h>
#include <macros.h>
#include <stdproperties.h>
#include <money.h>

#include "podroznik.h"
#include "ialfen.h"

/***************************************************************************/
/* 
  statsy dla "sredniego" podroznika, ktore beda modyfikowane zgodnie z 
  dolosowanymi: przymiotnikami, rasa i plcia. 
 */

#define STAT (({ 50, 50, 50, 50, 50, 50}))
/***************************************************************************/
/* przymiotniki sily (budowy ciala): modyfikuja statsy */

#define LICZ_PRZYM_SILA		5
#define PRZYM_SILA ({ ({"niski","niscy"}),\
		      ({"wysoki","wysocy"}),\
                      ({"dobrze zbudowany","dobrze zbudowani"}),\
                      ({"niebieskooki","niebieskoocy"}),\
                      ({"zielonooki","zielonoocy"}) })
                      
#define STAT_MOD_SILA ({ ({-2,0,-4,0,0,0}),\
			 ({2,0,4,0,0,5}),\
                         ({5,4,8,0,0,10}),\
                         ({0,0,0,0,0,0}),\
                         ({0,0,0,0,0,0}) })

/* przymiotniki temperamentu: modyfikuja wszystkie skille */

#define LICZ_PRZYM_TEMP		6
#define PRZYM_TEMP   ({ ({"spokojny","spokojni"}),({"opanowany","opanowani"}),\
                        ({"",""}),({"odwazny","odwazni"}),\
                        ({"grozny","grozni"}),({"okrutny","okrutni"}) })
#define SKILL_MOD_TEMP  ({ 0, 1, 2, 4, 7, 10})
private static mixed PRAWD_POSIADANIA_BRONI = ({ 20, 30, 40, 80, 90, 100 });
/***************************************************************************/
/* zmniejszamy kobietom: str,con,dis , ale zwiekszamy dex oraz skille */
/* Licznosc w [%] mezczyzn okresla PROC_MALE */

#define PLEC		({ G_MALE, G_FEMALE })
private static mixed STAT_MOD_PLEC =	({ ({0,0,0,0,0,0}),
					   ({-10,-5,-10,-5,-5,-5}) });
#define SKILL_MOD_PLEC	({0,2})
#define PROC_MALE 	50
/***************************************************************************/
/* W zaleznosci od rasy modyfikujemy statsy (i posrednio skile).*/ 
/* Modyfikujemy takze wrost oraz wage w zaleznosci od rasy */
/* Licznosc w [%] okresla PROC_RAS */

#define LICZ_RAS	4
#define RASY		({ ({({PL_CZLOWIEK}), ({PL_CZLOWIEK})}),\
                           ({({PL_KRASNOLUD}), ({PL_KRASNOLUDKA})}),\
                           ({({PL_ELF}), ({PL_ELFKA})}),\
                           ({({PL_HALFLING}), ({PL_HALFLINKA})}) })
private static mixed STAT_MOD_RASA =   ({ ({0,0,0,0,0,0}),
			   ({15,-10,10,-5,-5,-5}),
                           ({-10,15,-10,10,10,-15}),
                           ({-15,15,-10,0,0,10}) });
private static mixed PROC_RAS =        ({ 40,20,20,20 });
#define MOD_RAS ({ ({170, 75000}),\
		   ({140, 70000}),\
		   ({180, 60000}),\
		   ({110, 50000}) })
/* kazda rasa winna miec rozne skille na roznym poziomie .....
*   ({ ({ ({skill, wartosc_srednia}),......({}) }, ({ ({}),....({}) }) }) itd
*/
private static mixed SKILL_MOD_RASA = ({ ({ 
			     ({SS_WEP_SWORD, 35}), ({SS_PARRY, 30}),
      			     ({SS_DEFENCE, 25}), ({SS_AWARENESS, 10}) }),
      			  ({ ({SS_WEP_AXE, 30}), ({SS_PARRY, 25}),
      			     ({SS_DEFENCE, 22}), ({SS_AWARENESS, 5}) }),
      			  ({ ({SS_WEP_SWORD, 30}), ({SS_PARRY, 23}),
      			     ({SS_DEFENCE, 30}), ({SS_WEP_KNIFE, 25}),
      			     ({SS_AWARENESS, 25}) }),
      			  ({ ({SS_WEP_KNIFE, 35}), ({SS_PARRY, 25}),
      			     ({SS_DEFENCE, 25}), ({SS_AWARENESS, 20}) }) });
/***************************************************************************/
/* Bron przydzielamy w zaleznosci od rasy, do jakiej nalezy nasz podroznik */
#define WPATH NPATH + "bronie/"
#define BRON ({WPATH+"miecz", WPATH+"toporek2", WPATH+"miecz",\
   			WPATH+"sztylet"})

/***************************************************************************/
/* Pieniadze przydzielamy w zaleznosci od rasy (ilosc minimalna)           */
/* ({ ({miedz, srebro, zloto , platyna}) })				   */
/* wartosci = , nie beda dolosowywane.					   */
private static mixed PIENIADZE = ({ ({ 20, 10, 0, 0 }),
		     ({ 20, 10, 1, 0 }),
		     ({ 0, 15, 0, 0 }),
		     ({ 50, 1, 0, 0 }) }); 
private static mixed TYP_PIENIEDZY = ({"miedz","srebro","zloto","platyna"});
/****************************************************************************/


void
create_podroznik()
{
/*  Ustawmy nazwe naszego podroznika */
    if (query_gender()!=G_FEMALE)
      ustaw_nazwe( PODROZNIK[0], PODROZNIK[1], PL_MESKI_OS);
    else
      ustaw_nazwe( PODROZNICZKA[0], PODROZNICZKA[1], PL_ZENSKI);


/*  Podroznik bedzie sie poruszal w losowych kierunkach co 60 sekund */
    set_random_move(60,0);
    

/*  Ustawmy czas wykonywania emotow */
   set_act_time(60 + random(10));
   add_act("popatrz");
   add_act("usmiech rad");
   add_act("rozejrzyj sie");
   add_act("podrap sie");
   add_act("przestap");
   add_act("ziewnij");
   add_act("prychnij");
   add_act("emote poprawia ubranie.");
   add_act("emote ociera pot z czola.");
   add_act("westchnij ciez");
   
/*  Ustawmy czas wykonywania combat emotow .... */
  set_cact_time(3);
  add_cact("emote wykrzywia twarz w straszliwym grymasie.");
  add_cact("krzyknij Na pomoc!!!");
  add_cact("krzyknij Morduja, ratunku !!!");
  add_cact("krzyknij Pomocy!!!");
  add_cact("krzyknij Wez pieniadze i daruj zycie...");
  add_cact("krzyknij Straz, Straz !!!");
  
/*  Ustawmy czas wykonywania chatow */
  set_chat_time(60 + random(10));
  add_chat("Ostatnio drogi do Nuln staly sie bardziej niebezpieczne.");
  add_chat("Na spokojnego podroznego czeka wiele niebezpieczenstw.");
  add_chat("Gdybym wiedzial"+koncowka("","a")+", nie wysz"+
    koncowka("edl","la")+"bym z domu.");
  add_chat("Ehh, zycie, a przyjaciel mowil, bym zabral"+
    koncowka("","a")+" sie powozem.");
  add_chat("Na te drogi przydalyby sie lepsze buty.");
  add_chat("Co za zycie.");
  add_chat("Mam nadzieje, ze nie bedzie deszczu....");
  add_chat("Nie cierpie pluchy.");
  
/*  Ustawmy czas wykonywania combat chatow */
  set_cchat_time(3);
  add_cchat("Prosze, nie zabijaj mnie");
  add_cchat("Dlaczego ja, nie chce umierac...");
  add_cchat("Zaraz Ci dokopie");
  add_cchat("Strazy miejskiej nigdy nie ma, kiedy jest potrzebna.....");
  add_cchat("Gin!!");
  
}



public nomask void
create_monster()
{
    int *statsy=STAT, skile;
    int sila, temperament, rasa, plec, i, suma;
    int bron, klasa, typ_broni;

    
    sila = random(LICZ_PRZYM_SILA);  
    temperament = random(LICZ_PRZYM_TEMP);  
    
    rasa = random(100,time());
    for (i=0, suma=PROC_RAS[0]; i<LICZ_RAS; i++)
    {    
        if (rasa < suma)
        {
            rasa = i;
            break;
        }
        suma += PROC_RAS[i+1]; 
    }
    
    suma = random(100, time());
    plec = ((suma<PROC_MALE)?0:1);


    ustaw_odmiane_rasy (RASY[rasa][plec][0], RASY[rasa][plec][1],
       RASY[rasa][plec][2], (!rasa ? 1 : 0));
    
 
    set_gender(PLEC[plec]);

    if (PRZYM_TEMP[temperament][0]!="")    
      dodaj_przym (PRZYM_TEMP[temperament][0], PRZYM_TEMP[temperament][1]);
    dodaj_przym (PRZYM_SILA[sila][0], PRZYM_SILA[sila][1]);


    for (i=0; i<6; i++)
        statsy[i] += STAT_MOD_SILA[sila][i] + STAT_MOD_RASA[rasa][i] +
                     STAT_MOD_PLEC[plec][i] + (random(10) - 5);

    
    
    set_stats(statsy);

    for (i=0; i < sizeof(SKILL_MOD_RASA[rasa]); i++)
    {
      skile = (statsy[0] + statsy[1] + statsy[2] + statsy[3] +statsy[4])/250 + 
        SKILL_MOD_TEMP[temperament] + SKILL_MOD_PLEC[plec]+
        SKILL_MOD_RASA[rasa][i][1]-random(10)+random(5);
      if (skile > 0)
        set_skill(SKILL_MOD_RASA[rasa][i][0],
          SKILL_MOD_RASA[rasa][i][1] - random (10)+random(5) );
    }
        
        
    if (random(100) < PRAWD_POSIADANIA_BRONI[temperament])
    {
      add_weapon(BRON[rasa]);
      for (i=0; i < 4; i++)
      if ((PIENIADZE[rasa][i])&&
        (random(100) < PRAWD_POSIADANIA_BRONI[temperament]))
          (MONEY_MAKE(PIENIADZE[rasa][i]+random(6), TYP_PIENIEDZY[i]))->
            move(this_object());
    }
     
    

    add_prop(CONT_I_WEIGHT, 
      MOD_RAS[rasa][1] - 10000 + (statsy[0] + statsy[2])*100);
    add_prop(CONT_I_HEIGHT, 
      MOD_RAS[rasa][0] - 10 + (statsy[0]+statsy[2])/10);
    add_prop(LIVE_I_NEVERKNOWN,1);
    
    set_hp(query_max_hp());
    
/*  Ustawmy dlugi opis naszego podroznika */

    switch (query_rasa())
    {
      case "krasnolud" :
      case "krasnoludka" : 
        if (random(2,time()))
           set_long("Stoi przed toba "+query_nonmet_name()+ 
             ". J"+koncowka("ego","ej")+" podrozny plaszcz pokryty jest "+
              "gruba warstwa kurzu, a kiedys pewnie piekny kaptur "+
              "zmienil kolor na nieokreslony. Pod szerokim "+
              "kapturem widzisz "+koncowka("dluga, krasnoludzka brode i ","")+
              "ciemne, "+
              "patrzace bez wyrazu oczy.\n");
        else
          set_long("Widzisz przed soba niewysoka, ale za "+
            "to bardzo szeroka postac. Jest to pewnie "+
            query_nonmet_name()+". Swiadcza o tym j"+koncowka("ego","ej")+
            " siwe, wystajace spod pieknego niegdys, teraz juz "+
            "zniszczonego kaptura, wlosy"+koncowka(" i dluga, piekna"+
            ", siwa broda. ",". ")+
            "Patrzy na ciebie obojetnym wzorkiem, mruczac cos pod nosem. J"+
            koncowka("ego","ej")+" podrozny plaszcz jest juz mocno "+
            "zniszczony, w niektorych miejscach podarty i latany, podobnie "+
            "jak wyzierajace spod niego skorzane ubranie.\n");
        break;
      case "mezczyzna czlowiek" :
      case "kobieta czlowiek" : 
        if (random(2))
          set_long("Wedrowiec ten wyglada na doswiadczonego podroznika. "+
            "Ciemna, spalona wieloma wiatrami twarz poryta jest ciezkimi, "+
            "bedacymi raczej skutkami trosk niz starosci, zmarszczkami. J"+
            koncowka("ego","ej")+" ubranie pokrywa gruba warstwa podroznego "+
            "kurzu, wlosy sa przyciete krotko przy samej glowie, zapewne "+
            "dla ochrony przed brudem. Dolna czesc twarzy zaslania"+
            koncowka("ja mu"," jej")+koncowka(" calkowicie jasne wasy i "+
            "dluga broda"," przepaska ochraniajaca usta")+
            ". "+capitalize(query_nonmet_name())+" patrzy na ciebie "+ 
            "spokojnym, jasnym wzrokiem, od czasu do czasu usmiechajac sie.\n");
        else
          set_long("Widzisz "+query_nonmet_name(PL_BIE)+". Jest to mlod"+
            koncowka("zieniec","a dziewczyna")+", ktor"+koncowka("ego","ej")+
            koncowka(" rzadki zarost i mlodzienczy"," niewinny")+
            " usmiech sugeruj"+
            koncowka("a","e")+", ze dopiero niedawno opuscil"+koncowka("","a")+
            " domowe pielesze i poswiecil"+koncowka("","a")+" sie dlugiej i "+
            "niewdziecznej karierze wedrowca. Jednak je"+koncowka("go","j")+
            " twarz jest juz spalona wichrem, zas rece nosza znaki ciezkiej "+
            "pracy. Z calej postaci bije potezna sila, a utkwione w tobie "+
            "madre, zyczliwe oczy promieniuja niezwykla inteligencja. "+
            "Plaszcz podrozne"+koncowka("go","j")+
            " jest caly pokryty kurzem.\n");
        break;
      case "elf" :
      case "elfka" :
        set_long("Widzisz przed soba "+query_nonmet_name(PL_BIE)+
          ". Ubranie je"+koncowka("go","j")+" zdaje sie byc calkowicie nowe, "+
          "a pieknie uczesane wlosy i gladka, jasna twarz wygladaja, jakby "+
          "ich wlasciciel"+koncowka("","ka")+" nigdy nie zaznal"+
          koncowka("","a")+" trudow podrozy. Przeczy temu jednak gruba "+
          "warstwa pylu, pokrywajaca je"+koncowka("go","j")+" ubranie i "+
          "zniszczone ciezka droga skorzane buty. Patrzy na ciebie jasnym "+
          "wzrokiem, gwizdac po cichu jakas wesola melodie.\n");
        break;
      case "halfling" :
      case "halflinka" :
         set_long("Od stop do glow pokryta podroznym pylem stoi przed taba "+
           " niska postac. Jest to najprawdopodobniej halfling lub halflinka, o czym "+
           "swiadcza miedzy innymi mocno owlosione, nieobute stopy i olbrzymi "+
           "brzuch. Postac rozglada sie ciekawie wokol, drapiac sie "+
           "po kreconych wlosach. Gdyby w reku trzymala wielka kanape, "+
           "zapewne podgryzalby ja od czasu do czasu.\n");
         break;
       default :
         set_long ("T"+koncowka("en","a","o")+ " "+query_nonmet_name(PL_MIA)+
           " wyglada na doswiadczon"+koncowka("ego","a") + " podrozni"+
           koncowka("ka","czke")+". Usmiechniety wyraz twarzy, bystre "+
           "spojrzenie dobrze oddaja przyjazne nastawienie do swiata.\n"); 
    }
    
    dodaj_miedz(20+random(20));
    dodaj_srebro(10+random(10));

    switch(query_gender())
    {
      case 0:
       ustaw_whimpy(20, 2);
       break;
      case 1:
       ustaw_whimpy(50, 3);
    }   

    create_podroznik();
}
