final_realms_fluffos_v1/
final_realms_fluffos_v1/bin/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/ChangeLog.old/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/Win32/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/simuls/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/clone/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/command/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/data/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/etc/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/master/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/log/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/compiler/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/efuns/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/operators/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/u/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/tmp/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/windows/
final_realms_fluffos_v1/lib/baseobs/guilds/
final_realms_fluffos_v1/lib/baseobs/misc/
final_realms_fluffos_v1/lib/baseobs/races/shadows/
final_realms_fluffos_v1/lib/cmds/god/
final_realms_fluffos_v1/lib/cmds/handlers/
final_realms_fluffos_v1/lib/cmds/handlers/cmds/
final_realms_fluffos_v1/lib/d/heaven/
final_realms_fluffos_v1/lib/d/heaven/heaven/ave/
final_realms_fluffos_v1/lib/d/mudlib/
final_realms_fluffos_v1/lib/d/newbie/
final_realms_fluffos_v1/lib/d/newbie/docs/
final_realms_fluffos_v1/lib/d/newbie/drow/armour/
final_realms_fluffos_v1/lib/d/newbie/drow/items/
final_realms_fluffos_v1/lib/d/newbie/drow/mobs/
final_realms_fluffos_v1/lib/d/newbie/drow/oldmobs/
final_realms_fluffos_v1/lib/d/newbie/drow/weapons/
final_realms_fluffos_v1/lib/d/newbie/duergar/weapons/
final_realms_fluffos_v1/lib/d/newbie/dwarf/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/cafe/
final_realms_fluffos_v1/lib/d/newbie/elf/chars/equip/
final_realms_fluffos_v1/lib/d/newbie/elf/items/armours/
final_realms_fluffos_v1/lib/d/newbie/elf/items/obj/
final_realms_fluffos_v1/lib/d/newbie/elf/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/quick_fix/
final_realms_fluffos_v1/lib/d/newbie/gnome/armour/
final_realms_fluffos_v1/lib/d/newbie/gnome/buildings/
final_realms_fluffos_v1/lib/d/newbie/gnome/items/
final_realms_fluffos_v1/lib/d/newbie/gnome/npcs/clones/
final_realms_fluffos_v1/lib/d/newbie/gnome/rooms/northrooms/
final_realms_fluffos_v1/lib/d/newbie/gnome/weapons/
final_realms_fluffos_v1/lib/d/newbie/goblin/armour/
final_realms_fluffos_v1/lib/d/newbie/goblin/items/
final_realms_fluffos_v1/lib/d/newbie/grads/log/
final_realms_fluffos_v1/lib/d/newbie/grads/npcs/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/cave1/
final_realms_fluffos_v1/lib/d/newbie/grads/temp/
final_realms_fluffos_v1/lib/d/newbie/guests/weapons/
final_realms_fluffos_v1/lib/d/newbie/half-elf/items/
final_realms_fluffos_v1/lib/d/newbie/half-elf/newroomss/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/castle/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/drows/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/savannah/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/secret/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/town/
final_realms_fluffos_v1/lib/d/newbie/halfling/
final_realms_fluffos_v1/lib/d/newbie/halfling/misc/
final_realms_fluffos_v1/lib/d/newbie/halfling/rooms/cave/
final_realms_fluffos_v1/lib/d/newbie/human/
final_realms_fluffos_v1/lib/d/newbie/human/armour/
final_realms_fluffos_v1/lib/d/newbie/human/monsters/
final_realms_fluffos_v1/lib/d/newbie/human/obj/
final_realms_fluffos_v1/lib/d/newbie/human/weapons/
final_realms_fluffos_v1/lib/d/newbie/lizard/armour/
final_realms_fluffos_v1/lib/d/newbie/lizard/items/
final_realms_fluffos_v1/lib/d/newbie/lizard/underwater/
final_realms_fluffos_v1/lib/d/newbie/lizard/weapons/
final_realms_fluffos_v1/lib/d/newbie/logs/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/rooms/
final_realms_fluffos_v1/lib/d/newbie/newelf/
final_realms_fluffos_v1/lib/d/newbie/newelf/chars/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/recopied/
final_realms_fluffos_v1/lib/d/newbie/newelf/obj/
final_realms_fluffos_v1/lib/d/newbie/newelf/quest_docs./
final_realms_fluffos_v1/lib/d/newbie/newken/
final_realms_fluffos_v1/lib/d/newbie/newken/chars/
final_realms_fluffos_v1/lib/d/newbie/newken/misc/
final_realms_fluffos_v1/lib/d/newbie/newken/npcs/
final_realms_fluffos_v1/lib/d/newbie/newken/obj/
final_realms_fluffos_v1/lib/d/newbie/newliz/
final_realms_fluffos_v1/lib/d/newbie/newliz/cave/
final_realms_fluffos_v1/lib/d/newbie/newliz/npcs/
final_realms_fluffos_v1/lib/d/newbie/orc/items/misc/
final_realms_fluffos_v1/lib/d/newbie/orc/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/orc/tower/
final_realms_fluffos_v1/lib/d/vehicle/
final_realms_fluffos_v1/lib/doc/
final_realms_fluffos_v1/lib/doc/driver/
final_realms_fluffos_v1/lib/doc/driver/concepts/
final_realms_fluffos_v1/lib/doc/driver/driver/
final_realms_fluffos_v1/lib/doc/driver/efuns/arrays/
final_realms_fluffos_v1/lib/doc/driver/efuns/bitstrings/
final_realms_fluffos_v1/lib/doc/driver/efuns/communication/
final_realms_fluffos_v1/lib/doc/driver/efuns/core/
final_realms_fluffos_v1/lib/doc/driver/efuns/debugging/
final_realms_fluffos_v1/lib/doc/driver/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/driver/efuns/interactive/
final_realms_fluffos_v1/lib/doc/driver/efuns/mappings/
final_realms_fluffos_v1/lib/doc/driver/efuns/objects/
final_realms_fluffos_v1/lib/doc/driver/efuns/security/
final_realms_fluffos_v1/lib/doc/driver/efuns/strings/
final_realms_fluffos_v1/lib/doc/driver/efuns/system/
final_realms_fluffos_v1/lib/doc/driver/efuns/types/
final_realms_fluffos_v1/lib/doc/driver/lpc/constructs/
final_realms_fluffos_v1/lib/doc/driver/lpc/types/
final_realms_fluffos_v1/lib/doc/driver/platforms/
final_realms_fluffos_v1/lib/doc/lpc/
final_realms_fluffos_v1/lib/doc/mail/
final_realms_fluffos_v1/lib/doc/man/
final_realms_fluffos_v1/lib/doc/man/html/
final_realms_fluffos_v1/lib/doc/man/html/applies/
final_realms_fluffos_v1/lib/doc/man/html/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/html/driver/
final_realms_fluffos_v1/lib/doc/man/html/efuns/
final_realms_fluffos_v1/lib/doc/man/html/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/html/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/html/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/html/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/html/efuns/general/
final_realms_fluffos_v1/lib/doc/man/html/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/
final_realms_fluffos_v1/lib/doc/man/local/applies/
final_realms_fluffos_v1/lib/doc/man/local/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/local/applies/master/
final_realms_fluffos_v1/lib/doc/man/local/concepts/
final_realms_fluffos_v1/lib/doc/man/local/defines/
final_realms_fluffos_v1/lib/doc/man/local/driver/
final_realms_fluffos_v1/lib/doc/man/local/efuns/
final_realms_fluffos_v1/lib/doc/man/local/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/local/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/local/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/local/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/local/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/local/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/local/efuns/general/
final_realms_fluffos_v1/lib/doc/man/local/efuns/interactive/
final_realms_fluffos_v1/lib/doc/man/local/efuns/internals/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/local/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/objects/
final_realms_fluffos_v1/lib/doc/man/local/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/efuns/sockets/
final_realms_fluffos_v1/lib/doc/man/local/efuns/strings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/system/
final_realms_fluffos_v1/lib/doc/man/local/historical/
final_realms_fluffos_v1/lib/doc/man/local/lfun/QC/
final_realms_fluffos_v1/lib/doc/man/local/lfun/events/
final_realms_fluffos_v1/lib/doc/man/local/lfun/monster/
final_realms_fluffos_v1/lib/doc/man/local/lfun/properties/
final_realms_fluffos_v1/lib/doc/man/local/lpc/
final_realms_fluffos_v1/lib/doc/man/local/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/local/lpc/types/
final_realms_fluffos_v1/lib/doc/man/local/standards/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/basic/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/intermediate/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/concepts/
final_realms_fluffos_v1/lib/doc/man/mudos/driver/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/general/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mixed/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/types/
final_realms_fluffos_v1/lib/doc/races/
final_realms_fluffos_v1/lib/doc/races/old_race/
final_realms_fluffos_v1/lib/global/virtual/
final_realms_fluffos_v1/lib/global/wiz_backup/
final_realms_fluffos_v1/lib/net/config/
final_realms_fluffos_v1/lib/net/daemon/chars/
final_realms_fluffos_v1/lib/net/inherit/
final_realms_fluffos_v1/lib/net/intermud3/
final_realms_fluffos_v1/lib/net/intermud3/cmds/
final_realms_fluffos_v1/lib/net/intermud3/save/
final_realms_fluffos_v1/lib/net/intermud3/services/
final_realms_fluffos_v1/lib/net/obj/
final_realms_fluffos_v1/lib/net/old/
final_realms_fluffos_v1/lib/net/old/intermud/
final_realms_fluffos_v1/lib/net/old/intermud/adm/
final_realms_fluffos_v1/lib/net/old/intermud/services/
final_realms_fluffos_v1/lib/net/old/intermud/udp/
final_realms_fluffos_v1/lib/net/virtual/
final_realms_fluffos_v1/lib/obj/b_day/
final_realms_fluffos_v1/lib/obj/chars/
final_realms_fluffos_v1/lib/obj/handlers/lists/
final_realms_fluffos_v1/lib/obj/handlers/useless/
final_realms_fluffos_v1/lib/obj/monsters/
final_realms_fluffos_v1/lib/obj/roomgen/
final_realms_fluffos_v1/lib/obj/soul/
final_realms_fluffos_v1/lib/obj/vegetation/
final_realms_fluffos_v1/lib/obj/weapons/oldsys/
final_realms_fluffos_v1/lib/open/
final_realms_fluffos_v1/lib/players/g/
final_realms_fluffos_v1/lib/releasefiles/d/heaven/
final_realms_fluffos_v1/lib/releasefiles/d/mudlib/
final_realms_fluffos_v1/lib/releasefiles/d/newbie/
final_realms_fluffos_v1/lib/releasefiles/doc/
final_realms_fluffos_v1/lib/releasefiles/players/g/
final_realms_fluffos_v1/lib/releasefiles/save/
final_realms_fluffos_v1/lib/releasefiles/save/environ/
final_realms_fluffos_v1/lib/releasefiles/save/roomgen/
final_realms_fluffos_v1/lib/releasefiles/secure/
final_realms_fluffos_v1/lib/releasefiles/w/
final_realms_fluffos_v1/lib/releasefiles/w/god/
final_realms_fluffos_v1/lib/room/
final_realms_fluffos_v1/lib/save/
final_realms_fluffos_v1/lib/save/environ/
final_realms_fluffos_v1/lib/save/roomgen/
final_realms_fluffos_v1/lib/scripts/
final_realms_fluffos_v1/lib/secure/crerem/
final_realms_fluffos_v1/lib/secure/dom/
final_realms_fluffos_v1/lib/secure/log/
final_realms_fluffos_v1/lib/secure/misc/
final_realms_fluffos_v1/lib/std/adnd/
final_realms_fluffos_v1/lib/std/commands/shadows/
final_realms_fluffos_v1/lib/std/creator/
final_realms_fluffos_v1/lib/std/curses/
final_realms_fluffos_v1/lib/std/curses/old_sys/
final_realms_fluffos_v1/lib/std/curses/shadows/
final_realms_fluffos_v1/lib/std/dom/
final_realms_fluffos_v1/lib/std/effects/
final_realms_fluffos_v1/lib/std/effects/healing/
final_realms_fluffos_v1/lib/std/effects/other/
final_realms_fluffos_v1/lib/std/effects/poisons/
final_realms_fluffos_v1/lib/std/environ/
final_realms_fluffos_v1/lib/std/guilds/
final_realms_fluffos_v1/lib/std/guilds/priests/samples/
final_realms_fluffos_v1/lib/std/guilds/wizards/
final_realms_fluffos_v1/lib/std/living/baldy/
final_realms_fluffos_v1/lib/std/living/divstuff/
final_realms_fluffos_v1/lib/std/paran/
final_realms_fluffos_v1/lib/std/poisons/
final_realms_fluffos_v1/lib/std/poisons/shadows/
final_realms_fluffos_v1/lib/std/poisons/weapons/
final_realms_fluffos_v1/lib/std/race_groups/
final_realms_fluffos_v1/lib/std/room/
final_realms_fluffos_v1/lib/std/room/old/
final_realms_fluffos_v1/lib/std/rooms/
final_realms_fluffos_v1/lib/std/shadows/
final_realms_fluffos_v1/lib/std/shadows/test_shad/
final_realms_fluffos_v1/lib/std/socket/
final_realms_fluffos_v1/lib/std/spells/
final_realms_fluffos_v1/lib/std/vaults/
final_realms_fluffos_v1/lib/tmp/
final_realms_fluffos_v1/lib/w/
final_realms_fluffos_v1/lib/w/god/
final_realms_fluffos_v1/old/
final_realms_fluffos_v1/win32/
/* the standard race... */
/* Verkho - added the race_size func */
inherit "/std/object";
#include "light_defs.inc"
#include "race_weights.h"

