skylib_fluffos_v3/
skylib_fluffos_v3/bin/
skylib_fluffos_v3/bin/db/
skylib_fluffos_v3/fluffos-2.9-ds2.04/
skylib_fluffos_v3/fluffos-2.9-ds2.04/ChangeLog.old/
skylib_fluffos_v3/fluffos-2.9-ds2.04/Win32/
skylib_fluffos_v3/fluffos-2.9-ds2.04/compat/
skylib_fluffos_v3/fluffos-2.9-ds2.04/compat/simuls/
skylib_fluffos_v3/fluffos-2.9-ds2.04/include/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/clone/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/command/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/data/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/etc/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/include/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/inherit/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/inherit/master/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/log/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/single/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/single/tests/compiler/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/single/tests/efuns/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/single/tests/operators/
skylib_fluffos_v3/fluffos-2.9-ds2.04/testsuite/u/
skylib_fluffos_v3/fluffos-2.9-ds2.04/tmp/
skylib_fluffos_v3/fluffos-2.9-ds2.04/windows/
skylib_fluffos_v3/mudlib/
skylib_fluffos_v3/mudlib/cmds/
skylib_fluffos_v3/mudlib/cmds/admin/
skylib_fluffos_v3/mudlib/cmds/guild-race/
skylib_fluffos_v3/mudlib/cmds/living/broken/
skylib_fluffos_v3/mudlib/cmds/player/group_cmds/
skylib_fluffos_v3/mudlib/cmds/playtester/
skylib_fluffos_v3/mudlib/d/admin/
skylib_fluffos_v3/mudlib/d/admin/room/
skylib_fluffos_v3/mudlib/d/admin/room/we_care/
skylib_fluffos_v3/mudlib/d/admin/save/
skylib_fluffos_v3/mudlib/d/admin/text/
skylib_fluffos_v3/mudlib/d/learning/TinyTown/buildings/
skylib_fluffos_v3/mudlib/d/learning/TinyTown/map/
skylib_fluffos_v3/mudlib/d/learning/TinyTown/roads/
skylib_fluffos_v3/mudlib/d/learning/chars/
skylib_fluffos_v3/mudlib/d/learning/functions/
skylib_fluffos_v3/mudlib/d/learning/handlers/
skylib_fluffos_v3/mudlib/d/learning/help_topics/
skylib_fluffos_v3/mudlib/d/learning/help_topics/npcs/
skylib_fluffos_v3/mudlib/d/learning/help_topics/objects/
skylib_fluffos_v3/mudlib/d/learning/help_topics/rcs_demo/
skylib_fluffos_v3/mudlib/d/learning/help_topics/rcs_demo/RCS/
skylib_fluffos_v3/mudlib/d/learning/help_topics/rooms/
skylib_fluffos_v3/mudlib/d/learning/help_topics/rooms/crowd/
skylib_fluffos_v3/mudlib/d/learning/help_topics/rooms/situations/
skylib_fluffos_v3/mudlib/d/learning/save/
skylib_fluffos_v3/mudlib/d/learning/school/
skylib_fluffos_v3/mudlib/d/learning/school/add_sc/
skylib_fluffos_v3/mudlib/d/learning/school/characters/
skylib_fluffos_v3/mudlib/d/learning/school/general/
skylib_fluffos_v3/mudlib/d/learning/school/getting-started/
skylib_fluffos_v3/mudlib/d/learning/school/getting-started/basic_commands/
skylib_fluffos_v3/mudlib/d/learning/school/getting-started/edtutor/
skylib_fluffos_v3/mudlib/d/learning/school/getting-started/unix_tutor/
skylib_fluffos_v3/mudlib/d/learning/school/items/
skylib_fluffos_v3/mudlib/d/learning/school/npc_school/
skylib_fluffos_v3/mudlib/d/learning/school/room_school/
skylib_fluffos_v3/mudlib/d/learning/school/room_school/room_basic/
skylib_fluffos_v3/mudlib/d/learning/school/room_school/situations/
skylib_fluffos_v3/mudlib/d/learning/school/room_school/terrain_tutor/
skylib_fluffos_v3/mudlib/d/learning/text/
skylib_fluffos_v3/mudlib/d/liaison/
skylib_fluffos_v3/mudlib/d/mudlib/
skylib_fluffos_v3/mudlib/d/mudlib/changes/
skylib_fluffos_v3/mudlib/d/playtesters/
skylib_fluffos_v3/mudlib/d/playtesters/effects/
skylib_fluffos_v3/mudlib/d/playtesters/handlers/
skylib_fluffos_v3/mudlib/d/playtesters/items/
skylib_fluffos_v3/mudlib/d/sage/
skylib_fluffos_v3/mudlib/doc/
skylib_fluffos_v3/mudlib/doc/creator/
skylib_fluffos_v3/mudlib/doc/driver/
skylib_fluffos_v3/mudlib/doc/driver/efuns/arrays/
skylib_fluffos_v3/mudlib/doc/driver/efuns/buffers/
skylib_fluffos_v3/mudlib/doc/driver/efuns/calls/
skylib_fluffos_v3/mudlib/doc/driver/efuns/compile/
skylib_fluffos_v3/mudlib/doc/driver/efuns/filesystem/
skylib_fluffos_v3/mudlib/doc/driver/efuns/floats/
skylib_fluffos_v3/mudlib/doc/driver/efuns/functions/
skylib_fluffos_v3/mudlib/doc/driver/efuns/general/
skylib_fluffos_v3/mudlib/doc/driver/efuns/mappings/
skylib_fluffos_v3/mudlib/doc/driver/efuns/mixed/
skylib_fluffos_v3/mudlib/doc/driver/efuns/mudlib/
skylib_fluffos_v3/mudlib/doc/driver/efuns/numbers/
skylib_fluffos_v3/mudlib/doc/driver/efuns/parsing/
skylib_fluffos_v3/mudlib/doc/login/
skylib_fluffos_v3/mudlib/doc/lpc/basic_manual/
skylib_fluffos_v3/mudlib/doc/lpc/intermediate/
skylib_fluffos_v3/mudlib/doc/new/add_command/
skylib_fluffos_v3/mudlib/doc/new/events/
skylib_fluffos_v3/mudlib/doc/new/handlers/
skylib_fluffos_v3/mudlib/doc/new/living/race/
skylib_fluffos_v3/mudlib/doc/new/living/spells/
skylib_fluffos_v3/mudlib/doc/new/object/
skylib_fluffos_v3/mudlib/doc/new/player/
skylib_fluffos_v3/mudlib/doc/new/room/guild/
skylib_fluffos_v3/mudlib/doc/new/room/outside/
skylib_fluffos_v3/mudlib/doc/new/room/storeroom/
skylib_fluffos_v3/mudlib/doc/object/
skylib_fluffos_v3/mudlib/doc/playtesters/
skylib_fluffos_v3/mudlib/doc/policy/
skylib_fluffos_v3/mudlib/doc/weapons/
skylib_fluffos_v3/mudlib/global/
skylib_fluffos_v3/mudlib/global/creator/
skylib_fluffos_v3/mudlib/handlers/
skylib_fluffos_v3/mudlib/include/casino/
skylib_fluffos_v3/mudlib/include/cmds/
skylib_fluffos_v3/mudlib/include/effects/
skylib_fluffos_v3/mudlib/include/npc/
skylib_fluffos_v3/mudlib/include/room/
skylib_fluffos_v3/mudlib/include/shops/
skylib_fluffos_v3/mudlib/net/daemon/
skylib_fluffos_v3/mudlib/net/daemon/chars/
skylib_fluffos_v3/mudlib/net/inherit/
skylib_fluffos_v3/mudlib/net/obj/
skylib_fluffos_v3/mudlib/net/obj/BACKUPS/
skylib_fluffos_v3/mudlib/obj/amulets/
skylib_fluffos_v3/mudlib/obj/armours/plate/
skylib_fluffos_v3/mudlib/obj/b_day/
skylib_fluffos_v3/mudlib/obj/clothes/transport/horse/
skylib_fluffos_v3/mudlib/obj/faith/symbols/
skylib_fluffos_v3/mudlib/obj/fungi/
skylib_fluffos_v3/mudlib/obj/gatherables/
skylib_fluffos_v3/mudlib/obj/instruments/
skylib_fluffos_v3/mudlib/obj/media/
skylib_fluffos_v3/mudlib/obj/misc/player_shop/
skylib_fluffos_v3/mudlib/obj/monster/godmother/
skylib_fluffos_v3/mudlib/obj/monster/transport/
skylib_fluffos_v3/mudlib/obj/rings/
skylib_fluffos_v3/mudlib/obj/scabbards/
skylib_fluffos_v3/mudlib/obj/spells/
skylib_fluffos_v3/mudlib/obj/stationery/
skylib_fluffos_v3/mudlib/obj/stationery/envelopes/
skylib_fluffos_v3/mudlib/obj/toys/
skylib_fluffos_v3/mudlib/obj/vessels/
skylib_fluffos_v3/mudlib/obj/weapons/axes/
skylib_fluffos_v3/mudlib/obj/weapons/chains/
skylib_fluffos_v3/mudlib/obj/weapons/maces/BACKUPS/
skylib_fluffos_v3/mudlib/save/autodoc/
skylib_fluffos_v3/mudlib/save/book_handler/
skylib_fluffos_v3/mudlib/save/books/history/calarien/
skylib_fluffos_v3/mudlib/save/mail/
skylib_fluffos_v3/mudlib/save/new_soul/data/
skylib_fluffos_v3/mudlib/save/parcels/
skylib_fluffos_v3/mudlib/save/playerinfo/
skylib_fluffos_v3/mudlib/save/players/d/
skylib_fluffos_v3/mudlib/save/players/s/
skylib_fluffos_v3/mudlib/save/random_names/
skylib_fluffos_v3/mudlib/save/random_names/data/
skylib_fluffos_v3/mudlib/save/terrains/
skylib_fluffos_v3/mudlib/save/terrains/tutorial_desert/
skylib_fluffos_v3/mudlib/save/terrains/tutorial_grassy_field/
skylib_fluffos_v3/mudlib/save/terrains/tutorial_mountain/
skylib_fluffos_v3/mudlib/save/todo_lists/
skylib_fluffos_v3/mudlib/secure/
skylib_fluffos_v3/mudlib/secure/cmds/admin/
skylib_fluffos_v3/mudlib/secure/cmds/lord/
skylib_fluffos_v3/mudlib/secure/config/
skylib_fluffos_v3/mudlib/secure/handlers/autodoc/
skylib_fluffos_v3/mudlib/secure/handlers/intermud/
skylib_fluffos_v3/mudlib/secure/include/global/
skylib_fluffos_v3/mudlib/secure/save/
skylib_fluffos_v3/mudlib/secure/save/handlers/
skylib_fluffos_v3/mudlib/secure/std/
skylib_fluffos_v3/mudlib/secure/std/classes/
skylib_fluffos_v3/mudlib/secure/std/modules/
skylib_fluffos_v3/mudlib/std/creator/
skylib_fluffos_v3/mudlib/std/dom/
skylib_fluffos_v3/mudlib/std/effects/
skylib_fluffos_v3/mudlib/std/effects/external/
skylib_fluffos_v3/mudlib/std/effects/fighting/
skylib_fluffos_v3/mudlib/std/effects/magic/
skylib_fluffos_v3/mudlib/std/effects/magic/BACKUPS/
skylib_fluffos_v3/mudlib/std/effects/other/BACKUPS/
skylib_fluffos_v3/mudlib/std/effects/priest/
skylib_fluffos_v3/mudlib/std/effects/room/
skylib_fluffos_v3/mudlib/std/environ/
skylib_fluffos_v3/mudlib/std/guilds/
skylib_fluffos_v3/mudlib/std/guilds/old/
skylib_fluffos_v3/mudlib/std/languages/
skylib_fluffos_v3/mudlib/std/liquids/
skylib_fluffos_v3/mudlib/std/npc/
skylib_fluffos_v3/mudlib/std/npc/goals/
skylib_fluffos_v3/mudlib/std/npc/goals/basic/
skylib_fluffos_v3/mudlib/std/npc/goals/misc/
skylib_fluffos_v3/mudlib/std/npc/plans/
skylib_fluffos_v3/mudlib/std/npc/plans/basic/
skylib_fluffos_v3/mudlib/std/npc/types/
skylib_fluffos_v3/mudlib/std/npc/types/helper/
skylib_fluffos_v3/mudlib/std/npcs/
skylib_fluffos_v3/mudlib/std/outsides/
skylib_fluffos_v3/mudlib/std/races/shadows/
skylib_fluffos_v3/mudlib/std/room/basic/BACKUPS/
skylib_fluffos_v3/mudlib/std/room/basic/topography/
skylib_fluffos_v3/mudlib/std/room/controller/
skylib_fluffos_v3/mudlib/std/room/inherit/topography/
skylib_fluffos_v3/mudlib/std/room/topography/area/
skylib_fluffos_v3/mudlib/std/room/topography/iroom/
skylib_fluffos_v3/mudlib/std/room/topography/milestone/
skylib_fluffos_v3/mudlib/std/shadows/curses/
skylib_fluffos_v3/mudlib/std/shadows/disease/
skylib_fluffos_v3/mudlib/std/shadows/fighting/
skylib_fluffos_v3/mudlib/std/shadows/healing/
skylib_fluffos_v3/mudlib/std/shadows/magic/
skylib_fluffos_v3/mudlib/std/shadows/poison/
skylib_fluffos_v3/mudlib/std/shadows/room/
skylib_fluffos_v3/mudlib/std/shops/controllers/
skylib_fluffos_v3/mudlib/std/shops/objs/
skylib_fluffos_v3/mudlib/std/shops/player_shop/
skylib_fluffos_v3/mudlib/std/socket/
skylib_fluffos_v3/mudlib/std/soul/d/
skylib_fluffos_v3/mudlib/std/soul/e/
skylib_fluffos_v3/mudlib/std/soul/i/
skylib_fluffos_v3/mudlib/std/soul/j/
skylib_fluffos_v3/mudlib/std/soul/k/
skylib_fluffos_v3/mudlib/std/soul/l/
skylib_fluffos_v3/mudlib/std/soul/n/
skylib_fluffos_v3/mudlib/std/soul/o/
skylib_fluffos_v3/mudlib/std/soul/q/
skylib_fluffos_v3/mudlib/std/soul/r/
skylib_fluffos_v3/mudlib/std/soul/u/
skylib_fluffos_v3/mudlib/std/soul/v/
skylib_fluffos_v3/mudlib/std/soul/y/
skylib_fluffos_v3/mudlib/std/soul/z/
skylib_fluffos_v3/mudlib/std/stationery/
skylib_fluffos_v3/mudlib/w/
skylib_fluffos_v3/mudlib/w/default/
skylib_fluffos_v3/mudlib/w/default/armour/
skylib_fluffos_v3/mudlib/w/default/clothes/
skylib_fluffos_v3/mudlib/w/default/item/
skylib_fluffos_v3/mudlib/w/default/npc/
skylib_fluffos_v3/mudlib/w/default/room/
skylib_fluffos_v3/mudlib/w/default/weapon/
skylib_fluffos_v3/mudlib/www/
skylib_fluffos_v3/mudlib/www/java/
skylib_fluffos_v3/mudlib/www/secure/
skylib_fluffos_v3/mudlib/www/secure/lpc/advanced/
skylib_fluffos_v3/mudlib/www/secure/lpc/intermediate/
skylib_fluffos_v3/win32/
/*
 * Module to handle con, dex, int, wis and str,
 *                  height and weight,
 *                  hit points and guild points,
 *                  carrying capacity.
 */

