diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 23e937acf102..11eeef8b4a8e 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -180,3 +180,7 @@ /mob/living/carbon/alien/on_standing_up() . = ..() update_icons() + +/mob/living/carbon/alien/examine(mob/user) + . = ..() + . += "It's a strange creature." diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index ec4105fde0ce..ccd6540ffca1 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -291,7 +291,7 @@ Doesn't work on other aliens/AI.*/ /obj/effect/proc_holder/alien/sneak/fire(mob/living/carbon/alien/humanoid/user) if(!active) - user.alpha = 25 + user.alpha = 150 user.sneaking = TRUE active = TRUE to_chat(user, "You blend into the shadows...") 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 5163821a9573..57835578cf84 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -100,8 +100,7 @@ return else //Maybe uses plasma in the future, although that wouldn't make any sense... - leaping = 1 - weather_immunities += "lava" + leaping = TRUE update_icons() throw_at(leap_target, MAX_ALIEN_LEAP_DIST, 2, src, FALSE, TRUE, callback = CALLBACK(src, PROC_REF(leap_end))) @@ -115,7 +114,6 @@ * the icons of the hunter. */ /mob/living/carbon/alien/humanoid/hunter/proc/leap_end() - leaping = 0 - LAZYREMOVE(weather_immunities, "lava") + leaping = FALSE update_icons() diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 49ff1e88937b..4e797ede06c0 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -104,7 +104,8 @@ if(gib_on_success) new_xeno.visible_message("[new_xeno] bursts out of [owner] in a shower of gore!", "You exit [owner], your previous host.", "You hear organic matter ripping and tearing!") - owner.gib() + owner.adjustBruteLoss(200) + owner.cut_overlay(overlay) else new_xeno.visible_message("[new_xeno] wriggles out of [owner]!", "You exit [owner], your previous host.") owner.adjustBruteLoss(40) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index a9caeba37208..c9cdcaf8199c 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -47,7 +47,7 @@ /// Whether or not this facehugger can actually impregnate targets var/sterile = FALSE /// How long it takes for a facehugger to impregnate a target once attached - var/pregnation_time = 10 SECONDS + var/pregnation_time = 5 SECONDS /// How long it takes between coupling attempts var/couple_retry_time = 15 SECONDS /// The mob's internal mask version, stored within the mob when the facehugger isn't being used as an item. diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 123ecf6d4fba..7091090f8877 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -284,30 +284,30 @@ return TRUE apply_damage(damage, BRUTE, affecting, armor_block) - if(M.a_intent == INTENT_DISARM) //Always drop item in hand on first go. If no item exists, try to shove them back. If you share the tile with the target, slam them directly into the ground to stun them and slightly damage them. - var/obj/item/I = get_active_held_item() - if(I && dropItemToGround(I)) - playsound(loc, 'sound/weapons/slash.ogg', 25, TRUE, -1) - visible_message("[M] disarms [src]!", \ - "[M] disarms you!", "You hear aggressive shuffling!", null, M) - to_chat(M, "You disarm [src]!") - else if(get_dist(src, M) != 0) - playsound(loc, 'sound/weapons/pierce.ogg', 25, TRUE, -1) - var/shovetarget = get_edge_target_turf(M, get_dir(M, get_step_away(src, M))) - Knockdown(0.3 SECONDS) - throw_at(shovetarget, 4, 2, M, force = MOVE_FORCE_OVERPOWERING) - log_combat(M, src, "shoved") - visible_message("[M] tackles [src] down!", \ - "[M] shoves you with great force!", "You hear aggressive shuffling followed by a loud thud!", null, M) - to_chat(M, "You shove [src] with great force!") - else - Paralyze(3 SECONDS) - adjustBruteLoss(5) - playsound(loc, 'sound/weapons/punch3.ogg', 25, TRUE, -1) - visible_message("[M] slams [src] into the floor!", \ - "[M] slams you into the ground!", "You hear something slam loudly onto the floor!", null, M) - to_chat(M, "You slam [src] into the floor beneath you!") - log_combat(M, src, "slammed into the ground") + if(M.a_intent == INTENT_DISARM) //Always drop item in hand on first go. If no item exists, try to shove them back. If you share the tile with the target, slam them directly into the ground to stun them and slightly damage them. + var/obj/item/I = get_active_held_item() + if(I && dropItemToGround(I) && prob(50)) + playsound(loc, 'sound/weapons/slash.ogg', 25, TRUE, -1) + visible_message("[M] disarms [src]!", \ + "[M] disarms you!", "You hear aggressive shuffling!", null, M) + to_chat(M, "You disarm [src]!") + else if(get_dist(src, M) != 0) + playsound(loc, 'sound/weapons/pierce.ogg', 25, TRUE, -1) + var/shovetarget = get_edge_target_turf(M, get_dir(M, get_step_away(src, M))) + Knockdown(0.3 SECONDS) + throw_at(shovetarget, 4, 2, M, force = MOVE_FORCE_OVERPOWERING) + log_combat(M, src, "shoved") + visible_message("[M] tackles [src] down!", \ + "[M] shoves you with great force!", "You hear aggressive shuffling followed by a loud thud!", null, M) + to_chat(M, "You shove [src] with great force!") + else + Paralyze(1 SECONDS) + adjustBruteLoss(5) + playsound(loc, 'sound/weapons/punch3.ogg', 25, TRUE, -1) + visible_message("[M] slams [src] into the floor!", \ + "[M] slams you into the ground!", "You hear something slam loudly onto the floor!", null, M) + to_chat(M, "You slam [src] into the floor beneath you!") + log_combat(M, src, "slammed into the ground") /mob/living/carbon/human/attack_larva(mob/living/carbon/alien/larva/L) diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index f91eb07f52cb..45d7f96b7df4 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -366,7 +366,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th smoke.start() -/obj/effect/proc_holder/spell/proc/cast(list/targets,mob/user = usr) +/obj/effect/proc_holder/spell/proc/cast(list/targets, mob/user = usr) return /obj/effect/proc_holder/spell/proc/view_or_range(distance = world.view, center=usr, type="view") diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm index 387a2ee9712c..2fab8c5848ef 100644 --- a/code/modules/spells/spell_types/wizard.dm +++ b/code/modules/spells/spell_types/wizard.dm @@ -242,46 +242,34 @@ sound = 'sound/magic/repulse.ogg' var/maxthrow = 5 var/sparkle_path = /obj/effect/temp_visual/gravpush - var/anti_magic_check = TRUE var/repulse_force = MOVE_FORCE_EXTREMELY_STRONG - + var/stun_amt = 5 action_icon_state = "repulse" -/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets,mob/user = usr, stun_amt = 5) +/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/hit_turfs, mob/user = usr) var/list/thrownatoms = list() - var/atom/throwtarget var/distfromcaster playMagSound() - for(var/atom/movable/hit_target as anything in targets) //Done this way so things don't get thrown all around hilariously. - thrownatoms += hit_target - for(var/am in thrownatoms) - var/atom/movable/AM = am + for(var/turf/T in hit_turfs) + for(var/atom/movable/hit_target in T.contents) + thrownatoms += hit_target + + for(var/thrown_atom in thrownatoms) + if(!ismovable(thrown_atom)) + continue + var/atom/movable/AM = thrown_atom if(AM == user || AM.anchored) continue - - if(ismob(AM)) - var/mob/M = AM - if(M.anti_magic_check(anti_magic_check, FALSE)) - continue - - throwtarget = get_edge_target_turf(user, get_dir(user, get_step_away(AM, user))) - distfromcaster = get_dist(user, AM) - if(distfromcaster == 0) - if(isliving(AM)) - var/mob/living/M = AM - M.Paralyze(40) - M.adjustBruteLoss(5) - shake_camera(AM, 2, 1) - to_chat(M, "You're slammed into the floor by [user]!") - else - new sparkle_path(get_turf(AM), get_dir(user, AM)) //created sparkles will disappear on their own - if(isliving(AM)) - var/mob/living/M = AM - shake_camera(AM, 2, 1) + var/atom/throwtarget = get_edge_target_turf(user, get_dir(user, get_step_away(AM, user))) + new sparkle_path(get_turf(AM), get_dir(user, AM)) //created sparkles will disappear on their own + if(isliving(AM)) + var/mob/living/M = AM + shake_camera(AM, 2, 1) + if(stun_amt) M.Paralyze(stun_amt) - to_chat(M, "You're thrown back by [user]!") - AM.safe_throw_at(throwtarget, ((clamp((maxthrow - (clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user, force = repulse_force)//So stuff gets tossed around at the same time. + to_chat(M, "You're thrown back by [user]!") + AM.safe_throw_at(throwtarget, ((clamp((maxthrow - (clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user, force = repulse_force)//So stuff gets tossed around at the same time. /obj/effect/proc_holder/spell/aoe_turf/repulse/xeno //i fixed conflicts only to find out that this is in the WIZARD file instead of the xeno file?! name = "Tail Sweep" @@ -297,7 +285,7 @@ action_icon = 'icons/mob/actions/actions_xeno.dmi' action_icon_state = "tailsweep" action_background_icon_state = "bg_alien" - anti_magic_check = FALSE + stun_amt = 0 /obj/effect/proc_holder/spell/aoe_turf/repulse/xeno/cast(list/targets,mob/user = usr) if(iscarbon(user))