/obj/effect/pressure_plate name = "pressure plate" desc = "A pressure plate that triggers a trap or a few of them." density = 0 var/list/connected_traps_names = list() //mappers, edit this when you place pressure plates on the map. don't forget to make the connected traps have an UNIQUE name var/list/connected_traps = list() //actual references to the connected traps. leave empty, it is generated at runtime from connected_traps_names var/trigger_type = "mob and obj" //can be "mob", "obj" or "mob and obj", the only moveable types /obj/effect/pressure_plate/New() ..() src:visibility = 0 refresh() /obj/effect/pressure_plate/verb/refresh() set name = "Refresh Pressure Plate Links" set category = "Object" set src in view() connected_traps = list() //emptying the list first for(var/trap_name in connected_traps_names) for(var/obj/effect/trap/the_trap in world) if(the_trap.name == trap_name) connected_traps += the_trap //adding the trap with the matching name /obj/effect/pressure_plate/HasEntered(atom/victim as mob|obj) if(victim.density && (trigger_type == "mob and obj" || (trigger_type == "mob" && istype(victim,/mob)) || (trigger_type == "obj" && istype(victim,/obj)))) for(var/obj/effect/trap/T in connected_traps) T.trigger(victim) /obj/effect/pressure_plate/Bumped(atom/victim as mob|obj) if(victim.density && (trigger_type == "mob and obj" || (trigger_type == "mob" && istype(victim,/mob)) || (trigger_type == "obj" && istype(victim,/obj)))) for(var/obj/effect/trap/T in connected_traps) T.trigger(victim) /obj/effect/trap //has three subtypes - /aoe, /area (ie affects an entire area), /single (only the victim is affected) name = "trap" desc = "It's a trap!" density = 0 var/uses = 1 //how many times it can be triggered var/trigger_type = "mob and obj" //can be "mob", "obj" or "mob and obj", the only moveable types. can also be "none" to not be triggered by entering its square (needs to have a pressure plate attached in that case) var/target_type = "mob" //if it targets mobs, turfs or objs var/include_dense = 1 //if it includes dense targets in the aoe (may be important for some reason). you'll probably want to change it to 1 if you target mobs or objs /obj/effect/trap/New() ..() src:visibility = 0 //seriously, it keeps saying "undefined var" when I try to do it in the define /obj/effect/trap/HasEntered(victim as mob|obj) if(trigger_type == "mob and obj" || (trigger_type == "mob" && istype(victim,/mob)) || (trigger_type == "obj" && istype(victim,/obj))) trigger(victim) /obj/effect/trap/Bumped(victim as mob|obj) if(trigger_type == "mob and obj" || (trigger_type == "mob" && istype(victim,/mob)) || (trigger_type == "obj" && istype(victim,/obj))) trigger(victim) /obj/effect/trap/proc/trigger(victim) if(!uses) return uses-- activate(victim) /obj/effect/trap/proc/activate() /obj/effect/trap/aoe name = "aoe trap" desc = "This trap affects a number of mobs, turfs or objs in an aoe" var/aoe_radius = 3 //radius of aoe var/aoe_range_or_view = "view" //if it includes all tiles in [radius] range or view /obj/effect/trap/aoe/proc/picktargets() var/list/targets = list() switch(target_type) if("turf") switch(aoe_range_or_view) if("view") for(var/turf/T in view(src,aoe_radius)) if(!T.density || include_dense) targets += T if("range") for(var/turf/T in range(src,aoe_radius)) if(!T.density || include_dense) targets += T if("mob") switch(aoe_range_or_view) if("view") for(var/mob/living/M in view(src,aoe_radius)) if(!M.density || include_dense) targets += M if("range") for(var/mob/living/M in range(src,aoe_radius)) if(!M.density || include_dense) targets += M if("obj") switch(aoe_range_or_view) if("view") for(var/obj/O in view(src,aoe_radius)) if(!O.density || include_dense) targets += O if("range") for(var/obj/O in range(src,aoe_radius)) if(!O.density || include_dense) targets += O return targets /obj/effect/trap/aoe/rocksfall name = "rocks fall trap" desc = "Your DM must really hate you." target_type = "turf" include_dense = 0 var/rocks_amt = 10 //amount of rocks falling var/rocks_min_dmg = 50 //min damage per rock var/rocks_max_dmg = 100 //max damage per rock var/rocks_hit_chance = 100 //the chance for a rock to hit you var/list/rocks_type = list() //what rocks might it drop on the target. with var editing, not even limited to rocks. /obj/effect/trap/aoe/rocksfall/New() ..() rocks_type = pick_rock_types() /obj/effect/trap/aoe/rocksfall/proc/pick_rock_types() //since we may want subtypes of the trap with completely different rock types, which is best done this way var/list/varieties = list() varieties = typesof(/obj/item/weapon/ore) varieties -= /obj/item/weapon/ore/diamond //don't want easily available rare ores, hmm? varieties -= /obj/item/weapon/ore/uranium varieties -= /obj/item/weapon/ore/slag //that'd be just stupid return varieties /obj/effect/trap/aoe/rocksfall/activate() var/list/targets = list() targets = picktargets() if(target_type == "turf") for(var/i=0,i