#define BASE 20
#define ORD1T 1
#define ORD1B 1
#define ORD2T 1
#define ORD2B 5
#define SCALING_DATA ({ 650, 150, 10, 5 })
#define DIVISOR 700

int Con, Dex, Int, Str, Wis,
    contmp, dextmp, inttmp, strtmp, wistmp,
    height, base_weight;

nosave int conbon, dexbon, intbon, strbon, wisbon, no_check;
nosave string to_zap;
nosave int gp_inc, hp_inc;

mixed query_property(string name);

string stats_to_zap() {
    string temp;

    temp = to_zap;
    to_zap = 0;

    return temp;

} /* stats_to_zap() */

void zap_stat( string word ) {
    string dummy;

    if( !to_zap ) {
        to_zap = word;
        if( find_call_out("zap_stat_cache") == -1 )
            call_out("zap_stat_cache", 1 );
    }

    if( sscanf( to_zap, "%s"+ word +"%s", dummy, dummy ) != 2 )
        to_zap += word;

} /* zap_stat() */

int query_no_check() { return no_check; }
void set_no_check( int i ) { no_check = i; }

int hp_base() {
    int base;

    base = 150 + 10 * (int)TO->query_con();

    if( base < 5 )
        base = 5;

    return base;

} /* hp_base() */

