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/
/* Written by Hamlet, August 1995.  Handles various details of our new
   god structure for the players.  player.c calls it.  Renaming/moving
   would be a BAD idea.
*/
#define MYSAVEFILE "/save/god_handler"
#include "gods.h"
#include "altar_longs.h"

string *DEVELOPERS = ({ "guilo", "krelk", "cherokee" });

static mapping gods;
static mapping sac_items;
static string *races;
static mapping race_gods;

/* This one stores the high priests.  SHOULD be the only thing saved. */
mapping highs;

void create() {
  seteuid("Room");
  if(file_size(MYSAVEFILE+".o") > 0)
    restore_object(MYSAVEFILE,1);
  if(!highs)
    highs = ([ ]);
  gods = GODS;
  sac_items = SAC_ITEMS;
  races = RACES;
  race_gods = ALLOWED_GODS;
}

void reset() {
  save_object(MYSAVEFILE,1);
}

void dest_me() {
  save_object(MYSAVEFILE,1);
  destruct(this_object());
}

int query_developer(object ob) {
  if(ob->query_lord())
    return 1;
  if(member_array(ob->query_name(),DEVELOPERS) != -1)
    return 1;

  return 0;
}

int is_deity(string which) { return gods[which]; }
int deity_gender(string which) { return gods[which]; }

mixed query_high_priest(string whichgod) { return highs[whichgod]; }
static int set_high_priest(string whichgod, string theplayer, int gender, 
                                                                int value) {
  if(gods[whichgod]) {
    highs[whichgod] = ({ theplayer, value, time(), gender });
    save_object(MYSAVEFILE,1);
    return 1;
  }
  return 0;
}

mapping high_priests() {
  return highs;
}

/* Next few functions return data in the mappings. */
string *list_of_deities() {  return GOD_LIST;  }

string *worshipper_races(string god) {
  string *data = ({ });
  int i;
  
  if(!is_deity(god))  return data;
  
  for(i=0;i<sizeof(races);i++)
    if(member_array(god,race_gods[races[i]]) != -1)
      data += ({ races[i] });
      
  return data;
}

int race_can_worship(string god, string race) {
  if(!god || !race)  return 0;
    
  if(objectp(race))
    race = race->query_race();
    
  if(!race)  return 0;

  if(member_array(god,race_gods[race]) == -1)
    return 0;
  else
    return 1;
}

string *gods_for_race(string race) {
  string *data = ({ });
  int i;
  
  for(i=0;i<sizeof(race_gods[race]);i+=2)
    data += ({ race_gods[race][i] });
    
  return data;
}
  
int god_race_modifier(string race, string god) {
  int mod;
  
  if(!gods[god]) return 0;
  
  mod = member_array(god,race_gods[race]);
  
  if(mod == -1)
    return 0;
  else
    return race_gods[race][mod+1];
}

string *sacrificial_interests(string god) {
  return sac_items[god];
}

int query_sacrifices(object player) {
  object tp;
  
  if(objectp(player))
    return player->query_property("sacrifices");
  else {
    tp = find_player(player);
    if(tp)
      return tp->query_property("sacrifices");
    else
      return 0;
  }
}

/* This one should not be called directly, except maybe in quests.
   Use sacrifice_item() or sacrifice_xp(), if at all possible, instead.
   Racial modifiers are NOT handled in this function, use 
   god_race_modifier() where appropriate.
*/
int adjust_sacrifices(object player, int val) {
  int amt;
  string hisdeity;
    
  if(stringp(player))
    player = find_player(player);
    
  if(!player) return 0;
  
  hisdeity = player->query_deity();
  if(!hisdeity || (hisdeity == "none"))  return 0;
  
  amt = player->query_property("sacrifices");
  
  if(player->query_property("SWITCHED_DEITIES")) {
    if( (time() - (int)player->query_property("SWITCHED_DEITIES")) < 604800) 
      val /= 2;  /* One week, gods are still angry.  Less credit */
    else
      player->remove_property("SWITCHED_DEITIES");
  }
  
  amt += val;
    
  player->remove_property("sacrifices");
  player->add_property("sacrifices",amt);

  if(!highs[hisdeity] || (highs[hisdeity][1] < amt) ||
     (highs[hisdeity][0] == player->query_name()) ||
     ((time() - highs[hisdeity][2]) > 1209600) ) /* Two weeks */
    set_high_priest(hisdeity,(string)player->query_name(),
                    player->query_gender(),amt);
   
  return amt;
}

