summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/bg_pmove.c17
-rw-r--r--src/game/bg_public.h3
-rw-r--r--src/game/g_active.c5
3 files changed, 22 insertions, 3 deletions
diff --git a/src/game/bg_pmove.c b/src/game/bg_pmove.c
index 78d22689..45cf89e0 100644
--- a/src/game/bg_pmove.c
+++ b/src/game/bg_pmove.c
@@ -2971,6 +2971,14 @@ static void PM_Weapon( void )
attack1 = pm->cmd.buttons & BUTTON_ATTACK;
attack2 = pm->cmd.buttons & BUTTON_ATTACK2;
attack3 = qfalse;
+
+ // Prevent firing of the Lucifer Cannon after an overcharge
+ if( pm->ps->weaponstate == WEAPON_NEEDS_RESET )
+ {
+ if( attack1 )
+ return;
+ pm->ps->weaponstate = WEAPON_READY;
+ }
if( attack1 || pm->ps->stats[ STAT_MISC ] > 0 )
attack2 = qfalse;
@@ -2985,6 +2993,12 @@ static void PM_Weapon( void )
pm->ps->weaponstate = WEAPON_READY;
return;
}
+ else
+ {
+ // Overcharge
+ pm->ps->weaponTime = 0;
+ pm->ps->weaponstate = WEAPON_NEEDS_RESET;
+ }
}
if( pm->ps->stats[ STAT_MISC ] > LCANNON_MIN_CHARGE )
@@ -3157,7 +3171,8 @@ static void PM_Weapon( void )
pm->ps->torsoTimer = TIMER_ATTACK;
}
- pm->ps->weaponstate = WEAPON_FIRING;
+ if( pm->ps->weaponstate != WEAPON_NEEDS_RESET )
+ pm->ps->weaponstate = WEAPON_FIRING;
// take an ammo away if not infinite
if( !BG_FindInfinteAmmoForWeapon( pm->ps->weapon ) )
diff --git a/src/game/bg_public.h b/src/game/bg_public.h
index 858b0740..572430fc 100644
--- a/src/game/bg_public.h
+++ b/src/game/bg_public.h
@@ -124,7 +124,8 @@ typedef enum
WEAPON_RAISING,
WEAPON_DROPPING,
WEAPON_FIRING,
- WEAPON_RELOADING
+ WEAPON_RELOADING,
+ WEAPON_NEEDS_RESET,
} weaponstate_t;
// pmove->pm_flags
diff --git a/src/game/g_active.c b/src/game/g_active.c
index 94a8e8c9..4e7134e2 100644
--- a/src/game/g_active.c
+++ b/src/game/g_active.c
@@ -666,8 +666,11 @@ void ClientTimerActions( gentity_t *ent, int msec )
//client is charging up an lcannon
if( client->ps.weapon == WP_LUCIFER_CANNON &&
( ucmd->buttons & BUTTON_ATTACK ) &&
- client->ps.stats[ STAT_MISC2 ] <= 0 )
+ client->ps.stats[ STAT_MISC2 ] <= 0 &&
+ client->ps.weaponstate != WEAPON_NEEDS_RESET )
{
+ int ammo;
+
if( client->ps.stats[ STAT_MISC ] <= 0 )
client->lcannonStartTime = level.time;