diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index 5d1b46599e4..88e0326b1c5 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -199,9 +199,6 @@ default = list( //DEFAULTS /mob/living/simple_animal = 1, /mob/living/silicon/pai = 1, - /mob/living/carbon/alien/adult/hunter = -1, - /mob/living/carbon/alien/adult/royal/praetorian = 1, - /mob/living/carbon/alien/adult/royal/queen = 3 ) /datum/config_entry/keyed_list/multiplicative_movespeed/ValidateAndSet() diff --git a/code/modules/mob/living/carbon/alien/adult/adult_defense.dm b/code/modules/mob/living/carbon/alien/adult/adult_defense.dm index 9edb0319aab..b4a119d5aba 100644 --- a/code/modules/mob/living/carbon/alien/adult/adult_defense.dm +++ b/code/modules/mob/living/carbon/alien/adult/adult_defense.dm @@ -18,14 +18,8 @@ if(!..() || !user.combat_mode) return if(LAZYACCESS(modifiers, RIGHT_CLICK)) - if (body_position == STANDING_UP) - if (prob(5)) - Unconscious(40) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) - log_combat(user, src, "pushed") - visible_message(span_danger("[user] pushes [src] down!"), \ - span_userdanger("[user] pushes you down!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), null, user) - to_chat(user, span_danger("You push [src] down!")) + if(stat < UNCONSCIOUS) + user.disarm(src) return TRUE var/damage = rand(1, 9) if (prob(90)) diff --git a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm index b3ef7f92ab4..07dfa328ed7 100644 --- a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm @@ -246,7 +246,7 @@ Doesn't work on other aliens/AI.*/ /datum/action/cooldown/alien/acid/neurotoxin name = "Spit Neurotoxin" - desc = "Spits neurotoxin at someone, paralyzing them for a short time." + desc = "Spits neurotoxin at someone, dealing large amounts of stamina damage." button_icon_state = "alien_neurotoxin_0" plasma_cost = 50 @@ -351,6 +351,7 @@ Doesn't work on other aliens/AI.*/ button_icon_state = "alien_sneak" background_icon_state = "bg_alien" overlay_icon_state = "bg_alien_border" + sneak_alpha = 25 /datum/action/cooldown/alien/regurgitate name = "Regurgitate" diff --git a/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm b/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm index 72cdd3bbf4b..3a346bf8255 100644 --- a/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm @@ -4,7 +4,10 @@ maxHealth = 125 health = 125 icon_state = "alienh" + alien_speed = -0.3 var/atom/movable/screen/leap_icon = null + ///How fast does our pounce move us? + var/pounce_speed = 2 /mob/living/carbon/alien/adult/hunter/create_internal_organs() organs += new /obj/item/organ/internal/alien/plasmavessel/small @@ -50,7 +53,7 @@ body_position_pixel_y_offset = -32 update_icons() ADD_TRAIT(src, TRAIT_MOVE_FLOATING, LEAPING_TRAIT) //Throwing itself doesn't protect mobs against lava (because gulag). - throw_at(A, MAX_ALIEN_LEAP_DIST, 1, src, FALSE, TRUE, callback = CALLBACK(src, PROC_REF(leap_end))) + throw_at(A, MAX_ALIEN_LEAP_DIST, pounce_speed, src, FALSE, TRUE, callback = CALLBACK(src, PROC_REF(leap_end))) /mob/living/carbon/alien/adult/hunter/proc/leap_end() leaping = FALSE @@ -75,7 +78,7 @@ blocked = TRUE if(!blocked) L.visible_message(span_danger("[src] pounces on [L]!"), span_userdanger("[src] pounces on you!")) - L.Paralyze(100) + L.Paralyze(5 SECONDS) sleep(0.2 SECONDS)//Runtime prevention (infinite bump() calls on hulks) step_towards(src,L) else diff --git a/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm b/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm index 3064068b32f..a26eb31231c 100644 --- a/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm +++ b/code/modules/mob/living/carbon/alien/adult/caste/praetorian.dm @@ -4,6 +4,7 @@ maxHealth = 250 health = 250 icon_state = "alienp" + alien_speed = 0.5 /mob/living/carbon/alien/adult/royal/praetorian/Initialize(mapload) real_name = name diff --git a/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm index 3a6cc5f7b34..6b6f370388a 100644 --- a/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/adult/caste/sentinel.dm @@ -4,6 +4,7 @@ maxHealth = 150 health = 150 icon_state = "aliens" + alien_speed = 0.2 /mob/living/carbon/alien/adult/sentinel/Initialize(mapload) var/datum/action/cooldown/sneak/alien/sneaky_beaky = new(src) diff --git a/code/modules/mob/living/carbon/alien/adult/queen.dm b/code/modules/mob/living/carbon/alien/adult/queen.dm index 1f344a98fb2..cb0f6119a2d 100644 --- a/code/modules/mob/living/carbon/alien/adult/queen.dm +++ b/code/modules/mob/living/carbon/alien/adult/queen.dm @@ -34,9 +34,12 @@ /mob/living/carbon/alien/adult/royal/queen name = "alien queen" caste = "q" - maxHealth = 400 - health = 400 + maxHealth = 500 + health = 500 icon_state = "alienq" + melee_damage_lower = 50 + melee_damage_upper = 50 + alien_speed = 2 /mob/living/carbon/alien/adult/royal/queen/Initialize(mapload) //there should only be one queen diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 639586b2974..d17b02d8817 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -15,7 +15,10 @@ heat_protection = 0.5 // minor heat insulation + ///Whether or not the alien is leaping. Only used by hunters. var/leaping = FALSE + ///The speed this alien should move at. + var/alien_speed = 0 gib_type = /obj/effect/decal/cleanable/xenoblood/xgibs unique_name = TRUE @@ -32,6 +35,8 @@ add_traits(list(TRAIT_NEVER_WOUNDED, TRAIT_VENTCRAWLER_ALWAYS), INNATE_TRAIT) . = ..() + if(alien_speed) + update_alien_speed() /mob/living/carbon/alien/create_internal_organs() organs += new /obj/item/organ/internal/brain/alien @@ -137,3 +142,6 @@ Des: Removes all infected images from the alien. /mob/living/carbon/alien/on_standing_up() . = ..() update_icons() + +/mob/living/carbon/alien/proc/update_alien_speed() + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/alien_speed, multiplicative_slowdown = alien_speed) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 9659d0c66fd..7ddf614e7fc 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -280,20 +280,29 @@ if(!.) return - if(LAZYACCESS(modifiers, RIGHT_CLICK)) //Always drop item in hand, if no item, get stun instead. + if(LAZYACCESS(modifiers, RIGHT_CLICK)) //Always drop item in hand if there is one. If there's no item, shove the target. If the target is incapacitated, slam them into the ground to stun them. var/obj/item/I = get_active_held_item() if(I && dropItemToGround(I)) playsound(loc, 'sound/weapons/slash.ogg', 25, TRUE, -1) visible_message(span_danger("[user] disarms [src]!"), \ span_userdanger("[user] disarms you!"), span_hear("You hear aggressive shuffling!"), null, user) to_chat(user, span_danger("You disarm [src]!")) - else + else if(!HAS_TRAIT(src, TRAIT_INCAPACITATED)) playsound(loc, 'sound/weapons/pierce.ogg', 25, TRUE, -1) - Paralyze(100) - log_combat(user, src, "tackled") - visible_message(span_danger("[user] tackles [src] down!"), \ - span_userdanger("[user] tackles you down!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), null, user) - to_chat(user, span_danger("You tackle [src] down!")) + var/shovetarget = get_edge_target_turf(user, get_dir(user, get_step_away(src, user))) + adjustStaminaLoss(35) + throw_at(shovetarget, 4, 2, user, force = MOVE_FORCE_OVERPOWERING) + log_combat(user, src, "shoved") + visible_message("[user] tackles [src] down!", \ + "[user] shoves you with great force!", "You hear aggressive shuffling followed by a loud thud!", null, user) + to_chat(user, "You shove [src] with great force!") + else + Paralyze(5 SECONDS) + playsound(loc, 'sound/weapons/punch3.ogg', 25, TRUE, -1) + visible_message("[user] slams [src] into the floor!", \ + "[user] slams you into the ground!", "You hear something slam loudly onto the floor!", null, user) + to_chat(user, "You slam [src] into the floor beneath you!") + log_combat(user, src, "slammed into the ground") return TRUE if(user.combat_mode) diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 2ee3598c79c..df97740e69c 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -75,7 +75,7 @@ to_chat(user, span_danger("You [response_disarm_simple] [name]!")) log_combat(user, src, "disarmed") else - var/damage = rand(15, 30) + var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) visible_message(span_danger("[user] slashes at [src]!"), \ span_userdanger("You're slashed at by [user]!"), null, COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You slash at [src]!")) diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm index 6267de09a02..1c29c740aba 100644 --- a/code/modules/movespeed/modifiers/mobs.dm +++ b/code/modules/movespeed/modifiers/mobs.dm @@ -147,5 +147,8 @@ /datum/movespeed_modifier/health_scaling_speed_buff variable = TRUE +/datum/movespeed_modifier/alien_speed + variable = TRUE + /datum/movespeed_modifier/grown_killer_tomato variable = TRUE diff --git a/code/modules/projectiles/projectile/special/neurotoxin.dm b/code/modules/projectiles/projectile/special/neurotoxin.dm index 0dcac83f02c..5283d967dfd 100644 --- a/code/modules/projectiles/projectile/special/neurotoxin.dm +++ b/code/modules/projectiles/projectile/special/neurotoxin.dm @@ -1,15 +1,13 @@ /obj/projectile/neurotoxin name = "neurotoxin spit" icon_state = "neurotoxin" - damage = 5 - damage_type = TOX - paralyze = 10 SECONDS + damage = 50 + damage_type = STAMINA armor_flag = BIO impact_effect_type = /obj/effect/temp_visual/impact_effect/neurotoxin /obj/projectile/neurotoxin/on_hit(atom/target, blocked = FALSE) if(isalien(target)) - paralyze = 0 SECONDS damage = 0 return ..()