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", "con", "end", "dex", "agl", "aim", "int", "wis", "per", "cha", "luc", "spr", "god" })

mapping base_stats;
mapping bonus_stats;

string query_valid_base_stat( string statname );
string query_valid_bonus_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();


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

string query_valid_bonus_stat( string statname )
{
   if( bonus_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;
   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_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 );
}


void  initialize_base_stats() 
{
this_object()->set_base_stat( "str", this_object()->query_race_object()->query_base_stat_minimum("str") );
this_object()->set_base_stat( "con", this_object()->query_race_object()->query_base_stat_minimum("con") );
this_object()->set_base_stat( "end", this_object()->query_race_object()->query_base_stat_minimum("end") );

this_object()->set_base_stat( "dex", this_object()->query_race_object()->query_base_stat_minimum("dex") );
this_object()->set_base_stat( "agl", this_object()->query_race_object()->query_base_stat_minimum("agl") );
this_object()->set_base_stat( "aim", this_object()->query_race_object()->query_base_stat_minimum("aim") );

this_object()->set_base_stat( "int", this_object()->query_race_object()->query_base_stat_minimum("int") );
this_object()->set_base_stat( "wis", this_object()->query_race_object()->query_base_stat_minimum("wis") );
this_object()->set_base_stat( "per", this_object()->query_race_object()->query_base_stat_minimum("per") );

this_object()->set_base_stat( "cha", this_object()->query_race_object()->query_base_stat_minimum("cha") );
this_object()->set_base_stat( "luc", this_object()->query_race_object()->query_base_stat_minimum("luc") );
this_object()->set_base_stat( "spr", this_object()->query_race_object()->query_base_stat_minimum("spr") );

this_object()->set_base_stat( "god", this_object()->query_race_object()->query_base_stat_minimum("god") );
}

void  initialize_bonus_stats() 
{
this_object()->set_bonus_stat( "str", 0 );
this_object()->set_bonus_stat( "con", 0 );
this_object()->set_bonus_stat( "end", 0 );

this_object()->set_bonus_stat( "dex", 0 );
this_object()->set_bonus_stat( "agl", 0 );
this_object()->set_bonus_stat( "aim", 0 );

this_object()->set_bonus_stat( "int", 0 );
this_object()->set_bonus_stat( "wis", 0 );
this_object()->set_bonus_stat( "per", 0 );

this_object()->set_bonus_stat( "cha", 0 );
this_object()->set_bonus_stat( "luc", 0 );
this_object()->set_bonus_stat( "spr", 0 );

this_object()->set_bonus_stat( "god", 0 );
}