Update of /cvsroot/netrek/client/netrekxp/src
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv13111/src

Modified Files:
	dashboard.c dashboard3.c data.c getship.c redraw.c warning.c 
Log Message:
Some bitmap modifications (with new art)
Added timer/clock back to text dashboard
Added torp count to LAB dashboard
-Added new status line to KRP, COW and LAB dashboard. In order of priority, it shows the following:
  1) time left in declare war delay
  2) time left in refit delay
  3) time left to fully repair (if you are at warp 0 in repair mode)
  4) time left in grace period after T mode drops to still take planets (15 second timer)
  5) whether you are in transwarp
  6) whether you are under impulse power (default)

Index: redraw.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/redraw.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- redraw.c	7 May 2006 16:59:27 -0000	1.6
+++ redraw.c	18 May 2006 07:15:35 -0000	1.7
@@ -185,6 +185,9 @@
         buf = buf2;
         oldbuf = buf1;
     }
+    /* TIMER */
+    db_timer (flag, WINSIDE - 12 * W_Textwidth, 27);
+    
     buf[0] = (char) (me->p_flags & PFSHIELD ? 'S' : ' ');
     if (me->p_flags & PFGREEN)
         buf[1] = 'G';

Index: getship.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/getship.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -d -r1.1.1.1 -r1.2
--- getship.c	21 Jan 2003 21:28:30 -0000	1.1.1.1
+++ getship.c	18 May 2006 07:15:35 -0000	1.2
@@ -39,6 +39,7 @@
     shipvals[SCOUT].s_width = 20;       /* scout:  */
     shipvals[SCOUT].s_height = 20;      /* scout:  */
     shipvals[SCOUT].s_phaserfuse = 10;  /* scout:  */
+    shipvals[SCOUT].s_repair = 80;      /* scout:  */
 
     shipvals[DESTROYER].s_phaserdamage = 85;    /* destroyer: */
     shipvals[DESTROYER].s_torpspeed = 14;       /* destroyer: */
@@ -53,6 +54,7 @@
     shipvals[DESTROYER].s_height = 20;  /* destroyer: */
     shipvals[DESTROYER].s_type = DESTROYER;     /* destroyer: */
     shipvals[DESTROYER].s_phaserfuse = 10;      /* destroyer: */
+    shipvals[DESTROYER].s_repair = 100;         /* destroyer: */
 
     shipvals[BATTLESHIP].s_phaserdamage = 105;  /* battleship: */
     shipvals[BATTLESHIP].s_torpspeed = 12;      /* battleship: */
@@ -67,6 +69,7 @@
     shipvals[BATTLESHIP].s_height = 20; /* battleship: */
     shipvals[BATTLESHIP].s_type = BATTLESHIP;   /* battleship: */
     shipvals[BATTLESHIP].s_phaserfuse = 10;     /* battleship: */
+    shipvals[BATTLESHIP].s_repair = 125;        /* battleship: */
 
     shipvals[ASSAULT].s_phaserdamage = 80;      /* assault */
     shipvals[ASSAULT].s_torpspeed = 16; /* assault */
@@ -81,6 +84,7 @@
     shipvals[ASSAULT].s_height = 20;    /* assault */
     shipvals[ASSAULT].s_type = ASSAULT; /* assault */
     shipvals[ASSAULT].s_phaserfuse = 10; /* assault */
+    shipvals[ASSAULT].s_repair = 120;    /* assault */
 
     shipvals[STARBASE].s_phaserdamage = 120;    /* starbase */
     shipvals[STARBASE].s_torpspeed = 14;        /* starbase */
@@ -95,7 +99,8 @@
     shipvals[STARBASE].s_height = 20;   /* starbase */
     shipvals[STARBASE].s_type = STARBASE;       /* starbase */
     shipvals[STARBASE].s_phaserfuse = 4;        /* starbase */
-
+    shipvals[STARBASE].s_repair = 140;  /* starbase */
+    
     shipvals[ATT].s_phaserdamage = 10000;       /* att: */
     shipvals[ATT].s_torpspeed = 30;     /* att: */
     shipvals[ATT].s_maxspeed = 60;      /* att: */
@@ -109,6 +114,7 @@
     shipvals[ATT].s_height = 20;        /* att: */
     shipvals[ATT].s_type = ATT; /* att: */
     shipvals[ATT].s_phaserfuse = 1; /* att: */
