musicmud-2.1.6/data/
musicmud-2.1.6/data/help/
musicmud-2.1.6/data/policy/
musicmud-2.1.6/data/wild/
musicmud-2.1.6/data/world/
musicmud-2.1.6/doc/
musicmud-2.1.6/src/ident/
musicmud-2.1.6/src/lua/
musicmud-2.1.6/src/lua/include/
musicmud-2.1.6/src/lua/src/lib/
musicmud-2.1.6/src/lua/src/lua/
musicmud-2.1.6/src/lua/src/luac/
#include "body.h"
#include "musicmud.h"
#include "misc.h"

pairs_t pairs[] = {

#define P(a, b, depends) {a, "left" b, "right" b, b, "left " b, "right " b, depends }
#define S(a, depends)

  P("arms", "arm", -1),    /* 0 */
  P("wrists", "wrist", 0), /* 1 */
  P("hands", "hand", 1),   /* 2 */ 
  P("thumbs", "thumb", 2), /* 3 */ 
  P("legs", "leg", -1),    /* 4 */
  P("feet", "foot", 4),    /* 5 */
  P("eyes", "eye", 8),    /* 6 */
  P("ears", "ear", 8),    /* 7 */
};

int pairs_n = 8;

const char *fingers[8] = {
  "left index finger",  "right index finger", 
  "left middle finger",  "right middle finger", 
  "left ring finger",  "right ring finger", 
  "left little finger",  "right little finger", 
};

const char *get_mog_noun(const char *adj, anoff_t la)
{
  int i = 0;
  while (animals[i].noun) {
    if (streq(animals[i].adj, adj))
      return animals[i].*la;
    i++;
  }
  return 0;
}

animal_t animals[] = {
  {"badger",           "mustiline",  "Snuffle.",         "  tetrapod"},
  {"bat",              "vespertine", "!",                  "avian"},
  {"bee",              "apine",      "Bzzzz!",             "insect" },
  {"cat",              "feline",     "Miao.",              "tetrapod",},
  {"chicken",          "galline",    "Cluck cluck!",       "avian"},
  {"cow",              "bovine",     "Moo!",               "tetrapod",},
  {"dalek",            "davrine",    "Exterminate!",       "droid",},
  {"dog",              "canine",  random_number(2)?"Woof!":"Bark!", "tetrapod"},
  {"donkey",           "asinine",    "Heehaw!",            "tetrapod"},
  {"duck",             "anatine",    "Quack!",             "avian"},
  {"frog",             "ranine",     "Ribbit!",            "tetrapod"},
  {"goat",             "caprine",    "Meh!",               "tetrapod"},
  {"horse",            "equine",     "Neigh!",             "tetrapod"},
  {"monkey",           "simian",     "Oook!",              "tetrapod"},
  {"monster",          "monstrous",  "Get off my land!",   "tetrapod"},
  {"mouse",            "murine",     "Squeak!",            "tetrapod"},
  {"newt",             "tarichine",  "(I'll get better.)", "tetrapod"},
  {"owl",              "strigine",   "Tweet-twoo!",        "avian"}, 
  {"parrot",           "psittacine", "Pretty Polly!",      "avian"}, 
  {"penguin",          "spheniscine","Linux Rocks!",       "tetrapod"},
  {"bowl of petunias", "petunian",   "Oh no, not again!",  "plant"},
  {"pig",              "porcine",    "Oink!",              "tetrapod"}, 
  {"pigeon",           "columbine",  "Coup! Coup!",        "avian"},
  {"sheep",            "ovine",      "Baa!",               "tetrapod"},
  {"snake",            "serpentine", "Hssss!",             "snake"},
  {"toad",             "bufine",     "Croak!",             "tetrapod"},
  {"tree",             "aboreal",    NULL,                 "tree"},
  {"wolf",             "lupine",     "Ooooowww!",          "tetrapod"},
  {NULL,NULL,NULL},

  /*  {"slug", "limacine", "",     "insect"}, */
};

const char *species(const MudObject *who)
{
  if (const char *p=who->get("$piggy")) {
    for (size_t i=0;animals[i].noun;i++) {
      if (streq(animals[i].adj, p) && animals[i].noun)
	return animals[i].noun;
    }
  }

  const char *b = who->get("body");
  if (b && (streq(b, "human") || streq(b, "lamidav")))
    return b;

  if (b)
    return 0;

  if (is_mobile(who)||is_player(who))
    return "human";

  return 0;
}

const char *body(const MudObject *who) {
  const char *b = who->get("body");
  if (const char *p=who->get("$piggy")) {
    for (size_t i=0;animals[i].noun;i++) {
      if (streq(animals[i].adj, p) && animals[i].body)
	return animals[i].body;
    }
  }
  if (b) return b;
  if (is_mobile(who)||is_player(who)) return "human";
  return 0;
}