/* Should be used when the player is sacrificing anything but xp.
   If there's an altar, make the stuff go on the altar and then use
   sacrifice_all_items().  More convenient that way.  Returns amount
   that "sacrifices" gets incremented.
*/
int sacrifice_item(object player, object theitem, string thegod) {
  string itemtype;
  int raw_credit;
  int sac_credit;
  int pos;
  
  if(!theitem) return 0;
  
  if(theitem->query_weapon())
    itemtype = "weapons";
  else if(theitem->query_armour())
    itemtype = "armours";
  else if(member_array("Some Money For Me",theitem->query_alias()) != -1)
    itemtype = "money";
  else if(theitem->query_corpse())
    itemtype = "corpses";
  else
    itemtype = "items";
    
  if(member_array(itemtype,sac_items[thegod]) == -1)
    raw_credit = 0;
  else {
    if(itemtype == "corpses")
      raw_credit = 5000 + random(5000);
    else
      raw_credit = theitem->query_value();
  }
 
  pos = member_array(thegod,race_gods[player->query_race()]);
    
  if(pos == -1) {
    if(thegod == player->query_deity())
      sac_credit = 0;
    else
      sac_credit = (raw_credit * 33) / 100;
  }
  else     
    sac_credit = (raw_credit * race_gods[player->query_race()][pos+1]) / 100;
  
  if(sac_credit) {
    if(thegod == player->query_deity())
      adjust_sacrifices(player,sac_credit);
    player->adjust_deity_status(-(sac_credit * STATUS_MULT / 500),thegod);
  }
  theitem->dest_me();
          
  return sac_credit;
}

/* This is for gods that want xp sacrificed.  The altar-room will have to
   parse the amount and that sort of thing, since they can't lay experience
   upon the altar.  MAKE SURE they're not sacrificing more than they 
   currently have.  The function will realize this and correct for it, 
   but the return value will make no sense, as it gets hit with modifiers
   and such (function returns the actual amount that "sacrifices" gets
   incremented.)
*/
int sacrifice_xp(object player, int amt, string thegod) {
  int sac_credit;
  int pos;
  
  if(amt < 0)  amt = -amt;
  if(amt > player->query_xp())
    amt = player->query_xp();
  if(amt < 0)  amt = 0;

  if(amt == 0)  return 0;
    
  player->adjust_xp(-amt);
  
  if(member_array("experience",sac_items[thegod]) == -1)
    return 0;
  
  pos = member_array(thegod,race_gods[player->query_race()]);
  
  if(pos == -1) {
    if(thegod == player->query_deity())
      return 0;
    else
      sac_credit = (amt * 33) / 100;
  }
  else 
    sac_credit = (amt * race_gods[player->query_race()][pos+1]) / 100;
  
  if(thegod == player->query_deity())
    adjust_sacrifices(player,sac_credit);
  
  player->adjust_deity_status(-(sac_credit * STATUS_MULT / 500),thegod);
      
  return sac_credit;
}

/* Cute little wrapper for sacrifice_item() that sacrifices everything
   in a certain container.  Returns amount that "sacrifices" gets 
   incremented.
*/
int sacrifice_all_items(object player, object altar, string thegod) {
  object *stuff;
  int total = 0;
  int i;
  
  if( !altar || !objectp(altar) )  return 0;
  
  stuff = all_inventory(altar);
  
  for(i=0;i<sizeof(stuff);i++)
    total += sacrifice_item(player,stuff[i],thegod);
    
  return total;
}

/* This one is called when a player types retire.  Because most of retire
   is in /secure, I threw this in /global/player.c so it ALWAYS gets called
   when they type retire, whether they actually go through with it or not.
   In other words, if they chicken out, they're still not high priest
   until they go and sacrifice something new.  Use remove_sacrifices()
   for any other purpose.
*/
int remove_high_priest(string player, string deity) {
  if(objectp(player))
    player = player->query_name();

    if(!player)  return 0;
    if(!deity)   return 0;

    if( highs[deity] &&
        (highs[deity][0] == player) ) {
      highs = m_delete(highs,deity);
      save_object(MYSAVEFILE,1);
      return 1;
    }
    return 0;
}

/* This should be called when a player changes deities or refreshes. */
/* Returns 1 if they were the high priest.  Otherwise returns 0. */
int remove_sacrifices(object player) {
  if(stringp(player))
    player = find_player(player);

  if(!player)  return 0;

  player->remove_property("sacrifices");

  return remove_high_priest(player->query_name(), player->query_deity());
}

/* Returns the long associated with a god's altar.
   N.B.:  Lathander -> Taniwha        Lolth  -> Cyrcia
          Tempus    -> Timion         Tymora -> Hokemj
          Virga   -> Raisa        Bivins -> Radix
*/
             
string altar_long(string whichgod) {
  switch(whichgod) {
    case "baldrick"  : return ALTAR_BALDRICK;
    case "timion"    : return ALTAR_TIMION;
    case "raisa"     : return ALTAR_RAISA;
    case "taniwha"   : return ALTAR_TANIWHA;
    case "hokemj"    : return ALTAR_HOKEMJ;
    case "cyrcia"    : return ALTAR_CYRCIA;
    case "radix"     : return ALTAR_RADIX;
    case "ducky"     : return ALTAR_DUCKY;
    case "grimbrand" : return ALTAR_GRIMBRAND;
    case "none"      : return ALTAR_NONE;
  };
}

/* needs alignment stuff */