/*  
 *  File         :  zbojstd.c - Szkielet malego zboja z DWORKU
 *  Autor        :  Hastur
 *  Data         :  19.11.1997
 *  Last update  :  2.12.1997          przez: Hastura
 *  Opis         :  Ten plik jest dziedziczony (inherit) przez zbojow z DWORKU
 *                  Definuje losowo: przymiotniki, plec, rase; odpowiadajace im
 *                  wartosci statsow, skili, bron. 
 *                  W pliku wlasciwego zboja nalezy w funkcji create_monster()
 *                  wywolac przodka ( ::create_monster(); ) oraz dodac swoj
 *                  opis "long" i actiony.
 *                  Wartosci bazowe skili przyjeto:  WIS - random(10)
 
 
                    Na razie z braku broni wypisuje sie napis informujacy
                    z jakiego pliku sklonowana zostalaby bron.
 * 
 * Last update   :  6 XI 1997r przez Alfena (dotyczy pliku zboj2.c)
 * OPIS		 :  Dodalem 2 includy ialfen.h i zboj.h
 *		    w pliku ialfen.h znajduje sie funkcja ustaw_krotki_opis
 *		    zboj2.h definicja ZBOJ - talica z nazwa
 *		    Zmienilem takze rase, obecnie zboj jest czlowiekiem
 *		    Dodalem funkcje create_zboj, do pokrywania przez
 *		    obiekty dziedziczace.
    
    UWAGA:          Ze wzgledu na skomplikowanie pliku prosze zapisywac
                    ostatnia date modyfikacji, osobe i co zmieniala.
 */

inherit "/std/monster";
inherit "/std/act/add_things";

#include <ss_types.h>
#include <macros.h>
#include <stdproperties.h>

#include "zboj.h"
#include "ialfen.h"
/***************************************************************************/
/* 
  statsy dla "sredniego" zboja, ktore beda modyfikowane zgodnie z 
  dolosowanymi: przymiotnikami, rasa i plcia. 
 */

#define STAT ( ({ 24, 27, 24, 24, 24, 27}) ) 
/***************************************************************************/
/* przymiotniki sily (budowy ciala): modyfikuja statsy */

#define PRZYM_SILA ({ ({"watly","watli"}),({"slaby","slabi"}),\
                      ({"maly","mali"}) })
#define STAT_MOD_SILA ({ ({0,0,0,0,0,0}), ({9,11,9,9,9,11}),\
                         ({14,17,14,14,14,17}) })
/***************************************************************************/
/* przymiotniki temperamentu: identyfikuja wszystkie skille */

#define PRZYM_TEMP   ({ ({"glupawy","glupawi"}),({"tchorzliwy","tchorzliwi"}),\
                        ({"nerwowy","nerwowi"}),({"spokojny","spokojni"}),\
                        ({"bystrooki","bystroocy"}),({"opanowany","opanowiani"}),\
                        ({"zwinny","zwinni"}) })
#define SKILL        ({ 10, 15, 20, 25, 30, 35, 40})
#define PRAWD_POSIADANIA_BRONI  ({ 20, 30, 40, 80, 90, 100, 100 }) 
/***************************************************************************/
/* zmniejszamy kobietom: str,con,dis , ale zwiekszamy dex oraz skille */
/* Licznosc w [%] mezczyzn okresla PROC_MALE */

#define PLEC		({ G_MALE, G_FEMALE })
#define STAT_MOD_PLEC	({ ({0,0,0,0,0,0}), ({-3,5,-3,0,0,-3}) })
#define SKILL_MOD_PLEC	({0,2})
#define PROC_MALE 	10
/***************************************************************************/
/* W zaleznosci od rasy modyfikujemy statsy (i posrednio skile).*/ 
/* Licznosc w [%] okresla PROC_RAS */

#define RASY		({ ({ ({PL_MEZCZYZNA}), ({PL_KOBIETA}) }),\
                           ({ ({PL_KRASNOLUD}), ({PL_KRASNOLUDKA}) }),\
                           ({ ({PL_ELF}), ({PL_ELFKA}) }) })
