Files
Bubberstation/code/game/objects/structures/traps.dm
Jack Edge df91d2dcb0 Nerfs and buffs The Traps
🆑 coiax
balance: Wizard traps automatically disappear five minutes after being
summoned.
balance: Wizard traps disappear after firing, whether triggered via
person or something being thrown across it.
balance: Wizards are immune to their own traps.
tweak: The Traps are now marked as a Defensive spell, rather than an
Offensive spell.
/🆑

So a permament structure that has to be beaten down in order to remove
isn't really fun in the long term. So instead, they fire once, and then
disappear. They also disappear after a bit, so they're not long term
hazards, but they do stick around long enough so the wizard can feel
comfortable running back into an area they've already trapped, for that
AREA CONTROL.
2017-04-25 00:48:23 +01:00

140 lines
3.6 KiB
Plaintext

/obj/structure/trap
name = "IT'S A TRAP"
desc = "stepping on me is a guaranteed bad day"
icon = 'icons/obj/hand_of_god_structures.dmi'
icon_state = "trap"
density = 0
anchored = TRUE
alpha = 30 //initially quite hidden when not "recharging"
var/last_trigger = 0
var/time_between_triggers = 600 //takes a minute to recharge
var/charges = INFINITY
var/list/static/ignore_typecache
var/list/mob/immune_minds = list()
var/datum/effect_system/spark_spread/spark_system
/obj/structure/trap/Initialize(mapload)
..()
spark_system = new
spark_system.set_up(4,1,src)
spark_system.attach(src)
if(!ignore_typecache)
ignore_typecache = typecacheof(list(
/obj/effect,
/mob/dead))
/obj/structure/trap/Destroy()
qdel(spark_system)
spark_system = null
. = ..()
/obj/structure/trap/examine(mob/user)
. = ..()
if(!isliving(user))
return
if(user.mind && user.mind in immune_minds)
return
if(get_dist(user, src) <= 1)
to_chat(user, "<span class='notice'>You reveal [src]!</span>")
flare()
/obj/structure/trap/proc/flare()
// Makes the trap visible, and starts the cooldown until it's
// able to be triggered again.
visible_message("<span class='warning'>[src] flares brightly!</span>")
spark_system.start()
alpha = 200
last_trigger = world.time
charges--
if(charges <= 0)
animate(src, alpha = 0, time = 10)
QDEL_IN(src, 10)
else
animate(src, alpha = initial(alpha), time = time_between_triggers)
/obj/structure/trap/Crossed(atom/movable/AM)
if(last_trigger + time_between_triggers > world.time)
return
// Don't want the traps triggered by sparks, ghosts or projectiles.
if(is_type_in_typecache(AM, ignore_typecache))
return
if(ismob(AM))
var/mob/M = AM
if(M.mind in immune_minds)
return
if(charges <= 0)
return
flare()
if(isliving(AM))
trap_effect(AM)
/obj/structure/trap/proc/trap_effect(mob/living/L)
return
/obj/structure/trap/stun
name = "shock trap"
desc = "A trap that will shock and render you immobile. You'd better avoid it."
icon_state = "trap-shock"
/obj/structure/trap/stun/trap_effect(mob/living/L)
L.electrocute_act(30, src, safety=1) // electrocute act does a message.
L.Weaken(5)
/obj/structure/trap/fire
name = "flame trap"
desc = "A trap that will set you ablaze. You'd better avoid it."
icon_state = "trap-fire"
/obj/structure/trap/fire/trap_effect(mob/living/L)
to_chat(L, "<span class='danger'><B>Spontaneous combustion!</B></span>")
L.Weaken(1)
/obj/structure/trap/fire/flare()
..()
new /obj/effect/hotspot(get_turf(src))
/obj/structure/trap/chill
name = "frost trap"
desc = "A trap that will chill you to the bone. You'd better avoid it."
icon_state = "trap-frost"
/obj/structure/trap/chill/trap_effect(mob/living/L)
to_chat(L, "<span class='danger'><B>You're frozen solid!</B></span>")
L.Weaken(1)
L.bodytemperature -= 300
L.apply_status_effect(/datum/status_effect/freon)
/obj/structure/trap/damage
name = "earth trap"
desc = "A trap that will summon a small earthquake, just for you. You'd better avoid it."
icon_state = "trap-earth"
/obj/structure/trap/damage/trap_effect(mob/living/L)
to_chat(L, "<span class='danger'><B>The ground quakes beneath your feet!</B></span>")
L.Weaken(5)
L.adjustBruteLoss(35)
/obj/structure/trap/damage/flare()
..()
var/obj/structure/flora/rock/giant_rock = new(get_turf(src))
QDEL_IN(giant_rock, 200)
/obj/structure/trap/ward
name = "divine ward"
desc = "A divine barrier, It looks like you could destroy it with enough effort, or wait for it to dissipate..."
icon_state = "ward"
density = 1
time_between_triggers = 1200 //Exists for 2 minutes
/obj/structure/trap/ward/New()
..()
QDEL_IN(src, time_between_triggers)