gurba-0.40/
gurba-0.40/bin/
gurba-0.40/lib/
gurba-0.40/lib/cmds/guild/fighter/
gurba-0.40/lib/cmds/monster/
gurba-0.40/lib/cmds/race/catfolk/
gurba-0.40/lib/cmds/race/dwarf/
gurba-0.40/lib/cmds/verb/
gurba-0.40/lib/daemons/data/
gurba-0.40/lib/data/boards/
gurba-0.40/lib/data/messages/
gurba-0.40/lib/data/players/
gurba-0.40/lib/design/
gurba-0.40/lib/domains/gurba/
gurba-0.40/lib/domains/gurba/guilds/fighter/
gurba-0.40/lib/domains/gurba/monsters/
gurba-0.40/lib/domains/gurba/objects/armor/
gurba-0.40/lib/domains/gurba/objects/clothing/
gurba-0.40/lib/domains/gurba/objects/weapons/
gurba-0.40/lib/domains/gurba/vendors/
gurba-0.40/lib/kernel/cmds/admin/
gurba-0.40/lib/kernel/daemons/
gurba-0.40/lib/kernel/include/
gurba-0.40/lib/kernel/lib/
gurba-0.40/lib/kernel/net/
gurba-0.40/lib/kernel/sys/
gurba-0.40/lib/logs/
gurba-0.40/lib/pub/
gurba-0.40/lib/std/modules/languages/
gurba-0.40/lib/std/races/
gurba-0.40/lib/std/races/monsters/
gurba-0.40/lib/wiz/fudge/
gurba-0.40/lib/wiz/spud/
gurba-0.40/src/host/beos/
gurba-0.40/src/host/pc/res/
gurba-0.40/src/kfun/
gurba-0.40/src/lpc/
gurba-0.40/src/parser/
gurba-0.40/tmp/
#define VALID_STATS ({ "str", "dex", "con", "int", "wis", "cha" })

mapping base_stats;
mapping bonus_stats;

string query_valid_base_stat( string statname );
int  query_stat( string statname );
int  query_base_stat( string statname );
int  query_bonus_stat( string statname );
void trim_base_stat(string statname); 
void trim_bonus_stat(string statname); 
int  add_base_stat( string statname, int amt ); 
int  add_bonus_stat( string statname, int amt ); 
int  set_base_stat( string statname, int amt ); 
int  set_bonus_stat( string statname, int amt );
mixed *query_all_stats(); 
void  initialize_base_stats(); 
void  initialize_bonus_stats();
void initialize_stat_dependant_variables();
void initialize_stats();


string query_valid_base_stat( string statname )
{
   if( base_stats[statname] )
      return statname;
}

int  query_stat( string statname )
{
   if( !statname ) {
      return 0;
   }
   if( !base_stats ) {
      base_stats = ([ ]);
   }
   if( !bonus_stats ) {
      bonus_stats = ([ ]);
   }
   return ( base_stats[statname] + bonus_stats[statname] );
}

int  query_base_stat( string statname )
{
   if( !statname ) {
      return 0;
   }
   if( !base_stats ) {
      base_stats = ([ ]);
   }
   return base_stats[statname];
}

int  query_bonus_stat( string statname )
{
   if( !statname ) {
      return 0;
   }
   if( !bonus_stats ) {
      bonus_stats = ([ ]);
   }
   return bonus_stats[statname];
}

void trim_base_stat(string statname) 
{
   int max, min;
   return;
   max = this_object()->query_race_object()->query_base_stat_maximum(statname);    
   min = this_object()->query_race_object()->query_base_stat_minimum(statname); 
   if( base_stats[statname] < min) {
      base_stats[statname] = min;
   }
   else if( base_stats[statname] > max) {
      base_stats[statname] = max;
   }
}   

void trim_bonus_stat(string statname) 
{
   int max, min;
   max = this_object()->query_race_object()->query_bonus_stat_maximum(statname);    
   min = this_object()->query_race_object()->query_bonus_stat_minimum(statname); 
   if( bonus_stats[statname] < min) {
      bonus_stats[statname] = min;
   }
   else if( bonus_stats[statname] > max) {
      bonus_stats[statname] = max;
   }
}

int  add_base_stat( string statname, int amt ) 
{
   if( !base_stats ) {
      base_stats = ([ ]);
   }
   if( member_array( statname, VALID_STATS ) == -1 ) {
      return 0;
   }
   if( !base_stats[statname] ) {
      base_stats[statname] = amt;
   }
   else {
      base_stats[statname] += amt;
   }
   trim_base_stat(statname); 
   return 1;
}

int  add_timed_bonus_stat( string statname, int amt, int time ) 
{
   if( !base_stats ) {
      base_stats = ([ ]);
   }
   if( member_array( statname, VALID_STATS ) == -1 ) {
      return 0;
   }
   if( !base_stats[statname] ) {
      base_stats[statname] = amt;
   }
   else {
      base_stats[statname] += amt;
   }
   trim_base_stat(statname); 
   call_out( "add_base_stat", time, -amt );
   return 1;
}

