]> de.git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
patch from Andreas Kirsh to add Nexuiz hud
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Thu, 4 Sep 2003 12:30:46 +0000 (12:30 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Thu, 4 Sep 2003 12:30:46 +0000 (12:30 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@3436 d7cf8633-e32d-0410-b094-e92efae38249

cl_screen.h
gl_draw.c
quakedef.h
sbar.c

index 41d462638b68c7ec2ad2d46a3e776d262b0576bc..14f14814d82384008b78ca1f21257ed9f065b6b9 100644 (file)
@@ -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);
index d2e627d7a8f9420c08d1d0ba053057ccebe80c9e..4ef340daa4f4c158ceae67b2f5292a8d69c5e986 100644 (file)
--- 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);
 
index 4ab90481a1b6d0163135daade6eef0a7115941cd..a7c356203134a23a36b476100985aa296d11e90d 100644 (file)
@@ -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 0f39e37181ca6e4c90cda7d048a69499a0930fc3..555928f887e0be5d7e57d8308e69d9d56003d9c5 100644 (file)
--- 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 ();