mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-12 07:33:34 +01:00
Sayu grenade and assembly update
This commit is contained in:
@@ -3,21 +3,23 @@
|
||||
desc = "A small electronic device that should never exist."
|
||||
icon = 'icons/obj/assemblies/new_assemblies.dmi'
|
||||
icon_state = ""
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = FPRINT | CONDUCT
|
||||
w_class = 2.0
|
||||
m_amt = 100
|
||||
g_amt = 0
|
||||
w_amt = 0
|
||||
throwforce = 2
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
var/bomb_name = "bomb" // used for naming bombs / mines
|
||||
|
||||
var/secured = 1
|
||||
var/list/attached_overlays = null
|
||||
var/obj/item/device/assembly_holder/holder = null
|
||||
var/cooldown = 0//To prevent spam
|
||||
var/wires = WIRE_RECEIVE | WIRE_PULSE
|
||||
var/datum/wires/connected = null // currently only used by timer/signaler
|
||||
|
||||
var/const/WIRE_RECEIVE = 1 //Allows Pulsed(0) to call Activate()
|
||||
var/const/WIRE_PULSE = 2 //Allows Pulse(0) to act on the holder
|
||||
@@ -49,6 +51,8 @@
|
||||
interact(mob/user as mob) //Called when attack_self is called
|
||||
return
|
||||
|
||||
proc/describe() // Called by grenades to describe the state of the trigger (time left, etc)
|
||||
return "The trigger assembly looks broken!"
|
||||
|
||||
process_cooldown()
|
||||
cooldown--
|
||||
@@ -71,6 +75,8 @@
|
||||
holder.process_activation(src, 1, 0)
|
||||
if(holder && (wires & WIRE_PULSE_SPECIAL))
|
||||
holder.process_activation(src, 0, 1)
|
||||
// if(connected && (wires & WIRE_PULSE))
|
||||
// connected.Pulse(src)
|
||||
// if(radio && (wires & WIRE_RADIO_PULSE))
|
||||
//Not sure what goes here quite yet send signal?
|
||||
return 1
|
||||
@@ -104,7 +110,7 @@
|
||||
if((!A.secured) && (!secured))
|
||||
attach_assembly(A,user)
|
||||
return
|
||||
if(isscrewdriver(W))
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(toggle_secure())
|
||||
user << "\blue \The [src] is ready!"
|
||||
else
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
w_class = 3.0
|
||||
throw_speed = 2
|
||||
throw_range = 4
|
||||
flags = FPRINT | TABLEPASS| CONDUCT //Copied this from old code, so this may or may not be necessary
|
||||
flags = FPRINT | CONDUCT //Copied this from old code, so this may or may not be necessary
|
||||
var/status = 0 //0 - not readied //1 - bomb finished with welder
|
||||
var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
|
||||
var/obj/item/weapon/tank/bombtank = null //the second part of the bomb is a plasma tank
|
||||
@@ -73,6 +73,19 @@
|
||||
if(bombassembly)
|
||||
bombassembly.HasProximity(AM)
|
||||
|
||||
/obj/item/device/onetankbomb/Crossed(atom/movable/AM as mob|obj) //for mousetraps
|
||||
if(bombassembly)
|
||||
bombassembly.Crossed(AM)
|
||||
|
||||
/obj/item/device/onetankbomb/on_found(mob/finder as mob) //for mousetraps
|
||||
if(bombassembly)
|
||||
bombassembly.on_found(finder)
|
||||
|
||||
/obj/item/device/onetankbomb/hear_talk(mob/living/M as mob, msg)
|
||||
if(bombassembly)
|
||||
bombassembly.hear_talk(M, msg)
|
||||
|
||||
|
||||
// ---------- Procs below are for tanks that are used exclusively in 1-tank bombs ----------
|
||||
|
||||
/obj/item/weapon/tank/proc/bomb_assemble(W,user) //Bomb assembly proc. This turns assembly+tank into a bomb
|
||||
|
||||
+26
-107
@@ -3,7 +3,7 @@
|
||||
icon = 'icons/obj/assemblies/new_assemblies.dmi'
|
||||
icon_state = "holder"
|
||||
item_state = "assembly"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = FPRINT | CONDUCT
|
||||
throwforce = 5
|
||||
w_class = 2.0
|
||||
throw_speed = 3
|
||||
@@ -12,19 +12,13 @@
|
||||
var/secured = 0
|
||||
var/obj/item/device/assembly/a_left = null
|
||||
var/obj/item/device/assembly/a_right = null
|
||||
var/obj/special_assembly = null
|
||||
|
||||
proc/attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
|
||||
return
|
||||
|
||||
proc/attach_special(var/obj/O, var/mob/user)
|
||||
return
|
||||
|
||||
proc/process_activation(var/obj/item/device/D)
|
||||
return
|
||||
|
||||
proc/detached()
|
||||
return
|
||||
|
||||
|
||||
IsAssemblyHolder()
|
||||
@@ -46,23 +40,9 @@
|
||||
a_right = D2
|
||||
name = "[D.name]-[D2.name] assembly"
|
||||
update_icon()
|
||||
usr.put_in_hands(src)
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
attach_special(var/obj/O, var/mob/user)
|
||||
if(!O) return
|
||||
if(!O.IsSpecialAssembly()) return 0
|
||||
|
||||
/* if(O:Attach_Holder())
|
||||
special_assembly = O
|
||||
update_icon()
|
||||
src.name = "[a_left.name] [a_right.name] [special_assembly.name] assembly"
|
||||
*/
|
||||
return
|
||||
|
||||
|
||||
update_icon()
|
||||
overlays.Cut()
|
||||
if(a_left)
|
||||
@@ -76,13 +56,6 @@
|
||||
if(master)
|
||||
master.update_icon()
|
||||
|
||||
/* if(special_assembly)
|
||||
special_assembly.update_icon()
|
||||
if(special_assembly:small_icon_state)
|
||||
src.overlays += special_assembly:small_icon_state
|
||||
for(var/O in special_assembly:small_icon_state_overlays)
|
||||
src.overlays += O
|
||||
*/
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
@@ -100,8 +73,6 @@
|
||||
a_left.HasProximity(AM)
|
||||
if(a_right)
|
||||
a_right.HasProximity(AM)
|
||||
if(special_assembly)
|
||||
special_assembly.HasProximity(AM)
|
||||
|
||||
|
||||
Crossed(atom/movable/AM as mob|obj)
|
||||
@@ -109,43 +80,52 @@
|
||||
a_left.Crossed(AM)
|
||||
if(a_right)
|
||||
a_right.Crossed(AM)
|
||||
if(special_assembly)
|
||||
special_assembly.Crossed(AM)
|
||||
|
||||
|
||||
on_found(mob/finder as mob)
|
||||
if(a_left)
|
||||
a_left.on_found(finder)
|
||||
if(a_right)
|
||||
a_right.on_found(finder)
|
||||
if(special_assembly)
|
||||
if(istype(special_assembly, /obj/item))
|
||||
var/obj/item/S = special_assembly
|
||||
S.on_found(finder)
|
||||
|
||||
|
||||
Move()
|
||||
..()
|
||||
hear_talk(mob/living/M as mob, msg)
|
||||
if(a_left)
|
||||
a_left.hear_talk(M, msg)
|
||||
if(a_right)
|
||||
a_right.hear_talk(M, msg)
|
||||
|
||||
proc/process_movement() // infrared beams and prox sensors
|
||||
if(a_left && a_right)
|
||||
a_left.holder_movement()
|
||||
a_right.holder_movement()
|
||||
// if(special_assembly)
|
||||
// special_assembly:holder_movement()
|
||||
|
||||
Move()
|
||||
..()
|
||||
process_movement()
|
||||
return
|
||||
|
||||
pickup()
|
||||
..()
|
||||
process_movement()
|
||||
|
||||
Bump()
|
||||
..()
|
||||
process_movement()
|
||||
|
||||
throw_impact() // called when a throw stops
|
||||
..()
|
||||
process_movement()
|
||||
|
||||
attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess
|
||||
if(a_left && a_right)
|
||||
a_left.holder_movement()
|
||||
a_right.holder_movement()
|
||||
// if(special_assembly)
|
||||
// special_assembly:Holder_Movement()
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(isscrewdriver(W))
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(!a_left || !a_right)
|
||||
user << "\red BUG:Assembly part missing, please report this!"
|
||||
return
|
||||
@@ -158,8 +138,6 @@
|
||||
user << "\blue \The [src] can now be taken apart!"
|
||||
update_icon()
|
||||
return
|
||||
else if(W.IsSpecialAssembly())
|
||||
attach_special(W, user)
|
||||
else
|
||||
..()
|
||||
return
|
||||
@@ -177,10 +155,8 @@
|
||||
if("Right") a_right.attack_self(user)
|
||||
return
|
||||
else
|
||||
if(!istype(a_left,/obj/item/device/assembly/igniter))
|
||||
a_left.attack_self(user)
|
||||
if(!istype(a_right,/obj/item/device/assembly/igniter))
|
||||
a_right.attack_self(user)
|
||||
a_left.attack_self(user)
|
||||
a_right.attack_self(user)
|
||||
else
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T) return 0
|
||||
@@ -197,8 +173,6 @@
|
||||
|
||||
process_activation(var/obj/D, var/normal = 1, var/special = 1)
|
||||
if(!D) return 0
|
||||
if(!secured)
|
||||
visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
|
||||
if((normal) && (a_right) && (a_left))
|
||||
if(a_right != D)
|
||||
a_right.pulsed(0)
|
||||
@@ -206,9 +180,6 @@
|
||||
a_left.pulsed(0)
|
||||
if(master)
|
||||
master.receive_signal()
|
||||
// if(special && special_assembly)
|
||||
// if(!special_assembly == D)
|
||||
// special_assembly.dothings()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -217,58 +188,6 @@
|
||||
|
||||
|
||||
|
||||
/obj/item/device/assembly_holder/timer_igniter
|
||||
name = "timer-igniter assembly"
|
||||
|
||||
New()
|
||||
..()
|
||||
|
||||
var/obj/item/device/assembly/igniter/ign = new(src)
|
||||
ign.secured = 1
|
||||
ign.holder = src
|
||||
var/obj/item/device/assembly/timer/tmr = new(src)
|
||||
tmr.time=5
|
||||
tmr.secured = 1
|
||||
tmr.holder = src
|
||||
processing_objects.Add(tmr)
|
||||
a_left = tmr
|
||||
a_right = ign
|
||||
secured = 1
|
||||
update_icon()
|
||||
name = initial(name) + " ([tmr.time] secs)"
|
||||
|
||||
loc.verbs += /obj/item/device/assembly_holder/timer_igniter/verb/configure
|
||||
|
||||
detached()
|
||||
loc.verbs -= /obj/item/device/assembly_holder/timer_igniter/verb/configure
|
||||
..()
|
||||
|
||||
verb/configure()
|
||||
set name = "Set Timer"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if ( !(usr.stat || usr.restrained()) )
|
||||
var/obj/item/device/assembly_holder/holder
|
||||
if(istype(src,/obj/item/weapon/grenade/chem_grenade))
|
||||
var/obj/item/weapon/grenade/chem_grenade/gren = src
|
||||
holder=gren.detonator
|
||||
var/obj/item/device/assembly/timer/tmr = holder.a_left
|
||||
if(!istype(tmr,/obj/item/device/assembly/timer))
|
||||
tmr = holder.a_right
|
||||
if(!istype(tmr,/obj/item/device/assembly/timer))
|
||||
usr << "<span class='notice'>This detonator has no timer.</span>"
|
||||
return
|
||||
|
||||
if(tmr.timing)
|
||||
usr << "<span class='notice'>Clock is ticking already.</span>"
|
||||
else
|
||||
var/ntime = input("Enter desired time in seconds", "Time", "5") as num
|
||||
if (ntime>0 && ntime<1000)
|
||||
tmr.time = ntime
|
||||
name = initial(name) + "([tmr.time] secs)"
|
||||
usr << "<span class='notice'>Timer set to [tmr.time] seconds.</span>"
|
||||
else
|
||||
usr << "<span class='notice'>Timer can't be [ntime<=0?"negative":"more than 1000 seconds"].</span>"
|
||||
else
|
||||
usr << "<span class='notice'>You cannot do this while [usr.stat?"unconscious/dead":"restrained"].</span>"
|
||||
|
||||
@@ -4,32 +4,15 @@
|
||||
icon_state = "igniter"
|
||||
m_amt = 500
|
||||
g_amt = 50
|
||||
w_amt = 10
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
secured = 1
|
||||
wires = WIRE_RECEIVE
|
||||
describe()
|
||||
return "The igniter is [secured?"secured.":"unsecured."]"
|
||||
|
||||
activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
|
||||
if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade))
|
||||
var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc
|
||||
grenade.prime()
|
||||
else
|
||||
var/turf/location = get_turf(loc)
|
||||
if(location)
|
||||
location.hotspot_expose(1000,1000)
|
||||
if (istype(src.loc,/obj/item/device/assembly_holder))
|
||||
if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/))
|
||||
var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc
|
||||
if (tank && tank.modded)
|
||||
tank.explode()
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
|
||||
var/turf/location = get_turf(loc)
|
||||
if(location) location.hotspot_expose(1000,1000)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -6,10 +6,9 @@
|
||||
icon_state = "infrared"
|
||||
m_amt = 1000
|
||||
g_amt = 500
|
||||
w_amt = 100
|
||||
origin_tech = "magnets=2"
|
||||
|
||||
wires = WIRE_PULSE
|
||||
bomb_name = "tripwire mine"
|
||||
|
||||
secured = 0
|
||||
|
||||
@@ -20,6 +19,8 @@
|
||||
proc
|
||||
trigger_beam()
|
||||
|
||||
describe()
|
||||
return "The infrared trigger is [on?"on":"off"]."
|
||||
|
||||
activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
@@ -57,9 +58,19 @@
|
||||
if(first)
|
||||
del(first)
|
||||
return
|
||||
|
||||
if((!(first) && (secured && (istype(loc, /turf) || (holder && istype(holder.loc, /turf))))))
|
||||
var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam((holder ? holder.loc : loc) )
|
||||
if(first || !secured) return
|
||||
var/turf/T = null
|
||||
if(istype(loc,/turf))
|
||||
T = loc
|
||||
else if (holder)
|
||||
if (istype(holder.loc,/turf))
|
||||
T = holder.loc
|
||||
else if (holder.master && istype(holder.master.loc,/turf)) //for onetankbombs and other tertiary builds with assemblies
|
||||
T = holder.loc.loc
|
||||
else if(istype(loc,/obj/item/weapon/grenade) && istype(loc.loc,/turf))
|
||||
T = loc.loc
|
||||
if(T)
|
||||
var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(T)
|
||||
I.master = src
|
||||
I.density = 1
|
||||
I.dir = dir
|
||||
@@ -94,7 +105,6 @@
|
||||
|
||||
holder_movement()
|
||||
if(!holder) return 0
|
||||
// dir = holder.dir
|
||||
del(first)
|
||||
return 1
|
||||
|
||||
@@ -102,8 +112,7 @@
|
||||
trigger_beam()
|
||||
if((!secured)||(!on)||(cooldown > 0)) return 0
|
||||
pulse(0)
|
||||
if(!holder)
|
||||
visible_message("\icon[src] *beep* *beep*")
|
||||
visible_message("\icon[src] *beep* *beep*")
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
process_cooldown()
|
||||
@@ -114,6 +123,8 @@
|
||||
if(!secured) return
|
||||
user.set_machine(src)
|
||||
var/dat = text("<TT><B>Infrared Laser</B>\n<B>Status</B>: []<BR>\n<B>Visibility</B>: []<BR>\n</TT>", (on ? text("<A href='?src=\ref[];state=0'>On</A>", src) : text("<A href='?src=\ref[];state=1'>Off</A>", src)), (src.visible ? text("<A href='?src=\ref[];visible=0'>Visible</A>", src) : text("<A href='?src=\ref[];visible=1'>Invisible</A>", src)))
|
||||
if(holder)
|
||||
dat += "<BR>Beam direction: [dir2text(dir)] <A href='?src=\ref[src];rotate=-1'>Counter-clockwise</A> | <A href='?src=\ref[src];rotate=1'>Clockwise</A>"
|
||||
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
|
||||
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
|
||||
user << browse(dat, "window=infra")
|
||||
@@ -128,6 +139,17 @@
|
||||
onclose(usr, "infra")
|
||||
return
|
||||
|
||||
if(href_list["rotate"])
|
||||
switch(href_list["rotate"])
|
||||
if("-1")
|
||||
dir = turn(dir,90)
|
||||
update_icon()
|
||||
del(first)
|
||||
if("1")
|
||||
dir = turn(dir,-90)
|
||||
update_icon()
|
||||
del(first)
|
||||
|
||||
if(href_list["state"])
|
||||
on = !(on)
|
||||
update_icon()
|
||||
@@ -170,7 +192,7 @@
|
||||
var/visible = 0.0
|
||||
var/left = null
|
||||
anchored = 1.0
|
||||
flags = TABLEPASS
|
||||
flags = 0
|
||||
|
||||
|
||||
/obj/effect/beam/i_beam/proc/hit()
|
||||
|
||||
@@ -3,16 +3,32 @@
|
||||
desc = "A handy little spring-loaded trap for catching pesty rodents."
|
||||
icon_state = "mousetrap"
|
||||
m_amt = 100
|
||||
w_amt = 10
|
||||
origin_tech = "combat=1"
|
||||
var/armed = 0
|
||||
|
||||
bomb_name = "contact mine"
|
||||
|
||||
examine()
|
||||
..()
|
||||
if(armed)
|
||||
usr << "It looks like it's armed."
|
||||
|
||||
activate()
|
||||
if(..())
|
||||
armed = !armed
|
||||
if(!armed)
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/user = usr
|
||||
if(((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)))
|
||||
user << "Your hand slips, setting off the trigger."
|
||||
pulse(0)
|
||||
update_icon()
|
||||
if(usr)
|
||||
playsound(usr.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
|
||||
|
||||
describe()
|
||||
return "The pressure switch is [armed?"primed":"safe"]."
|
||||
|
||||
update_icon()
|
||||
if(armed)
|
||||
icon_state = "mousetraparmed"
|
||||
@@ -37,14 +53,12 @@
|
||||
affecting = H.get_organ(type)
|
||||
H.Stun(3)
|
||||
if(affecting)
|
||||
if(affecting.take_damage(1, 0))
|
||||
H.UpdateDamageIcon()
|
||||
H.updatehealth()
|
||||
else if(ismouse(target))
|
||||
var/mob/living/simple_animal/mouse/M = target
|
||||
visible_message("\red <b>SPLAT!</b>")
|
||||
M.splat()
|
||||
playsound(target.loc, 'sound/effects/snap.ogg', 50, 1)
|
||||
playsound(src.loc, 'sound/effects/snap.ogg', 50, 1)
|
||||
armed = 0
|
||||
update_icon()
|
||||
pulse(0)
|
||||
@@ -81,7 +95,7 @@
|
||||
..()
|
||||
|
||||
|
||||
Crossed(AM as mob|obj)
|
||||
Crossed(var/atom/movable/AM as mob|obj)
|
||||
if(armed)
|
||||
if(ishuman(AM))
|
||||
var/mob/living/carbon/H = AM
|
||||
@@ -89,7 +103,9 @@
|
||||
triggered(H)
|
||||
H.visible_message("<span class='warning'>[H] accidentally steps on [src].</span>", \
|
||||
"<span class='warning'>You accidentally step on [src]</span>")
|
||||
if(ismouse(AM))
|
||||
else if(ismouse(AM))
|
||||
triggered(AM)
|
||||
else if(AM.density) // For mousetrap grenades, set off by anything heavy
|
||||
triggered(AM)
|
||||
..()
|
||||
|
||||
@@ -112,4 +128,4 @@
|
||||
|
||||
/obj/item/device/assembly/mousetrap/armed
|
||||
icon_state = "mousetraparmed"
|
||||
armed = 1
|
||||
armed = 1
|
||||
|
||||
@@ -4,23 +4,24 @@
|
||||
icon_state = "prox"
|
||||
m_amt = 800
|
||||
g_amt = 200
|
||||
w_amt = 50
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
wires = WIRE_PULSE
|
||||
|
||||
secured = 0
|
||||
|
||||
bomb_name = "proximity mine"
|
||||
|
||||
var/scanning = 0
|
||||
var/timing = 0
|
||||
var/time = 10
|
||||
|
||||
var/range = 2
|
||||
|
||||
proc
|
||||
toggle_scan()
|
||||
sense()
|
||||
|
||||
describe()
|
||||
if(timing)
|
||||
return "\blue The proximity sensor is arming."
|
||||
return "The proximity sensor is [scanning?"armed":"disarmed"]."
|
||||
|
||||
activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
@@ -48,13 +49,9 @@
|
||||
|
||||
|
||||
sense()
|
||||
var/turf/mainloc = get_turf(src)
|
||||
// if(scanning && cooldown <= 0)
|
||||
// mainloc.visible_message("\icon[src] *boop* *boop*", "*boop* *boop*")
|
||||
if((!holder && !secured)||(!scanning)||(cooldown > 0)) return 0
|
||||
if((!secured)||(!scanning)||(cooldown > 0)) return 0
|
||||
pulse(0)
|
||||
if(!holder)
|
||||
mainloc.visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
|
||||
visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
process_cooldown()
|
||||
@@ -62,12 +59,6 @@
|
||||
|
||||
|
||||
process()
|
||||
if(scanning)
|
||||
var/turf/mainloc = get_turf(src)
|
||||
for(var/mob/living/A in range(range,mainloc))
|
||||
if (A.move_speed < 12)
|
||||
sense()
|
||||
|
||||
if(timing && (time >= 0))
|
||||
time--
|
||||
if(timing && time <= 0)
|
||||
@@ -102,9 +93,6 @@
|
||||
attached_overlays += "prox_scanning"
|
||||
if(holder)
|
||||
holder.update_icon()
|
||||
if(holder && istype(holder.loc,/obj/item/weapon/grenade/chem_grenade))
|
||||
var/obj/item/weapon/grenade/chem_grenade/grenade = holder.loc
|
||||
grenade.primed(scanning)
|
||||
return
|
||||
|
||||
|
||||
@@ -113,6 +101,9 @@
|
||||
sense()
|
||||
return
|
||||
|
||||
holder_movement()
|
||||
sense()
|
||||
|
||||
|
||||
interact(mob/user as mob)//TODO: Change this to the wires thingy
|
||||
if(!secured)
|
||||
@@ -121,7 +112,6 @@
|
||||
var/second = time % 60
|
||||
var/minute = (time - second) / 60
|
||||
var/dat = text("<TT><B>Proximity Sensor</B>\n[] []:[]\n<A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT>", (timing ? text("<A href='?src=\ref[];time=0'>Arming</A>", src) : text("<A href='?src=\ref[];time=1'>Not Arming</A>", src)), minute, second, src, src, src, src)
|
||||
dat += text("<BR>Range: <A href='?src=\ref[];range=-1'>-</A> [] <A href='?src=\ref[];range=1'>+</A>", src, range, src)
|
||||
dat += "<BR><A href='?src=\ref[src];scanning=1'>[scanning?"Armed":"Unarmed"]</A> (Movement sensor active when armed!)"
|
||||
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
|
||||
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
|
||||
@@ -149,11 +139,6 @@
|
||||
time += tp
|
||||
time = min(max(round(time), 0), 600)
|
||||
|
||||
if(href_list["range"])
|
||||
var/r = text2num(href_list["range"])
|
||||
range += r
|
||||
range = min(max(range, 1), 5)
|
||||
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=prox")
|
||||
return
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
/obj/item/assembly/shock_kit
|
||||
name = "electrohelmet assembly"
|
||||
desc = "This appears to be made from both an electropack and a helmet."
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
icon_state = "shock_kit"
|
||||
var/obj/item/clothing/head/helmet/part1 = null
|
||||
var/obj/item/device/radio/electropack/part2 = null
|
||||
var/status = 0
|
||||
w_class = 5.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
flags = FPRINT | CONDUCT
|
||||
|
||||
/obj/item/assembly/shock_kit/Del()
|
||||
del(part1)
|
||||
|
||||
@@ -5,25 +5,27 @@
|
||||
item_state = "signaler"
|
||||
m_amt = 1000
|
||||
g_amt = 200
|
||||
w_amt = 100
|
||||
origin_tech = "magnets=1"
|
||||
wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE
|
||||
|
||||
secured = 1
|
||||
var/receiving = 0
|
||||
|
||||
bomb_name = "remote-control bomb"
|
||||
|
||||
var/code = 30
|
||||
var/frequency = 1457
|
||||
var/delay = 0
|
||||
var/airlock_wire = null
|
||||
var/datum/radio_frequency/radio_connection
|
||||
var/deadman = 0
|
||||
var/airlock_wire = null
|
||||
|
||||
New()
|
||||
..()
|
||||
spawn(40)
|
||||
set_frequency(frequency)
|
||||
return
|
||||
|
||||
describe()
|
||||
return "\The [src]'s power light is [receiving?"on":"off"]"
|
||||
|
||||
activate()
|
||||
if(cooldown > 0) return 0
|
||||
@@ -49,6 +51,7 @@
|
||||
<TT>
|
||||
|
||||
<A href='byond://?src=\ref[src];send=1'>Send Signal</A><BR>
|
||||
Reciever is <A href='byond://?src=\ref[src];receive=1'>[receiving?"on":"off"]</A><BR>
|
||||
<B>Frequency/Code</B> for signaler:<BR>
|
||||
Frequency:
|
||||
<A href='byond://?src=\ref[src];freq=-10'>-</A>
|
||||
@@ -89,6 +92,8 @@
|
||||
src.code = round(src.code)
|
||||
src.code = min(100, src.code)
|
||||
src.code = max(1, src.code)
|
||||
if(href_list["receive"])
|
||||
receiving = !receiving
|
||||
|
||||
if(href_list["send"])
|
||||
spawn( 0 )
|
||||
@@ -108,16 +113,13 @@
|
||||
signal.encryption = code
|
||||
signal.data["message"] = "ACTIVATE"
|
||||
radio_connection.post_signal(src, signal)
|
||||
return
|
||||
/*
|
||||
for(var/obj/item/device/assembly/signaler/S in world)
|
||||
if(!S) continue
|
||||
if(S == src) continue
|
||||
if((S.frequency == src.frequency) && (S.code == src.code))
|
||||
spawn(0)
|
||||
if(S) S.pulse(0)
|
||||
return 0*/
|
||||
|
||||
var/time = time2text(world.realtime,"hh:mm:ss")
|
||||
var/turf/T = get_turf(src)
|
||||
if(usr)
|
||||
lastsignalers.Add("[time] <B>:</B> [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) <B>:</B> [format_frequency(frequency)]/[code]")
|
||||
|
||||
return
|
||||
|
||||
pulse(var/radio = 0)
|
||||
if(istype(src.loc, /obj/machinery/door/airlock) && src.airlock_wire && src.wires)
|
||||
@@ -129,16 +131,17 @@
|
||||
..(radio)
|
||||
return 1
|
||||
|
||||
|
||||
receive_signal(datum/signal/signal)
|
||||
if(!signal) return 0
|
||||
if(signal.encryption != code) return 0
|
||||
if(!(src.wires & WIRE_RADIO_RECEIVE)) return 0
|
||||
pulse(1)
|
||||
if( !receiving || !signal )
|
||||
return 0
|
||||
|
||||
if(!holder)
|
||||
for(var/mob/O in hearers(1, src.loc))
|
||||
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
|
||||
if(signal.encryption != code)
|
||||
return 0
|
||||
if(!(src.wires & WIRE_RADIO_RECEIVE)) return 0
|
||||
|
||||
pulse(1)
|
||||
for(var/mob/O in hearers(1, src.loc))
|
||||
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
|
||||
return
|
||||
|
||||
|
||||
@@ -152,28 +155,6 @@
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
|
||||
return
|
||||
|
||||
process()
|
||||
if(!deadman)
|
||||
processing_objects.Remove(src)
|
||||
var/mob/M = src.loc
|
||||
if(!M || !ismob(M))
|
||||
if(prob(5))
|
||||
signal()
|
||||
deadman = 0
|
||||
processing_objects.Remove(src)
|
||||
else if(prob(5))
|
||||
M.visible_message("[M]'s finger twitches a bit over [src]'s signal button!")
|
||||
return
|
||||
|
||||
verb/deadman_it()
|
||||
set src in usr
|
||||
set name = "Threaten to push the button!"
|
||||
set desc = "BOOOOM!"
|
||||
deadman = 1
|
||||
processing_objects.Add(src)
|
||||
usr.visible_message("\red [usr] moves their finger over [src]'s signal button...")
|
||||
|
||||
|
||||
// Embedded signaller used in anomalies.
|
||||
/obj/item/device/assembly/signaler/anomaly
|
||||
name = "anomaly core"
|
||||
|
||||
@@ -4,25 +4,28 @@
|
||||
icon_state = "timer"
|
||||
m_amt = 500
|
||||
g_amt = 50
|
||||
w_amt = 10
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
wires = WIRE_PULSE
|
||||
|
||||
secured = 0
|
||||
|
||||
bomb_name = "time bomb"
|
||||
|
||||
var/timing = 0
|
||||
var/time = 10
|
||||
var/repeat = 0
|
||||
var/set_time = 10
|
||||
|
||||
proc
|
||||
timer_end()
|
||||
|
||||
describe()
|
||||
if(timing)
|
||||
return "The timer is counting down from [time]!"
|
||||
return "The timer is set for [time] seconds."
|
||||
|
||||
activate()
|
||||
if(!..()) return 0//Cooldown check
|
||||
|
||||
timing = !timing
|
||||
|
||||
update_icon()
|
||||
return 0
|
||||
|
||||
@@ -39,10 +42,9 @@
|
||||
|
||||
|
||||
timer_end()
|
||||
if(!secured) return 0
|
||||
if((!secured)||(cooldown > 0)) return 0
|
||||
pulse(0)
|
||||
if(!holder)
|
||||
visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
|
||||
loc.visible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
process_cooldown()
|
||||
@@ -53,9 +55,9 @@
|
||||
if(timing && (time > 0))
|
||||
time--
|
||||
if(timing && time <= 0)
|
||||
timing = 0
|
||||
timing = repeat
|
||||
timer_end()
|
||||
time = 10
|
||||
time = set_time
|
||||
return
|
||||
|
||||
|
||||
@@ -76,9 +78,24 @@
|
||||
return 0
|
||||
var/second = time % 60
|
||||
var/minute = (time - second) / 60
|
||||
var/dat = text("<TT><B>Timing Unit</B>\n[] []:[]\n<A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT>", (timing ? text("<A href='?src=\ref[];time=0'>Timing</A>", src) : text("<A href='?src=\ref[];time=1'>Not Timing</A>", src)), minute, second, src, src, src, src)
|
||||
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
|
||||
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
|
||||
var/set_second = set_time % 60
|
||||
var/set_minute = (set_time - set_second) / 60
|
||||
if(second < 10) second = "0[second]"
|
||||
if(set_second < 10) set_second = "0[set_second]"
|
||||
|
||||
var/dat = {"
|
||||
<TT>
|
||||
<center><h2>Timing Unit</h2>
|
||||
[minute]:[second] <a href='?src=\ref[src];time=1'>[timing?"Stop":"Start"]</a> <a href='?src=\ref[src];reset=1'>Reset</a><br>
|
||||
Repeat: <a href='?src=\ref[src];repeat=1'>[repeat?"On":"Off"]</a><br>
|
||||
Timer set for
|
||||
<A href='?src=\ref[src];tp=-30'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> [set_minute]:[set_second] <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=30'>+</A>
|
||||
</center>
|
||||
</TT>
|
||||
<BR><BR>
|
||||
<A href='?src=\ref[src];refresh=1'>Refresh</A>
|
||||
<BR><BR>
|
||||
<A href='?src=\ref[src];close=1'>Close</A>"}
|
||||
user << browse(dat, "window=timer")
|
||||
onclose(user, "timer")
|
||||
return
|
||||
@@ -92,13 +109,20 @@
|
||||
return
|
||||
|
||||
if(href_list["time"])
|
||||
timing = text2num(href_list["time"])
|
||||
timing = !timing
|
||||
update_icon()
|
||||
if(href_list["reset"])
|
||||
time = set_time
|
||||
|
||||
if(href_list["repeat"])
|
||||
repeat = !repeat
|
||||
|
||||
if(href_list["tp"])
|
||||
var/tp = text2num(href_list["tp"])
|
||||
time += tp
|
||||
time = min(max(round(time), 0), 600)
|
||||
set_time += tp
|
||||
set_time = min(max(round(set_time), 5), 600)
|
||||
if(!timing)
|
||||
time = set_time
|
||||
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=timer")
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
/obj/item/device/assembly/voice
|
||||
name = "voice analyzer"
|
||||
desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated."
|
||||
icon_state = "voice"
|
||||
m_amt = 500
|
||||
g_amt = 50
|
||||
origin_tech = "magnets=1"
|
||||
var/listening = 0
|
||||
var/recorded = null //the activation message
|
||||
|
||||
bomb_name = "voice-activated bomb"
|
||||
|
||||
describe()
|
||||
if(recorded || listening)
|
||||
return "A meter on [src] flickers with every nearby sound."
|
||||
else
|
||||
return "[src] is deactivated."
|
||||
|
||||
hear_talk(mob/living/M as mob, msg)
|
||||
if(listening)
|
||||
recorded = msg
|
||||
listening = 0
|
||||
var/turf/T = get_turf(src) //otherwise it won't work in hand
|
||||
T.visible_message("\icon[src] beeps, \"Activation message is '[recorded]'.\"")
|
||||
else
|
||||
if(findtext(msg, recorded))
|
||||
pulse(0)
|
||||
|
||||
activate()
|
||||
return // previously this toggled listning when not in a holder, that's a little silly. It was only called in attack_self that way.
|
||||
|
||||
|
||||
attack_self(mob/user)
|
||||
if(!user || !secured) return 0
|
||||
|
||||
listening = !listening
|
||||
var/turf/T = get_turf(src)
|
||||
T.visible_message("\icon[src] beeps, \"[listening ? "Now" : "No longer"] recording input.\"")
|
||||
return 1
|
||||
|
||||
|
||||
toggle_secure()
|
||||
. = ..()
|
||||
listening = 0
|
||||
@@ -78,13 +78,13 @@ emp_act
|
||||
update_icons()
|
||||
src << "\blue Your [C.name] was disrupted!"
|
||||
Stun(2)
|
||||
|
||||
/*
|
||||
if(istype(equipped(),/obj/item/device/assembly/signaler))
|
||||
var/obj/item/device/assembly/signaler/signaler = equipped()
|
||||
if(signaler.deadman && prob(80))
|
||||
src.visible_message("\red [src] triggers their deadman's switch!")
|
||||
signaler.signal()
|
||||
|
||||
*/
|
||||
return
|
||||
//END TASER NERF
|
||||
|
||||
|
||||
@@ -45,13 +45,13 @@
|
||||
Stun(2)
|
||||
|
||||
flash_weak_pain()
|
||||
|
||||
/*
|
||||
if(istype(equipped(),/obj/item/device/assembly/signaler))
|
||||
var/obj/item/device/assembly/signaler/signaler = equipped()
|
||||
if(signaler.deadman && prob(80))
|
||||
src.visible_message("\red [src] triggers their deadman's switch!")
|
||||
signaler.signal()
|
||||
|
||||
*/
|
||||
var/absorb = run_armor_check(def_zone, P.flag)
|
||||
if(absorb >= 2)
|
||||
P.on_hit(src,2)
|
||||
|
||||
Reference in New Issue
Block a user