#define SWIM_PROP "swimmer"
#define UBREATHE_PROP "underwater_breathing"

static int min_light_limit;
static int max_light_limit;

int race_size;
int limbs;

mixed *bits;

// Dummy for now, allows death curses etc.
// taniwha 1996
void on_death(object player,object killer)
{
}

int set_light_limits(int lower, int upper) {
    //if ((lower<LIGHT_BOUNDS_LOW) || (upper>LIGHT_BOUNDS_HIGH)) return 0;
    min_light_limit = lower;
    max_light_limit = upper;
    return 1;
}

int query_light_limith() {
    return max_light_limit;
}

int query_light_limitl() {
    return min_light_limit;
}


void set_race_size(int i) { race_size = i; }
int query_race_size() { return race_size; }
/* The amazing 'bits' array :
 * at the mo has 3 elements per bit:
 * name, alias, array
 * where the array has the form:
 * bit_come_from, weight, general_value, list_of_bits_on_this_bit
 * All incredibly gruesome hey?
 */

void add_bit(string name, string alias, mixed *varr)
{
    int i;

    i = member_array(name, bits);
    if (i >= 0) {
    if (pointerp(bits[i+1])) i--;
    bits[i] = name;
    bits[i+1] = alias;
    bits[i+2] = varr;
    return;
    }
    bits += ({ name, alias, varr });
    return;
}