+    shipvals[ATT].s_repair = 30000; /* att: */
 
     shipvals[SGALAXY].s_phaserdamage = 100;     /* galaxy: */
     shipvals[SGALAXY].s_torpspeed = 13; /* galaxy: */
@@ -123,6 +129,7 @@
     shipvals[SGALAXY].s_height = 20;    /* galaxy: */
     shipvals[SGALAXY].s_type = SGALAXY; /* galaxy: */
     shipvals[SGALAXY].s_phaserfuse = 10; /* galaxy: */
+    shipvals[SGALAXY].s_repair = 112;    /* galaxy: */
 
     shipvals[CRUISER].s_phaserdamage = 100;     /* cruiser: */
     shipvals[CRUISER].s_torpspeed = 12; /* cruiser: */
@@ -137,6 +144,7 @@
     shipvals[CRUISER].s_height = 20;    /* cruiser: */
     shipvals[CRUISER].s_type = CRUISER; /* cruiser: */
     shipvals[CRUISER].s_phaserfuse = 10; /* cruiser: */
+    shipvals[CRUISER].s_repair = 110;   /* cruiser: */
 }
 
 /******************************************************************************/

Index: dashboard.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/dashboard.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- dashboard.c	7 May 2006 16:59:27 -0000	1.3
+++ dashboard.c	18 May 2006 07:15:35 -0000	1.4
@@ -38,6 +38,7 @@
 #define BAR_LENGTH 56
 
 #define SPACING 4
+
 /******************************************************************************/
 /***  timerString()                                                         ***/
 /******************************************************************************/
@@ -90,7 +91,10 @@
         switch (timerType)
         {
         case T_NONE:
-            W_ClearArea(tstatw, xloc, yloc, 12 * W_Textwidth, W_Textheight);
+            if (newDashboard)
+                W_ClearArea(tstatw, xloc, yloc, 12 * W_Textwidth, W_Textheight);
+            else
+                W_ClearArea(tstatw, xloc + 4 * W_Textwidth, yloc - W_Textheight, 8 * W_Textwidth, 2 * W_Textheight);
             strcpy(lasttimer, "        ");
             oldtime = now;
             break;
@@ -109,7 +113,10 @@
         }
         if(s) 
         {
-            W_WriteText(tstatw, xloc, yloc, textColor, s, 3, W_RegularFont);
+            if (newDashboard)
+                W_WriteText(tstatw, xloc, yloc, textColor, s, 3, W_RegularFont);
+            else
+                W_WriteText(tstatw, xloc + 4 * W_Textwidth, yloc - W_Textheight, textColor, s, 3, W_RegularFont);
         }
     }
     if (!timerType)
@@ -266,6 +273,88 @@
 }
 
 /******************************************************************************/
+/***  db_special() - for showing prioritized timer info in dashboard        ***/
+/******************************************************************************/
+static void
+db_special (void)
+{
+    char buf[16];
+    struct player *plr;
+    int repairtime;
+
+    if ((me->p_flags & (PFPLOCK | PFOBSERV)) == (PFPLOCK | PFOBSERV))
+        plr = players + me->p_playerl;
+    else
+        plr = me;
+    
+    /* Start with low priority messages, clear as necessary for higher
+       priority ones */
+       
+    /* Default impulse text */
+    W_ClearArea (tstatw, 38, 3, W_Textwidth * 8, W_Textheight);
+    W_WriteText (tstatw, 38, 3, W_Yellow, "Impulse", 7, W_BoldFont);
+    
+    /* Transwarp text */
+    if (me->p_flags & PFTWARP)
+    {
+        W_ClearArea (tstatw, 38, 3, W_Textwidth * 8, W_Textheight);
+        W_WriteText (tstatw, 38, 3, W_White, "Twarp", 5, W_BoldFont);
+    }
+    /* Tournament extension text */
+    if (tdelay)
+    {
+        if (time (0) > tdelay)
+            tdelay = 0;
+	else
+	{
+	    W_ClearArea (tstatw, 38, 3, W_Textwidth * 8, W_Textheight);
+            W_WriteText (tstatw, 38, 3, W_Grey, "Tmod", 4, W_BoldFont);
+	    sprintf(buf, "%d", tdelay - time (0));
+	    W_WriteText (tstatw, 68, 3, textColor, buf, strlen (buf), W_RegularFont);
+	}
+    }
+    
+    /* Repair text */
+    if ((me->p_flags & PFREPAIR) && plr->p_speed == 0)
+    {
+        repairtime = repair_time();
+        W_ClearArea (tstatw, 38, 3, W_Textwidth * 8, W_Textheight);
+        W_WriteText (tstatw, 38, 3, W_Cyan, "Fix", 3, W_BoldFont);
+        sprintf(buf, "%d", repairtime);
+        W_WriteText (tstatw, 62, 3, textColor, buf, strlen (buf), W_RegularFont);
+    }
+    
+    /* Refit text */
+    if (rdelay)
+    {
+        if (time (0) > rdelay)
+            rdelay = 0;
+        else
+        {
+            W_ClearArea (tstatw, 38, 3, W_Textwidth * 8, W_Textheight);
+            W_WriteText (tstatw, 38, 3, W_Green, "Refit", 5, W_BoldFont);
+            sprintf(buf, "%d", rdelay - time (0));
+            W_WriteText (tstatw, 74, 3, textColor, buf, strlen (buf), W_RegularFont);
+        }
+    }
+    
+    /* Declare War text */
+    if (delay)
+    {
+        if (time (0) > delay)
+            delay = 0;
+        else
+        {
+            W_ClearArea (tstatw, 38, 3, W_Textwidth * 8, W_Textheight);
+            W_WriteText (tstatw, 38, 3, W_Red, "War", 3, W_BoldFont);
+            sprintf(buf, "%d", delay - time (0));
+            W_WriteText (tstatw, 62, 3, textColor, buf, strlen (buf), W_RegularFont);
+        }
+    }
+}
+
+
+/******************************************************************************/
 /***  db_flags()                                                            ***/
 /******************************************************************************/
 static void
