From a90a2172907c2705ff5d748a0089d732b6909a62 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 31 Dec 2014 11:16:11 -0500 Subject: [PATCH] Xeno Rebalance --- code/game/gamemodes/xenos/xenos.dm | 40 +++++++++---------- .../carbon/alien/humanoid/caste/hunter.dm | 31 +++++++++----- .../living/carbon/alien/humanoid/humanoid.dm | 2 + 3 files changed, 44 insertions(+), 29 deletions(-) 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