void create() {
    set_long("The standard boring race.  Get a new one soon, this one is "
      "pretty sad.\n");
    reset_get();
    race_size = 4; // This is used as a standard 'human' size
    limbs = 2;
    bits = ({
      "head", "", ({ 0, 40, 0, 
    "left ear", "right ear", "left eye", "right eye", "nose", "scalp",
    "tongue", "teeth", "skull" }),
      "left ear", "ear", ({ "head", 1, 0 }),
      "right ear", "ear", ({ "head", 1, 0 }),
      "left eye", "eye", ({ "head", 1, 0 }),
      "right eye", "eye", ({ "head", 1, 0 }),
      "nose", "", ({ "head", 1, 0 }),
      "scalp", "", ({ "head", 3, 0 }),
      "tongue", "", ({ "head", 2, 0 }),
      "teeth", "", ({ "head", 2, 0 }),
      "skull", "cranium", ({ "head", 20, 0 }),
      "left arm", "arm", ({ 0, 80, 0, "left hand" }),
      "right arm", "arm", ({ 0, 80, 0, "right hand" }),
      "torso", "chest", ({ 0, 400, 0, "heart", "liver", "left kidney",
    "right kidney", "left lung", "right lung", "spleen" }),
      "left hand", "hand", ({ "left arm", 15, 0, "left pinky", 
    "left third finger", "left index finger", "left ring finger",
    "left thumb" }),
      "right hand", "hand", ({ "right arm", 15, 0, "right pinky",
    "right third finger", "right index finger", "right ring finger",
    "right thumb" }),
      "left pinky", "finger", ({ "left hand", 1, 0 }),
      "left third finger", "finger", ({ "left hand", 1, 0 }),
      "left index finger", "finger", ({ "left hand", 1, 0 }),
      "left ring finger", "finger", ({ "left hand", 1, 0 }),
      "left thumb", "finger", ({ "left hand", 1, 0 }),
      "right pinky", "finger", ({ "right hand", 1, 0 }),
      "right third finger", "finger", ({ "right hand", 1, 0 }),
      "right index finger", "finger", ({ "right hand", 1, 0 }),
      "right ring finger", "finger", ({ "right hand", 1, 0 }),
      "right thumb", "finger", ({ "right hand", 1, 0 }),
      "heart", "", ({ "torso", 10, 0 }),
      "liver", "", ({ "torso", 5, 0 }),
      "left kidney", "kidney", ({ "torso", 5, 0 }),
      "right kidney", "kidney", ({ "torso", 5, 0 }),
      "left lung", "lung", ({ "torso", 5, 0 }),
      "right lung", "lung", ({ "torso", 5, 0 }),
      "spleen", "", ({ "torso", 5, 0 }),
      "genitals", "", ({ 0, 5, 0 }),  /* sex ????  ohhh yes*/
      "left leg", "leg", ({ 0, 300, 0, "left foot" }),
      "right leg", "leg", ({ 0, 300, 0, "right foot" }),
      "left foot", "foot", ({ "left leg", 50,  "left big toe",
    "left second toe", "left third toe",
    "left fourth toe", "left little toe" }), /* toes ... god */
      "right foot", "foot", ({ "right leg", 50, "right big toe",
    "right second toe", "right third toe",
    "right fourth toe", "right little toe" }), /* toes ... god */
      "right little toe", "toe", ({ "right foot", 1, 0 }),
      "right second toe", "toe", ({ "right foot", 1, 0 }),
      "right third toe", "toe", ({ "right foot", 1, 0 }),
      "right fourth toe", "toe", ({ "right foot", 1, 0 }),
      "right big toe", "toe", ({ "right foot", 1, 0 }),
      "left little toe", "toe", ({ "left foot", 1, 0 }),
      "left second toe", "toe", ({ "left foot", 1, 0 }),
      "left third toe", "toe", ({ "left foot", 1, 0 }),
      "left fourth toe", "toe", ({ "left foot", 1, 0 }),
      "left big toe", "toe", ({ "left foot", 1, 0 }),
    });
    ::create();
    set_name("unknown creature");
    //set_light_limits(LIGHT_STANDARD_LOW, LIGHT_STANDARD_HIGH);
}