@@ -274,7 +363,7 @@
     static float old_kills = -1.0;
     static int old_torp = -1;
     static unsigned int old_flags = (unsigned int) -1;
-    static int old_tourn = -1;
+    static int old_tourn = 0;
     char buf[16];
     struct player *plr;
 
@@ -315,19 +404,25 @@
             buf[11] = 'd';
         else
             buf[11] = ' ';
-
+            
         W_WriteText (tstatw, 2, 3, textColor, "Flags", 5, W_RegularFont);
         W_WriteText (tstatw, 2, 17, textColor, buf, 12, W_RegularFont);
         old_flags = me->p_flags;
     }
-
+    
     if (fr || status->tourn != old_tourn)
     {
         if (status->tourn)
+        {
             W_WriteText (tstatw, 74, 17, textColor, "T", 1, W_BoldFont);
+            tdelay = 0;
+        }
         else
+        {
+            if (status->tourn != old_tourn && !tdelay)
+                tdelay = time (0) + TOURNEXTENDTIME;
             W_WriteText (tstatw, 74, 17, textColor, " ", 1, W_BoldFont);
-
+        }
         old_tourn = status->tourn;
     }
 
@@ -391,6 +486,7 @@
         W_ClearWindow (tstatw);
 
     db_flags (fr);
+    db_special ();
 
     /* TIMER */
     db_timer (fr, 2, 3 + 2 * (W_Textheight + SPACING));
@@ -550,6 +646,7 @@
         W_ClearWindow (tstatw);
 
     db_flags (fr);
+    db_special ();
 
     db_timer (fr, 2, 3 + 2 * (W_Textheight + SPACING));
 
@@ -700,3 +797,59 @@
         db_redraw_COW (fr);
     }
 }