int hp_gradient() { return 4; }

int scaled_weight() {
    int i, actual, scaled;

    actual = (int)TO->query_actual_weight();

    if( actual < SCALING_DATA[ 0 ] )
        return actual;

    scaled += SCALING_DATA[ 0 ];
    actual -= SCALING_DATA[ 0 ];

    i = 1;

    while( actual && ( i * SCALING_DATA[ 2 ] ) < 100 ) {
      if( actual >= SCALING_DATA[ 1 ] ) {
          scaled += ( ( 100 - SCALING_DATA[ 2 ] * i ) *
              SCALING_DATA[ 1 ] ) / 100;
          scaled += ( SCALING_DATA[ 3 ] * SCALING_DATA[ 1 ] ) / 1000;
          actual -= SCALING_DATA[ 1 ];
      } else {
          scaled += ( ( 100 - SCALING_DATA[ 2 ] * i ) * actual ) / 100;
          scaled += ( SCALING_DATA[ 3 ] * actual ) / 1000;
          actual = 0;
      }
      i += 1;
    }

    if( actual )
        scaled += ( SCALING_DATA[ 3 ] * actual ) / 1000;

    return scaled;

} /* scaled_weight() */

void reset_hp() {
    int new_max, skill_bon;
    string report;

    if( no_check )
        return;

    skill_bon = (int)TO->query_skill_bonus("general.health");
    new_max = hp_base() + skill_bon * hp_gradient();

    if( !base_weight ) {
        if( (string)TO->query_name() == "object")
            return;
        report = file_name(TO)+" ("+(string)TO->query_name()+"): race "
            "object is "+(string)TO->query_race_ob();
        if( environment() ) {
            if( file_name( environment() ) == "/room/void")
                return;
            report += "; in "+file_name( environment() );
            TO->move("/room/void", "$N gets booted into the void for "+
                "being a bad NPC.");
      }
      report += ".\n";
      log_file("BAD_NPC", ctime(time()) + " " + report );
      return;
    }

    new_max = ( new_max * scaled_weight() ) / DIVISOR;

    if( new_max < 1 )
        TO->set_max_hp( 1 );
    else
        TO->set_max_hp( new_max );

} /* reset_hp() */

