From 3fc651486144baec24f1dc15b8d159fe5aafff4d Mon Sep 17 00:00:00 2001
From: Allanis <allanis@saracraft.net>
Date: Tue, 26 Nov 2013 15:36:27 +0000
Subject: [PATCH] [Fix] Bug in weapon system timers.

---
 src/ai.c    |  1 -
 src/pause.c | 37 ++++++++++++++++++++++++++++---------
 2 files changed, 28 insertions(+), 10 deletions(-)

diff --git a/src/ai.c b/src/ai.c
index 4e17416..8b40530 100644
--- a/src/ai.c
+++ b/src/ai.c
@@ -626,7 +626,6 @@ static int ai_pshield(lua_State* L) {
   else d = cur_pilot->shield / cur_pilot->shield_max * 100.;
 
   lua_pushnumber(L, d);
-
   return 1;
 }
 
diff --git a/src/pause.c b/src/pause.c
index 0d3701e..240fff5 100644
--- a/src/pause.c
+++ b/src/pause.c
@@ -12,15 +12,15 @@ extern int pilot_nstack;
 /* From main.c */
 extern unsigned int gtime;
 
-static void pilot_nstack_pause(void);
-static void pilot_nstack_unpause(void);
-static void pilot_nstack_delay(unsigned int delay);
+static void pilot_pause(void);
+static void pilot_unpause(void);
+static void pilot_delay(unsigned int delay);
 
 /* Pause the game. */
 void pause_game(void) {
   if(paused) return; /* Well well.. We are paused already. */
 
-  pilot_nstack_pause();
+  pilot_pause();
 
   paused = 1; /* We should unpause it. */
 }
@@ -28,42 +28,56 @@ void pause_game(void) {
 void unpause_game(void) {
   if(!paused) return; /* We are unpaused already. */
 
-  pilot_nstack_unpause();
+  pilot_unpause();
 
   paused = 0;
 }
 
 /* Set the timers back. */
 void pause_delay(unsigned int delay) {
-  pilot_nstack_delay(delay);
+  pilot_delay(delay);
 }
 
 /* Pilots pausing/unpausing. */
-static void pilot_nstack_pause(void) {
+static void pilot_pause(void) {
   int i, j;
   unsigned int t = SDL_GetTicks();
   for(i = 0; i < pilot_nstack; i++) {
     pilot_stack[i]->ptimer -= t;
 
+    /* Pause timers. */
     pilot_stack[i]->tcontrol -= t;
     for(j = 0; j < MAX_AI_TIMERS; j++)
       pilot_stack[i]->timer[j] -= t;
+
+    /* Pause outfits. */
+    for(j = 0; j < pilot_stack[i]->noutfits; j++) {
+      if(pilot_stack[i]->outfits[j].timer > 0)
+        pilot_stack[i]->outfits[j].timer -= t;
+    }
   }
 }
 
-static void pilot_nstack_unpause(void) {
+static void pilot_unpause(void) {
   int i, j;
   unsigned int t = SDL_GetTicks();
   for(i = 0; i < pilot_nstack; i++) {
     pilot_stack[i]->ptimer += t;
 
+    /* Rerun timers. */
     pilot_stack[i]->tcontrol += t;
     for(j = 0; j < MAX_AI_TIMERS; j++)
       pilot_stack[i]->timer[j] += t;
+
+    /* Pause outfits. */
+    for(j = 0; j < pilot_stack[i]->noutfits; j++) {
+      if(pilot_stack[i]->outfits[j].timer > 0)
+        pilot_stack[i]->outfits[j].timer += t;
+    }
   }
 }
 
-static void pilot_nstack_delay(unsigned int delay) {
+static void pilot_delay(unsigned int delay) {
   int i, j;
   for(i = 0; i < pilot_nstack; i++) {
     pilot_stack[i]->ptimer += delay;
@@ -71,6 +85,11 @@ static void pilot_nstack_delay(unsigned int delay) {
     pilot_stack[i]->tcontrol += delay;
     for(j = 0; j < MAX_AI_TIMERS; j++)
       pilot_stack[i]->timer[j] += delay;
+
+    for(j = 0; j < pilot_stack[i]->noutfits; j++) {
+      if(pilot_stack[i]->outfits[j].timer > 0)
+        pilot_stack[i]->outfits[j].timer += delay;
+    }
   }
 }