/*
   Taniwha, 1997, default atatck messages
   most frequent first 
*/   
string * valid_attacks()
{

    return  ({
      "$att_name$ punches $def_name$ in the $def_part$",
      "You punch $def_name$ in the $def_part$",
      "$att_name$ punches you in the $def_part$",

      "$att_name$ kicks $def_name$ in the $def_part$",
      "You kick $def_name$ in the $def_part$",
      "$att_name$ kicks you in the $def_part$",

      "$att_name$ knees $def_name$ in the $def_part$",
      "You knee $def_name$ in the $def_part$",
      "$att_name$ knees you in the $def_part$",

      "$att_name$ headbutts $def_name$",
      "You headbutt $def_name$",
      "$att_name$ headbutts you"
    });
}


/* armor querying one... I forget what it is called */
int query_number_type(string type) {
    if (type == "ring")
    return 2;
    return 1;
}

/* number of weapons allowed to be wielded */
int query_number_wielded() {
    return 1;
}

/* the number of hands the race has */
void set_limbs(int i) {
    limbs = i;
}
int query_limbs() {
    return limbs;
}

/* race description used on the player object...
 * There will be a race varible on the player object which allows
 * the race to keep needed information on it
 */
string query_desc(object ob) { return "A small non descript person.\n"; }