void reset_gp() {
    if( no_check )
        return;
    STD_GUILD_OBJ->set_gp(TO);
} /* reset_gp() */

void calc_inc_rates() {
    hp_inc = 1 + ( (int)TO->stat_modify( 100, "general.health") - 35 ) / 40;
    gp_inc = 1 + ( (int)TO->stat_modify( 100,
        STD_GUILD_OBJ->query_gp_skill(TO) ) - 35 ) / 40;
} /* calc_inc_rates() */

int *query_inc_rates() { return ({ gp_inc, hp_inc }); }

void heart_beat() {
    if( !gp_inc )
         calc_inc_rates();
    if( TO->query_property("dead") )
        return;
    TO->adjust_gp( gp_inc );
    TO->adjust_hp( hp_inc );
} /* heart_beat() */

void reset_carry_cap() {
    int i, hst_num, hst_wei, new_cap, old_loc, tot_str;
    object *contents, *dropped;

    if( no_check )
        return;

    old_loc = (int)TO->query_loc_weight();
    tot_str = Str + strtmp + strbon;

    new_cap = BASE;
    new_cap += ( ORD1T * tot_str ) / ORD1B;
    new_cap += ( ORD2T * tot_str * tot_str ) / ORD2B;
    new_cap = ( new_cap * (int)TO->query_actual_weight() ) / 100;

    if( !new_cap )
        new_cap = 1;

    TO->set_max_weight( new_cap );
    
    if( new_cap >= old_loc ) {
        // Let us update anyway, to fix up new players.
        // - Sandoz.
        TO->update_loc_weight();
        TO->calc_burden();
        return;
    }

    TO->dest_hide_shadow();
    contents = INV(TO) - (object *)TO->query_armours();
    dropped = ({ });

    while( old_loc > new_cap && sizeof( contents ) ) {
        hst_num = 0;
        hst_wei = 0;

        for( i = 0; i < sizeof( contents ); i++ )
            if( (int)contents[ i ]->query_complete_weight() > hst_wei ) {
                hst_wei = (int)contents[ i ]->query_complete_weight();
                hst_num = i;
            }
        if( !(int)contents[ hst_num ]->move( environment() ) ) {
            dropped += ({ contents[ hst_num ] });
            old_loc -= hst_wei;
        }
        contents = delete( contents, hst_num, 1 );
    }

    if( sizeof( dropped ) ) {
        tell_room( environment(), (string)TO->the_short()+" drops "+
            query_multiple_short( dropped )+" under strain.\n", TO );
        tell_object( TO, "Your fading strength makes you drop "+
            query_multiple_short( dropped )+".\n");
    }

    TO->update_loc_weight();
    TO->calc_burden();

    if( new_cap >= old_loc )
        return;

    // Add something nasty here to pin them to the ground with all that
    // heavy armour.
    return;

} /* reset_carry_cap() */

