--- src/monst.c.orig	Thu Aug  3 16:51:43 2000
+++ src/monst.c	Thu Jan 18 17:54:35 2001
@@ -1023,6 +1023,12 @@
 	  NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
 	SIZ(15, 10, 0, MS_BUZZ, MZ_TINY), MR_ELEC|MR_POISON, 0,
 	M1_ANIMAL, M2_HOSTILE, M3_INFRAVISIBLE, CLR_MAGENTA),
+    MON("millennium bug", S_XAN,
+	LVL(1, 12, 9, 0, 0), (G_GENO|G_SGROUP|G_NOCORPSE|3),
+	A(ATTK(AT_BITE, AD_Y2K, 1, 4),
+	  NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
+	SIZ(15, 10, 0, MS_Y2K, MZ_TINY), MR_ELEC|MR_POISON, 0,
+	M1_ANIMAL, M2_HOSTILE, M3_INFRAVISIBLE, CLR_BRIGHT_GREEN),
     MON("xan", S_XAN,
 	LVL(7, 18, -4, 0, 0), (G_GENO|3),
 	A(ATTK(AT_STNG, AD_LEGS, 1, 4),
--- src/mhitu.c.orig	Thu Dec 21 22:06:05 2000
+++ src/mhitu.c	Thu Jan 18 00:07:48 2001
@@ -1438,6 +1438,18 @@
 	    		}
 	    	}
 	    	break;
+	    case AD_Y2K:
+		hitmsg(mtmp, mattk);
+		if (uncancelled) {
+		    if (rn2(2))
+			pline("Suddenly, the dungeon collapses (well, not really).");
+		    else
+			You("suddenly feel as though it's 1900!");
+		} else {
+		    You("are briefly surrounded by a cloud of media hype.");
+		    dmg = 0;
+		}
+		break;
 	    default:	dmg = 0;
 			break;
 	}
--- src/mhitm.c.orig	Thu Aug  3 16:00:42 2000
+++ src/mhitm.c	Thu Jan 18 00:08:37 2001
@@ -573,6 +573,7 @@
 	    case AD_WERE:
 	    case AD_HEAL:
 	    case AD_LEGS:
+	    case AD_Y2K:
 	    case AD_PHYS:
 		if (mattk->aatyp == AT_KICK && thick_skinned(pd))
 			tmp = 0;
--- src/uhitm.c.orig	Sat Jan 13 13:14:05 2001
+++ src/uhitm.c	Thu Jan 18 00:10:21 2001
@@ -1133,6 +1133,7 @@
 	    case AD_WERE:	    /* no effect on monsters */
 	    case AD_HEAL:
 	    case AD_LEGS:
+	    case AD_Y2K:
 	    case AD_PHYS:
 		if(mattk->aatyp == AT_WEAP) {
 		    if(uwep) tmp = 0;
--- src/mon.c.orig	Thu Aug  3 15:30:14 2000
+++ src/mon.c	Thu Jan 18 18:00:23 2001
@@ -1351,6 +1351,12 @@
 				s_suffix(Monnam(mon)));
 		return FALSE;
 	}
+	if (mdat == &mons[PM_MILLENNIUM_BUG]) {
+		if (cansee(mon->mx, mon->my))
+			pline("%s evaporates in a cloud of media hype.",
+			      Monnam(mon));
+		return FALSE;
+	}
 
 	/* Gas spores always explode upon death */
 	for(i = 0; i < NATTK; i++) {
--- src/sounds.c.orig	Thu Aug  3 15:31:44 2000
+++ src/sounds.c	Thu Jan 18 00:14:13 2001
@@ -791,6 +791,9 @@
 		pline_msg = "is busy reading a copy of Sandman #8.";
 	    else verbl_msg = "Who do you think you are, War?";
 	    break;
+	case MS_Y2K:
+	    verbl_msg = "A)bort, R)etry, F)ail?";
+	    break;
     }
 
     if (pline_msg) pline("%s %s", Monnam(mtmp), pline_msg);
--- include/monattk.h.orig	Mon Dec 27 11:58:37 1999
+++ include/monattk.h	Wed Jan 17 23:56:44 2001
@@ -76,6 +76,7 @@
 #define AD_SLIM		40	/* turns you into green slime */
 #define AD_ENCH		41	/* remove enchantment (disenchanter) */
 #define AD_CORRODE	42	/* corrode armor (black pudding) */
+#define AD_Y2K		43	/* Y2K attack (millennium bug) */
 
 #define AD_CLRC		240	/* random clerical spell */
 #define AD_SPEL		241	/* random magic spell */
--- include/monflag.h.orig	Sun Nov 14 21:40:00 1999
+++ include/monflag.h	Wed Jan 17 23:57:44 2001
@@ -48,6 +48,7 @@
 #define MS_SPELL	37	/* spellcaster not matching any of the above */
 #define MS_WERE		38	/* lycanthrope in human form */
 #define MS_BOAST	39	/* giants */
+#define MS_Y2K		40	/* Y2K-related noises (millennium bug) */
 
 
 #define MR_FIRE		0x01	/* resists fire */
--- win/share/monsters.txt.orig	Thu Oct 21 17:31:36 1999
+++ win/share/monsters.txt	Wed Jan 17 23:52:06 2001
@@ -2256,6 +2256,25 @@
   MMGMMAAAAAAMMMMM
   MMMMMMAAMAMMMMMM
 }
+# tile 4269 (millennium bug)
+{
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMIIMMMM
+  MMMMMMMMMILIIMMM
+  MMMMMMMMMIIIIMMM
+  MMMMMIIMMIIIMMMM
+  MMMIIMMIIMMMAAAM
+  MMMMMILIIIMAAAAM
+  MMMMILIIMMIAAAAM
+  NNNILIIMIAAAAAMM
+  NANIIIIMAIAAMMMM
+  NNNIINNNAAAMAMMM
+  MMIIINANAAMAMAMM
+  MIIIANNNAAMMAMMM
+  MMIMMAAAAAAMMMMM
+  MMMMMMAAMAMMMMMM
+}
 # tile 118 (xan)
 {
   MMMMMMMMMMMMMMMM