/* bonuses and minuses on given skills.
 */
int query_skill_bonus(int lvl, string skill) {
    return 0; /* the standard race has no modifications */
}

/* when the player logs on this function is called.
 * it allows you to start up the player with whatever he needs.
 * EXCEPT it's not used, see start_player() below *curses*    
 */
int player_start(object player) {
    return 1;
}

/* and guess what this does?
 * Beware... If some is straight dested this will not be called,
 * So remember that you still must check your array for null members.
 */
int player_quit(object player) {
    return 1;
}

int query_dark(int i) {
    if( i < (min_light_limit-5) ) return 1; /* Can't see a thing */
    if(i < min_light_limit) return 2; /* can sorta see but not much */
    if( i < (min_light_limit+5) ) return 3; /* starting to lose it */
    if(i > (max_light_limit+ 40) ) return 6; /* blinded by the light */
    if(i > (max_light_limit + 20) ) return 5; /* dazzled */
    if(i > max_light_limit) return 4; /* squinting */
    return 0;
}

/*
 * is used by monsters...
 * You can trap this and set up anything that a monster might get at 
 * certain level in this race
 */
void set_level(int lvl, object ob) {

} /* set_level() */

mixed *query_bits()
{
    return bits;
}

mixed *query_bit(string s)
{
    int i;

    i = member_array(s, bits);
    if (i < 0) return ({ });
    if (pointerp(bits[i+1])) i--;
    return ({ bits[i], bits[i+1], bits[i+2] });
}

