diff -u --new-file --recursive 2/db.c 1/db.c
--- 2/db.c	Tue Jan 26 16:33:28 1999
+++ 1/db.c	Tue Feb 16 21:16:08 1999
@@ -1953,6 +1953,9 @@
   GET_CLASS(ch) = st->chclass;
   GET_LEVEL(ch) = st->level;
 
+  ch->sacs = st->sacs;
+  if (!ch->sacs) ch->sacs = 1;
+
   ch->player.short_descr = NULL;
   ch->player.long_descr = NULL;
   ch->player.title = str_dup(st->title);
@@ -2063,6 +2066,8 @@
 
   ch->player.time.played = st->played;
   ch->player.time.logon = time(0);
+
+  st->sacs = ch->sacs;
 
   st->hometown = ch->player.hometown;
   st->weight = GET_WEIGHT(ch);
diff -u --new-file --recursive 2/info.c 1/info.c
--- 2/info.c	Tue Jan 26 16:33:32 1999
+++ 1/info.c	Tue Feb 16 21:24:44 1999
@@ -86,6 +86,7 @@
 void list_char_to_char(struct char_data * list, struct char_data * ch);
 void do_auto_exits(struct char_data * ch);
 ACMD(do_exits);
+ACMD(do_sac);
 void look_in_direction(struct char_data * ch, int dir);
 void look_in_obj(struct char_data * ch, char *arg);
 char *find_exdesc(char *word, struct extra_descr_data * list);
@@ -397,6 +398,42 @@
 }
 
 
+ACMD(do_sac)
+{
+   struct obj_data *obj;
+
+   one_argument(argument, arg);
+
+   // note, I like to take care of no arg and wrong args up front, not
+   // at the end of a function, lets get the wrongness out of the way :)
+   if (!*arg)
+   {
+     send_to_char("Sac what?\n\r",ch);
+     return;
+   }
+
+   // if it's not in the room, we ain't gonna sac it
+   if (!(obj = get_obj_in_list_vis(ch, arg, world[ch->in_room].contents)))
+   {
+     send_to_char("That obj aint here!\n\r",ch);
+     return;
+   }
+
+   // nifty, got the object in the room, now check its flags
+   // if (!CAN_WEAR(obj, ITEM_WEAR_TAKE)) // (old version)
+   if (!IS_CORPSE(obj))
+   {
+     send_to_char("You can't sacrifice that!\n\r",ch);
+     return;
+   }
+
+   // seems as if everything checks out eh? ok now do it
+   act("$n sacrifices $p.", FALSE, ch, obj, 0, TO_ROOM);
+   act("You sacrifice $p to your god.\r\n",FALSE, ch, obj, 0, TO_CHAR);
+   GET_SAC(ch) = GET_SAC(ch) + 1;
+   extract_obj(obj);
+}
+
+
 
 void look_at_room(struct char_data * ch, int ignore_brief)
 {
@@ -702,6 +739,10 @@
     strcat(buf, "  It's your birthday today.\r\n");
   else
     strcat(buf, "\r\n");
+
+/* ==== For sacrifice purpose :) ==== */
+  sprintf(buf + strlen(buf),
+       "You have sacrifice %d corpses to your god.\r\n",GET_SAC(ch));
 
   sprintf(buf + strlen(buf),
        "You have %d(%d) hit, %d(%d) mana and %d(%d) movement points.\r\n",
diff -u --new-file --recursive 2/interpreter.c 1/interpreter.c
--- 2/interpreter.c	Tue Feb 16 14:13:50 1999
+++ 1/interpreter.c	Tue Feb 16 17:38:28 1999
@@ -91,6 +91,7 @@
 ACMD(do_examine);
 ACMD(do_exit);
 ACMD(do_exits);
+ACMD(do_sac);
 ACMD(do_flee);
 ACMD(do_follow);
 ACMD(do_force);
@@ -286,6 +287,7 @@
   { "enter"    , POS_STANDING, do_enter    , 0, 0 },
   { "equipment", POS_SLEEPING, do_equipment, 0, 0 },
   { "exits"    , POS_RESTING , do_exits    , 0, 0 },
+  { "sacrifice", POS_STANDING, do_sac      , 0, 0 },
   { "examine"  , POS_SITTING , do_examine  , 0, 0 },
 
   { "force"    , POS_SLEEPING, do_force    , LVL_GOD, 0 },
diff -u --new-file --recursive 2/structs.h 1/structs.h
--- 2/structs.h	Tue Jan 26 16:33:50 1999
+++ 1/structs.h	Tue Feb 16 19:54:26 1999
@@ -836,6 +836,7 @@
 struct char_data {
    int pfilepos;			 /* playerfile pos		  */
    sh_int nr;                            /* Mob's rnum			  */
+   sh_int sacs;                          /* Number of sacrifices          */
    room_rnum in_room;                    /* Location (real room number)	  */
    room_rnum was_in_room;		 /* location for linkdead people  */
 
@@ -876,6 +877,7 @@
    sh_int hometown;
    time_t birth;   /* Time of birth of character     */
    int	played;    /* Number of secs played in total */
+   sh_int sacs;    /* Number of sacrifices           */
    ubyte weight;
    ubyte height;
 
diff -u --new-file --recursive 2/utils.h 1/utils.h
--- 2/utils.h	Tue Jan 26 16:33:52 1999
+++ 1/utils.h	Tue Feb 16 20:04:50 1999
@@ -240,6 +240,8 @@
 #define GET_LEVEL(ch)   ((ch)->player.level)
 #define GET_PASSWD(ch)	((ch)->player.passwd)
 #define GET_PFILEPOS(ch)((ch)->pfilepos)
+#define GET_SAC(ch)     ((ch)->sacs)
 
 /*
  * I wonder if this definition of GET_REAL_LEVEL should be the definition
