コード例 #1
0
ファイル: hu_stuff.c プロジェクト: ryan-sg/doomretro
void HU_Drawer(void)
{
    w_message.l->x = HU_MSGX;
    w_message.l->y = HU_MSGY;
    HUlib_drawSText(&w_message);
    if (automapactive)
    {
        w_title.x = HU_TITLEX;
        w_title.y = HU_TITLEY;
        HUlib_drawTextLine(&w_title, false);
    }
    else
    {
        if (vid_widescreen && r_hud)
        {
            if (r_althud)
                HU_DrawAltHUD();
            else
                HU_DrawHUD();
        }

        if (mapwindow && realframe)
            HUlib_drawTextLine(&w_title, true);
    }
}
コード例 #2
0
ファイル: hu_stuff.c プロジェクト: duganchen/doomretro
void HU_Drawer(void)
{
    w_message.l->x = HU_MSGX;
    w_message.l->y = HU_MSGY;

    if (r_messagescale == r_messagescale_small)
    {
        w_message.l->x = HU_MSGX * SCREENSCALE;
        w_message.l->y = HU_MSGY * SCREENSCALE;
    }

    HUlib_drawSText(&w_message, message_external);

    if (automapactive)
    {
        w_title.x = HU_TITLEX;
        w_title.y = ORIGINALHEIGHT - ORIGINALSBARHEIGHT - hu_font[0]->height - 2;

        if (r_messagescale == r_messagescale_small)
        {
            w_title.x = HU_TITLEX * SCREENSCALE;
            w_title.y = SCREENHEIGHT - SBARHEIGHT - hu_font[0]->height - 2 * SCREENSCALE;
        }

        HUlib_drawTextLine(&w_title, false);
    }
    else
    {
        if (vid_widescreen && r_hud)
        {
            if (r_althud)
                HU_DrawAltHUD();
            else
                HU_DrawHUD();
        }

        if (mapwindow)
        {
            w_title.x = HU_TITLEX;
            w_title.y = ORIGINALHEIGHT - ORIGINALSBARHEIGHT - hu_font[0]->height - 2;

            if (r_messagescale == r_messagescale_small)
            {
                w_title.x = HU_TITLEX * SCREENSCALE;
                w_title.y = SCREENHEIGHT - SBARHEIGHT - hu_font[0]->height - 2 * SCREENSCALE;
            }

            HUlib_drawTextLine(&w_title, true);
        }
    }
}
コード例 #3
0
ファイル: hu_stuff.c プロジェクト: Arc0re/prboom3ds
//
// HU_Drawer()
//
// Draw all the pieces of the heads-up display
//
// Passed nothing, returns nothing
//
void HU_Drawer(void)
{
  char *s;
  player_t *plr;
  char ammostr[80];  //jff 3/8/98 allow plenty room for dehacked mods
  char healthstr[80];//jff
  char armorstr[80]; //jff
  int i,doit;

  // don't draw anything if there's a fullscreen menu up
  if (menuactive == mnact_full)
    return;

  plr = &players[displayplayer];         // killough 3/7/98
  // draw the automap widgets if automap is displayed
  if (automapmode & am_active)
  {
    // map title
    HUlib_drawTextLine(&w_title, false);

    //jff 2/16/98 output new coord display
    // x-coord
    if (map_point_coordinates)
    {
      sprintf(hud_coordstrx,"X: %-5d", (plr->mo->x)>>FRACBITS);
      HUlib_clearTextLine(&w_coordx);
      s = hud_coordstrx;
      while (*s)
        HUlib_addCharToTextLine(&w_coordx, *(s++));
      HUlib_drawTextLine(&w_coordx, false);

      //jff 3/3/98 split coord display into x,y,z lines
      // y-coord
      sprintf(hud_coordstry,"Y: %-5d", (plr->mo->y)>>FRACBITS);
      HUlib_clearTextLine(&w_coordy);
      s = hud_coordstry;
      while (*s)
        HUlib_addCharToTextLine(&w_coordy, *(s++));
      HUlib_drawTextLine(&w_coordy, false);

      //jff 3/3/98 split coord display into x,y,z lines
      //jff 2/22/98 added z
      // z-coord
      sprintf(hud_coordstrz,"Z: %-5d", (plr->mo->z)>>FRACBITS);
      HUlib_clearTextLine(&w_coordz);
      s = hud_coordstrz;
      while (*s)
        HUlib_addCharToTextLine(&w_coordz, *(s++));
      HUlib_drawTextLine(&w_coordz, false);
    }
  }
コード例 #4
0
ファイル: hu_lib.c プロジェクト: AlexMax/winmbf
void HUlib_drawMText(hu_mtext_t* m)
{
  int i;

  if (!*m->on)
    return; // if not on, don't draw

  // draw everything
  if (hud_list_bgon)
    HUlib_drawMBg(m->x, m->y, m->w, m->h, m->bg);

  for (i = 0 ; i < m->nl ; i++)
  {
    int idx = m->cl - i;

    if (idx < 0)
      idx += m->nl; // handle queue of lines

    m->l[idx].x = m->x;       // killough 11/98: optional scroll up/down:
    m->l[idx].y = m->y + (hud_msg_scrollup ? m->nl - 1 - i : i) * HU_REFRESHSPACING;

    if (hud_list_bgon)
      m->l[idx].x += 4, m->l[idx].y += HU_REFRESHSPACING;

    HUlib_drawTextLine(&m->l[idx], false); // no cursor, please
  }
}
コード例 #5
0
ファイル: hu_lib.c プロジェクト: Krazygamr/D-Touch
//
// HUlib_drawMText()
//
// Displays a hu_mtext_t widget
//
// Passed a hu_mtext_t
// Returns nothing
//
void HUlib_drawMText(hu_mtext_t* m)
{
  int i, idx, y;
  hu_textline_t *l;

  if (!*m->on)
    return; // if not on, don't draw

  // draw everything
  if (hud_list_bgon)
    HUlib_drawMBg(m->x,m->y,m->w,m->h,m->bg);
  y = m->y + HU_REFRESHSPACING;
  for (i=0 ; i<m->nl ; i++)
  {
    idx = m->cl - i;
    if (idx < 0)
      idx += m->nl; // handle queue of lines

    l = &m->l[idx];
    if (hud_list_bgon)
    {
      l->x = m->x + 4;
      l->y = m->y + (i+1)*HU_REFRESHSPACING;
    }
    else
    {
      l->x = m->x;
      l->y = m->y + i*HU_REFRESHSPACING;
    }

    // need a decision made here on whether to skip the draw
    HUlib_drawTextLine(l, false); // no cursor, please
  }
}
コード例 #6
0
ファイル: hu_lib.c プロジェクト: Krazygamr/D-Touch
//
// HUlib_drawIText()
//
// Displays a hu_itext_t widget
//
// Passed the hu_itext_t
// Returns nothing
//
void HUlib_drawIText(hu_itext_t* it)
{
  hu_textline_t *l = &it->l;

  if (!*it->on)
    return;
  HUlib_drawTextLine(l, true); // draw the line w/ cursor
}
コード例 #7
0
ファイル: hu_stuff.c プロジェクト: heavyimage/psdoom-ng
void HU_Drawer(void)
{

    HUlib_drawSText(&w_message);
    HUlib_drawIText(&w_chat);
    if (automapactive)
        HUlib_drawTextLine(&w_title, false);

}
コード例 #8
0
ファイル: hu_lib.c プロジェクト: AlexMax/winmbf
void HUlib_drawSText(hu_stext_t* s)
{
  int i;
  if (*s->on)
    for (i = 0; i < s->h; i++)
    {
      int idx = s->cl - i;
      if (idx < 0)
        idx += s->h; // handle queue of lines
      // need a decision made here on whether to skip the draw
      HUlib_drawTextLine(&s->l[idx], false); // no cursor, please
    }
}
コード例 #9
0
ファイル: hu_lib.c プロジェクト: Krazygamr/D-Touch
//
// HUlib_drawSText()
//
// Displays a hu_stext_t widget
//
// Passed a hu_stext_t
// Returns nothing
//
void HUlib_drawSText(hu_stext_t* s)
{
  int i, idx;
  hu_textline_t *l;

  if (!*s->on)
    return; // if not on, don't draw

  // draw everything
  for (i=0 ; i<s->h ; i++)
  {
    idx = s->cl - i;
    if (idx < 0)
      idx += s->h; // handle queue of lines

    l = &s->l[idx];

    // need a decision made here on whether to skip the draw
    HUlib_drawTextLine(l, false); // no cursor, please
  }
}
コード例 #10
0
ファイル: hu_lib.c プロジェクト: duganchen/doomretro
void HUlib_drawSText(hu_stext_t *s, dboolean external)
{
    if (!*s->on)
        return; // if not on, don't draw

    // draw everything
    for (int i = 0; i < s->h; i++)
    {
        int             idx = s->cl - i;
        hu_textline_t   *l;

        if (idx < 0)
            idx += s->h;        // handle queue of lines

        l = &s->l[idx];

        // need a decision made here on whether to skip the draw
        if (vid_widescreen && r_althud && !automapactive)
            HUlib_drawAltHUDTextLine(l);
        else
            HUlib_drawTextLine(l, external);
    }
}
コード例 #11
0
ファイル: hu_stuff.c プロジェクト: AlexMax/winmbf
//
// HU_Drawer()
//
// Draw all the pieces of the heads-up display
//
// Passed nothing, returns nothing
//
void HU_Drawer(void)
{
  char* s;
  player_t* plr;
  char ammostr[80];  //jff 3/8/98 allow plenty room for dehacked mods
  char healthstr[80];//jff
  char armorstr[80]; //jff
  int i;

  plr = &players[displayplayer];         // killough 3/7/98
  // draw the automap widgets if automap is displayed
  if (automapactive)
  {
    fixed_t x, y, z; // killough 10/98:
    void AM_Coordinates(const mobj_t*, fixed_t*, fixed_t*, fixed_t*);

    // map title
    HUlib_drawTextLine(&w_title, false);

    // killough 10/98: allow coordinates to display non-following pointer
    AM_Coordinates(plr->mo, &x, &y, &z);

    //jff 2/16/98 output new coord display
    // x-coord
    sprintf(hud_coordstrx, "X: %-5d", x >> FRACBITS); // killough 10/98
    HUlib_clearTextLine(&w_coordx);
    s = hud_coordstrx;
    while (*s)
      HUlib_addCharToTextLine(&w_coordx, *s++);
    HUlib_drawTextLine(&w_coordx, false);

    //jff 3/3/98 split coord display into x,y,z lines
    // y-coord
    sprintf(hud_coordstry, "Y: %-5d", y >> FRACBITS); // killough 10/98
    HUlib_clearTextLine(&w_coordy);
    s = hud_coordstry;
    while (*s)
      HUlib_addCharToTextLine(&w_coordy, *s++);
    HUlib_drawTextLine(&w_coordy, false);

    //jff 3/3/98 split coord display into x,y,z lines
    //jff 2/22/98 added z
    // z-coord
    sprintf(hud_coordstrz, "Z: %-5d", z >> FRACBITS); // killough 10/98
    HUlib_clearTextLine(&w_coordz);
    s = hud_coordstrz;
    while (*s)
      HUlib_addCharToTextLine(&w_coordz, *s++);
    HUlib_drawTextLine(&w_coordz, false);
  }

  // draw the weapon/health/ammo/armor/kills/keys displays if optioned
  //jff 2/17/98 allow new hud stuff to be turned off
  // killough 2/21/98: really allow new hud stuff to be turned off COMPLETELY
  if
  (
    hud_active > 0 &&                // hud optioned on
    hud_displayed &&                 // hud on from fullscreen key
    scaledviewheight == SCREENHEIGHT && // fullscreen mode is active
    !automapactive                   // automap is not active
  )
  {
    HU_MoveHud();                  // insure HUD display coords are correct

    // do the hud ammo display
    // clear the widgets internal line
    HUlib_clearTextLine(&w_ammo);
    strcpy(hud_ammostr, "AMM ");
    if (weaponinfo[plr->readyweapon].ammo == am_noammo)
    {
      // special case for weapon with no ammo selected - blank bargraph + N/A
      strcat(hud_ammostr, "\x7f\x7f\x7f\x7f\x7f\x7f\x7f N/A");
      w_ammo.cr = colrngs[CR_GRAY];
    }
    else
    {
      int ammo = plr->ammo[weaponinfo[plr->readyweapon].ammo];
      int fullammo = plr->maxammo[weaponinfo[plr->readyweapon].ammo];
      int ammopct = (100 * ammo) / fullammo;
      int ammobars = ammopct / 4;

      // build the numeric amount init string
      sprintf(ammostr, "%d/%d", ammo, fullammo);
      // build the bargraph string
      // full bargraph chars
      for (i = 4; i < 4 + ammobars / 4;)
        hud_ammostr[i++] = 123;
      // plus one last character with 0,1,2,3 bars
      switch (ammobars % 4)
      {
      case 0:
        break;
      case 1:
        hud_ammostr[i++] = 126;
        break;
      case 2:
        hud_ammostr[i++] = 125;
        break;
      case 3:
        hud_ammostr[i++] = 124;
        break;
      }
      // pad string with blank bar characters
      while (i < 4 + 7)
        hud_ammostr[i++] = 127;
      hud_ammostr[i] = '\0';
      strcat(hud_ammostr, ammostr);

      // set the display color from the percentage of total ammo held
      if (ammopct < ammo_red)
        w_ammo.cr = colrngs[CR_RED];
      else if (ammopct < ammo_yellow)
        w_ammo.cr = colrngs[CR_GOLD];
      else
        w_ammo.cr = colrngs[CR_GREEN];
    }
    // transfer the init string to the widget
    s = hud_ammostr;
    while (*s)
      HUlib_addCharToTextLine(&w_ammo, *s++);
    // display the ammo widget every frame
    HUlib_drawTextLine(&w_ammo, false);

    // do the hud health display
    {
      int health = plr->health;
      int healthbars = health > 100 ? 25 : health / 4;

      // clear the widgets internal line
      HUlib_clearTextLine(&w_health);

      // build the numeric amount init string
      sprintf(healthstr, "%3d", health);
      // build the bargraph string
      // full bargraph chars
      for (i = 4; i < 4 + healthbars / 4;)
        hud_healthstr[i++] = 123;
      // plus one last character with 0,1,2,3 bars
      switch (healthbars % 4)
      {
      case 0:
        break;
      case 1:
        hud_healthstr[i++] = 126;
        break;
      case 2:
        hud_healthstr[i++] = 125;
        break;
      case 3:
        hud_healthstr[i++] = 124;
        break;
      }
      // pad string with blank bar characters
      while (i < 4 + 7)
        hud_healthstr[i++] = 127;
      hud_healthstr[i] = '\0';
      strcat(hud_healthstr, healthstr);

      // set the display color from the amount of health posessed
      if (health < health_red)
        w_health.cr = colrngs[CR_RED];
      else if (health < health_yellow)
        w_health.cr = colrngs[CR_GOLD];
      else if (health <= health_green)
        w_health.cr = colrngs[CR_GREEN];
      else
        w_health.cr = colrngs[CR_BLUE];

      // transfer the init string to the widget
      s = hud_healthstr;
      while (*s)
        HUlib_addCharToTextLine(&w_health, *s++);
    }
    // display the health widget every frame
    HUlib_drawTextLine(&w_health, false);

    // do the hud armor display
    {
      int armor = plr->armorpoints;
      int armorbars = armor > 100 ? 25 : armor / 4;

      // clear the widgets internal line
      HUlib_clearTextLine(&w_armor);
      // build the numeric amount init string
      sprintf(armorstr, "%3d", armor);
      // build the bargraph string
      // full bargraph chars
      for (i = 4; i < 4 + armorbars / 4;)
        hud_armorstr[i++] = 123;
      // plus one last character with 0,1,2,3 bars
      switch (armorbars % 4)
      {
      case 0:
        break;
      case 1:
        hud_armorstr[i++] = 126;
        break;
      case 2:
        hud_armorstr[i++] = 125;
        break;
      case 3:
        hud_armorstr[i++] = 124;
        break;
      }
      // pad string with blank bar characters
      while (i < 4 + 7)
        hud_armorstr[i++] = 127;
      hud_armorstr[i] = '\0';
      strcat(hud_armorstr, armorstr);

      // set the display color from the amount of armor posessed
      w_armor.cr =
        armor < armor_red ? colrngs[CR_RED] :
        armor < armor_yellow ? colrngs[CR_GOLD] :
        armor <= armor_green ? colrngs[CR_GREEN] : colrngs[CR_BLUE];

      // transfer the init string to the widget
      s = hud_armorstr;
      while (*s)
        HUlib_addCharToTextLine(&w_armor, *s++);
    }
    // display the armor widget every frame
    HUlib_drawTextLine(&w_armor, false);

    // do the hud weapon display
    {
      int w, ammo, fullammo, ammopct;

      // clear the widgets internal line
      HUlib_clearTextLine(&w_weapon);
      i = 4;
      hud_weapstr[i] = '\0';      //jff 3/7/98 make sure ammo goes away

      // do each weapon that exists in current gamemode
      for (w = 0; w <= wp_supershotgun; w++) //jff 3/4/98 show fists too, why not?
      {
        int ok = 1;
        //jff avoid executing for weapons that do not exist
        switch (gamemode)
        {
        case shareware:
          if (w >= wp_plasma && w != wp_chainsaw)
            ok = 0;
          break;
        case retail:
        case registered:
          if (w >= wp_supershotgun)
            ok = 0;
          break;
        default:
        case commercial:
          break;
        }
        if (!ok) continue;

        ammo = plr->ammo[weaponinfo[w].ammo];
        fullammo = plr->maxammo[weaponinfo[w].ammo];
        ammopct = 0;

        // skip weapons not currently posessed
        if (!plr->weaponowned[w])
          continue;

        ammopct = fullammo ? (100 * ammo) / fullammo : 100;

        // display each weapon number in a color related to the ammo for it
        hud_weapstr[i++] = '\x1b'; //jff 3/26/98 use ESC not '\' for paths
        if (weaponinfo[w].ammo == am_noammo) //jff 3/14/98 show berserk on HUD
          hud_weapstr[i++] = plr->powers[pw_strength] ? '0' + CR_GREEN : '0' + CR_GRAY;
        else if (ammopct < ammo_red)
          hud_weapstr[i++] = '0' + CR_RED;
        else if (ammopct < ammo_yellow)
          hud_weapstr[i++] = '0' + CR_GOLD;
        else
          hud_weapstr[i++] = '0' + CR_GREEN;
        hud_weapstr[i++] = '0' + w + 1;
        hud_weapstr[i++] = ' ';
        hud_weapstr[i] = '\0';
      }

      // transfer the init string to the widget
      s = hud_weapstr;
      while (*s)
        HUlib_addCharToTextLine(&w_weapon, *s++);
    }
    // display the weapon widget every frame
    HUlib_drawTextLine(&w_weapon, false);

    if (hud_active > 1)
    {
      int k;

      hud_keysstr[4] = '\0';    //jff 3/7/98 make sure deleted keys go away
      //jff add case for graphic key display
      if (!deathmatch && hud_graph_keys)
      {
        i = 0;
        hud_gkeysstr[i] = '\0'; //jff 3/7/98 init graphic keys widget string
        // build text string whose characters call out graphic keys from fontk
        for (k = 0; k < 6; k++)
        {
          // skip keys not possessed
          if (!plr->cards[k])
            continue;

          hud_gkeysstr[i++] = '!' + k; // key number plus '!' is char for key
          hud_gkeysstr[i++] = ' ';     // spacing
          hud_gkeysstr[i++] = ' ';
        }
        hud_gkeysstr[i] = '\0';
      }
      else // not possible in current code, unless deathmatching,
      {
        i = 4;
        hud_keysstr[i] = '\0';  //jff 3/7/98 make sure deleted keys go away

        // if deathmatch, build string showing top four frag counts
        if (deathmatch) //jff 3/17/98 show frags, not keys, in deathmatch
        {
          int top1 = -999, top2 = -999, top3 = -999, top4 = -999;
          int idx1 = -1, idx2 = -1, idx3 = -1, idx4 = -1;
          int fragcount, m;

          // scan thru players
          for (k = 0; k < MAXPLAYERS; k++)
          {
            // skip players not in game
            if (!playeringame[k])
              continue;

            fragcount = 0;
            // compute number of times they've fragged each player
            // minus number of times they've been fragged by them
            for (m = 0; m < MAXPLAYERS; m++)
            {
              if (!playeringame[m]) continue;
              fragcount += (m != k) ?  players[k].frags[m] : -players[k].frags[m];
            }

            // very primitive sort of frags to find top four
            if (fragcount > top1)
            {
              top4 = top3;
              top3 = top2;
              top2 = top1;
              top1 = fragcount;
              idx4 = idx3;
              idx3 = idx2;
              idx2 = idx1;
              idx1 = k;
            }
            else if (fragcount > top2)
            {
              top4 = top3;
              top3 = top2;
              top2 = fragcount;
              idx4 = idx3;
              idx3 = idx2;
              idx2 = k;
            }
            else if (fragcount > top3)
            {
              top4 = top3;
              top3 = fragcount;
              idx4 = idx3;
              idx3 = k;
            }
            else if (fragcount > top4)
            {
              top4 = fragcount;
              idx4 = k;
            }
          }

          // killough 11/98: replaced cut-and-pasted code with function

          // if the biggest number exists,
          // put it in the init string
          i = HU_top(i, idx1, top1);

          // if the second biggest number exists,
          // put it in the init string
          i = HU_top(i, idx2, top2);

          // if the third biggest number exists,
          // put it in the init string
          i = HU_top(i, idx3, top3);

          // if the fourth biggest number exists,
          // put it in the init string
          i = HU_top(i, idx4, top4);

          hud_keysstr[i] = '\0';
        } //jff 3/17/98 end of deathmatch clause
        else // build alphabetical key display (not used currently)
        {
          // scan the keys
          for (k = 0; k < 6; k++)
          {
            // skip any not possessed by the displayed player's stats
            if (!plr->cards[k])
              continue;

            // use color escapes to make text in key's color
            hud_keysstr[i++] = '\x1b'; //jff 3/26/98 use ESC not '\' for paths
            switch (k)
            {
            case 0:
              hud_keysstr[i++] = '0' + CR_BLUE;
              hud_keysstr[i++] = 'B';
              hud_keysstr[i++] = 'C';
              hud_keysstr[i++] = ' ';
              break;
            case 1:
              hud_keysstr[i++] = '0' + CR_GOLD;
              hud_keysstr[i++] = 'Y';
              hud_keysstr[i++] = 'C';
              hud_keysstr[i++] = ' ';
              break;
            case 2:
              hud_keysstr[i++] = '0' + CR_RED;
              hud_keysstr[i++] = 'R';
              hud_keysstr[i++] = 'C';
              hud_keysstr[i++] = ' ';
              break;
            case 3:
              hud_keysstr[i++] = '0' + CR_BLUE;
              hud_keysstr[i++] = 'B';
              hud_keysstr[i++] = 'S';
              hud_keysstr[i++] = ' ';
              break;
            case 4:
              hud_keysstr[i++] = '0' + CR_GOLD;
              hud_keysstr[i++] = 'Y';
              hud_keysstr[i++] = 'S';
              hud_keysstr[i++] = ' ';
              break;
            case 5:
              hud_keysstr[i++] = '0' + CR_RED;
              hud_keysstr[i++] = 'R';
              hud_keysstr[i++] = 'S';
              hud_keysstr[i++] = ' ';
              break;
            }
            hud_keysstr[i] = '\0';
          }
        }
      }
    }
    // display the keys/frags line each frame
    if (hud_active > 1)
    {
      HUlib_clearTextLine(&w_keys);      // clear the widget strings
      HUlib_clearTextLine(&w_gkeys);

      // transfer the built string (frags or key title) to the widget
      s = hud_keysstr; //jff 3/7/98 display key titles/key text or frags
      while (*s)
        HUlib_addCharToTextLine(&w_keys, *s++);
      HUlib_drawTextLine(&w_keys, false);

      //jff 3/17/98 show graphic keys in non-DM only
      if (!deathmatch) //jff 3/7/98 display graphic keys
      {
        // transfer the graphic key text to the widget
        s = hud_gkeysstr;
        while (*s)
          HUlib_addCharToTextLine(&w_gkeys, *s++);
        // display the widget
        HUlib_drawTextLine(&w_gkeys, false);
      }
    }

    // display the hud kills/items/secret display if optioned
    if (!hud_nosecrets)
    {
      if (hud_active > 1)
      {
        // clear the internal widget text buffer
        HUlib_clearTextLine(&w_monsec);
        //jff 3/26/98 use ESC not '\' for paths
        // build the init string with fixed colors
        sprintf(hud_monsecstr, "STS \x1b\x36K \x1b\x33%d/%d"
                " \x1b\x37I \x1b\x33%d/%d \x1b\x35S \x1b\x33%d/%d",
                plr->killcount, totalkills,
                plr->itemcount, totalitems,
                plr->secretcount, totalsecret);
        // transfer the init string to the widget
        s = hud_monsecstr;
        while (*s)
          HUlib_addCharToTextLine(&w_monsec, *s++);
      }
      // display the kills/items/secrets each frame, if optioned
      if (hud_active > 1)
        HUlib_drawTextLine(&w_monsec, false);
    }
  }

  //jff 3/4/98 display last to give priority
  // jff 4/24/98 Erase current lines before drawing current
  // needed when screen not fullsize
  // killough 11/98: only do it when not fullsize
  if (scaledviewheight < 200)
    HU_Erase();

  //jff 4/21/98 if setup has disabled message list while active, turn it off
  // if the message review is enabled show the scrolling message review
  // if the message review not enabled, show the standard message widget
  // killough 11/98: simplified

  if (message_list)
    HUlib_drawMText(&w_rtext);
  else
    HUlib_drawSText(&w_message);

  // display the interactive buffer for chat entry
  HUlib_drawIText(&w_chat);
}