void check_stats_zero() {
    if( interactive(TO) ){
        if( Int + inttmp + intbon <= 0 || Wis + wistmp + wisbon <= 0 ) {
            TO->add_property( PASSED_OUT, 1, 500 );
            tell_object( TO, "You pass out.\n");
        }
    }
} /* check_stats_zero() */

void reset_all() { zap_stat( "CDISW" ); }

void reset_all2() {
    no_check = 0;
    reset_hp();
    reset_gp();
    reset_carry_cap();
    calc_inc_rates();
    check_stats_zero();  // Consequences of going to zero.
} /* reset_all2() */

int query_con() { return Con + contmp + conbon; }
int query_dex() { return Dex + dextmp + dexbon; }
int query_int() { return Int + inttmp + intbon; }
int query_str() { return Str + strtmp + strbon; }
int query_wis() { return Wis + wistmp + wisbon; }

int query_real_con() { return Con; }
int query_real_dex() { return Dex; }
int query_real_int() { return Int; }
int query_real_str() { return Str; }
int query_real_wis() { return Wis; }

int check( int number ) { return ( number <= 28 ); }

int set_con( int number ) {
    if( !check( number ) )
        number = 28;
    if( Con != number )
        zap_stat("C");
    Con = number;
    return Con;
} /* set_con() */

