Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 51 additions & 51 deletions code/modules/cm_aliens/structures/trap.dm
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,19 @@
var/hivenumber = XENO_HIVE_NORMAL //Hivenumber of the xeno that planted it OR the last Facehugger that was placed (essentially taking over the trap)
var/trap_type = RESIN_TRAP_EMPTY
var/armed = 0
var/created_by // ckey
var/created_by //ckey
var/list/notify_list = list() // list of xeno mobs to notify on trigger
var/datum/effect_system/smoke_spread/smoke_system
var/datum/cause_data/cause_data
plane = FLOOR_PLANE

/obj/effect/alien/resin/trap/Initialize(mapload, mob/living/carbon/xenomorph/X)
/obj/effect/alien/resin/trap/Initialize(mapload, mob/living/carbon/xenomorph/xeno)
. = ..()
if(X)
created_by = X.ckey
hivenumber = X.hivenumber
if(xeno)
created_by = xeno.ckey
hivenumber = xeno.hivenumber

cause_data = create_cause_data("resin trap", X)
cause_data = create_cause_data("resin trap", xeno)
set_hive_data(src, hivenumber)
if(hivenumber == XENO_HIVE_NORMAL)
RegisterSignal(SSdcs, COMSIG_GLOB_GROUNDSIDE_FORSAKEN_HANDLING, PROC_REF(forsaken_handling))
Expand Down Expand Up @@ -61,8 +61,8 @@
UnregisterSignal(SSdcs, COMSIG_GLOB_GROUNDSIDE_FORSAKEN_HANDLING)

/obj/effect/alien/resin/trap/proc/facehugger_die()
var/obj/item/clothing/mask/facehugger/FH = new (loc)
FH.die()
var/obj/item/clothing/mask/facehugger/target_hugger = new (loc)
target_hugger.die()
trap_type = RESIN_TRAP_EMPTY
icon_state = "trap0"

Expand All @@ -82,9 +82,9 @@
trigger_trap(TRUE)
..()

/obj/effect/alien/resin/trap/bullet_act(obj/projectile/P)
var/mob/living/carbon/xenomorph/X = P.firer
if(istype(X) && HIVE_ALLIED_TO_HIVE(X.hivenumber, hivenumber))
/obj/effect/alien/resin/trap/bullet_act(obj/projectile/target_proj)
var/mob/living/carbon/xenomorph/xeno = target_proj.firer
if(istype(xeno) && HIVE_ALLIED_TO_HIVE(xeno.hivenumber, hivenumber))
return

. = ..()
Expand Down Expand Up @@ -135,12 +135,12 @@
icon_state = "trapgas"

/obj/effect/alien/resin/trap/proc/burn_trap()
var/area/A = get_area(src)
var/area/target_area = get_area(src)
facehugger_die()
clear_tripwires()
for(var/mob/living/carbon/xenomorph/X in GLOB.living_xeno_list)
if(X.hivenumber == hivenumber)
to_chat(X, SPAN_XENOMINORWARNING("We sense one of our Hive's facehugger traps at [A.name] has been burnt!"))
for(var/mob/living/carbon/xenomorph/xeno in GLOB.living_xeno_list)
if(xeno.hivenumber == hivenumber)
to_chat(xeno, SPAN_XENOMINORWARNING("We sense one of our Hive's facehugger traps at [target_area.name] has been burnt!"))

/obj/effect/alien/resin/trap/proc/get_spray_type(level)
switch(level)
Expand All @@ -155,21 +155,21 @@

/obj/effect/alien/resin/trap/proc/trigger_trap(destroyed = FALSE)
set waitfor = 0
var/area/A = get_area(src)
var/area/target_area = get_area(src)
var/trap_type_name = ""
switch(trap_type)
if(RESIN_TRAP_EMPTY)
trap_type_name = "empty"
if(RESIN_TRAP_HUGGER)
trap_type_name = "hugger"
var/obj/item/clothing/mask/facehugger/FH = new (loc)
FH.hivenumber = hivenumber
set_hive_data(FH, hivenumber)
var/obj/item/clothing/mask/facehugger/target_hugger = new (loc)
target_hugger.hivenumber = hivenumber
set_hive_data(target_hugger, hivenumber)
set_state()
visible_message(SPAN_WARNING("[FH] gets out of [src]!"))
visible_message(SPAN_WARNING("[target_hugger] gets out of [src]!"))
sleep(15)
if(FH.stat == CONSCIOUS && FH.loc) //Make sure we're conscious and not idle or dead.
FH.leap_at_nearest_target()
if(target_hugger.stat == CONSCIOUS && target_hugger.loc) //Make sure we're conscious and not idle or dead.
target_hugger.leap_at_nearest_target()
if(RESIN_TRAP_GAS)
trap_type_name = "gas"
smoke_system.set_up(2, 0, src.loc)
Expand All @@ -181,22 +181,22 @@
var/spray_type = get_spray_type(trap_type)

