diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index de7eb672e8..b466475222 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -44,3 +44,4 @@ var/MAX_EXPLOSION_RANGE = 14 #define VENT_GAS_SMOKE "Smoke" #define VENT_GAS_CN20 "CN20 Nerve Gas" #define VENT_GAS_CN20_XENO "CN20-X Nerve Gas" +#define VENT_GAS_LSD "ALD-91 LSD Gas" diff --git a/code/game/objects/effects/effect_system/smoke.dm b/code/game/objects/effects/effect_system/smoke.dm index b80f53b14d..4cd3c4a37d 100644 --- a/code/game/objects/effects/effect_system/smoke.dm +++ b/code/game/objects/effects/effect_system/smoke.dm @@ -258,6 +258,7 @@ var/xeno_affecting = FALSE opacity = FALSE alpha = 75 + time_to_live = 20 /obj/effect/particle_effect/smoke/cn20/xeno name = "CN20-X nerve gas" @@ -276,10 +277,14 @@ /obj/effect/particle_effect/smoke/cn20/affect(mob/living/carbon/creature) var/mob/living/carbon/xenomorph/xeno_creature var/mob/living/carbon/human/human_creature + var/datum/internal_organ/lungs/lungs + var/datum/internal_organ/eyes/eyes if(isxeno(creature)) xeno_creature = creature else if(ishuman(creature)) human_creature = creature + lungs = human_creature.internal_organs_by_name["lungs"] + eyes = human_creature.internal_organs_by_name["eyes"] if(!istype(creature) || issynth(creature) || creature.stat == DEAD) return FALSE if(!xeno_affecting && xeno_creature) @@ -297,14 +302,18 @@ if(xeno_creature) if(xeno_creature.interference < 4) to_chat(xeno_creature, SPAN_XENOHIGHDANGER("Your awareness dims to a small area!")) + creature.apply_damage(20, BRUTE) xeno_creature.interference = 10 xeno_creature.blinded = TRUE else - creature.apply_damage(12, OXY) + creature.apply_damage(12, TOX) + creature.apply_damage(2, BRAIN) + lungs.take_damage(2) creature.SetEarDeafness(max(creature.ear_deaf, round(effect_amt*1.5))) //Paralysis of hearing system, aka deafness - if(!xeno_creature && !creature.eye_blind) //Eye exposure damage + if(!xeno_creature) //Eye exposure damage to_chat(creature, SPAN_DANGER("Your eyes sting. You can't see!")) creature.SetEyeBlind(round(effect_amt/3)) + eyes.take_damage(2) if(!xeno_creature && creature.coughedtime != 1 && !creature.stat) //Coughing/gasping creature.coughedtime = 1 if(prob(50)) @@ -330,6 +339,40 @@ human_creature.recalculate_move_delay = TRUE return TRUE +///////////////////////////////////////////// +// ALD-91 LSD Gas +///////////////////////////////////////////// + +/obj/effect/particle_effect/smoke/LSD + name = "ALD-91 LSD Gas" + smokeranking = SMOKE_RANK_HIGH + color = "#6e006e" + opacity = FALSE + alpha = 75 + time_to_live = 20 + var/stun_chance = 60 + +/obj/effect/particle_effect/smoke/LSD/Move() + . = ..() + for(var/mob/living/carbon/human/human in get_turf(src)) + affect(human) + +/obj/effect/particle_effect/smoke/LSD/affect(mob/living/carbon/human/creature) + if(!istype(creature) || issynth(creature) || creature.stat == DEAD || isyautja(creature)) + return FALSE + + if(creature.wear_mask && (creature.wear_mask.flags_inventory & BLOCKGASEFFECT)) + return FALSE + if(creature.head.flags_inventory & BLOCKGASEFFECT) + return FALSE + + creature.hallucination += 15 + creature.druggy += 1 + + if(prob(stun_chance)) + creature.apply_effect(1, WEAKEN) + + ////////////////////////////////////// // FLASHBANG SMOKE //////////////////////////////////// @@ -633,6 +676,9 @@ /datum/effect_system/smoke_spread/cn20/xeno smoke_type = /obj/effect/particle_effect/smoke/cn20/xeno +/datum/effect_system/smoke_spread/LSD + smoke_type = /obj/effect/particle_effect/smoke/LSD + // XENO SMOKES /datum/effect_system/smoke_spread/xeno_acid diff --git a/code/game/objects/items/explosives/grenades/marines.dm b/code/game/objects/items/explosives/grenades/marines.dm index 46d2d4eba9..36ba614041 100644 --- a/code/game/objects/items/explosives/grenades/marines.dm +++ b/code/game/objects/items/explosives/grenades/marines.dm @@ -484,7 +484,7 @@ /// The typepath of the nerve gas var/nerve_gas_type = /datum/effect_system/smoke_spread/cn20 /// The radius the gas will reach - var/nerve_gas_radius = 2 + var/nerve_gas_radius = 4 /obj/item/explosive/grenade/nerve_gas/Initialize(mapload, ...) . = ..() @@ -505,6 +505,38 @@ name = "\improper CN20-X canister grenade" nerve_gas_type = /datum/effect_system/smoke_spread/cn20/xeno +/* +//================================================ + LSD Gas Grenades +//================================================ +*/ +/obj/item/explosive/grenade/LSD + name = "\improper ALD-91 canister grenade" + desc = "A canister grenade of nonlethal LSD gas. It is set to detonate in 4 seconds." + icon_state = "flashbang2"//temp icon + det_time = 40 + item_state = "grenade_phos_clf"//temp icon + underslug_launchable = FALSE + harmful = TRUE + antigrief_protection = FALSE + var/datum/effect_system/smoke_spread/LSD/LSD_gas + var/LSD_gas_radius = 4 + +/obj/item/explosive/grenade/LSD/Initialize() + . = ..() //if it ain't broke don't fix it + LSD_gas = new /datum/effect_system/smoke_spread/LSD + LSD_gas.attach(src) + +/obj/item/explosive/grenade/LSD/Destroy() + QDEL_NULL(LSD_gas) + return ..() + +/obj/item/explosive/grenade/LSD/prime() + playsound(src.loc, 'sound/effects/smoke.ogg', 25, 1, 4) + LSD_gas.set_up(LSD_gas_radius, 0, get_turf(src), null, 6) + LSD_gas.start() + qdel(src) + /* //================================================ Airburst Smoke Grenades diff --git a/code/game/objects/structures/pipes/vents/vents.dm b/code/game/objects/structures/pipes/vents/vents.dm index 298fbc57f4..926f14cd2f 100644 --- a/code/game/objects/structures/pipes/vents/vents.dm +++ b/code/game/objects/structures/pipes/vents/vents.dm @@ -139,7 +139,7 @@ if(welded) to_chat(usr, SPAN_WARNING("You cannot release gas from a welded vent.")) return FALSE - var/list/options = list(VENT_GAS_SMOKE, VENT_GAS_CN20, VENT_GAS_CN20_XENO) + var/list/options = list(VENT_GAS_SMOKE, VENT_GAS_CN20, VENT_GAS_CN20_XENO, VENT_GAS_LSD) var/gas_choice = tgui_input_list(user, "What gas do you wish to use?", "Gas Choice", options, 20 SECONDS) if(!gas_choice) return FALSE @@ -166,6 +166,8 @@ spreader = new /datum/effect_system/smoke_spread/cn20 if(VENT_GAS_CN20_XENO) spreader = new /datum/effect_system/smoke_spread/cn20/xeno + if(VENT_GAS_LSD) + spreader = new /datum/effect_system/smoke_spread/LSD if(!spreader) return FALSE gas_holder = spreader