int  add_bonus_stat( string statname, int amt ) 
{
   if( !base_stats ) {
      bonus_stats = ([ ]);
   }
   if( member_array( statname, VALID_STATS ) == -1 ) {
      return 0;
   }
   if( !bonus_stats[statname] ) {
      bonus_stats[statname] = amt;
   }
   else {
      bonus_stats[statname] += amt;
   }
   trim_bonus_stat(statname); 
   return 1;
}
 
int  set_base_stat( string statname, int amt ) 
{
   if( !base_stats ) {
      base_stats = ([ ]);
   }
   if( member_array( statname, VALID_STATS ) == -1 ) {
      return 0;
   }
   base_stats[statname] = amt;
   trim_base_stat(statname); 
   return 1;
}

int  set_bonus_stat( string statname, int amt ) 
{
   if( !bonus_stats ) {
      bonus_stats = ([ ]);
   }
   if( member_array( statname, VALID_STATS ) == -1 ) {
      return 0;
   }
   bonus_stats[statname] = amt;
   trim_bonus_stat(statname); 
   return 1;
}
   
mixed *query_all_stats()
{
   mixed  *ret;
   string *stat_names;
   int     i;

   stat_names = map_indices( base_stats );
   ret = ({ });
   for( i=0; i < sizeof( stat_names ); i++ )
   {
      ret += ({ ({ stat_names[i], base_stats[stat_names[i]], bonus_stats[stat_names[i]]  }) });
   }
   return( ret );
}

int query_statbonus( string name ) {

  int stat;
  
  if( member_array( name, VALID_STATS ) == -1 ) {
    return( 0 );
  }

  stat = query_stat( name );
  
  if( stat > 1 && stat < 9 ) {
    return( 1 );
  } else if( stat > 8 && stat < 14 ) {
    return( 2 );
  } else if( stat > 13 && stat < 18 ) {
    return( 3 );
  } else if( stat > 17 && stat < 20 ) {
    return( 4 );
  } else if( stat > 29 ) {
    return( 5 );
  }
  return( 0 );	
}

void  initialize_base_stats() 
{
  int *s;
  int i;
  int sOK;
  int sum;
  object race;

  race = this_object()->query_race_object();

  sOK = FALSE;

  while( !sOK ) {
     
     s = ({"0","0","0","0","0","0"});
     
     s[0] = random( race->query_base_stat_maximum( "str" ) 
		    - race->query_base_stat_minimum( "str" ) + 1 ) 
	+ race->query_base_stat_minimum( "str" );
     
     s[1] = random( race->query_base_stat_maximum( "dex" ) 
		    - race->query_base_stat_minimum( "dex" ) + 1 ) 
	+ race->query_base_stat_minimum( "dex" );
     
     s[2] = random( race->query_base_stat_maximum( "con" ) 
		    - race->query_base_stat_minimum( "con" ) + 1 ) 
	+ race->query_base_stat_minimum( "con" );
     
     s[3] = random( race->query_base_stat_maximum( "int" ) 
		    - race->query_base_stat_minimum( "int" ) + 1 ) 
	+ race->query_base_stat_minimum( "int" );
     
     s[4] = random( race->query_base_stat_maximum( "wis" ) 
		    - race->query_base_stat_minimum( "wis" ) + 1 ) 
	+ race->query_base_stat_minimum( "wis" );
     
     s[5] = random( race->query_base_stat_maximum( "cha" ) 
		    - race->query_base_stat_minimum( "cha" ) + 1 ) 
	+ race->query_base_stat_minimum( "cha" );
     
     
     if( !race->is_monster_race() ) {
	sum = 0;
	for( i = 0; i < 6; i++ ) {
	   sum += s[i];
	}
	
	if( sum > 75 ) {
	   sOK = 1;
	}
     } else {
	sOK = 1;
     }
  }
  
  this_object()->set_base_stat( "str", s[0] + race->query_stat_mod( "str" ) );
  this_object()->set_base_stat( "dex", s[1] + race->query_stat_mod( "dex" ) );
  this_object()->set_base_stat( "con", s[2] + race->query_stat_mod( "con" ) );
  this_object()->set_base_stat( "int", s[3] + race->query_stat_mod( "int" ) );
  this_object()->set_base_stat( "wis", s[4] + race->query_stat_mod( "wis" ) );
  this_object()->set_base_stat( "cha", s[5] + race->query_stat_mod( "cha" ) );
}

void  initialize_bonus_stats() 
{
  this_object()->set_bonus_stat( "str", 0 );
  this_object()->set_bonus_stat( "con", 0 );
  this_object()->set_bonus_stat( "dex", 0 );
  this_object()->set_bonus_stat( "int", 0 );
  this_object()->set_bonus_stat( "wis", 0 );
  this_object()->set_bonus_stat( "cha", 0 );
}
 
 
void initialize_stat_dependant_variables()
{
   int con, hp;
   con = this_object()->query_base_stat("con"); 
   hp = 20 + con; 
   this_object()->set_max_hp( hp );
}
 
void initialize_stats( ) 
{
  this_object()->initialize_base_stats();
  this_object()->initialize_bonus_stats(); 
  initialize_stat_dependant_variables();
}