]> granicus.if.org Git - nethack/commitdiff
*** empty log message ***
authorjwalz <jwalz>
Sat, 5 Jan 2002 21:06:01 +0000 (21:06 +0000)
committerjwalz <jwalz>
Sat, 5 Jan 2002 21:06:01 +0000 (21:06 +0000)
win/gnome/gnstatus.c [new file with mode: 0644]

diff --git a/win/gnome/gnstatus.c b/win/gnome/gnstatus.c
new file mode 100644 (file)
index 0000000..c6dcdad
--- /dev/null
@@ -0,0 +1,941 @@
+/*     SCCS Id: @(#)gnstatus.c 3.3     2000/07/16      */
+/* Copyright (C) 1998 by Erik Andersen <andersee@debian.org> */
+/* NetHack may be freely redistributed.  See license for details. */
+
+#include "gnstatus.h"
+#include "gnsignal.h"
+#include "gn_xpms.h"
+#include "gnomeprv.h"
+
+
+extern const char *hu_stat[]; /* from eat.c */
+extern const char *enc_stat[]; /* from botl.c */
+
+void ghack_status_window_update_stats();
+void ghack_status_window_clear(GtkWidget *win, gpointer data);
+void ghack_status_window_destroy(GtkWidget *win, gpointer data);
+void ghack_status_window_display(GtkWidget *win, boolean block, gpointer data);
+void ghack_status_window_cursor_to(GtkWidget *win, int x, int y, gpointer data);
+void ghack_status_window_put_string(GtkWidget *win, int attr, const char* text, gpointer data);
+
+static void ghack_fade_highlighting();
+static void ghack_highlight_widget( GtkWidget* widget, GtkStyle* oldStyle, 
+       GtkStyle* newStyle);
+
+/* some junk to handle when to fade the highlighting */
+#define NUM_TURNS_HIGHLIGHTED  3
+
+static GList   *s_HighLightList;
+
+typedef struct {
+    GtkWidget* widget;
+    GtkStyle*  oldStyle;
+    int                nTurnsLeft;
+} Highlight;
+
+
+/* Ok, now for a LONG list of widgets... */
+static GtkWidget* statTable = NULL;
+static GtkWidget* titleLabel = NULL;
+static GtkWidget* dgnLevelLabel = NULL;
+static GtkWidget* strPix = NULL;
+static GtkWidget* strLabel = NULL;
+static GtkWidget* dexPix = NULL;
+static GtkWidget* dexLabel = NULL;
+static GtkWidget* intPix = NULL;
+static GtkWidget* intLabel = NULL;
+static GtkWidget* wisPix = NULL;
+static GtkWidget* wisLabel = NULL;
+static GtkWidget* conPix = NULL;
+static GtkWidget* conLabel = NULL;
+static GtkWidget* chaPix = NULL;
+static GtkWidget* chaLabel = NULL;
+static GtkWidget* goldLabel = NULL;
+static GtkWidget* hpLabel = NULL;
+static GtkWidget* powLabel = NULL;
+static GtkWidget* acLabel = NULL;
+static GtkWidget* levlLabel = NULL;
+static GtkWidget* expLabel = NULL;
+static GtkWidget* timeLabel = NULL;
+static GtkWidget* scoreLabel = NULL;
+static GtkWidget* alignPix = NULL;
+static GtkWidget* alignLabel = NULL;
+static GtkWidget* hungerPix = NULL;
+static GtkWidget* hungerLabel = NULL;
+static GtkWidget* sickPix = NULL;
+static GtkWidget* sickLabel = NULL;
+static GtkWidget* blindPix = NULL;
+static GtkWidget* blindLabel = NULL;
+static GtkWidget* stunPix = NULL;
+static GtkWidget* stunLabel = NULL;
+static GtkWidget* halluPix = NULL;
+static GtkWidget* halluLabel = NULL;
+static GtkWidget* confuPix = NULL;
+static GtkWidget* confuLabel = NULL;
+static GtkWidget* encumbPix = NULL;
+static GtkWidget* encumbLabel = NULL;
+
+
+static GtkStyle* normalStyle = NULL;
+static GtkStyle* bigStyle = NULL;
+static GtkStyle* redStyle = NULL;
+static GtkStyle* greenStyle = NULL;
+static GtkStyle* bigRedStyle = NULL;
+static GtkStyle* bigGreenStyle = NULL;
+
+/* Pure red */
+static GdkColor color_red   = { 0, 0xff00, 0, 0 };
+/* ForestGreen (looks better than just pure green) */
+static GdkColor color_green = { 0, 0x2200, 0x8b00, 0x2200 };
+
+static int lastDepth;
+static int lastStr;
+static int lastInt;
+static int lastWis;
+static int lastDex;
+static int lastCon;
+static int lastCha;
+static long lastAu;
+static int lastHP;
+static int lastMHP;
+static int lastLevel;
+static int lastPOW;
+static int lastMPOW;
+static int lastAC;
+static int lastExp;
+static aligntyp lastAlignment;  
+static unsigned lastHungr;
+static long lastConf;
+static long lastBlind;
+static long lastStun;
+static long lastHalu;
+static long lastSick;
+static int lastEncumb;
+
+void ghack_status_window_clear( GtkWidget *win, gpointer data)
+{
+    /* Don't think we need this at all */
+}
+
+void ghack_status_window_destroy(GtkWidget *win, gpointer data)
+{
+    while (s_HighLightList) {
+       g_free( (Highlight*)s_HighLightList->data);
+       s_HighLightList = s_HighLightList->next;
+    }
+    g_list_free( s_HighLightList );
+}
+
+void ghack_status_window_display( GtkWidget *win, boolean block, gpointer data)
+{
+    gtk_widget_show_all( GTK_WIDGET(win));
+}
+
+void ghack_status_window_cursor_to( GtkWidget *win, int x, int y, gpointer data)
+{
+    /* Don't think we need this at all */
+}
+
+void ghack_status_window_put_string( GtkWidget *win, int attr, const char* text, gpointer data)
+{
+    ghack_status_window_update_stats();
+}
+
+
+
+GtkWidget* ghack_init_status_window ()
+{
+    GtkWidget *horizSep0, *horizSep1, *horizSep2, *horizSep3;
+    GtkWidget *statsHBox, *strVBox, *dexVBox, *intVBox, *statHBox;
+    GtkWidget *wisVBox, *conVBox, *chaVBox;
+    GtkWidget *alignVBox, *hungerVBox, *sickVBox, *blindVBox;
+    GtkWidget *stunVBox, *halluVBox, *confuVBox, *encumbVBox;
+   
+    /* Set up a (ridiculous) initial state */
+    lastDepth = 9999;
+    lastStr = 9999;
+    lastInt = 9999;
+    lastWis = 9999;
+    lastDex = 9999;
+    lastCon = 9999;
+    lastCha = 9999;
+    lastAu = 9999;
+    lastHP = 9999;
+    lastMHP = 9999;
+    lastLevel = 9999;
+    lastPOW = 9999;
+    lastMPOW = 9999;
+    lastAC = 9999;
+    lastExp = 9999;
+    lastAlignment = A_NEUTRAL;  /* start off guessing neutral */
+    lastHungr = 9999;
+    lastConf = 9999;
+    lastBlind = 9999;
+    lastStun = 9999;
+    lastHalu = 9999;
+    lastSick = 9999;
+    lastEncumb = 9999;
+
+    statTable = gtk_table_new( 10, 8, FALSE);
+    gtk_table_set_row_spacings( GTK_TABLE( statTable), 1);
+    gtk_table_set_col_spacings( GTK_TABLE( statTable), 1);
+
+
+    /* Begin the first row of the table -- the title */
+    titleLabel = gtk_label_new( _("GnomeHack!")); 
+    gtk_table_attach( GTK_TABLE( statTable), titleLabel, 
+           0, 8, 0, 1, GTK_FILL, 0, 0, 0);
+    if (!normalStyle)
+      normalStyle = gtk_style_copy (
+               gtk_widget_get_style (GTK_WIDGET (titleLabel)));
+
+    /* Set up some styles to draw stuff with */
+    if (!redStyle) {
+      g_assert (greenStyle == NULL);
+      g_assert (bigStyle == NULL);
+      g_assert (bigRedStyle == NULL);
+      g_assert (bigGreenStyle == NULL);
+
+      greenStyle = gtk_style_copy (normalStyle);
+      redStyle = gtk_style_copy (normalStyle);
+      bigRedStyle = gtk_style_copy (normalStyle);
+      bigGreenStyle = gtk_style_copy (normalStyle);
+      bigStyle = gtk_style_copy (normalStyle);
+
+      greenStyle->fg[GTK_STATE_NORMAL] = color_green;
+      redStyle->fg[GTK_STATE_NORMAL] = color_red;
+      bigRedStyle->fg[GTK_STATE_NORMAL] = color_red;
+      bigGreenStyle->fg[GTK_STATE_NORMAL] = color_green;
+
+      gdk_font_unref (bigRedStyle->font);
+      gdk_font_unref (bigGreenStyle->font);
+      bigRedStyle->font = gdk_font_load("-misc-fixed-*-*-*-*-20-*-*-*-*-*-*-*");
+      bigGreenStyle->font = gdk_font_load("-misc-fixed-*-*-*-*-20-*-*-*-*-*-*-*");
+
+      gdk_font_unref (bigStyle->font);
+      bigStyle->font = gdk_font_load ("-misc-fixed-*-*-*-*-20-*-*-*-*-*-*-*");
+    }
+    gtk_widget_set_style (GTK_WIDGET (titleLabel), bigStyle);
+    
+    /* Begin the second row */
+    dgnLevelLabel = gtk_label_new (_ ("Nethack for Gnome")); 
+    gtk_table_attach (GTK_TABLE (statTable), dgnLevelLabel, 
+           0, 8, 1, 2, GTK_FILL, 0, 0, 0);
+    gtk_widget_set_style (GTK_WIDGET (dgnLevelLabel), bigStyle);
+    
+    /* Begin the third row */
+    horizSep0 = gtk_hseparator_new (); 
+    gtk_table_attach (GTK_TABLE (statTable), horizSep0, 
+           0, 8, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
+
+
+    /* Begin the fourth row */
+    statsHBox = gtk_hbox_new (TRUE, 0);
+
+    strVBox = gtk_vbox_new (FALSE, 0);
+    strPix =  gnome_pixmap_new_from_xpm_d( str_xpm);
+    strLabel = gtk_label_new( "STR: ");
+    gtk_box_pack_start (GTK_BOX (strVBox), strPix, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (strVBox), strLabel, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX(statsHBox), GTK_WIDGET(strVBox), TRUE, TRUE, 2);
+
+    dexVBox = gtk_vbox_new (FALSE, 0);
+    dexPix =  gnome_pixmap_new_from_xpm_d( dex_xpm);
+    dexLabel = gtk_label_new( "DEX: ");
+    gtk_box_pack_start (GTK_BOX (dexVBox), dexPix, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (dexVBox), dexLabel, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX(statsHBox), GTK_WIDGET(dexVBox), TRUE, TRUE, 2);
+
+    conVBox = gtk_vbox_new (FALSE, 0);
+    conPix =  gnome_pixmap_new_from_xpm_d( cns_xpm);
+    conLabel = gtk_label_new( "CON: ");
+    gtk_box_pack_start (GTK_BOX (conVBox), conPix, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (conVBox), conLabel, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX(statsHBox), GTK_WIDGET(conVBox), TRUE, TRUE, 2);
+
+    intVBox = gtk_vbox_new (FALSE, 0);
+    intPix =  gnome_pixmap_new_from_xpm_d( int_xpm);
+    intLabel = gtk_label_new( "INT: ");
+    gtk_box_pack_start (GTK_BOX (intVBox), intPix, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (intVBox), intLabel, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX(statsHBox), GTK_WIDGET(intVBox), TRUE, TRUE, 2);
+
+
+    wisVBox = gtk_vbox_new (FALSE, 0);
+    wisPix =  gnome_pixmap_new_from_xpm_d( wis_xpm);
+    wisLabel = gtk_label_new( "WIS: ");
+    gtk_box_pack_start (GTK_BOX (wisVBox), wisPix, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (wisVBox), wisLabel, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX(statsHBox), GTK_WIDGET(wisVBox), TRUE, TRUE, 2);
+
+
+    chaVBox = gtk_vbox_new (FALSE, 0);
+    chaPix =  gnome_pixmap_new_from_xpm_d( cha_xpm);
+    chaLabel = gtk_label_new( "CHA: ");
+    gtk_box_pack_start (GTK_BOX (chaVBox), chaPix, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (chaVBox), chaLabel, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX(statsHBox), GTK_WIDGET(chaVBox), TRUE, TRUE, 2);
+    
+    gtk_table_attach( GTK_TABLE( statTable),  GTK_WIDGET(statsHBox), 
+           0, 8, 3, 4, GTK_FILL, 0, 0, 0);
+
+    /* Begin the fifth row */
+    horizSep1 = gtk_hseparator_new(); 
+    gtk_table_attach( GTK_TABLE( statTable), horizSep1, 
+           0, 8, 4, 5, GTK_FILL, GTK_FILL, 0, 0);
+
+    /* Begin the sixth row */
+    hpLabel = gtk_label_new( "HP: ");
+    gtk_table_attach( GTK_TABLE( statTable), hpLabel, 
+           0, 1, 5, 6, GTK_FILL, 0, 0, 0);
+       
+    acLabel = gtk_label_new( "AC: ");
+    gtk_table_attach( GTK_TABLE( statTable), acLabel, 
+           2, 3, 5, 6, GTK_FILL, 0, 0, 0);
+    
+    powLabel = gtk_label_new( "Power: ");
+    gtk_table_attach( GTK_TABLE( statTable), powLabel, 
+           4, 5, 5, 6, GTK_FILL, 0, 0, 0);
+    
+    goldLabel = gtk_label_new( "Au: ");
+    gtk_table_attach( GTK_TABLE( statTable), goldLabel, 
+           6, 7, 5, 6, GTK_FILL, 0, 0, 0);
+    
+
+    /* Begin the seventh row */
+    horizSep2 = gtk_hseparator_new(); 
+    gtk_table_attach( GTK_TABLE( statTable), horizSep2, 
+           0, 8, 6, 7, GTK_FILL, GTK_FILL, 0, 0);
+
+    
+    /* Begin the eigth row */
+    levlLabel = gtk_label_new( "Level: ");
+    gtk_table_attach( GTK_TABLE( statTable), levlLabel, 
+           0, 1, 7, 8, GTK_FILL, 0, 0, 0);
+       
+    expLabel = gtk_label_new( "Exp: ");
+    gtk_table_attach( GTK_TABLE( statTable), expLabel, 
+           2, 3, 7, 8, GTK_FILL, 0, 0, 0);
+   
+    timeLabel = gtk_label_new( "Time: ");
+    gtk_table_attach( GTK_TABLE( statTable), timeLabel, 
+           4, 5, 7, 8, GTK_FILL, 0, 0, 0);
+    
+    scoreLabel = gtk_label_new( "Score: ");
+    gtk_table_attach( GTK_TABLE( statTable), scoreLabel, 
+           6, 7, 7, 8, GTK_FILL, 0, 0, 0);
+    
+    /* Begin the ninth row */
+    horizSep3 = gtk_hseparator_new(); 
+    gtk_table_attach( GTK_TABLE( statTable), horizSep3, 
+           0, 8, 8, 9, GTK_FILL, GTK_FILL, 0, 0);
+    
+    /* Begin the tenth and last row */
+    statHBox = gtk_hbox_new (FALSE, 0);
+
+    alignVBox = gtk_vbox_new (FALSE, 0);
+    alignPix =  gnome_pixmap_new_from_xpm_d( neutral_xpm);
+    alignLabel = gtk_label_new( "Neutral");
+    gtk_box_pack_start (GTK_BOX (alignVBox), alignPix, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (alignVBox), alignLabel, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX(statHBox), GTK_WIDGET(alignVBox), TRUE, FALSE, 2);
+    
+    hungerVBox = gtk_vbox_new (FALSE, 0);
+    hungerPix =  gnome_pixmap_new_from_xpm_d( hungry_xpm);
+    hungerLabel = gtk_label_new( "Hungry");
+    gtk_box_pack_start (GTK_BOX (hungerVBox), hungerPix, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (hungerVBox), hungerLabel, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX(statHBox), GTK_WIDGET(hungerVBox), TRUE, FALSE, 2);
+    
+    sickVBox = gtk_vbox_new (FALSE, 0);
+    sickPix =  gnome_pixmap_new_from_xpm_d( sick_fp_xpm);
+    sickLabel = gtk_label_new( "FoodPois");
+    gtk_box_pack_start (GTK_BOX (sickVBox), sickPix, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (sickVBox), sickLabel, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX(statHBox), GTK_WIDGET(sickVBox), TRUE, FALSE, 2);
+    
+    blindVBox = gtk_vbox_new (FALSE, 0);
+    blindPix =  gnome_pixmap_new_from_xpm_d( blind_xpm);
+    blindLabel = gtk_label_new( "Blind");
+    gtk_box_pack_start (GTK_BOX (blindVBox), blindPix, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (blindVBox), blindLabel, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX(statHBox), GTK_WIDGET(blindVBox), TRUE, FALSE, 2);
+    
+    stunVBox = gtk_vbox_new (FALSE, 0);
+    stunPix =  gnome_pixmap_new_from_xpm_d( stunned_xpm);
+    stunLabel = gtk_label_new( "Stun");
+    gtk_box_pack_start (GTK_BOX (stunVBox), stunPix, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (stunVBox), stunLabel, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX(statHBox), GTK_WIDGET(stunVBox), TRUE, FALSE, 2);
+    
+    confuVBox = gtk_vbox_new (FALSE, 0);
+    confuPix =  gnome_pixmap_new_from_xpm_d( confused_xpm);
+    confuLabel = gtk_label_new( "Confused");
+    gtk_box_pack_start (GTK_BOX (confuVBox), confuPix, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (confuVBox), confuLabel, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX(statHBox), GTK_WIDGET(confuVBox), TRUE, FALSE, 2);
+    
+    halluVBox = gtk_vbox_new (FALSE, 0);
+    halluPix =  gnome_pixmap_new_from_xpm_d( hallu_xpm);
+    halluLabel = gtk_label_new( "Hallu");
+    gtk_box_pack_start (GTK_BOX (halluVBox), halluPix, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (halluVBox), halluLabel, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX(statHBox), GTK_WIDGET(halluVBox), TRUE, FALSE, 2);
+    
+    encumbVBox = gtk_vbox_new (FALSE, 0);
+    encumbPix =  gnome_pixmap_new_from_xpm_d( slt_enc_xpm);
+    encumbLabel = gtk_label_new( "Burdened");
+    gtk_box_pack_start (GTK_BOX (encumbVBox), encumbPix, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX (encumbVBox), encumbLabel, TRUE, TRUE, 2);
+    gtk_box_pack_start (GTK_BOX(statHBox), GTK_WIDGET(encumbVBox), TRUE, FALSE, 2);
+
+    gtk_table_attach( GTK_TABLE( statTable), GTK_WIDGET(statHBox), 
+           0, 8, 9, 10, GTK_FILL, GTK_FILL, 0, 0);
+    
+    /* Set up the necessary signals */
+    gtk_signal_connect (GTK_OBJECT (statTable), 
+           "ghack_fade_highlight", 
+           GTK_SIGNAL_FUNC (ghack_fade_highlighting), 
+           NULL);
+
+    gtk_signal_connect (GTK_OBJECT (statTable), 
+           "ghack_putstr", 
+           GTK_SIGNAL_FUNC (ghack_status_window_put_string), 
+           NULL);
+
+    gtk_signal_connect (GTK_OBJECT (statTable), 
+           "ghack_clear", 
+           GTK_SIGNAL_FUNC (ghack_status_window_clear), 
+           NULL);
+
+    gtk_signal_connect (GTK_OBJECT (statTable), 
+           "ghack_curs", 
+           GTK_SIGNAL_FUNC (ghack_status_window_cursor_to), 
+           NULL);
+    gtk_signal_connect(GTK_OBJECT (statTable), 
+           "gnome_delay_output",
+           GTK_SIGNAL_FUNC(ghack_delay), 
+           NULL);
+
+    /* Lastly, show the status window and everything in it */
+    gtk_widget_show_all( statTable);
+
+    return GTK_WIDGET(statTable);
+}
+
+
+
+void ghack_status_window_update_stats()
+{
+    char buf[BUFSZ];
+    gchar *buf1;
+    const char* hung;
+    const char* enc;
+    static int firstTime=TRUE;
+#ifdef GOLDOBJ
+    long umoney;
+#endif
+
+    /* First, fill in the player name and the dungeon level */
+    strcpy(buf, plname);
+    if ('a' <= buf[0] && buf[0] <= 'z') buf[0] += 'A'-'a';
+    strcat(buf, " the ");
+    if (u.mtimedone) {
+        char mname[BUFSZ];
+        int k = 0;
+
+        strcpy(mname, mons[u.umonnum].mname);
+        while(mname[k] != 0) {
+            if ((k == 0 || (k > 0 && mname[k-1] == ' '))
+             && 'a' <= mname[k] && mname[k] <= 'z')
+            {
+                mname[k] += 'A' - 'a';
+            }
+            k++;
+        }
+        strcat(buf, mname);
+    } else {
+        strcat(buf, rank_of(u.ulevel, pl_character[0], flags.female));
+    }
+    gtk_label_get( GTK_LABEL( titleLabel), &buf1);
+    if (strcmp( buf1, buf) != 0 && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( titleLabel, bigStyle, bigGreenStyle);
+    }
+    gtk_label_set( GTK_LABEL( titleLabel), buf);
+
+
+    if (In_endgame(&u.uz)) {
+        strcpy(buf, (Is_astralevel(&u.uz) ? "Astral Plane":"End Game"));
+    } else {
+        sprintf(buf, "%s, level %d", dungeons[u.uz.dnum].dname, depth(&u.uz));
+    }
+    if (lastDepth > depth(&u.uz) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( dgnLevelLabel, bigStyle, bigRedStyle);
+    }
+    else if (lastDepth < depth(&u.uz) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( dgnLevelLabel, bigStyle, bigGreenStyle);
+    }
+    lastDepth = depth(&u.uz);
+    gtk_label_set( GTK_LABEL( dgnLevelLabel), buf);
+
+    /* Next, fill in the player's stats */
+    if (ACURR(A_STR) > 118) {
+        sprintf(buf,"STR:%d",ACURR(A_STR)-100);
+    } else if (ACURR(A_STR)==118) {
+        sprintf(buf,"STR:18/**");
+    } else if(ACURR(A_STR) > 18) {
+        sprintf(buf,"STR:18/%02d",ACURR(A_STR)-18);
+    } else {
+        sprintf(buf,"STR:%d",ACURR(A_STR));
+    }
+    if (lastStr < ACURR(A_STR) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( strLabel, normalStyle, greenStyle);
+    }
+    else if (lastStr > ACURR(A_STR) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( strLabel, normalStyle, redStyle);
+    }
+    lastStr = ACURR(A_STR);
+    gtk_label_set( GTK_LABEL( strLabel), buf);
+
+    sprintf(buf,"INT:%d",ACURR(A_INT));
+    if (lastInt < ACURR(A_INT) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( intLabel, normalStyle, greenStyle);
+    }
+    else if (lastInt > ACURR(A_INT) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( intLabel, normalStyle, redStyle);
+    }
+    lastInt = ACURR(A_INT);
+    gtk_label_set( GTK_LABEL( intLabel), buf);
+    
+    sprintf(buf,"WIS:%d",ACURR(A_WIS));
+    if (lastWis < ACURR(A_WIS) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( wisLabel, normalStyle, greenStyle);
+    }
+    else if (lastWis > ACURR(A_WIS) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( wisLabel, normalStyle, redStyle);
+    }
+    lastWis = ACURR(A_WIS);
+    gtk_label_set( GTK_LABEL( wisLabel), buf);
+    
+    sprintf(buf,"DEX:%d",ACURR(A_DEX));
+    if (lastDex < ACURR(A_DEX) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( dexLabel, normalStyle, greenStyle);
+    }
+    else if (lastDex > ACURR(A_DEX) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( dexLabel, normalStyle, redStyle);
+    }
+    lastDex = ACURR(A_DEX);
+    gtk_label_set( GTK_LABEL( dexLabel), buf);
+    
+    sprintf(buf,"CON:%d",ACURR(A_CON));
+    if (lastCon < ACURR(A_CON) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( conLabel, normalStyle, greenStyle);
+    }
+    else if (lastCon > ACURR(A_CON) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( conLabel, normalStyle, redStyle);
+    }
+    lastCon = ACURR(A_CON);
+    gtk_label_set( GTK_LABEL( conLabel), buf);
+    
+    sprintf(buf,"CHA:%d",ACURR(A_CHA));
+    if (lastCha < ACURR(A_CHA) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( chaLabel, normalStyle, greenStyle);
+    }
+    else if (lastCha > ACURR(A_CHA) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( chaLabel, normalStyle, redStyle);
+    }
+    lastCha = ACURR(A_CHA);
+    gtk_label_set( GTK_LABEL( chaLabel), buf);
+    
+    /* Now do the non-pixmaped stats (gold and such) */
+#ifndef GOLDOBJ
+    sprintf(buf,"Au:%ld", u.ugold);
+    if (lastAu < u.ugold && firstTime==FALSE) {
+#else
+    umoney = money_cnt(invent);
+    sprintf(buf,"Au:%ld", umouney);
+    if (lastAu < umoney && firstTime==FALSE) {
+#endif
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( goldLabel, normalStyle, greenStyle);
+    }
+#ifndef GOLDOBJ
+    else if (lastAu > u.ugold && firstTime==FALSE) {
+#else
+    else if (lastAu > umoney && firstTime==FALSE) {
+#endif
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( goldLabel, normalStyle, redStyle);
+    }
+#ifndef GOLDOBJ
+    lastAu = u.ugold;
+#else
+    lastAu = umoney;
+#endif
+    gtk_label_set( GTK_LABEL( goldLabel), buf);
+    
+    if (u.mtimedone) {
+        /* special case: when polymorphed, show "HD", disable exp */
+       sprintf(buf,"HP:%d/%d", ( (u.mh  > 0)? u.mh  : 0), u.mhmax);
+       if ((lastHP < u.mh || lastMHP < u.mhmax ) && firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( hpLabel, normalStyle, greenStyle);
+       }
+       else if ((lastHP > u.mh || lastMHP > u.mhmax ) && firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( hpLabel, normalStyle, redStyle);
+       }
+       lastHP = u.mh;
+       lastMHP = u.mhmax;
+    } else {
+       sprintf(buf,"HP:%d/%d", ( (u.uhp  > 0)? u.uhp  : 0), u.uhpmax);
+       if ((lastHP < u.uhp || lastMHP < u.uhpmax ) && firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( hpLabel, normalStyle, greenStyle);
+       }
+       else if ((lastHP > u.uhp || lastMHP > u.uhpmax ) && firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( hpLabel, normalStyle, redStyle);
+       }
+       lastHP = u.uhp;
+       lastMHP = u.uhpmax;
+    }
+    gtk_label_set( GTK_LABEL( hpLabel), buf);
+    
+    if (u.mtimedone) {
+        /* special case: when polymorphed, show "HD", disable exp */
+       sprintf(buf,"HD:%d", mons[u.umonnum].mlevel);
+       if (lastLevel < mons[u.umonnum].mlevel && firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( levlLabel, normalStyle, greenStyle);
+       }
+       else if (lastLevel > mons[u.umonnum].mlevel && firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( levlLabel, normalStyle, redStyle);
+       }
+       lastLevel = mons[u.umonnum].mlevel;
+    } else {
+       sprintf(buf,"Level:%d", u.ulevel);
+       if (lastLevel < u.ulevel && firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( levlLabel, normalStyle, greenStyle);
+       }
+       else if (lastLevel > u.ulevel && firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( levlLabel, normalStyle, redStyle);
+       }
+       lastLevel = u.ulevel;
+    }
+    gtk_label_set( GTK_LABEL( levlLabel), buf);
+
+    sprintf(buf,"Power:%d/%d", u.uen, u.uenmax);
+    if ((lastPOW < u.uen || lastMPOW < u.uenmax) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( powLabel, normalStyle, greenStyle);
+    }
+    if ((lastPOW > u.uen || lastMPOW > u.uenmax) && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( powLabel, normalStyle, redStyle);
+    }
+    lastPOW = u.uen;
+    lastMPOW = u.uenmax;
+    gtk_label_set( GTK_LABEL( powLabel), buf);
+    
+    sprintf(buf,"AC:%d", u.uac);
+    if (lastAC > u.uac && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( acLabel, normalStyle, greenStyle);
+    }
+    else if (lastAC < u.uac && firstTime==FALSE) {
+       /* Ok, this changed so add it to the highlighing list */
+       ghack_highlight_widget( acLabel, normalStyle, redStyle);
+    }
+    lastAC = u.uac;
+    gtk_label_set( GTK_LABEL( acLabel), buf);
+    
+#ifdef EXP_ON_BOTL
+    if (flags.showexp) {
+       sprintf(buf,"Exp:%ld", u.uexp);
+       if (lastExp < u.uexp && firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( expLabel, normalStyle, greenStyle);
+       }
+       else if (lastExp > u.uexp && firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( expLabel, normalStyle, redStyle);
+       }
+       lastExp = u.uexp;
+       gtk_label_set( GTK_LABEL( expLabel), buf);
+   } else
+#endif
+    {
+       gtk_label_set( GTK_LABEL( expLabel), "");
+    }
+
+    if (flags.time) {
+       sprintf(buf,"Time:%ld", moves);
+       gtk_label_set( GTK_LABEL( timeLabel), buf);
+    }
+    else
+       gtk_label_set( GTK_LABEL( timeLabel), "");
+#ifdef SCORE_ON_BOTL
+    if (flags.showscore) {
+       sprintf(buf,"Score:%ld", botl_score());
+       gtk_label_set( GTK_LABEL( scoreLabel), buf);
+    } else
+       gtk_label_set( GTK_LABEL( scoreLabel), "");
+#else
+    {
+       gtk_label_set( GTK_LABEL( scoreLabel), "");
+    }
+#endif
+
+    /* See if their alignment has changed */
+    if (lastAlignment != u.ualign.type) {
+       if (firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( alignLabel, normalStyle, redStyle);
+       }
+
+       lastAlignment = u.ualign.type;
+       /* looks like their alignment has changed -- change out the icon */
+       if (u.ualign.type==A_CHAOTIC) {
+           gtk_label_set( GTK_LABEL( alignLabel), "Chaotic");
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(alignPix), chaotic_xpm);
+       } else if (u.ualign.type==A_NEUTRAL) {
+           gtk_label_set( GTK_LABEL( alignLabel), "Neutral");
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(alignPix), neutral_xpm);
+       } else {
+           gtk_label_set( GTK_LABEL( alignLabel), "Lawful");
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(alignPix), lawful_xpm);
+       }
+    }
+    
+    hung=hu_stat[u.uhs];
+    if (lastHungr != u.uhs) {
+       if (firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( hungerLabel, normalStyle, redStyle);
+       }
+
+       lastHungr = u.uhs;
+       if (hung[0]==' ') {
+           gtk_label_set( GTK_LABEL( hungerLabel), "      ");
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(hungerPix), nothing_xpm);
+       } else 
+         if (u.uhs == 0 /* SATIATED */) {
+           gtk_label_set( GTK_LABEL( hungerLabel), hung);
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(hungerPix), satiated_xpm);
+       } else {
+           gtk_label_set( GTK_LABEL( hungerLabel), hung);
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(hungerPix), hungry_xpm);
+       }
+    }
+
+    if (lastConf != Confusion) {
+       if (firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( confuLabel, normalStyle, redStyle);
+       }
+
+       lastConf = Confusion;
+       if (Confusion) {
+           gtk_label_set( GTK_LABEL( confuLabel), "Confused");
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(confuPix), confused_xpm);
+       }
+       else { 
+           gtk_label_set( GTK_LABEL( confuLabel), "        ");
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(confuPix), nothing_xpm);
+       }
+    }
+
+    if (lastBlind != Blind) {
+       if (firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( blindLabel, normalStyle, redStyle);
+       }
+
+       lastBlind = Blind;
+       if (Blind) {
+           gtk_label_set( GTK_LABEL( blindLabel), "Blind");
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(blindPix), blind_xpm);
+       }
+       else { 
+           gtk_label_set( GTK_LABEL( blindLabel), "     ");
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(blindPix), nothing_xpm);
+       }
+    }
+    if (lastStun != Stunned) {
+       if (firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( stunLabel, normalStyle, redStyle);
+       }
+
+       lastStun = Stunned;
+       if (Stunned) {
+           gtk_label_set( GTK_LABEL( stunLabel), "Stun");
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(stunPix), stunned_xpm);
+       }
+       else { 
+           gtk_label_set( GTK_LABEL( stunLabel), "    ");
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(stunPix), nothing_xpm);
+       }
+    }
+    
+    if (lastHalu != Hallucination) {
+       if (firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( halluLabel, normalStyle, redStyle);
+       }
+
+       lastHalu = Hallucination;
+       if (Hallucination) {
+           gtk_label_set( GTK_LABEL( halluLabel), "Hallu");
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(halluPix), hallu_xpm);
+       }
+       else { 
+           gtk_label_set( GTK_LABEL( halluLabel), "     ");
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(halluPix), nothing_xpm);
+       }
+    }
+
+    if (lastSick != Sick) {
+       if (firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( sickLabel, normalStyle, redStyle);
+       }
+
+       lastSick = Sick;
+       if (Sick) {
+           if (u.usick_type & SICK_VOMITABLE) {
+               gtk_label_set( GTK_LABEL( sickLabel), "FoodPois");
+               gnome_pixmap_load_xpm_d( GNOME_PIXMAP(sickPix), sick_fp_xpm);
+           } else if (u.usick_type & SICK_NONVOMITABLE) {
+               gtk_label_set( GTK_LABEL( sickLabel), "Ill");
+               gnome_pixmap_load_xpm_d( GNOME_PIXMAP(sickPix), sick_il_xpm);
+           } else {
+               gtk_label_set( GTK_LABEL( sickLabel), "FoodPois");
+               gnome_pixmap_load_xpm_d( GNOME_PIXMAP(sickPix), sick_fp_xpm);
+           }
+       } else {
+           gtk_label_set( GTK_LABEL( sickLabel), "        ");
+           gnome_pixmap_load_xpm_d( GNOME_PIXMAP(sickPix), nothing_xpm);
+       }
+    }
+
+    enc=enc_stat[near_capacity()];
+    if (lastEncumb != near_capacity()) {
+       if (firstTime==FALSE) {
+           /* Ok, this changed so add it to the highlighing list */
+           ghack_highlight_widget( encumbLabel, normalStyle, redStyle);
+       }
+
+       lastEncumb = near_capacity();
+       switch ( lastEncumb ) {
+           case 0:
+               gtk_label_set( GTK_LABEL( encumbLabel), "        ");
+               gnome_pixmap_load_xpm_d( GNOME_PIXMAP(encumbPix), nothing_xpm);
+               break;
+           case 1:
+               gtk_label_set( GTK_LABEL( encumbLabel), enc);
+               gnome_pixmap_load_xpm_d( GNOME_PIXMAP(encumbPix), slt_enc_xpm);
+               break;
+           case 2:
+               gtk_label_set( GTK_LABEL( encumbLabel), enc);
+               gnome_pixmap_load_xpm_d( GNOME_PIXMAP(encumbPix), mod_enc_xpm);
+               break;
+           case 3:
+               gtk_label_set( GTK_LABEL( encumbLabel), enc);
+               gnome_pixmap_load_xpm_d( GNOME_PIXMAP(encumbPix), hvy_enc_xpm);
+               break;
+           case 4:
+               gtk_label_set( GTK_LABEL( encumbLabel), enc);
+               gnome_pixmap_load_xpm_d( GNOME_PIXMAP(encumbPix), ext_enc_xpm);
+               break;
+           case 5:
+               gtk_label_set( GTK_LABEL( encumbLabel), enc);
+               gnome_pixmap_load_xpm_d( GNOME_PIXMAP(encumbPix), ovr_enc_xpm);
+       }
+    }
+    firstTime=FALSE;
+}
+
+static void ghack_fade_highlighting()
+{
+    GList *item;
+    Highlight *highlt;
+
+    /* Remove any items from the queue if their time is up */
+    for (item = g_list_first( s_HighLightList) ; item ; ) {
+       highlt = (Highlight*) item->data;
+       if (highlt) {
+           if ( highlt->nTurnsLeft <= 0) {
+               gtk_widget_set_style(  GTK_WIDGET( highlt->widget), 
+                       highlt->oldStyle);
+               s_HighLightList = g_list_remove_link(s_HighLightList, item);
+               g_free( highlt);
+               g_list_free_1( item);
+               item = g_list_first( s_HighLightList);
+               continue;
+           } else
+               (highlt->nTurnsLeft)--;
+       }
+       if (item)
+           item=item->next;
+       else
+           break;
+    }
+}
+
+/* Widget changed, so add it to the highlighing list */
+static void ghack_highlight_widget( GtkWidget* widget, GtkStyle* oldStyle, 
+       GtkStyle* newStyle)
+{
+    Highlight *highlt;
+    GList *item;
+    
+    /* Check if this widget is already in the queue.  If so then
+     * remove it, so we will only have the new entry in the queue  */
+    for (item = g_list_first( s_HighLightList) ; item ; ) {
+       highlt = (Highlight*) item->data;
+       if (highlt) {
+           if ( highlt->widget == widget) {
+               s_HighLightList = g_list_remove_link(s_HighLightList, item);
+               g_free( highlt);
+               g_list_free_1( item);
+               break;
+           }
+       }
+       if (item)
+           item=item->next;
+       else
+           break;
+    }
+
+    /* Ok, now highlight this widget and add it into the fade 
+     * highlighting queue  */
+    highlt = g_new( Highlight, 1);
+    highlt->nTurnsLeft=NUM_TURNS_HIGHLIGHTED;
+    highlt->oldStyle=oldStyle;
+    highlt->widget=widget;
+    s_HighLightList = g_list_prepend (s_HighLightList, highlt);
+    gtk_widget_set_style(  GTK_WIDGET( widget), newStyle);
+    
+} 
+    
+