int set_dex( int number ) {
    if( !check( number ) )
        number = 28;
    if( Dex != number )
        zap_stat("D");
    Dex = number;
    return Dex;
} /* set_dex() */

int set_int( int number ) {
    if( !check( number ) )
        number = 28;
    if( Int != number )
        zap_stat("I");
    Int = number;
    return Int;
} /* set_int() */

int set_str( int number ) {
    if( !check( number ) )
        number = 28;
    if( Str != number )
        zap_stat("S");
    Str = number;
    return Str;
} /* set_str() */

int set_wis( int number ) {
    if( !check( number ) )
        number = 28;
    if( Wis != number )
        zap_stat("W");
    Wis = number;
    return Wis;
} /* set_wis() */

int adjust_con( int number ) {
    if( check( number + Con ) ) {
        Con += number;
        if( number )
            zap_stat("C");
    }
    return Con;
} /* adjust_con() */

int adjust_dex( int number ) {
    if( check( number + Dex ) ) {
        Dex += number;
        if( number )
            zap_stat("D");
    }
    return Dex;
} /* adjust_dex() */

int adjust_int( int number ) {
    if( check( number + Int ) ) {
        Int += number;
        if( number )
            zap_stat("I");
    }
    return Int;
} /* adjust_int() */

int adjust_str( int number ) {
    if( check( number + Str ) ) {
        Str += number;
        if( number )
            zap_stat("S");
    }
    return Str;
} /* adjustr_str() */

int adjust_wis( int number ) {
    if( check( number + Wis ) ) {
        Wis += number;
        if( number )
            zap_stat("W");
    }
    return Wis;
} /* adjust_wis() */

int query_tmp_con() { return contmp; }
int query_tmp_dex() { return dextmp; }
int query_tmp_int() { return inttmp; }
int query_tmp_str() { return strtmp; }
int query_tmp_wis() { return wistmp; }

int adjust_tmp_con( int number ) {
    contmp += number;
    if( number )
        zap_stat("C");
    if( contmp && !dextmp && !inttmp && !strtmp && !wistmp )
        call_out("update_tmps", 900 );
    return contmp;
} /* adjust_tmp_con() */

