From 0631cd03cdfe0b948defbfc9d1f33ee4dc5d170c Mon Sep 17 00:00:00 2001 From: havoc Date: Thu, 4 Sep 2003 12:30:46 +0000 Subject: [PATCH] patch from Andreas Kirsh to add Nexuiz hud git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@3436 d7cf8633-e32d-0410-b094-e92efae38249 --- cl_screen.h | 1 + gl_draw.c | 12 ++- quakedef.h | 20 ++++ sbar.c | 258 ++++++++++++++++++++++++++++++++++------------------ 4 files changed, 199 insertions(+), 92 deletions(-) diff --git a/cl_screen.h b/cl_screen.h index 41d46263..14f14814 100644 --- a/cl_screen.h +++ b/cl_screen.h @@ -32,6 +32,7 @@ typedef struct drawqueuemesh_s drawqueuemesh_t; #define DRAWFLAG_ADDITIVE 1 +#define DRAWFLAG_MODULATE 2 // clear the draw queue void DrawQ_Clear(void); diff --git a/gl_draw.c b/gl_draw.c index d2e627d7..4ef340da 100644 --- a/gl_draw.c +++ b/gl_draw.c @@ -378,7 +378,7 @@ float blendvertex3f[9] = {-5000, -5000, 10, 10000, -5000, 10, -5000, 10000, 10}; int quadelements[768]; void R_DrawQueue(void) { - int pos, num, chartexnum, overbright, texnum, additive, batch; + int pos, num, chartexnum, overbright, texnum, batch; float x, y, w, h, s, t, u, v, *av, *at, c[4]; cachepic_t *pic; drawqueue_t *dq; @@ -427,9 +427,15 @@ void R_DrawQueue(void) for (pos = 0;pos < r_refdef.drawqueuesize;pos += ((drawqueue_t *)(r_refdef.drawqueue + pos))->size) { dq = (drawqueue_t *)(r_refdef.drawqueue + pos); - additive = (dq->flags & DRAWFLAG_ADDITIVE) != 0; color = dq->color; - GL_BlendFunc(GL_SRC_ALPHA, additive ? GL_ONE : GL_ONE_MINUS_SRC_ALPHA); + + if(dq->flags & DRAWFLAG_ADDITIVE) + GL_BlendFunc(GL_SRC_ALPHA, GL_ONE); + else if(dq->flags & DRAWFLAG_MODULATE) + GL_BlendFunc(GL_DST_COLOR, GL_ZERO); + else + GL_BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + GL_DepthMask(true); GL_DepthTest(false); diff --git a/quakedef.h b/quakedef.h index 4ab90481..a7c35620 100644 --- a/quakedef.h +++ b/quakedef.h @@ -114,6 +114,26 @@ extern char *buildstring; #define IT_SIGIL3 (1<<30) #define IT_SIGIL4 (1<<31) +//=========================================== +// AK nexuiz changed and added defines + +#define NEX_IT_UZI 1 +#define NEX_IT_SHOTGUN 2 +#define NEX_IT_ELECTRO 8 +#define NEX_IT_CRYLINK 16 +#define NEX_IT_NEX 32 +#define NEX_IT_HAGAR 64 +#define NEX_IT_ROCKET_LAUNCHER 128 +#define NEX_IT_SHELLS 256 +#define NEX_IT_BULLETS 512 +#define NEX_IT_ROCKETS 1024 +#define NEX_IT_CELLS 2048 +#define NEX_IT_LASER 4094 +#define NEX_IT_STRENGTH 8192 +#define NEX_IT_INVINCIBLE 16384 +#define NEX_IT_SPEED 32767 +#define NEX_IT_SLOWMO 65536 + //=========================================== //rogue changed and added defines diff --git a/sbar.c b/sbar.c index 0f39e371..555928f8 100644 --- a/sbar.c +++ b/sbar.c @@ -47,6 +47,8 @@ sbarpic_t *sb_colon, *sb_slash; sbarpic_t *sb_ibar; sbarpic_t *sb_sbar; sbarpic_t *sb_scorebar; +// AK only used by NX(and only if everybody agrees) +sbarpic_t *sb_sbar_overlay; sbarpic_t *sb_weapons[7][8]; // 0 is active, 1 is owned, 2-5 are flashes sbarpic_t *sb_ammo[4]; @@ -119,7 +121,7 @@ void sbar_start(void) int i; numsbarpics = 0; - + sb_disc = Sbar_NewPic("gfx/disc"); for (i = 0;i < 10;i++) @@ -134,6 +136,25 @@ void sbar_start(void) sb_colon = Sbar_NewPic ("gfx/num_colon"); sb_slash = Sbar_NewPic ("gfx/num_slash"); + //AK NX uses his own hud + if(gamemode = GAME_NEXUIZ) + { + sb_ammo[0] = Sbar_NewPic ("gfx/sb_shells"); + sb_ammo[1] = Sbar_NewPic ("gfx/sb_bullets"); + sb_ammo[2] = Sbar_NewPic ("gfx/sb_rocket"); + sb_ammo[3] = Sbar_NewPic ("gfx/sb_cells"); + + sb_items[2] = Sbar_NewPic ("gfx/sb_slowmo"); + sb_items[3] = Sbar_NewPic ("gfx/sb_invinc"); + sb_items[4] = Sbar_NewPic ("gfx/sb_energy"); + sb_items[5] = Sbar_NewPic ("gfx/sb_str"); + + sb_sbar = Sbar_NewPic("gfx/sbar"); + sb_sbar_overlay = Sbar_NewPic("gfx/sbar_overlay"); + + return; + } + sb_weapons[0][0] = Sbar_NewPic ("gfx/inv_shotgun"); sb_weapons[0][1] = Sbar_NewPic ("gfx/inv_sshotgun"); sb_weapons[0][2] = Sbar_NewPic ("gfx/inv_nailgun"); @@ -758,7 +779,7 @@ void Sbar_Draw (void) { if (scr_con_current == vid.conheight) return; // console is full screen - + if (cl.intermission == 1) { Sbar_IntermissionOverlay(); @@ -770,110 +791,169 @@ void Sbar_Draw (void) return; } - sbar_y = vid.conheight - SBAR_HEIGHT; - if (cl.gametype == GAME_DEATHMATCH) - sbar_x = 0; - else - sbar_x = (vid.conwidth - 320)/2; - - if (sb_lines > 24) - { - if (gamemode != GAME_GOODVSBAD2) - Sbar_DrawInventory (); - if (!cl.islocalgame) - Sbar_DrawFrags (); - } - - if (sb_showscores || cl.stats[STAT_HEALTH] <= 0) - { - if (gamemode != GAME_GOODVSBAD2) - Sbar_DrawAlphaPic (0, 0, sb_scorebar, 0.4); - Sbar_DrawScoreboard (); - } - else if (sb_lines) - { - Sbar_DrawAlphaPic (0, 0, sb_sbar, 0.4); - -// keys (hipnotic only) - //MED 01/04/97 moved keys here so they would not be overwritten - if (gamemode == GAME_HIPNOTIC) + if(gamemode == GAME_NEXUIZ) + { + sbar_y = vid.conheight - 47; + sbar_x = (vid.conwidth - 640)/2; + + if (sb_lines > 24) + { + if (!cl.islocalgame) + Sbar_DrawFrags (); + } + + if (sb_showscores || cl.stats[STAT_HEALTH] <= 0) { - if (cl.items & IT_KEY1) - Sbar_DrawPic (209, 3, sb_items[0]); - if (cl.items & IT_KEY2) - Sbar_DrawPic (209, 12, sb_items[1]); + if (gamemode != GAME_GOODVSBAD2) + Sbar_DrawAlphaPic (0, 0, sb_scorebar, 0.4); + Sbar_DrawScoreboard (); } -// armor - if (gamemode != GAME_GOODVSBAD2) + else if (sb_lines) { + Sbar_DrawPic (0, 0, sb_sbar); + + // special items if (cl.items & IT_INVULNERABILITY) { Sbar_DrawNum (24, 0, 666, 3, 1); Sbar_DrawPic (0, 0, sb_disc); } - else + + // armor + Sbar_DrawNum ((340-3*24), 12, cl.stats[STAT_ARMOR], 3, cl.stats[STAT_ARMOR] <= 25); + + // health + Sbar_DrawNum ((154-3*24), 12, cl.stats[STAT_HEALTH], 3, cl.stats[STAT_HEALTH] <= 25); + + if (cl.items & NEX_IT_SHELLS) + Sbar_DrawPic (519, 0, sb_ammo[0]); + else if (cl.items & NEX_IT_BULLETS) + Sbar_DrawPic (519, 0, sb_ammo[1]); + else if (cl.items & NEX_IT_ROCKETS) + Sbar_DrawPic (519, 0, sb_ammo[2]); + else if (cl.items & NEX_IT_CELLS) + Sbar_DrawPic (519, 0, sb_ammo[3]); + + Sbar_DrawNum ((519-3*24), 12, cl.stats[STAT_AMMO], 3, cl.stats[STAT_AMMO] <= 10); + + //Sbar_DrawAlphaPic(0,0,sb_sbar_overlay,0.5); + DrawQ_Pic(sbar_x,sbar_y,sb_sbar_overlay->name,0,0,1,1,1,1,DRAWFLAG_MODULATE); + + } + + if (vid.conwidth > 320 && cl.gametype == GAME_DEATHMATCH) + Sbar_MiniDeathmatchOverlay (); + + } + else + { + sbar_y = vid.conheight - SBAR_HEIGHT; + if (cl.gametype == GAME_DEATHMATCH) + sbar_x = 0; + else + sbar_x = (vid.conwidth - 320)/2; + + if (sb_lines > 24) + { + if (gamemode != GAME_GOODVSBAD2) + Sbar_DrawInventory (); + if (!cl.islocalgame) + Sbar_DrawFrags (); + } + + if (sb_showscores || cl.stats[STAT_HEALTH] <= 0) + { + if (gamemode != GAME_GOODVSBAD2) + Sbar_DrawAlphaPic (0, 0, sb_scorebar, 0.4); + Sbar_DrawScoreboard (); + } + else if (sb_lines) + { + Sbar_DrawAlphaPic (0, 0, sb_sbar, 0.4); + + // keys (hipnotic only) + //MED 01/04/97 moved keys here so they would not be overwritten + if (gamemode == GAME_HIPNOTIC) { - if (gamemode == GAME_ROGUE) + if (cl.items & IT_KEY1) + Sbar_DrawPic (209, 3, sb_items[0]); + if (cl.items & IT_KEY2) + Sbar_DrawPic (209, 12, sb_items[1]); + } + // armor + if (gamemode != GAME_GOODVSBAD2) + { + if (cl.items & IT_INVULNERABILITY) { - Sbar_DrawNum (24, 0, cl.stats[STAT_ARMOR], 3, cl.stats[STAT_ARMOR] <= 25); - if (cl.items & RIT_ARMOR3) - Sbar_DrawPic (0, 0, sb_armor[2]); - else if (cl.items & RIT_ARMOR2) - Sbar_DrawPic (0, 0, sb_armor[1]); - else if (cl.items & RIT_ARMOR1) - Sbar_DrawPic (0, 0, sb_armor[0]); + Sbar_DrawNum (24, 0, 666, 3, 1); + Sbar_DrawPic (0, 0, sb_disc); } else { - Sbar_DrawNum (24, 0, cl.stats[STAT_ARMOR], 3, cl.stats[STAT_ARMOR] <= 25); - if (cl.items & IT_ARMOR3) - Sbar_DrawPic (0, 0, sb_armor[2]); - else if (cl.items & IT_ARMOR2) - Sbar_DrawPic (0, 0, sb_armor[1]); - else if (cl.items & IT_ARMOR1) - Sbar_DrawPic (0, 0, sb_armor[0]); + if (gamemode == GAME_ROGUE) + { + Sbar_DrawNum (24, 0, cl.stats[STAT_ARMOR], 3, cl.stats[STAT_ARMOR] <= 25); + if (cl.items & RIT_ARMOR3) + Sbar_DrawPic (0, 0, sb_armor[2]); + else if (cl.items & RIT_ARMOR2) + Sbar_DrawPic (0, 0, sb_armor[1]); + else if (cl.items & RIT_ARMOR1) + Sbar_DrawPic (0, 0, sb_armor[0]); + } + else + { + Sbar_DrawNum (24, 0, cl.stats[STAT_ARMOR], 3, cl.stats[STAT_ARMOR] <= 25); + if (cl.items & IT_ARMOR3) + Sbar_DrawPic (0, 0, sb_armor[2]); + else if (cl.items & IT_ARMOR2) + Sbar_DrawPic (0, 0, sb_armor[1]); + else if (cl.items & IT_ARMOR1) + Sbar_DrawPic (0, 0, sb_armor[0]); + } } } + + // face + Sbar_DrawFace (); + + // health + Sbar_DrawNum (154, 0, cl.stats[STAT_HEALTH], 3, cl.stats[STAT_HEALTH] <= 25); + + // ammo icon + if (gamemode == GAME_ROGUE) + { + if (cl.items & RIT_SHELLS) + Sbar_DrawPic (224, 0, sb_ammo[0]); + else if (cl.items & RIT_NAILS) + Sbar_DrawPic (224, 0, sb_ammo[1]); + else if (cl.items & RIT_ROCKETS) + Sbar_DrawPic (224, 0, sb_ammo[2]); + else if (cl.items & RIT_CELLS) + Sbar_DrawPic (224, 0, sb_ammo[3]); + else if (cl.items & RIT_LAVA_NAILS) + Sbar_DrawPic (224, 0, rsb_ammo[0]); + else if (cl.items & RIT_PLASMA_AMMO) + Sbar_DrawPic (224, 0, rsb_ammo[1]); + else if (cl.items & RIT_MULTI_ROCKETS) + Sbar_DrawPic (224, 0, rsb_ammo[2]); + } + else + { + if (cl.items & IT_SHELLS) + Sbar_DrawPic (224, 0, sb_ammo[0]); + else if (cl.items & IT_NAILS) + Sbar_DrawPic (224, 0, sb_ammo[1]); + else if (cl.items & IT_ROCKETS) + Sbar_DrawPic (224, 0, sb_ammo[2]); + else if (cl.items & IT_CELLS) + Sbar_DrawPic (224, 0, sb_ammo[3]); + } + + Sbar_DrawNum (248, 0, cl.stats[STAT_AMMO], 3, cl.stats[STAT_AMMO] <= 10); + } - - // face - Sbar_DrawFace (); - - // health - Sbar_DrawNum (136, 0, cl.stats[STAT_HEALTH], 3, cl.stats[STAT_HEALTH] <= 25); - - // ammo icon - if (gamemode == GAME_ROGUE) - { - if (cl.items & RIT_SHELLS) - Sbar_DrawPic (224, 0, sb_ammo[0]); - else if (cl.items & RIT_NAILS) - Sbar_DrawPic (224, 0, sb_ammo[1]); - else if (cl.items & RIT_ROCKETS) - Sbar_DrawPic (224, 0, sb_ammo[2]); - else if (cl.items & RIT_CELLS) - Sbar_DrawPic (224, 0, sb_ammo[3]); - else if (cl.items & RIT_LAVA_NAILS) - Sbar_DrawPic (224, 0, rsb_ammo[0]); - else if (cl.items & RIT_PLASMA_AMMO) - Sbar_DrawPic (224, 0, rsb_ammo[1]); - else if (cl.items & RIT_MULTI_ROCKETS) - Sbar_DrawPic (224, 0, rsb_ammo[2]); - } - else - { - if (cl.items & IT_SHELLS) - Sbar_DrawPic (224, 0, sb_ammo[0]); - else if (cl.items & IT_NAILS) - Sbar_DrawPic (224, 0, sb_ammo[1]); - else if (cl.items & IT_ROCKETS) - Sbar_DrawPic (224, 0, sb_ammo[2]); - else if (cl.items & IT_CELLS) - Sbar_DrawPic (224, 0, sb_ammo[3]); - } - - Sbar_DrawNum (248, 0, cl.stats[STAT_AMMO], 3, cl.stats[STAT_AMMO] <= 10); } + if (vid.conwidth > 320 && cl.gametype == GAME_DEATHMATCH) Sbar_MiniDeathmatchOverlay (); -- 2.39.2