+
+/******************************************************************************/
+/***  repair_time() - calculate time left till ship is fully repaired
+                      using server defined repair rates.  Only called when
+                      ship is at warp 0 and under repair                    ***/
+/******************************************************************************/
+int
+repair_time (void)
+{
+    int shieldtime = 0;
+    int hulltime = 0;
+    int shieldneeded, hullneeded;
+    float shieldrate = 0.0, hullrate = 0.0;
+    
+    /* 100 subshield or subdamage =  1 shield or hull repaired 
+       This routine is used by server every update (and 10 updates/sec) */
+    /* calculate shield repair rate */
+    if ((shieldneeded = (me->p_ship.s_maxshield - me->p_shield)) > 0)
+    {
+        me->p_subshield = me->p_ship.s_repair * 4;
+        if ((me->p_flags & PFORBIT)
+        && (planets[me->p_planet].pl_flags & PLREPAIR)
+        &&(!(planets[me->p_planet].pl_owner & (me->p_swar | me->p_hostile))))
+        {
+            me->p_subshield += me->p_ship.s_repair * 4;
+        }
+        if (me->p_flags & PFDOCK)
+        {
+    	    me->p_subshield += me->p_ship.s_repair * 6;
+        }
+        /* Calculate time needed to repair shields */
+        shieldrate = (float)(me->p_subshield)/(float)100.0;
+        shieldtime = (int)(shieldneeded/shieldrate);
+    }
+
+    /* calculate hull repair rate */
+    if (((hullneeded = me->p_damage) > 0) && !(me->p_flags & PFSHIELD))
+    {
+    	me->p_subdamage = me->p_ship.s_repair * 2;
+    	if ((me->p_flags & PFORBIT)
+    	&& (planets[me->p_planet].pl_flags & PLREPAIR)
+    	&& (!(planets[me->p_planet].pl_owner & (me->p_swar | me->p_hostile))))
+    	{
+    	    me->p_subdamage += me->p_ship.s_repair * 2;
+    	}
+    	if (me->p_flags & PFDOCK)
+    	{
+    	    me->p_subdamage += me->p_ship.s_repair * 3;
+    	}
+    	/* Calculate time needed to repair hull */
+    	hullrate = (float)(me->p_subdamage)/(float)100.0;
+        hulltime = (int)(hullneeded/hullrate);
+    }
+    
+    return MAX(shieldtime, hulltime);
+};
\ No newline at end of file

