From 17dfae4020eb627267d35586755a8b21044e8093 Mon Sep 17 00:00:00 2001 From: Mechoid Date: Mon, 18 Sep 2017 09:03:04 -0700 Subject: [PATCH] Tweaks Xenomorph spitting. (#3852) * Tweaks Xenomorph spitting. * Swap 'them' for 'the target'. ..Also fixes the mismatched costs. * Swaps 'them' for 'the target'. Also, in-progress fixing phoron costs of acid. * Fixes the acid phoron cost. Because Git wasn't playing nice. AAAAAAA. * Swaps a long line out for a small check. --- code/_onclick/click.dm | 1 - code/_onclick/other_mobs.dm | 6 +- code/modules/mob/living/carbon/human/human.dm | 5 ++ .../human/species/xenomorphs/alien_powers.dm | 79 +++++++++++++------ .../human/species/xenomorphs/alien_species.dm | 3 +- .../human/species/xenomorphs/xenomorphs.dm | 2 + 6 files changed, 66 insertions(+), 30 deletions(-) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 94032dcba3..8fec6c9c01 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -38,7 +38,6 @@ * mob/RangedAttack(atom,params) - used only ranged, only used for tk and laser eyes but could be changed */ /mob/proc/ClickOn(var/atom/A, var/params) - if(world.time <= next_click) // Hard check, before anything else, to avoid crashing return diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index b4eb89b8b3..8cf8948bb7 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -29,7 +29,8 @@ return /mob/living/carbon/human/RangedAttack(var/atom/A) - if(!gloves && !mutations.len) return + if(!gloves && !mutations.len && !spitting) + return var/obj/item/clothing/gloves/G = gloves if((LASER in mutations) && a_intent == I_HURT) LaserEyes(A) // moved into a proc below @@ -40,6 +41,9 @@ else if(TK in mutations) A.attack_tk(src) + else if(spitting) //Only used by xenos right now, can be expanded. + Spit(A) + /mob/living/RestrainedClickOn(var/atom/A) return diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f586ecd56c..73e95498c7 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -10,6 +10,11 @@ var/obj/item/weapon/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call. var/last_push_time //For human_attackhand.dm, keeps track of the last use of disarm + var/spitting = 0 //Spitting and spitting related things. Any human based ranged attacks, be it innate or added abilities. + var/spit_projectile = null //Projectile type. + var/spit_name = null //String + var/last_spit = 0 //Timestamp. + /mob/living/carbon/human/New(var/new_loc, var/new_species = null) if(!dna) diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm index a10e498ffd..90c00d8963 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm @@ -124,6 +124,29 @@ new /obj/effect/alien/weeds/node(loc) return +/mob/living/carbon/human/proc/Spit(var/atom/A) + if((last_spit + 1 SECONDS) > world.time) //To prevent YATATATATATAT spitting. + to_chat(src, "You have not yet prepared your chemical glands. You must wait before spitting again.") + return + else + last_spit = world.time + + if(spitting && incapacitated(INCAPACITATION_DISABLED)) + to_chat(src, "You cannot spit in your current state.") + spitting = 0 + return + else if(spitting) + if(!check_alien_ability(20,0,O_ACID)) + spitting = 0 + return + visible_message("[src] spits [spit_name] at \the [A]!", "You spit [spit_name] at \the [A].") + var/obj/item/projectile/P = new spit_projectile(get_turf(src)) + P.firer = src + P.launch(A) + playsound(loc, 'sound/weapons/pierce.ogg', 25, 0) + else + ..() + /mob/living/carbon/human/proc/corrosive_acid(O as obj|turf in oview(1)) //If they right click to corrode, an error will flash if its an invalid target./N set name = "Corrosive Acid (200)" set desc = "Drench an object in acid, destroying it over time." @@ -160,43 +183,47 @@ return -/mob/living/carbon/human/proc/neurotoxin(mob/target as mob in oview()) - set name = "Spit Neurotoxin (40)" - set desc = "Spits neurotoxin at someone, paralyzing them for a short time if they are not wearing protective gear." +/mob/living/carbon/human/proc/neurotoxin() + set name = "Toggle Neurotoxic Spit (40)" + set desc = "Readies a neurotoxic spit, which paralyzes the target for a short time if they are not wearing protective gear." set category = "Abilities" + if(spitting) + to_chat(src, "You stop preparing to spit.") + spitting = 0 + return + if(!check_alien_ability(40,0,O_ACID)) + spitting = 0 return - if(stat || paralysis || stunned || weakened || lying || restrained() || buckled) - src << "You cannot spit neurotoxin in your current state." - return + else + last_spit = world.time + spitting = 1 + spit_projectile = /obj/item/projectile/energy/neurotoxin + spit_name = "neurotoxin" + to_chat(src, "You prepare to spit neurotoxin.") - visible_message("[src] spits neurotoxin at [target]!", "You spit neurotoxin at [target].") - - var/obj/item/projectile/energy/neurotoxin/A = new(get_turf(src)) - A.firer = src - A.launch(target) - return - -/mob/living/carbon/human/proc/acidspit(mob/target as mob in oview()) - set name = "Spit Acid (50)" - set desc = "Spits a blob of acid at someone, burning them if they are not wearing protective gear." +/mob/living/carbon/human/proc/acidspit() + set name = "Toggle Acid Spit (50)" + set desc = "Readies an acidic spit, which burns the target if they are not wearing protective gear." set category = "Abilities" + if(spitting) + to_chat(src, "You stop preparing to spit.") + spitting = 0 + return + if(!check_alien_ability(50,0,O_ACID)) + spitting = 0 return - if(stat || paralysis || stunned || weakened || lying || restrained() || buckled) - src << "You cannot spit acid in your current state." - return - - visible_message("[src] spits acid at [target]!", "You spit acid at [target].") - - var/obj/item/projectile/energy/acid/A = new(get_turf(src)) - A.firer = src - A.launch(target) - return + else + last_spit = world.time + spitting = 1 + spit_projectile = /obj/item/projectile/energy/acid + spit_name = "acid" + to_chat(src, "You prepare to spit acid.") /mob/living/carbon/human/proc/resin() // -- TLE set name = "Secrete Resin (75)" diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm index 2f857023e5..894cfb5c35 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm @@ -11,7 +11,7 @@ has_fine_manipulation = 0 siemens_coefficient = 0 - gluttonous = 3 + gluttonous = 2 brute_mod = 0.5 // Hardened carapace. burn_mod = 2 // Weak to fire. @@ -200,7 +200,6 @@ ..() /datum/species/xenos/hunter - name = "Xenomorph Hunter" weeds_plasma_rate = 5 caste_name = "hunter" diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/xenomorphs.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/xenomorphs.dm index c28324262f..61a8fe00ae 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/xenomorphs.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/xenomorphs.dm @@ -16,10 +16,12 @@ proc/create_new_xenomorph(var/alien_caste,var/target) h_style = "Bald" faction = "xeno" ..(new_loc, "Xenomorph Sentinel") + /mob/living/carbon/human/xhunter/New(var/new_loc) h_style = "Bald" faction = "xeno" ..(new_loc, "Xenomorph Hunter") + /mob/living/carbon/human/xqueen/New(var/new_loc) h_style = "Bald" faction = "xeno"