diff --git a/code/game/gamemodes/xenos/xenos.dm b/code/game/gamemodes/xenos/xenos.dm
index 5cac584e335..912af910d89 100644
--- a/code/game/gamemodes/xenos/xenos.dm
+++ b/code/game/gamemodes/xenos/xenos.dm
@@ -8,8 +8,8 @@
required_players = 0
recommended_players = 30
required_players_secret = 20
- required_enemies = 5
- recommended_enemies = 8
+ required_enemies = 3
+ recommended_enemies = 3
var/result = 0
var/checkwin_counter = 0
var/xenos_list = list()
@@ -17,7 +17,7 @@
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
-
+
var/xenoai = 0 //Should the Xenos have their own AI?
var/xenoborg = 0 //Should the Xenos have their own borg?
var/gammaratio = 4 //At what alien to human ratio will the Gamma security level be called and the nuke be made available?
@@ -170,7 +170,7 @@
send_intercept()
return ..()
-
+
/datum/game_mode/xenos/process()
checkwin_counter++
if(checkwin_counter >= 5)
@@ -178,7 +178,7 @@
ticker.mode.check_win()
checkwin_counter = 0
return 0
-
+
/datum/game_mode/xenos/check_win()
var/xenosalive = xenos_alive()
@@ -207,7 +207,7 @@
V.locked = 0
V.update_icon()
return ..()
-
+
/datum/game_mode/xenos/check_finished()
if(config.continous_rounds)
if(result)
@@ -218,14 +218,14 @@
return 1
else
return 0
-
+
/datum/game_mode/xenos/proc/get_nuke_code()
var/nukecode = "ERROR"
for(var/obj/machinery/nuclearbomb/bomb in world)
if(bomb && bomb.r_code && bomb.z == 1)
nukecode = bomb.r_code
- return nukecode
-
+ return nukecode
+
/datum/game_mode/xenos/proc/xenos_alive()
var/list/livingxenos = list()
for(var/datum/mind/xeno in xenos)
@@ -233,8 +233,8 @@
if(istype(xeno.current,/mob/living/carbon/alien) || (xenoborg && isrobot(xeno.current)) || (xenoai && isAI(xeno.current)))
livingxenos += xeno
return livingxenos.len
-
-/datum/game_mode/xenos/proc/players_alive()
+
+/datum/game_mode/xenos/proc/players_alive()
var/list/livingplayers = list()
for(var/mob/M in player_list)
var/turf/T = get_turf(M)
@@ -242,12 +242,12 @@
if(ishuman(M))
livingplayers += 1
return livingplayers.len
-
-/datum/game_mode/xenos/declare_completion()
+
+/datum/game_mode/xenos/declare_completion()
if(result == 1)
feedback_set_details("round_end_result","win - xenos killed")
world << "Crew Victory"
- world << "The aliens did not succeed and were exterminated by the crew!"
+ world << "The aliens did not succeed and were exterminated by the crew!"
else if(result == 2)
feedback_set_details("round_end_result","win - crew killed")
world << "Alien Victory"
@@ -255,12 +255,12 @@
else if(station_was_nuked)
feedback_set_details("round_end_result","win - xenos nuked")
world << "Crew Victory"
- world << "The station was destroyed in a nuclear explosion, preventing the aliens from overrunning it!"
+ world << "The station was destroyed in a nuclear explosion, preventing the aliens from overrunning it!"
else
- feedback_set_details("round_end_result","win - crew escaped")
- world << "Draw"
- world << "The crew has escaped from the aliens but did not exterminate them, allowing them to overrun the station."
-
+ feedback_set_details("round_end_result","win - crew escaped")
+ world << "Draw"
+ world << "The crew has escaped from the aliens but did not exterminate them, allowing them to overrun the station."
+
var/text = "
There were [xenos.len] aliens."
text += "
The aliens were:"
for(var/datum/mind/xeno in xenos)
@@ -276,6 +276,6 @@
text += "body destroyed"
text += ")"
world << text
-
+
..()
return 1
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
index 71a42501609..c11272e06ed 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm
@@ -48,10 +48,13 @@
//Hunter verbs
-/mob/living/carbon/alien/humanoid/hunter/proc/toggle_leap()
+/mob/living/carbon/alien/humanoid/hunter/proc/toggle_leap(var/message = 1)
leap_on_click = !leap_on_click
leap_icon.icon_state = "leap_[leap_on_click ? "on":"off"]"
- src << "You will now [leap_on_click ? "leap at":"slash at"] enemies!"
+ if(message)
+ src << "You will now [leap_on_click ? "leap at":"slash at"] enemies!"
+ else
+ return
/mob/living/carbon/alien/humanoid/hunter/ClickOn(var/atom/A, var/params)
face_atom(A)
@@ -59,10 +62,14 @@
leap_at(A)
else
..()
-
+
#define MAX_ALIEN_LEAP_DIST 7
/mob/living/carbon/alien/humanoid/hunter/proc/leap_at(var/atom/A)
+ if(pounce_cooldown)
+ src << "You are too fatigued to pounce right now!"
+ return
+
if(leaping) //Leap while you leap, so you can leap while you leap
return
@@ -73,13 +80,14 @@
if(lying)
return
- leaping = 1
- update_icons()
- throw_at(A,MAX_ALIEN_LEAP_DIST,1)
- leaping = 0
- update_icons()
+ else //Maybe uses plasma in the future, although that wouldn't make any sense...
+ leaping = 1
+ update_icons()
+ throw_at(A,MAX_ALIEN_LEAP_DIST,1)
+ leaping = 0
+ update_icons()
-/mob/living/carbon/alien/humanoid/throw_impact(A)
+/mob/living/carbon/alien/humanoid/hunter/throw_impact(A)
var/msg = ""
if(A)
@@ -89,6 +97,11 @@
L.Weaken(5)
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
step_towards(src,L)
+
+ toggle_leap(0)
+ pounce_cooldown = !pounce_cooldown
+ spawn(pounce_cooldown_time) //3s by default
+ pounce_cooldown = !pounce_cooldown
else
msg = "[src] smashes into [A]!"
weakened = 2
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 1652529c290..0eb6fe764ee 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -8,6 +8,8 @@
var/obj/item/weapon/l_store = null
var/caste = ""
var/next_attack = 0
+ var/pounce_cooldown = 0
+ var/pounce_cooldown_time = 30
update_icon = 1
var/leap_on_click = 0