mixed query_possible_bits(string s)
{
    int i;
    string *poss;

    poss = ({ });
    for (i = 0; i < sizeof(bits); i+=3) {
    if (bits[i] == s || bits[i+1] == s) poss += ({ bits[i] });
    }
    return poss;
}
int query_max_level(string guild){
    return 100;
}

void start_player(object ob) {
    string p_race;
    if(ob)
    {
    p_race = ob->query_race();
    ob->add_language(p_race);
    }
    else return;
    switch(p_race) {
    case "elf":
    case "drow":
    ob->set_weight(ELF_WEIGHT);              
    break;
    case "dwarf":
    case "duergar":
    ob->set_weight(DWARF_WEIGHT);
    break;
    case "gnome":
    ob->set_weight(GNOME_WEIGHT);
    break;
    case "halfling":
    ob->set_weight(HALFLING_WEIGHT);
    break;
    case "orc":
    ob->set_weight(ORC_WEIGHT);
    break;
    case "goblin":
    ob->set_weight(GOBLIN_WEIGHT);
    break;
    case "lizard-man":
    ob->set_weight(LIZARD_MAN_WEIGHT);
    break;
    case "half-elf":
    ob->set_weight(HALF_ELF_WEIGHT);
    ob->add_language("human");
    ob->add_language("elf");
    break;
    case "half-drow":
    ob->set_weight(HALF_ELF_WEIGHT);
    ob->add_language("human");
    ob->add_language("drow");
    break;
    case "half-orc":
    ob->set_weight(HALF_ORC_WEIGHT);
    ob->add_language("human");
    ob->add_language("orc");
    break;
    case "human":
    ob->set_weight(HUMAN_WEIGHT);
    break;
    default:
    ob->set_weight(1700);
    break;
    }
}
/* determines time out of water for aquatic races, -1 for non aquatic */
int query_aquatic(object player)
{
    return -1;
}   
int query_swim_stamina(object player)
{
   if( player->query_property("free_action") )
      return player->query_property("free_action");
    return (player->query_con()*10)+player->query_property(SWIM_PROP);
}
int query_underwater_breathing(object player)
{
   if( player->query_property("free_action") )
      return player->query_property("free_action");
    return (player->query_con()*5)+player->query_property(UBREATHE_PROP);    
}

// this is cumulative each race hb. So dropping encumb does help
// but ... not a lot.
int adjust_stamina(object player, int stam)
{   
    int maxe,enc;
    if(!stam)
    {
    stam = player->query_con() * 10;
    }
    maxe = player->query_max_weight();
    enc  = player->query_loc_weight();
    enc += maxe/10; /* minimum load for being wet */
    switch(enc)
    {
    case 0:
    stam = 1;
    break;
    case 1:
    stam = (stam * 75)/100;
    break;
    case 2:
    stam = (stam * 85)/100;
    break;
    case 3:
    stam = (stam * 95)/100;
    break;                  
    case 4..20:
    stam += enc/3;
    break;
    default:
    stam += 7;
    break;
    }   
    return stam;    

}
void ashore(object player)
{
  if(player->query_property("swimming") || player->query_property("drowning"))
    {
    tell_object(player,"You haul in great lungfulls of air, just glad to be ashore again.\n");    
    player->remove_timed_property("swimming");
    player->remove_property("swimming");
    player->remove_timed_property("drowning");
    player->remove_property("drowning");
    }
}
void awater(object player)
{
    if(player->query_property("gasping"))
    {
    tell_object(player,"You relax as your flesh draws life giving oxygen from the water.\n");
    player->remove_timed_property("gasping");
    player->remove_property("gasping");
    }
}        
void gasping(object player)
{
    int stamina;
    stamina = this_object()->query_aquatic(player);
    if(stamina == -1) return;    
    if(!player->query_property("gasping"))
    {
    player->add_property("gasping",1);
    player->add_timed_property("gasping",2,stamina);  
    }
    switch(player->query_property("gasping"))
    {    
    case 1:
    player->adjust_hp(-10,this_object());
    tell_object(player,"%^RED%^You weaken as you struggle for oxygen in this dessicated hell.%^RESET%^\n");
    break;
    case 2:
    tell_object(player,"%^RED%^You galp frantically as you fight to draw oxygen from the air.%^RESET%^\n");
    break;
    }               
}

