mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 16:18:01 +01:00
New wizard spell: The Traps (#24571)
* New wizard spell: The Traps 🆑 coiax add: Wizards now have a new spell "The Traps" in their spellbook. Summon an array of temporary and permament hazards for your foes, but don't fall into your own trap(s). /🆑 Conjures some traps in an aoe, traps include Hand of God traps and swarmer shocking traps. Hand of God traps require 60 seconds to recharge between trapping. I saw Cobby give this as a TC trade, and I thought it seems reasonable as a silly wizard spell. * Added The Traps to spellbook, modifed trap code more * Adds action icon for The Traps * Need to be adjacent to disarm * Invocation is now Latin for "BEWARE THE TRAPS"
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
|
||||
/datum/status_effect/freon/on_apply()
|
||||
if(!owner.stat)
|
||||
owner << "You become frozen in a cube!"
|
||||
owner << "<span class='userdanger'>You become frozen in a cube!</span>"
|
||||
cube = icon('icons/effects/freeze.dmi', "ice_cube")
|
||||
owner.add_overlay(cube)
|
||||
owner.update_canmove()
|
||||
|
||||
@@ -277,6 +277,14 @@
|
||||
category = "Defensive"
|
||||
cost = 1
|
||||
|
||||
/datum/spellbook_entry/the_traps
|
||||
name = "The Traps!"
|
||||
spell_type = /obj/effect/proc_holder/spell/aoe_turf/conjure/the_traps
|
||||
log_name = "TT"
|
||||
category = "Offensive"
|
||||
cost = 1
|
||||
|
||||
|
||||
/datum/spellbook_entry/item
|
||||
name = "Buy Item"
|
||||
refundable = 0
|
||||
@@ -773,7 +781,7 @@
|
||||
recoil(user)
|
||||
else
|
||||
user.mind.AddSpell(S)
|
||||
user <<"<span class='notice'>you rapidly read through the arcane book. Suddenly you realize you understand [spellname]!</span>"
|
||||
user <<"<span class='notice'>You rapidly read through the arcane book. Suddenly you realize you understand [spellname]!</span>"
|
||||
user.log_message("<font color='orange'>learned the spell [spellname] ([S]).</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
onlearned(user)
|
||||
|
||||
|
||||
@@ -4,58 +4,82 @@
|
||||
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
|
||||
|
||||
/obj/structure/trap/Crossed(atom/movable/AM)
|
||||
if(last_trigger + time_between_triggers > world.time)
|
||||
return
|
||||
alpha = initial(alpha)
|
||||
if(isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
last_trigger = world.time
|
||||
alpha = 200
|
||||
trap_effect(L)
|
||||
animate(src, alpha = initial(alpha), time = time_between_triggers)
|
||||
var/list/static/ignore_typecache
|
||||
|
||||
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)) //bad ghosts, stop trying to powergame from beyond the grave
|
||||
if(!isliving(user))
|
||||
return
|
||||
user << "You reveal a trap!"
|
||||
if(get_dist(user, src) <= 1)
|
||||
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>")
|
||||
alpha = 200
|
||||
animate(src, alpha = initial(alpha), time = time_between_triggers)
|
||||
last_trigger = world.time
|
||||
spark_system.start()
|
||||
|
||||
/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
|
||||
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 you, it will burn your flesh and render you immobile, You'd better avoid it."
|
||||
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 << "<span class='danger'><B>You are paralyzed from the intense shock!</B></span>"
|
||||
L.electrocute_act(30, src, safety=1) // electrocute act does a message.
|
||||
L.Weaken(5)
|
||||
var/turf/Lturf = get_turf(L)
|
||||
new /obj/effect/particle_effect/sparks/electricity(Lturf)
|
||||
new /obj/effect/particle_effect/sparks(Lturf)
|
||||
|
||||
|
||||
/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)
|
||||
L << "<span class='danger'><B>Spontaneous combustion!</B></span>"
|
||||
L.Weaken(1)
|
||||
var/turf/Lturf = get_turf(L)
|
||||
new /obj/effect/hotspot(Lturf)
|
||||
new /obj/effect/particle_effect/sparks(Lturf)
|
||||
|
||||
/obj/structure/trap/fire/flare()
|
||||
..()
|
||||
new /obj/effect/hotspot(get_turf(src))
|
||||
|
||||
|
||||
/obj/structure/trap/chill
|
||||
@@ -63,12 +87,11 @@
|
||||
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)
|
||||
L << "<span class='danger'><B>You're frozen solid!</B></span>"
|
||||
L.Weaken(1)
|
||||
L.bodytemperature -= 300
|
||||
new /obj/effect/particle_effect/sparks(get_turf(L))
|
||||
L.apply_status_effect(/datum/status_effect/freon)
|
||||
|
||||
|
||||
/obj/structure/trap/damage
|
||||
@@ -81,9 +104,11 @@
|
||||
L << "<span class='danger'><B>The ground quakes beneath your feet!</B></span>"
|
||||
L.Weaken(5)
|
||||
L.adjustBruteLoss(35)
|
||||
var/turf/Lturf = get_turf(L)
|
||||
new /obj/effect/particle_effect/sparks(Lturf)
|
||||
new /obj/structure/flora/rock(Lturf)
|
||||
|
||||
/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
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/obj/effect/proc_holder/spell/aoe_turf/conjure/the_traps
|
||||
name = "The Traps!"
|
||||
desc = "Summon a number of traps to confuse and weaken your enemies, and possibly you."
|
||||
|
||||
charge_max = 250
|
||||
cooldown_min = 100
|
||||
|
||||
clothes_req = 1
|
||||
invocation = "CAVERE INSIDIAS"
|
||||
invocation_type = "shout"
|
||||
range = 3
|
||||
|
||||
summon_type = list(
|
||||
/obj/structure/trap/stun,
|
||||
/obj/structure/trap/fire,
|
||||
/obj/structure/trap/chill,
|
||||
/obj/structure/trap/damage,
|
||||
/obj/structure/swarmer/trap
|
||||
)
|
||||
summon_lifespan = 0
|
||||
summon_amt = 5
|
||||
|
||||
action_icon_state = "the_traps"
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 174 KiB After Width: | Height: | Size: 178 KiB |
@@ -1967,6 +1967,7 @@
|
||||
#include "code\modules\spells\spell_types\shapeshift.dm"
|
||||
#include "code\modules\spells\spell_types\spacetime_distortion.dm"
|
||||
#include "code\modules\spells\spell_types\summonitem.dm"
|
||||
#include "code\modules\spells\spell_types\the_traps.dm"
|
||||
#include "code\modules\spells\spell_types\touch_attacks.dm"
|
||||
#include "code\modules\spells\spell_types\trigger.dm"
|
||||
#include "code\modules\spells\spell_types\turf_teleport.dm"
|
||||
|
||||
Reference in New Issue
Block a user