diff -Prub slashem-0.0.7E5/src/botl.c slashem-0.0.7E5_hpmon/src/botl.c
--- slashem-0.0.7E5/src/botl.c	2004-01-10 18:51:39.000000000 +0200
+++ slashem-0.0.7E5_hpmon/src/botl.c	2004-02-10 16:24:18.000000000 +0200
@@ -327,6 +327,9 @@
 	register int con = ACURR(A_CON), wis = ACURR(A_WIS),
 		     intl = ACURR(A_INT);
 	int hp, hpmax;
+#ifdef HPMON
+	int hpcolor, hpattr;
+#endif
 	int cap = near_capacity();
 #ifdef ALLEG_FX
 	int w;
@@ -351,8 +354,44 @@
 		  );
 	else
 		nb = newbot2;
+#ifdef HPMON
+	Sprintf(nb = eos(nb), "HP:");
+#else
 	Sprintf(nb = eos(nb), "HP:%d(%d) Pw:%d(%d) AC:%-2d",
 		hp, hpmax, u.uen, u.uenmax, u.uac);
+#endif
+#ifdef HPMON
+	curs(WIN_STATUS, 1, 1);
+	putstr(WIN_STATUS, 0, newbot2);
+
+	Sprintf(nb = eos(newbot2), "%d(%d)", hp, hpmax);
+#ifdef TEXTCOLOR
+	if (iflags.use_color) {
+	  curs(WIN_STATUS, 1, 1);
+	  hpattr = ATR_NONE;
+	  if(hp == hpmax){
+	    hpcolor = NO_COLOR;
+	  } else if(hp > (hpmax*2/3)) {
+	    hpcolor = CLR_GREEN;
+	  } else if(hp <= (hpmax/3)) {
+	    hpcolor = CLR_RED;
+	    if(hp<=(hpmax/10)) 
+	      hpattr = ATR_BLINK;
+	  } else {
+	    hpcolor = CLR_YELLOW;
+	  }
+	  if (hpcolor != NO_COLOR)
+	    term_start_color(hpcolor);
+	  if(hpattr!=ATR_NONE)term_start_attr(hpattr);
+	  putstr(WIN_STATUS, hpattr, newbot2);
+	  if(hpattr!=ATR_NONE)term_end_attr(hpattr);
+	  if (hpcolor != NO_COLOR)
+	    term_end_color();
+	}
+#endif /* TEXTCOLOR */
+	Sprintf(nb = eos(newbot2), " Pw:%d(%d) AC:%-2d",
+		u.uen, u.uenmax, u.uac);
+#endif /* HPMON */
 
 	if (Upolyd)
 		Sprintf(nb = eos(nb), " HD:%d", ((u.ulycn == u.umonnum) ? 