void sinking(object player)
{
    int stamina,dur;
    string col;

    col = "%^BOLD%^%^BLUE%^";
    
    stamina = this_object()->query_swim_stamina(player);
    if(stamina == -1) return;
    if(player->query_property("swimming") == 0)
    {
    player->add_property("swimming",1);
    player->add_timed_property("swimming",2,stamina);  
    }
   if(player->query_property("free_action"))
   {
      tell_object(player, "%^CYAN%^Strange, you haven't the urge or need "+
                  "to breathe.%^RESET%^\n");
      return;
   }
    else {
    dur = player->query_time_remaining("swimming");
    dur = adjust_stamina(player,dur);
    //tell_object(player,"Dur = "+dur+" ");
    if(player->query_property("swimming") == 2)
    player->add_timed_property("swimming",2,dur);
    if(dur < 196) col = "%^YELLOW%^";
    if(dur < 64)  col = "%^RED%^";    
    }
    switch(player->query_property("swimming"))
    {    
    case 1:
    environment(player)->DO_SINK(player,environment(player));
    this_object()->drowning(player); // so they don't bob up and avoid death if it's due
    break;
    case 2:
    tell_object(player,col+"You struggle to stay afloat.%^RESET%^\n");
    break;
    }               
}
void drowning(object player)
{
    int stamina,swim,dur;
    string col;

    col = "%^BOLD%^%^BLUE%^";
    stamina = this_object()->query_underwater_breathing(player);
    if(stamina == -1) return;
    if(!player->query_property("drowning"))
    {
    player->add_property("drowning",1);
    player->add_timed_property("drowning",2,stamina);  
    }
    if(player->query_property("free_action"))
    {
       tell_object(player, "%^CYAN%^Strange, you haven't the urge or need "+
                   "to breathe.%^RESET%^\n");
       return;
   }
    switch(player->query_property("drowning"))
    {    
    case 1:
    environment(player)->DO_DROWN(player,environment(player));
    break;
    case 2:
        dur = player->query_time_remaining("drowning");
    if(dur < 128) col = "%^YELLOW%^";
    if(dur < 64)  col = "%^RED%^";    

    tell_object(player,
      col+"   O%^RESET%^\n"+
      col+"   0%^RESET%^\n"+
      col+"  o%^RESET%^\n"+
      col+" o%^RESET%^\n"+
      col+".%^RESET%^\n"
    );
    break;
    }               
}
void werewolf(object player)
{        
    if(player->query_property("WEREWOLF") )
    {
    if(player->query_property("wolfbane") ) return;
 //Taniwha DUH, day of month
    //if("/obj/handlers/weather"->query_day(ENV(player)) ) return;
// query_moon == 0 -> full moon
      if(!"/obj/handlers/weather"->query_moon())
    {
        player->add_property("old_race",player->query_race());
           player->set_race_ob("/std/races/werewolf");
    }
    }  
}
static flushit(object player)
{
    player->remove_property("gasping");
    player->remove_timed__property("gasping");
    player->remove_property("swimming");
    player->remove_timed_property("swimming");
    player->remove_property("drowning");
    player->remove_timed_property("drowning");
}
void race_heartbeat(object player)
{

    if(!player) return;
    if(!ENV(player)) return;
    if(player->query_dead())
    {
    flushit(player);
    return;
    }
    switch(ENV(player)->query_property("location"))
    { 
    default:
    case "outside":
    werewolf(player);
    this_object()->ashore(player);
    this_object()->gasping(player);
    break;        
    case "inside":    
    this_object()->ashore(player);
    this_object()->gasping(player);
    break;
    case "sea_surface":
    this_object()->surface(player);
    this_object()->sinking(player);            
    this_object()->awater(player);
    break;
    case "underwater":
    this_object()->drowning(player);
    this_object()->awater(player);
    break;
    }          
}