int adjust_tmp_dex( int number ) {
    dextmp += number;
    if( number )
        zap_stat("D");
    if( !contmp && dextmp && !inttmp && !strtmp && !wistmp )
        call_out("update_tmps", 900 );
    return dextmp;
} /* adjust_tmp_dex() */

int adjust_tmp_int( int number ) {
    inttmp += number;
    if( number )
        zap_stat("I");
    if( !contmp && !dextmp && inttmp && !strtmp && !wistmp )
        call_out("update_tmps", 900 );
    return inttmp;
} /* adjust_tmp_int() */

int adjust_tmp_str( int number ) {
    strtmp += number;
    if( number )
        zap_stat( "S" );
    if( !contmp && !dextmp && !inttmp && strtmp && !wistmp )
        call_out("update_tmps", 900 );
    return strtmp;
} /* adjust_tmp_str() */

int adjust_tmp_wis( int number ) {
    wistmp += number;
    if( number )
        zap_stat( "W" );
    if( !contmp && !dextmp && !inttmp && !strtmp && wistmp )
        call_out("update_tmps", 900 );
    return wistmp;
} /* adjust_tmp_wis() */

int query_bonus_con() { return conbon; }
int query_bonus_dex() { return dexbon; }
int query_bonus_int() { return intbon; }
int query_bonus_str() { return strbon; }
int query_bonus_wis() { return wisbon; }

int adjust_bonus_con( int number ) {
    conbon += number;
    if( number )
        zap_stat("C");
    return conbon;
} /* adjust_bonus_con() */

int adjust_bonus_dex( int number ) {
    dexbon += number;
    if( number )
        zap_stat("D");
    return dexbon;
} /* adjust_bonus_dex() */

int adjust_bonus_int( int number ) {
    intbon += number;
    if( number )
        zap_stat("I");
    return intbon;
} /* adjust_bonus_int() */

int adjust_bonus_str( int number ) {
    strbon += number;
    if( number )
        zap_stat("S");
    return strbon;
} /* adjust_bonus_str() */

int adjust_bonus_wis( int number ) {
    wisbon += number;
    if( number )
        zap_stat("W");
    return wisbon;
} /* adjust_bonus_wis() */

void update_tmps() {
    if( contmp ) {
        zap_stat("C");
        contmp = contmp / 2;
    }

    if( dextmp ) {
        zap_stat("D");
        dextmp = dextmp / 2;
    }

    if( inttmp ) {
        zap_stat("I");
        inttmp = inttmp / 2;
    }

    if( strtmp ) {
        zap_stat("S");
        strtmp = strtmp / 2;
    }

    if( wistmp ) {
        zap_stat("W");
        wistmp = wistmp / 2;
    }

    if( contmp || dextmp || inttmp || strtmp || wistmp )
        call_out("update_tmps", 900 );

} /* update_tmps() */

int query_height() { return height; }

void set_height( int number ) {
    if( number > 0 )
        height = number;
} /* set_height() */

int query_base_weight() { return base_weight; }

void set_base_weight( int number ) {
    if( number > 0 )
        base_weight = number;
} /* set_weight() */

int query_weight() {
    int adjust_weight;

    adjust_weight = ( ( ( Con + 3 * Str ) / 4 ) - 13 ) * ( base_weight / 30 );

    return base_weight + adjust_weight;

} /* query_weight() */

mixed stats() {
    return ({
        ({ "Con", Con + conbon + contmp }),
        ({ "Dex", Dex + dexbon + dextmp }),
        ({ "Int", Int + intbon + inttmp }),
        ({ "Str", Str + strbon + strtmp }),
        ({ "Wis", Wis + wisbon + wistmp }),
        ({ "tmp Con", contmp }),
        ({ "tmp Dex", dextmp }),
        ({ "tmp Int", inttmp }),
        ({ "tmp Str", strtmp }),
        ({ "tmp Wis", wistmp }),
        ({ "bonus Con", conbon }),
        ({ "bonus Dex", dexbon }),
        ({ "bonus Int", intbon }),
        ({ "bonus Str", strbon }),
        ({ "bonus Wis", wisbon }),
        ({ "hp rate", hp_inc }),
        ({ "gp rate", gp_inc }),
        ({ "height", height }),
    });
} /* stats() */