So how about this patch.  Apart from some trivial comment cleanups, it
attempts to restore the 10 fps behaviour.

I've done some testing with a modified Python client that sends eight
CP_TORP packets for every mouse click.  On a local server, without this
patch, I got just one torp.  On continuum, I got two.  On pickled, I got
one.  Continuum is on 50 fps.  Pickled is on 10 fps.

The patch also changes the static variable to match the same bit length
as the p_updates variable, and notes that it introduces a bug that will
stop a ship firing torps after 497 days alive at 50 fps ... which is
2^31 frames.

--- old-netrek-server/Vanilla/ntserv/torp.c	2008-07-17 14:44:43.000000000 +1000
+++ new-netrek-server/Vanilla/ntserv/torp.c	2008-07-17 14:44:43.000000000 +1000
@@ -51,15 +51,16 @@
  */
 void ntorp(u_char course, int attributes)
 {
-  static LONG last_torp_fired_update = 0;
+  static int last_torp_fired_update = 0;
   struct torp *k;
 
   if (status->gameup & GU_CONQUER) return;
 
   /*
    * Prevent player from firing more than one torp per update.  */
-  if (me->p_updates == last_torp_fired_update)
+  if (me->p_updates < (last_torp_fired_update + (fps / 10)))
     return;
+  /*! @bug ship may stop firing torps after 497 days alive at 50 fps */
 
   if (me->p_flags & PFWEP) {
     new_warning(25, "Torpedo launch tubes have exceeded maximum safe temperature!");
@@ -138,8 +139,7 @@
   me->p_fuel -= myship->s_torpcost;
   me->p_wtemp += (myship->s_torpcost / 10) - 10;	/* Heat weapons */
 
-  /* 
-   * Initialize torp: */
+  /* initialize torp */
   k->t_status = TMOVE;
   k->t_type = TPHOTON;
   k->t_attribute = attributes;
@@ -164,13 +164,9 @@
 #endif
 
 #ifdef LTD_STATS
-
-  /* At this point, a torpedo was fired */
   if (status->tourn) {
     ltd_update_torp_fired(me);
   }
-
 #endif
-
 }
 
-- 
James Cameron    mailto:quozl at us.netrek.org     http://quozl.netrek.org/