LPMUD/
LPMUD/BIN/
LPMUD/DOC/
LPMUD/MUDLIB/
LPMUD/MUDLIB/BANISH/
LPMUD/MUDLIB/D/
LPMUD/MUDLIB/DOC/
LPMUD/MUDLIB/DOC/DOMAINS/
LPMUD/MUDLIB/DOC/EFUN/
LPMUD/MUDLIB/DOC/EXAMPLES/
LPMUD/MUDLIB/DOC/EXAMPLES/ARMOUR/
LPMUD/MUDLIB/DOC/EXAMPLES/CONTAIN/
LPMUD/MUDLIB/DOC/EXAMPLES/FOOD/
LPMUD/MUDLIB/DOC/EXAMPLES/MAGIC/
LPMUD/MUDLIB/DOC/EXAMPLES/MONSTER/
LPMUD/MUDLIB/DOC/EXAMPLES/ROOM/
LPMUD/MUDLIB/DOC/EXAMPLES/WEAPONS/
LPMUD/MUDLIB/FUNCTION/
LPMUD/MUDLIB/INCLUDE/
LPMUD/MUDLIB/INCLUDE/FN_SPECS/
LPMUD/MUDLIB/INCLUDE/SKILLS/
LPMUD/MUDLIB/INFO/
LPMUD/MUDLIB/INHERIT/BASE/
LPMUD/MUDLIB/LOG/
LPMUD/MUDLIB/MANUALS/312/
LPMUD/MUDLIB/NEWS/
LPMUD/MUDLIB/OBJ/PARTY/
LPMUD/MUDLIB/OBJ/SHADOWS/
LPMUD/MUDLIB/OBJECTS/COMPONEN/
LPMUD/MUDLIB/OPEN/
LPMUD/MUDLIB/OPEN/LIBRARY/
LPMUD/MUDLIB/OPEN/PARTY/
LPMUD/MUDLIB/PLAYERS/
LPMUD/MUDLIB/PLAYERS/ZIL/
LPMUD/MUDLIB/ROOM/
LPMUD/MUDLIB/ROOM/CITY/ARENA/
LPMUD/MUDLIB/ROOM/CITY/CREATOR/
LPMUD/MUDLIB/ROOM/CITY/GARDEN/MONST/
LPMUD/MUDLIB/ROOM/CITY/OBJ/
LPMUD/MUDLIB/ROOM/CITY/PUB/
LPMUD/MUDLIB/ROOM/CITY/SHOP/
LPMUD/MUDLIB/ROOM/DEATH/
LPMUD/MUDLIB/ROOM/REGISTRY/
LPMUD/MUDLIB/SECURE/
LPMUD/MUDLIB/SECURE/UDP_CMD_/
LPMUD/MUDLIB/SKILLS/
LPMUD/MUDLIB/SKILLS/FIGHTER/
LPMUD/MUDLIB/SKILLS/THIEF/
LPMUD/MUDLIB/USR/
LPMUD/MUDLIB/USR/CREATORS/
LPMUD/MUDLIB/USR/PLAYERS/
#ifndef PSI_H
#define PSI_H

#define HEAL_PSI_PERIOD (20 - query_wisdom()/6)

/*** Psionicist ***/

int clairsentient;         /* sensory effecting powers */
int psycokinetic;          /* object effecting powers  */
int psycometabolic;        /* body effecting powers    */
int psycoportive;          /* space effecting powers   */
int telepathic;            /* thought effecting powers */
int metapsionic;           /* enhancement powers       */

int psionic_points;        /* current psionic points */
int max_psionic_points;    /* maximum psionic points */


/***             Psionicist             ***/ 

int query_clairsentient()    { return clairsentient;  }
int query_psycokinetic()     { return psycokinetic;   }
int query_psycometabolic()   { return psycometabolic; }
int query_psycoportive()     { return psycoportive;   }
int query_telepathic()       { return telepathic;     }
int query_metapsionic()      { return metapsionic;    }

void set_max_psp() {
  max_psionic_points += clairsentient + psycokinetic + psycometabolic;
  max_psionic_points += psycoportive + telepathic + metapsionic;
  max_psionic_points = 2 * max_psionic_points;
}


int set_clairsentient(int i) {
  clairsentient = i;
  set_max_psp();
  return clairsentient;
}

int set_psycokinetic(int i) { 
  psycokinetic = i;
  set_max_psp();
  return psycokinetic;
}

int set_psycometabolic(int i) { 
  psycometabolic = i;
  set_max_psp();
  return psycometabolic;
}

int set_psycoportive(int i) { 
  psycoportive = i;
  set_max_psp();
  return psycoportive;
}

int set_telepathic(int i) {
  telepathic = i;
  set_max_psp();
  return telepathic;
}

int set_metapsionic(int i) { 
  metapsionic = i;
  set_max_psp();
  return metapsionic;
}

int query_psionic_points()   { return psionic_points; }
int query_psp()              { return psionic_points; }

int query_max_psionic_points() { return max_psionic_points; }
int query_max_psp()            { return max_psionic_points; }

int adj_psionic_points(int i) {
  psionic_points = psionic_points + i;
  if(psionic_points > max_psionic_points)
    psionic_points = max_psionic_points;
  return psionic_points;
}

void heal_psionicist() {
  if(random(HEAL_PSI_PERIOD)) return;
  adj_psionic_points(6);
}


void clear_psionicist() {
  clairsentient = 0; psycokinetic = 0; psycometabolic = 0;
  psycoportive = 0; telepathic = 0; metapsionic = 0;
  psionic_points = 0; max_psionic_points = 0;
}

void query_psionicist_stats() {
  string str;

  str = "\n         -=[ Psionicist Disciplines ]=-\n\n";
  str += " Clairsentience: "+clairsentient+"                   ";
  str = extract(str,0,25);
  str += " Psycokinetic: "+psycokinetic+"                     ";
  str = extract(str,0,50);
  str += " Psycometabolism: "+psycometabolic+"                ";
  str = extract(str,0,75);
  write(str +"\n");

  str = " Psycoportive: "+psycoportive+"                      ";
  str = extract(str,0,25);
  str += " Telepathy: "+telepathic+"                          ";
  str = extract(str,0,50);
  str += " Metapsionic: "+metapsionic+"                       ";
  str = extract(str,0,75);
  write(str +"\n");

  write(" Psionic Points: "+psionic_points+"/"+max_psionic_points+"\n");
}

void heal_psionicist(int h) {
  adj_psionic_points(h);
}
  
#endif /* PSI_H */