diff --git a/code/game/gamemodes/nations/nations.dm b/code/game/gamemodes/nations/nations.dm index 38a7633e6d4..ec180e07279 100644 --- a/code/game/gamemodes/nations/nations.dm +++ b/code/game/gamemodes/nations/nations.dm @@ -22,6 +22,9 @@ datum/game_mode/nations split_teams() spawn_flags() populate_vars() + for(var/mob/M in player_list) + if(!istype(M,/mob/new_player)) + M << sound('sound/effects/purge_siren.ogg') return ..() /datum/game_mode/nations/send_intercept() diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index a4f2b29e8b9..121f4d9e098 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -19,6 +19,21 @@ REAGENT SCANNER item_state = "electronic" m_amt = 150 origin_tech = "magnets=1;engineering=1" + var/scan_range = 1 + var/pulse_duration = 10 + +/obj/item/device/t_scanner/longer_pulse + origin_tech = "magnets=2;engineering=2" + pulse_duration = 50 + +/obj/item/device/t_scanner/extended_range + origin_tech = "magnets=1;engineering=3" + scan_range = 3 + +/obj/item/device/t_scanner/extended_range/longer_pulse + origin_tech = "magnets=2;engineering=3" + scan_range = 3 + pulse_duration = 50 /obj/item/device/t_scanner/Destroy() if(on) @@ -39,7 +54,7 @@ REAGENT SCANNER processing_objects.Remove(src) return null - for(var/turf/T in range(1, src.loc) ) + for(var/turf/T in range(scan_range, src.loc) ) if(!T.intact) continue @@ -51,7 +66,7 @@ REAGENT SCANNER if(O.invisibility == 101) O.invisibility = 0 - spawn(10) + spawn(pulse_duration) if(O) var/turf/U = O.loc if(U.intact) @@ -65,6 +80,7 @@ REAGENT SCANNER M.alpha = oldalpha var/mob/living/M = locate() in T + if(M && M.invisibility == 2) M.invisibility = 0 spawn(2) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 8b8411f7012..dbba84f5559 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -176,12 +176,24 @@ return W.afterattack(target,src) var/randn = rand(1, 100) - if (randn <= 25) - apply_effect(4, WEAKEN, run_armor_check(affecting, "melee")) + + if(!src.handcuffed) // Bone White - disarm knockdown only occurs if you have an aggressive grab on the target, Longer duration (8) to allow handcuffing. + //check for an aggressive grab + for (var/obj/item/weapon/grab/G in src.grabbed_by) + if (G.assailant == M && G.state >= GRAB_AGGRESSIVE) + world << "aggressive grab" + randn -= 30 // this value is the % chance of knockdown if you disarm someone whilst you have an aggressive grab. + else + //if target is handcuffed, always push them over + randn = 0 + + if (randn <= 0) + world << "push over success" + apply_effect(4, WEAKEN, run_armor_check(affecting, "melee")) // first var here is the length of the knockdown playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - visible_message("\red [M] has pushed [src]!") - M.attack_log += text("\[[time_stamp()]\] Pushed [src.name] ([src.ckey])") - src.attack_log += text("\[[time_stamp()]\] Has been pushed by [M.name] ([M.ckey])") + visible_message("\red [M] has floored [src]!") + M.attack_log += text("\[[time_stamp()]\] Floored [src.name] ([src.ckey])") + src.attack_log += text("\[[time_stamp()]\] Has been floored by [M.name] ([M.ckey])") if(!iscarbon(M)) LAssailant = null else diff --git a/sound/effects/purge_siren.ogg b/sound/effects/purge_siren.ogg new file mode 100644 index 00000000000..1cdaca1f60f Binary files /dev/null and b/sound/effects/purge_siren.ogg differ