Index: data.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/data.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- data.c	16 May 2006 05:10:13 -0000	1.19
+++ data.c	18 May 2006 07:15:35 -0000	1.20
@@ -79,8 +79,9 @@
 struct plupdate pl_update[MAXPLANETS];
 char buttonmap[23] = { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0' };
 int lastm = 0;
-int delay = 0;                  /* delay for decaring war */
-int rdelay = 0;                 /* delay for refitting */
+time_t delay = 0;                  /* time stamp for decaring war */
+time_t rdelay = 0;                 /* time stamp for refitting */
+time_t tdelay = 0;                 /* time stamp for T mode extension */
 int showPlanetNames = 1;
 int autoQuit = 60;
 int showStats = 0;

Index: warning.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/warning.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- warning.c	7 May 2006 16:59:27 -0000	1.5
+++ warning.c	18 May 2006 07:15:35 -0000	1.6
@@ -27,7 +27,7 @@
 void
 warning (char *text)
 {
-    int doPhaser;
+    int doPhaser, doRefit, doDeclare;
     time_t curtime;
     struct tm *tm;
     char newtext[128];
@@ -40,8 +40,14 @@
     }
 
     doPhaser = (strncmp (text, "Phaser burst", 12) == 0);
-
+    doRefit = (strncmp (text, "You are being transported", 25) == 0);
+    doDeclare = (strncmp (text, "Pausing ten seconds to re-program", 33) == 0);
     warncount = strlen (text);
+    
+    if (doRefit)
+       rdelay = time (0) + REFITTIME;
+    if (doDeclare)
+       delay = time (0) + DECLARETIME;
 #ifdef PHASER_STATS
     if (doPhaser && phaserStats)
     {

Index: dashboard3.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/dashboard3.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- dashboard3.c	7 May 2006 16:59:27 -0000	1.4
+++ dashboard3.c	18 May 2006 07:15:35 -0000	1.5
@@ -241,13 +241,95 @@
 
 
 /******************************************************************************/
+/***  db_special() - for showing prioritized timer info in dashboard        ***/
+/******************************************************************************/
+static void
+db_special (void)
+{
+    char buf[16];
+    struct player *plr;
+    int repairtime;
+
+    if ((me->p_flags & (PFPLOCK | PFOBSERV)) == (PFPLOCK | PFOBSERV))
+        plr = players + me->p_playerl;
+    else
+        plr = me;
+    
+    /* Start with low priority messages, clear as necessary for higher
+       priority ones */
+       
+    /* Default impulse text */
+    W_ClearArea (tstatw, 160, 32, W_Textwidth * 8, W_Textheight);
+    W_WriteText (tstatw, 160, 32, W_Yellow, "Impulse", 7, W_BoldFont);
+    
+    /* Transwarp text */
+    if (me->p_flags & PFTWARP)
+    {
+        W_ClearArea (tstatw, 160, 32, W_Textwidth * 8, W_Textheight);
+        W_WriteText (tstatw, 160, 32, W_White, "Twarp", 5, W_BoldFont);
+    }
+    /* Tournament extension text */
+    if (tdelay)
+    {
+        if (time (0) > tdelay)
+            tdelay = 0;
+	else
+	{
+	    W_ClearArea (tstatw, 160, 32, W_Textwidth * 8, W_Textheight);
+            W_WriteText (tstatw, 160, 32, W_Grey, "Tmod", 4, W_BoldFont);
+	    sprintf(buf, "%d", tdelay - time (0));
+	    W_WriteText (tstatw, 190, 32, textColor, buf, strlen (buf), W_RegularFont);
+	}
+    }
+    
+    /* Repair text */
+    if ((me->p_flags & PFREPAIR) && plr->p_speed == 0)
+    {
+        repairtime = repair_time();
+        W_ClearArea (tstatw, 160, 32, W_Textwidth * 8, W_Textheight);
+        W_WriteText (tstatw, 160, 32, W_Cyan, "Fix", 3, W_BoldFont);
+        sprintf(buf, "%d", repairtime);
+        W_WriteText (tstatw, 184, 32, textColor, buf, strlen (buf), W_RegularFont);
+    }
+    
+    /* Refit text */
+    if (rdelay)
+    {
+        if (time (0) > rdelay)
+            rdelay = 0;
+        else
+        {
+            W_ClearArea (tstatw, 160, 32, W_Textwidth * 8, W_Textheight);
+            W_WriteText (tstatw, 160, 32, W_Green, "Refit", 5, W_BoldFont);
+            sprintf(buf, "%d", rdelay - time (0));
+            W_WriteText (tstatw, 196, 32, textColor, buf, strlen (buf), W_RegularFont);
+        }
+    }
+    
+    /* Declare War text */
+    if (delay)
+    {
+        if (time (0) > delay)
+            delay = 0;
+        else
+        {
+            W_ClearArea (tstatw, 160, 32, W_Textwidth * 8, W_Textheight);
+            W_WriteText (tstatw, 160, 32, W_Red, "War", 3, W_BoldFont);
+            sprintf(buf, "%d", delay - time (0));
+            W_WriteText (tstatw, 184, 32, textColor, buf, strlen (buf), W_RegularFont);
+        }
+    }
+}
+
+
+/******************************************************************************/
 /***  db_flags()                                                            ***/
 /******************************************************************************/
 static void
 db_flags (int fr)
 {
     static unsigned int old_flags = (unsigned int) -1;
-    static unsigned char old_tourn = (unsigned char) -1;
+    static unsigned char old_tourn = (unsigned char) 0;
     char buf[13];
 
 
@@ -315,10 +397,13 @@
         if (status->tourn)
         {
             buf[12] = 't';
+            tdelay = 0;
         }
         else
         {
             buf[12] = ' ';
+            if (status->tourn != old_tourn && !tdelay)
+                tdelay = time (0) + TOURNEXTENDTIME;
         }
 
         W_WriteText (tstatw, 2, 32, W_White, buf, 13, W_RegularFont);
@@ -340,19 +425,28 @@
     static int old_wpn = -1, old_egn = -1;
     static int old_ful = -1;
     static float old_kills = -1;
+    static int old_torp = -1;
     int cur_max, cur_arm, label_len;
     char label[32];
     float kills; 
+    int torp;
         
     if ((me->p_flags & (PFPLOCK | PFOBSERV)) == (PFPLOCK | PFOBSERV))
+    {
         kills = players[me->p_playerl].p_kills;
+        torp = players[me->p_playerl].p_ntorp;
+    }
     else
+    {
         kills = me->p_kills;
+        torp = me->p_ntorp;
+    }
 
     if (fr)
         W_ClearWindow (tstatw);
 
     db_flags (fr);
+    db_special ();
 
     /* TIMER */
     db_timer (fr, WINSIDE - 12 * W_Textwidth, 32);
@@ -551,7 +645,30 @@
 
         old_kills = kills;
     }
-
+    
+    if (fr || (old_torp != torp))
+    {
+    	W_ClearArea (tstatw, 242, 32, 72, W_Textheight);
+    	
+        if (torp > 0)
+        {
+            label[0] = ' ';
+            label[1] = 'T';
+            label[2] = 'o';
+            label[3] = 'r';
+            label[4] = 'p';
+            label[5] = 's';
+            label[6] = ':';
+            label[7] = ' ';
+            label_len = 8 + db_itoa (&label[8], torp);
+            
+            W_WriteText (tstatw,
+                         242, 32,
+                         W_White, label, label_len, W_RegularFont);
+        }
+        old_torp = torp;
+    }
+    
     old_spd = me->p_speed;
     old_cur_max = cur_max;
     old_shl = me->p_shield;