#define STAT_MOD_RASA   ({ ({0,0,0,0,0,0}), ({5,-5,5,-5,5,-5}),\
                           ({-5,5,-5,5,5,-5}) })
#define PROC_RAS        ({ 50,25,25 })
/***************************************************************************/
/* BRON podzielana jest na klasy: pierwsza-najlepsza, druga-slabsza, itd...*/ 
/* LICZ_BRONI definiuje liczbe broni w danej klasie,                       */
/* PROC_BRONI definuje w [%] prawdopodobienstwo wylosowania danej klasy    */ 

#define LICZ_BRONI	({3,3})
#define BRON ({ ({"sztylet1.c","miecz.c","maczuga.c"}),\
                ({"sztylet2.c","krotki_miecz.c","noz2.c"}) })
#define PROC_BRONI      ({ 30, 70 })
/***************************************************************************/
public string	plec_str;		// string odpowiadajacy rasie i plci 


void
create_zboj()
{
    ustaw_nazwe( ZBOJ[0], ZBOJ[1], PL_MESKI_OS);
//    ustaw_krotki_opis ( ZBOJ[0], ZBOJ[1], PL_MESKI_OS);
    
    set_long("Testowy zboj: "+plec_str+"\n");
}



void
create_monster()
{
    int *statsy=STAT, skile;
    int sila, temperament, rasa, plec, i, suma;
    int bron, klasa, typ_broni;

    sila = random(sizeof(PRZYM_SILA));  
    temperament = random(sizeof(PRZYM_TEMP));  
    
    rasa = random(100);
    for (i=0, suma=PROC_RAS[0]; i<sizeof(RASY); i++)
    {    
        if (rasa < suma)
        {
            rasa = i;
            break;
        }
        suma += PROC_RAS[i+1]; 
    }
    
    plec = ((random(100)<PROC_MALE)?PLEC[0]:PLEC[1]);
    
    dodaj_przym (PRZYM_TEMP[temperament][0], PRZYM_TEMP[temperament][1]);
    dodaj_przym (PRZYM_SILA[sila][0], PRZYM_SILA[sila][1]);
dump_array(plec);    
    ustaw_odmiane_rasy (RASY[rasa][plec][0], RASY[rasa][plec][1],
             RASY[rasa][plec][2], (!rasa ? 1 : 0));
    
    set_gender(PLEC[plec]);
    
    
    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);

    
    skile = SKILL[temperament] + SKILL_MOD_PLEC[plec];
    
    set_stats(statsy);

    set_skill(SS_WEP_SWORD, skile + 5 - random(10));
    set_skill(SS_WEP_KNIFE, skile + 5 - random(10));
    set_skill(SS_UNARM_COMBAT,skile + 5 - random(10));
    set_skill(SS_2H_COMBAT, skile + 5 - random(10));
    set_skill(SS_DEFENCE, skile + 5 - random(10));
    set_skill(SS_PARRY, skile + 5 - random(10));
    set_skill(SS_AWARENESS, skile + random(10));  // konieczny do specjala                   

    bron = random(100);                           // czy ma bron?
    if (bron < PRAWD_POSIADANIA_BRONI[temperament])
    {
        klasa = random(100);                      // jakiej klasy ma bron?
        for (i=0, suma=PROC_BRONI[0]; i<sizeof(RASY); i++)
        {    
            if (klasa < suma)
            {
                klasa = i;
                typ_broni = random(LICZ_BRONI[klasa]); // typ broni w tej klasie
                break;
            }
            suma += PROC_BRONI[i+1]; 
        }
        dump_array(BRON[klasa][typ_broni]);
    } 

    add_prop(CONT_I_WEIGHT, 76000 + 15000*sila);
    add_prop(CONT_I_HEIGHT, 172 + 10*sila);
    add_prop(LIVE_I_NEVERKNOWN,1);
    
    set_hp(query_max_hp());
        
    create_zboj();
}