new spray_type(loc, cause_data, hivenumber)
for(var/turf/T in range(1,loc))
var/obj/effect/xenomorph/spray/SP = new spray_type(T, cause_data, hivenumber)
for(var/mob/living/carbon/H in T)
if(H.ally_of_hivenumber(hivenumber))
for(var/turf/target_turf in range(1,loc))
var/obj/effect/xenomorph/spray/acid_splash = new spray_type(target_turf, cause_data, hivenumber)
for(var/mob/living/carbon/target_carbon in target_turf)
if(target_carbon.ally_of_hivenumber(hivenumber))
continue
SP.apply_spray(H)
acid_splash.apply_spray(target_carbon)
set_state()
clear_tripwires()
if(!A)
if(!target_area)
return
for(var/mob/living/carbon/xenomorph/X in GLOB.living_xeno_list)
if(X.hivenumber == hivenumber)
for(var/mob/living/carbon/xenomorph/xeno in GLOB.living_xeno_list)
if(xeno.hivenumber == hivenumber)
if(destroyed)
to_chat(X, SPAN_XENOMINORWARNING("We sense one of our Hive's [trap_type_name] traps at [A.name] has been destroyed!"))
to_chat(xeno, SPAN_XENOMINORWARNING("We sense one of our Hive's [trap_type_name] traps at [target_area.name] has been destroyed!"))
else
to_chat(X, SPAN_XENOMINORWARNING("We sense one of our Hive's [trap_type_name] traps at [A.name] has been triggered!"))
to_chat(xeno, SPAN_XENOMINORWARNING("We sense one of our Hive's [trap_type_name] traps at [target_area.name] has been triggered!"))

/obj/effect/alien/resin/trap/proc/clear_tripwires()
QDEL_NULL_LIST(tripwires)
Expand Down Expand Up @@ -229,50 +229,50 @@

/obj/effect/alien/resin/trap/proc/setup_tripwires()
clear_tripwires()
for(var/turf/T in orange(1,loc))
if(T.density)
for(var/turf/target_turf in orange(1,loc))
if(target_turf.density)
continue
var/obj/effect/trap_tripwire/new_tripwire = new /obj/effect/trap_tripwire(T)
var/obj/effect/trap_tripwire/new_tripwire = new /obj/effect/trap_tripwire(target_turf)
new_tripwire.linked_trap = src
tripwires += new_tripwire

/obj/effect/alien/resin/trap/attackby(obj/item/W, mob/user)
if(!(istype(W, /obj/item/clothing/mask/facehugger) && isxeno(user)))
/obj/effect/alien/resin/trap/attackby(obj/item/weapon, mob/user)
if(!(istype(weapon, /obj/item/clothing/mask/facehugger) && isxeno(user)))
return ..()
if(trap_type != RESIN_TRAP_EMPTY)
to_chat(user, SPAN_XENOWARNING("You can't put a hugger in this trap!"))
return
var/obj/item/clothing/mask/facehugger/FH = W
if(FH.stat == DEAD)
var/obj/item/clothing/mask/facehugger/target_hugger = weapon
if(target_hugger.stat == DEAD)
to_chat(user, SPAN_XENOWARNING("You can't put a dead facehugger in [src]."))
else
var/mob/living/carbon/xenomorph/X = user
if (!istype(X))
var/mob/living/carbon/xenomorph/xeno = user
if(!istype(xeno))
return

if (X.hivenumber != hivenumber)
if(xeno.hivenumber != hivenumber)
to_chat(user, SPAN_XENOWARNING("This resin trap doesn't belong to your hive!"))
return

if (FH.hivenumber != hivenumber)
if(target_hugger.hivenumber != hivenumber)
to_chat(user, SPAN_XENOWARNING("This facehugger is tainted."))
return

if (!do_after(user, 3 SECONDS, INTERRUPT_ALL|INTERRUPT_DAZED, BUSY_ICON_HOSTILE))
if(!do_after(user, 3 SECONDS, INTERRUPT_ALL|INTERRUPT_DAZED, BUSY_ICON_HOSTILE))
return

set_state(RESIN_TRAP_HUGGER)
to_chat(user, SPAN_XENONOTICE("You place a facehugger in [src]."))
qdel(FH)
qdel(target_hugger)

/obj/effect/alien/resin/trap/healthcheck()
if(trap_type != RESIN_TRAP_EMPTY && loc)
trigger_trap()
..()

/obj/effect/alien/resin/trap/Crossed(atom/A)
if(ismob(A) || isVehicleMultitile(A))
HasProximity(A)
/obj/effect/alien/resin/trap/Crossed(atom/target_atom)
if(ismob(target_atom) || isVehicleMultitile(target_atom))
HasProximity(target_atom)

/obj/effect/alien/resin/trap/Destroy()
QDEL_NULL_LIST(tripwires)
Expand All @@ -292,7 +292,7 @@
linked_trap = null
. = ..()

/obj/effect/trap_tripwire/Crossed(atom/A)
/obj/effect/trap_tripwire/Crossed(atom/target_atom)
if(!linked_trap)
qdel(src)
return
Expand All @@ -301,5 +301,5 @@
qdel(src)
return

if(ishuman(A) || isxeno(A) || isVehicleMultitile(A))
linked_trap.HasProximity(A)
if(ishuman(target_atom) || isxeno(target_atom) || isVehicleMultitile(target_atom))
linked_trap.HasProximity(target_atom)
Loading
Loading