Files
Paradise/code/game/objects/weapons.dm
noisomehollow@lycos.com 41cd0a67b7 Alium changes:
Aliens are now scary. Be careful of all those friendly xenos running about.
Scythe-like arms can now seriously injure you if they get an opportunity.
Spit now costs 50 plasma instead of 25. It works like a taser (no more homing spit). The effect is the same as the old spit but instead of fire loss, it deals toxin damage. Riot shields can still block spit 50% of the time. 
Spit overloads (stuns) a cyborg's receptor circuit for 5 seconds, dealing 10 fire damage.
Spit has a new projectile icon.
Aliens can now properly attack monkeys, dealing heavy damage.
Can now interact with other aliens via attack. Larva cannot interact as such. Currently bugged where two similar messages show up on interaction. Will be fixed asap.
Slightly higher damage to cyborgs. Aliens can now caress cyborgs with their scythe-like arms.
Slightly higher damage to exosuits.
Invisibility now works for 15 seconds instead of 30.
Resin wall now costs 100 plasma instead of 200.
Face huggers now have 10 health instead of 25. There is also a 30% chance of not being paralyzed after a facehugger leap. The paralysis itself lasts half as long.
Aliens can now break glass, grills, and tables, and light fixtures without using acid. 
Adult aliens can now also climb over tables/racks.
Fixed the acid verb not properly showing up.
Fixed stab/disarm never properly showing up.
Larva now get a verb to hide under tables as the old code didn't work.
More alien emote fixes. Larva should now properly be gender neutral.

General changes:
Devouring time has been extended so it takes 10 seconds for all mobs. You must remain still (and the target), to devour someone.
Hulks can break through grills a lot faster than before.
Added smoothwall shuttle code by Urist (and icons by Rolfero).
Added a new dmi for gimmick items. Moved a few gimmick items there.


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@694 316c924e-a436-60f5-8080-3fe189b3f50e
2010-12-24 03:13:33 +00:00

1281 lines
31 KiB
Plaintext

/obj/mine/proc/triggerrad(obj)
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
s.set_up(3, 1, src)
s.start()
obj:radiation += 50
randmutb(obj)
domutcheck(obj,null)
spawn(0)
del(src)
/obj/mine/proc/triggerstun(obj)
obj:stunned += 30
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
s.set_up(3, 1, src)
s.start()
spawn(0)
del(src)
/obj/mine/proc/triggern2o(obj)
//example: n2o triggerproc
//note: im lazy
for (var/turf/simulated/floor/target in range(1,src))
if(!target.blocks_air)
if(target.parent)
target.parent.suspend_group_processing()
var/datum/gas_mixture/payload = new
var/datum/gas/sleeping_agent/trace_gas = new
trace_gas.moles = 30
payload += trace_gas
target.air.merge(payload)
spawn(0)
del(src)
/obj/mine/proc/triggerplasma(obj)
for (var/turf/simulated/floor/target in range(1,src))
if(!target.blocks_air)
if(target.parent)
target.parent.suspend_group_processing()
var/datum/gas_mixture/payload = new
payload.toxins = 30
target.air.merge(payload)
target.hotspot_expose(1000, CELL_VOLUME)
spawn(0)
del(src)
/obj/mine/proc/triggerkick(obj)
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
s.set_up(3, 1, src)
s.start()
del(obj:client)
spawn(0)
del(src)
/obj/mine/proc/explode(obj)
explosion(loc, 0, 1, 2, 3)
spawn(0)
del(src)
/obj/mine/HasEntered(AM as mob|obj)
Bumped(AM)
/obj/mine/Bumped(mob/M as mob|obj)
if(triggered) return
if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey))
for(var/mob/O in viewers(world.view, src.loc))
O << text("<font color='red'>[M] triggered the \icon[] [src]</font>", src)
triggered = 1
call(src,triggerproc)(M)
/obj/mine/New()
icon_state = "uglyminearmed"
/obj/item/assembly/proc/c_state(n, O as obj)
return
//*****RM
/obj/item/assembly/time_ignite/Del()
del(part1)
del(part2)
..()
/obj/item/assembly/time_ignite/attack_self(mob/user as mob)
if (src.part1)
src.part1.attack_self(user, src.status)
src.add_fingerprint(user)
return
/obj/item/assembly/time_ignite/receive_signal()
for(var/mob/O in hearers(1, src.loc))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
src.part2.ignite()
return
/obj/decal/ash/attack_hand(mob/user as mob)
usr << "\blue The ashes slip through your fingers."
del(src)
return
/obj/item/assembly/time_ignite/attackby(obj/item/weapon/W as obj, mob/user as mob)
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
var/turf/T = src.loc
if (ismob(T))
T = T.loc
if (src.part1)
src.part1.loc = T
src.part1.master = null
src.part1 = null
if (src.part2)
src.part2.loc = T
src.part2.master = null
src.part2 = null
del(src)
return
if (!( istype(W, /obj/item/weapon/screwdriver) ))
return
src.status = !( src.status )
if (src.status)
user.show_message("\blue The timer is now secured!", 1)
else
user.show_message("\blue The timer is now unsecured!", 1)
if (src.part2)
src.part2.status = src.status
src.add_fingerprint(user)
return
/obj/item/assembly/time_ignite/c_state(n)
src.icon_state = text("timer-igniter[]", n)
return
//***********
/obj/item/assembly/anal_ignite/attackby(obj/item/weapon/W as obj, mob/user as mob)
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
var/turf/T = src.loc
if (ismob(T))
T = T.loc
src.part1.loc = T
src.part2.loc = T
src.part1.master = null
src.part2.master = null
src.part1 = null
src.part2 = null
del(src)
return
if (( istype(W, /obj/item/weapon/screwdriver) ))
src.status = !( src.status )
if (src.status)
user.show_message("\blue The analyzer is now secured!", 1)
else
user.show_message("\blue The analyzer is now unsecured!", 1)
src.part2.status = src.status
src.add_fingerprint(user)
if(( istype(W, /obj/item/clothing/suit/armor/vest) ) && src.status)
var/obj/item/assembly/a_i_a/R = new /obj/item/assembly/a_i_a( user )
W.loc = R
R.part1 = W
R.part2 = W
W.layer = initial(W.layer)
if (user.client)
user.client.screen -= W
if (user.r_hand == W)
user.u_equip(W)
user.r_hand = R
else
user.u_equip(W)
user.l_hand = R
W.master = R
src.master = R
src.layer = initial(src.layer)
user.u_equip(src)
if (user.client)
user.client.screen -= src
src.loc = R
R.part3 = src
R.layer = 20
R.loc = user
src.add_fingerprint(user)
return
/* else if ((istype(W, /obj/item/device/timer) && !( src.status )))
var/obj/item/assembly/time_ignite/R = new /obj/item/assembly/time_ignite( user )
W.loc = R
R.part1 = W
W.layer = initial(W.layer)
if (user.client)
user.client.screen -= W
if (user.r_hand == W)
user.u_equip(W)
user.r_hand = R
else
user.u_equip(W)
user.l_hand = R
W.master = R
src.master = R
src.layer = initial(src.layer)
user.u_equip(src)
if (user.client)
user.client.screen -= src
src.loc = R
R.part2 = src
R.layer = 20
R.loc = user
src.add_fingerprint(user)
*/
/obj/item/assembly/a_i_a/attackby(obj/item/weapon/W as obj, mob/user as mob)
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
var/turf/T = src.loc
if (ismob(T))
T = T.loc
src.part1.loc = T
src.part2.loc = T
src.part3.loc = T
src.part1.master = null
src.part2.master = null
src.part3.master = null
src.part1 = null
src.part2 = null
src.part3 = null
del(src)
return
if (( istype(W, /obj/item/weapon/screwdriver) ))
src.status = !( src.status )
if (src.status)
user.show_message("\blue The armor is now secured!", 1)
else
user.show_message("\blue The armor is now unsecured!", 1)
src.add_fingerprint(user)
/obj/item/assembly/a_i_a/Del()
//src.part1 = null
del(src.part1)
//src.part2 = null
del(src.part2)
del(src.part3)
..()
return
//*****
/obj/item/assembly/rad_time/Del()
//src.part1 = null
del(src.part1)
//src.part2 = null
del(src.part2)
..()
return
/obj/item/assembly/rad_time/attackby(obj/item/weapon/W as obj, mob/user as mob)
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
var/turf/T = src.loc
if (ismob(T))
T = T.loc
src.part1.loc = T
src.part2.loc = T
src.part1.master = null
src.part2.master = null
src.part1 = null
src.part2 = null
//SN src = null
del(src)
return
if (!( istype(W, /obj/item/weapon/screwdriver) ))
return
src.status = !( src.status )
if (src.status)
user.show_message("\blue The signaler is now secured!", 1)
else
user.show_message("\blue The signaler is now unsecured!", 1)
src.part1.b_stat = !( src.status )
src.add_fingerprint(user)
return
/obj/item/assembly/rad_time/attack_self(mob/user as mob)
src.part1.attack_self(user, src.status)
src.part2.attack_self(user, src.status)
src.add_fingerprint(user)
return
/obj/item/assembly/rad_time/receive_signal(datum/signal/signal)
if (signal.source == src.part2)
src.part1.send_signal("ACTIVATE")
return
//*******************
/obj/item/assembly/rad_prox/c_state(n)
src.icon_state = "prox-radio[n]"
return
/obj/item/assembly/rad_prox/Del()
//src.part1 = null
del(src.part1)
//src.part2 = null
del(src.part2)
..()
return
/obj/item/assembly/rad_prox/HasProximity(atom/movable/AM as mob|obj)
if (istype(AM, /obj/beam))
return
if (AM.move_speed < 12)
src.part2.sense()
return
/obj/item/assembly/rad_prox/attackby(obj/item/weapon/W as obj, mob/user as mob)
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
var/turf/T = src.loc
if (ismob(T))
T = T.loc
src.part1.loc = T
src.part2.loc = T
src.part1.master = null
src.part2.master = null
src.part1 = null
src.part2 = null
//SN src = null
del(src)
return
if (!( istype(W, /obj/item/weapon/screwdriver) ))
return
src.status = !( src.status )
if (src.status)
user.show_message("\blue The proximity sensor is now secured!", 1)
else
user.show_message("\blue The proximity sensor is now unsecured!", 1)
src.part1.b_stat = !( src.status )
src.add_fingerprint(user)
return
/obj/item/assembly/rad_prox/attack_self(mob/user as mob)
src.part1.attack_self(user, src.status)
src.part2.attack_self(user, src.status)
src.add_fingerprint(user)
return
/obj/item/assembly/rad_prox/receive_signal(datum/signal/signal)
if (signal.source == src.part2)
src.part1.send_signal("ACTIVATE")
return
/obj/item/assembly/rad_prox/Move()
..()
src.part2.sense()
return
/obj/item/assembly/rad_prox/attack_paw(mob/user as mob)
return src.attack_hand(user)
/obj/item/assembly/rad_prox/dropped()
spawn( 0 )
src.part2.sense()
return
return
//************************
/obj/item/assembly/rad_infra/c_state(n)
src.icon_state = text("infrared-radio[]", n)
return
/obj/item/assembly/rad_infra/Del()
del(src.part1)
del(src.part2)
..()
return
/obj/item/assembly/rad_infra/attackby(obj/item/weapon/W as obj, mob/user as mob)
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
var/turf/T = src.loc
if (ismob(T))
T = T.loc
src.part1.loc = T
src.part2.loc = T
src.part1.master = null
src.part2.master = null
src.part1 = null
src.part2 = null
//SN src = null
del(src)
return
if (!( istype(W, /obj/item/weapon/screwdriver) ))
return
src.status = !( src.status )
if (src.status)
user.show_message("\blue The infrared laser is now secured!", 1)
else
user.show_message("\blue The infrared laser is now unsecured!", 1)
src.part1.b_stat = !( src.status )
src.add_fingerprint(user)
return
/obj/item/assembly/rad_infra/attack_self(mob/user as mob)
src.part1.attack_self(user, src.status)
src.part2.attack_self(user, src.status)
src.add_fingerprint(user)
return
/obj/item/assembly/rad_infra/receive_signal(datum/signal/signal)
if (signal.source == src.part2)
src.part1.send_signal("ACTIVATE")
return
/obj/item/assembly/rad_infra/verb/rotate()
set src in usr
src.dir = turn(src.dir, 90)
src.part2.dir = src.dir
src.add_fingerprint(usr)
return
/obj/item/assembly/rad_infra/Move()
var/t = src.dir
..()
src.dir = t
//src.part2.first = null
del(src.part2.first)
return
/obj/item/assembly/rad_infra/attack_paw(mob/user as mob)
return src.attack_hand(user)
/obj/item/assembly/rad_infra/attack_hand(M)
del(src.part2.first)
..()
return
/obj/item/assembly/prox_ignite/HasProximity(atom/movable/AM as mob|obj)
if (istype(AM, /obj/beam))
return
if (AM.move_speed < 12 && src.part1)
src.part1.sense()
return
/obj/item/assembly/prox_ignite/dropped()
spawn( 0 )
src.part1.sense()
return
return
/obj/item/assembly/prox_ignite/Del()
del(src.part1)
del(src.part2)
..()
return
/obj/item/assembly/prox_ignite/c_state(n)
src.icon_state = text("prox-igniter[]", n)
return
/obj/item/assembly/prox_ignite/attackby(obj/item/weapon/W as obj, mob/user as mob)
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
var/turf/T = src.loc
if (ismob(T))
T = T.loc
src.part1.loc = T
src.part2.loc = T
src.part1.master = null
src.part2.master = null
src.part1 = null
src.part2 = null
//SN src = null
del(src)
return
if (!( istype(W, /obj/item/weapon/screwdriver) ))
return
src.status = !( src.status )
if (src.status)
user.show_message("\blue The proximity sensor is now secured! The igniter now works!", 1)
else
user.show_message("\blue The proximity sensor is now unsecured! The igniter will not work.", 1)
src.part2.status = src.status
src.add_fingerprint(user)
return
/obj/item/assembly/prox_ignite/attack_self(mob/user as mob)
src.part1.attack_self(user, src.status)
src.add_fingerprint(user)
return
/obj/item/assembly/prox_ignite/receive_signal()
for(var/mob/O in hearers(1, src.loc))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
src.part2.ignite()
return
/obj/item/assembly/rad_ignite/Del()
del(src.part1)
del(src.part2)
..()
return
/obj/item/weapon/directions/attack_hand(mob/user as mob)
if (istype(usr, /mob/living/carbon/human))
if (prob(50))
usr << "\blue You try to read the paper, but it breaks apart in your hand. Must have been pretty old.."
del(src)
return
else
if (user.knowledge < 1)
usr << "\red As you read over the paper, you slowly realize what you are reading. You quickly memorize the words on the paper before it breaks apart in your hand, and slips through your fingers."
user.knowledge++
del(src)
return
else
usr << "\blue You already have read this paper."
return
return
/obj/item/assembly/rad_ignite/attackby(obj/item/weapon/W as obj, mob/user as mob)
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
var/turf/T = src.loc
if (ismob(T))
T = T.loc
src.part1.loc = T
src.part2.loc = T
src.part1.master = null
src.part2.master = null
src.part1 = null
src.part2 = null
//SN src = null
del(src)
return
if (!( istype(W, /obj/item/weapon/screwdriver) ))
return
src.status = !( src.status )
if (src.status)
user.show_message("\blue The radio is now secured! The igniter now works!", 1)
else
user.show_message("\blue The radio is now unsecured! The igniter will not work.", 1)
src.part2.status = src.status
src.part1.b_stat = !( src.status )
src.add_fingerprint(user)
return
/obj/item/assembly/rad_ignite/attack_self(mob/user as mob)
src.part1.attack_self(user, src.status)
src.add_fingerprint(user)
return
/obj/item/assembly/rad_ignite/receive_signal()
for(var/mob/O in hearers(1, src.loc))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
src.part2.ignite()
return
/obj/item/assembly/m_i_ptank/c_state(n)
src.icon_state = text("prox-igniter-tank[]", n)
return
/obj/item/assembly/m_i_ptank/HasProximity(atom/movable/AM as mob|obj)
if (istype(AM, /obj/beam))
return
if (AM.move_speed < 12 && src.part1)
src.part1.sense()
return
//*****RM
/obj/item/assembly/m_i_ptank/Bump(atom/O)
spawn(0)
//world << "miptank bumped into [O]"
if(src.part1.state)
//world << "sending signal"
receive_signal()
else
//world << "not active"
..()
/obj/item/assembly/m_i_ptank/proc/prox_check()
if(!part1 || !part1.state)
return
for(var/atom/A in view(1, src.loc))
if(A!=src && !istype(A, /turf/space) && !isarea(A))
//world << "[A]:[A.type] was sensed"
src.part1.sense()
break
spawn(10)
prox_check()
//*****
/obj/item/assembly/m_i_ptank/dropped()
spawn( 0 )
src.part1.sense()
return
return
/obj/item/assembly/m_i_ptank/examine()
..()
src.part3.examine()
/obj/item/assembly/m_i_ptank/Del()
//src.part1 = null
del(src.part1)
//src.part2 = null
del(src.part2)
//src.part3 = null
del(src.part3)
..()
return
/obj/item/assembly/m_i_ptank/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/device/analyzer))
src.part3.attackby(W, user)
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
var/obj/item/assembly/prox_ignite/R = new /obj/item/assembly/prox_ignite( )
R.part1 = src.part1
R.part2 = src.part2
R.loc = src.loc
if (user.r_hand == src)
user.r_hand = R
R.layer = 20
else
if (user.l_hand == src)
user.l_hand = R
R.layer = 20
src.part1.loc = R
src.part2.loc = R
src.part1.master = R
src.part2.master = R
var/turf/T = src.loc
if (!( istype(T, /turf) ))
T = T.loc
if (!( istype(T, /turf) ))
T = T.loc
src.part3.loc = T
src.part1 = null
src.part2 = null
src.part3 = null
//SN src = null
del(src)
return
if (!( istype(W, /obj/item/weapon/weldingtool) ))
return
if (!( src.status ))
src.status = 1
bombers += "[key_name(user)] welded a prox bomb. Temp: [src.part3.air_contents.temperature-T0C]"
message_admins("[key_name_admin(user)] welded a prox bomb. Temp: [src.part3.air_contents.temperature-T0C]")
user.show_message("\blue A pressure hole has been bored to the plasma tank valve. The plasma tank can now be ignited.", 1)
else
src.status = 0
bombers += "[key_name(user)] unwelded a prox bomb. Temp: [src.part3.air_contents.temperature-T0C]"
user << "\blue The hole has been closed."
src.part2.status = src.status
src.add_fingerprint(user)
return
/obj/item/assembly/m_i_ptank/attack_self(mob/user as mob)
playsound(src.loc, 'armbomb.ogg', 100, 1)
src.part1.attack_self(user, 1)
src.add_fingerprint(user)
return
/obj/item/assembly/m_i_ptank/receive_signal()
//world << "miptank [src] got signal"
for(var/mob/O in hearers(1, null))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
//Foreach goto(19)
if ((src.status && prob(90)))
//world << "sent ignite() to [src.part3]"
src.part3.ignite()
else
if(!src.status)
src.part3.release()
src.part1.state = 0.0
return
//*****RM
/obj/item/assembly/t_i_ptank/c_state(n)
src.icon_state = text("timer-igniter-tank[]", n)
return
/obj/item/assembly/t_i_ptank/examine()
..()
src.part3.examine()
/obj/item/assembly/t_i_ptank/Del()
//src.part1 = null
del(src.part1)
//src.part2 = null
del(src.part2)
//src.part3 = null
del(src.part3)
..()
return
/obj/item/assembly/t_i_ptank/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/device/analyzer))
src.part3.attackby(W, user)
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
var/obj/item/assembly/time_ignite/R = new /obj/item/assembly/time_ignite( )
R.part1 = src.part1
R.part2 = src.part2
R.loc = src.loc
if (user.r_hand == src)
user.r_hand = R
R.layer = 20
else
if (user.l_hand == src)
user.l_hand = R
R.layer = 20
src.part1.loc = R
src.part2.loc = R
src.part1.master = R
src.part2.master = R
var/turf/T = src.loc
if (!( istype(T, /turf) ))
T = T.loc
if (!( istype(T, /turf) ))
T = T.loc
src.part3.loc = T
src.part1 = null
src.part2 = null
src.part3 = null
//SN src = null
del(src)
return
if (!( istype(W, /obj/item/weapon/weldingtool) ))
return
if (!( src.status ))
src.status = 1
bombers += "[key_name(user)] welded a time bomb. Temp: [src.part3.air_contents.temperature-T0C]"
message_admins("[key_name_admin(user)] welded a time bomb. Temp: [src.part3.air_contents.temperature-T0C]")
user.show_message("\blue A pressure hole has been bored to the plasma tank valve. The plasma tank can now be ignited.", 1)
else
src.status = 0
bombers += "[key_name(user)] unwelded a time bomb. Temp: [src.part3.air_contents.temperature-T0C]"
user << "\blue The hole has been closed."
src.part2.status = src.status
src.add_fingerprint(user)
return
/obj/item/assembly/t_i_ptank/attack_self(mob/user as mob)
if (src.part1)
src.part1.attack_self(user, 1)
playsound(src.loc, 'armbomb.ogg', 100, 1)
src.add_fingerprint(user)
return
/obj/item/assembly/t_i_ptank/receive_signal()
//world << "tiptank [src] got signal"
for(var/mob/O in hearers(1, null))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
//Foreach goto(19)
if ((src.status && prob(90)))
//world << "sent ignite() to [src.part3]"
src.part3.ignite()
else
if(!src.status)
src.part3.release()
return
/obj/item/assembly/r_i_ptank/examine()
..()
src.part3.examine()
/obj/item/assembly/r_i_ptank/Del()
//src.part1 = null
del(src.part1)
//src.part2 = null
del(src.part2)
//src.part3 = null
del(src.part3)
..()
return
/obj/item/assembly/r_i_ptank/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/device/analyzer))
src.part3.attackby(W, user)
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
var/obj/item/assembly/rad_ignite/R = new /obj/item/assembly/rad_ignite( )
R.part1 = src.part1
R.part2 = src.part2
R.loc = src.loc
if (user.r_hand == src)
user.r_hand = R
R.layer = 20
else
if (user.l_hand == src)
user.l_hand = R
R.layer = 20
src.part1.loc = R
src.part2.loc = R
src.part1.master = R
src.part2.master = R
var/turf/T = src.loc
if (!( istype(T, /turf) ))
T = T.loc
if (!( istype(T, /turf) ))
T = T.loc
src.part3.loc = T
src.part1 = null
src.part2 = null
src.part3 = null
//SN src = null
del(src)
return
if (!( istype(W, /obj/item/weapon/weldingtool) ))
return
if (!( src.status ))
src.status = 1
bombers += "[key_name(user)] welded a radio bomb. Temp: [src.part3.air_contents.temperature-T0C]"
message_admins("[key_name_admin(user)] welded a radio bomb. Temp: [src.part3.air_contents.temperature-T0C]")
user.show_message("\blue A pressure hole has been bored to the plasma tank valve. The plasma tank can now be ignited.", 1)
else
src.status = 0
bombers += "[key_name(user)] unwelded a radio bomb. Temp: [src.part3.air_contents.temperature-T0C]"
user << "\blue The hole has been closed."
src.part2.status = src.status
src.part1.b_stat = !( src.status )
src.add_fingerprint(user)
return
/obj/item/clothing/suit/armor/a_i_a_ptank/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/device/analyzer))
src.part4.attackby(W, user)
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
var/obj/item/assembly/a_i_a/R = new /obj/item/assembly/a_i_a( )
R.part1 = src.part1
R.part2 = src.part2
R.part3 = src.part3
R.loc = src.loc
if (user.r_hand == src)
user.r_hand = R
R.layer = 20
else
if (user.l_hand == src)
user.l_hand = R
R.layer = 20
src.part1.loc = R
src.part2.loc = R
src.part3.loc = R
src.part1.master = R
src.part2.master = R
src.part3.master = R
var/turf/T = src.loc
if (!( istype(T, /turf) ))
T = T.loc
if (!( istype(T, /turf) ))
T = T.loc
src.part4.loc = T
src.part1 = null
src.part2 = null
src.part3 = null
src.part4 = null
//SN src = null
del(src)
return
if (( istype(W, /obj/item/weapon/weldingtool) ))
return
if (!( src.status ))
src.status = 1
bombers += "[key_name(user)] welded a suicide bomb. Temp: [src.part4.air_contents.temperature-T0C]"
message_admins("[key_name_admin(user)] welded a suicide bomb. Temp: [src.part4.air_contents.temperature-T0C]")
user.show_message("\blue A pressure hole has been bored to the plasma tank valve. The plasma tank can now be ignited.", 1)
else
src.status = 0
bombers += "[key_name(user)] unwelded a suicide bomb. Temp: [src.part4.air_contents.temperature-T0C]"
user << "\blue The hole has been closed."
// src.part3.status = src.status
src.add_fingerprint(user)
return
/obj/item/assembly/r_i_ptank/attack_self(mob/user as mob)
if (src.part1)
playsound(src.loc, 'armbomb.ogg', 100, 1)
src.part1.attack_self(user, 1)
src.add_fingerprint(user)
return
/obj/item/assembly/r_i_ptank/receive_signal()
//world << "riptank [src] got signal"
for(var/mob/O in hearers(1, null))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
//Foreach goto(19)
if ((src.status && prob(90)))
//world << "sent ignite() to [src.part3]"
src.part3.ignite()
else
if(!src.status)
src.part3.release()
return
/obj/bullet/Bump(atom/A as mob|obj|turf|area)
spawn(0)
if(A)
A.bullet_act(PROJECTILE_BULLET, src)
if(istype(A,/turf))
for(var/obj/O in A)
O.bullet_act(PROJECTILE_BULLET, src)
del(src)
return
/obj/bullet/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
if(istype(mover, /obj/bullet))
return prob(95)
else
return 1
/obj/bullet/weakbullet/Bump(atom/A as mob|obj|turf|area)
spawn(0)
if(A)
A.bullet_act(PROJECTILE_WEAKBULLET, src)
if(istype(A,/turf))
for(var/obj/O in A)
O.bullet_act(PROJECTILE_WEAKBULLET, src)
del(src)
return
/obj/bullet/electrode/Bump(atom/A as mob|obj|turf|area)
spawn(0)
if(A)
A.bullet_act(PROJECTILE_TASER)
if(istype(A,/turf))
for(var/obj/O in A)
O.bullet_act(PROJECTILE_TASER, src)
del(src)
return
/obj/bullet/cbbolt/Bump(atom/A as mob|obj|turf|area)
spawn(0)
if(A)
A.bullet_act(PROJECTILE_BOLT)
if(istype(A,/turf))
for(var/obj/O in A)
O.bullet_act(PROJECTILE_BOLT, src)
del(src)
return
/obj/bullet/neurodart/Bump(atom/A as mob|obj|turf|area)
spawn(0)
if(A)
A.bullet_act(PROJECTILE_DART)
if(istype(A,/turf))
for(var/obj/O in A)
O.bullet_act(PROJECTILE_DART, src)
del(src)
return
/obj/bullet/teleshot/Bump(atom/A as mob|obj|turf|area)
if (src.target == null)
var/list/turfs = list( )
for(var/turf/T in orange(10, src))
if(T.x>world.maxx-4 || T.x<4) continue //putting them at the edge is dumb
if(T.y>world.maxy-4 || T.y<4) continue
turfs += T
if(turfs)
src.target = pick(turfs)
if (!src.target)
del(src)
return
spawn(0)
if(A)
var/turf/T = get_turf(A)
for(var/atom/movable/M in T)
if(istype(M, /obj/effects)) //sparks don't teleport
continue
if (M.anchored)
continue
if (istype(M, /atom/movable))
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
s.set_up(5, 1, M)
s.start()
if(prob(src.failchance)) //oh dear a problem, put em in deep space
do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0)
else
do_teleport(M, src.target, 2)
del(src)
return
/obj/bullet/proc/process()
if ((!( src.current ) || src.loc == src.current))
src.current = locate(min(max(src.x + src.xo, 1), world.maxx), min(max(src.y + src.yo, 1), world.maxy), src.z)
if ((src.x == 1 || src.x == world.maxx || src.y == 1 || src.y == world.maxy))
//SN src = null
del(src)
return
step_towards(src, src.current)
spawn( 1 )
process()
return
return
/obj/beam/a_laser/Bump(atom/A as mob|obj|turf|area)
spawn(0)
if(A)
A.bullet_act(PROJECTILE_LASER, src)
del(src)
/obj/beam/a_laser/proc/process()
spawn while(src)
//world << text("laser at [] []:[], target is [] []:[]", src.loc, src.x, src.y, src:current, src.current:x, src.current:y)
if ((!( src.current ) || src.loc == src.current))
src.current = locate(min(max(src.x + src.xo, 1), world.maxx), min(max(src.y + src.yo, 1), world.maxy), src.z)
//world << text("current changed: target is now []. location was [],[], added [],[]", src.current, src.x, src.y, src.xo, src.yo)
if ((src.x == 1 || src.x == world.maxx || src.y == 1 || src.y == world.maxy))
//world << text("off-world, deleting")
//SN src = null
del(src)
return
step_towards(src, src.current)
// make it able to hit lying-down folk
var/list/dudes = list()
for(var/mob/living/M in src.loc)
dudes += M
if(dudes.len)
src.Bump(pick(dudes))
//world << text("laser stepped, now [] []:[], target is [] []:[]", src.loc, src.x, src.y, src.current, src.current:x, src.current:y)
src.life--
if (src.life <= 0)
//SN src = null
del(src)
return
sleep(1)
return
/obj/beam/i_beam/proc/hit()
//world << "beam \ref[src]: hit"
if (src.master)
//world << "beam hit \ref[src]: calling master \ref[master].hit"
src.master.hit()
//SN src = null
del(src)
return
/obj/beam/i_beam/proc/vis_spread(v)
//world << "i_beam \ref[src] : vis_spread"
src.visible = v
spawn( 0 )
if (src.next)
//world << "i_beam \ref[src] : is next [next.type] \ref[next], calling spread"
src.next.vis_spread(v)
return
return
/obj/beam/i_beam/proc/process()
//world << "i_beam \ref[src] : process"
if ((src.loc.density || !( src.master )))
//SN src = null
// world << "beam hit loc [loc] or no master [master], deleting"
del(src)
return
//world << "proccess: [src.left] left"
if (src.left > 0)
src.left--
if (src.left < 1)
if (!( src.visible ))
src.invisibility = 101
else
src.invisibility = 0
else
src.invisibility = 0
//world << "now [src.left] left"
var/obj/beam/i_beam/I = new /obj/beam/i_beam( src.loc )
I.master = src.master
I.density = 1
I.dir = src.dir
//world << "created new beam \ref[I] at [I.x] [I.y] [I.z]"
step(I, I.dir)
if (I)
//world << "step worked, now at [I.x] [I.y] [I.z]"
if (!( src.next ))
//world << "no src.next"
I.density = 0
//world << "spreading"
I.vis_spread(src.visible)
src.next = I
spawn( 0 )
//world << "limit = [src.limit] "
if ((I && src.limit > 0))
I.limit = src.limit - 1
//world << "calling next process"
I.process()
return
else
//world << "is a next: \ref[next], deleting beam \ref[I]"
//I = null
del(I)
else
//src.next = null
//world << "step failed, deleting \ref[src.next]"
del(src.next)
spawn( 10 )
src.process()
return
return
/obj/beam/i_beam/Bump()
del(src)
return
/obj/beam/i_beam/Bumped()
src.hit()
return
/obj/beam/i_beam/HasEntered(atom/movable/AM as mob|obj)
if (istype(AM, /obj/beam))
return
spawn( 0 )
src.hit()
return
return
/obj/beam/i_beam/Del()
del(src.next)
..()
return
/atom/proc/ex_act()
return
/atom/proc/blob_act()
return
// bullet_act called when anything is hit buy a projectile (bullet, tazer shot, laser, etc.)
// flag is projectile type, can be:
//PROJECTILE_TASER = 1 taser gun
//PROJECTILE_LASER = 2 laser gun
//PROJECTILE_BULLET = 3 traitor pistol
//PROJECTILE_PULSE = 4 pulse rifle
//PROJECTILE_BOLT = 5 crossbow
//PROJECTILE_WEAKBULLET = 6 detective's revolver
/atom/proc/bullet_act(flag)
if(flag == PROJECTILE_PULSE)
src.ex_act(2)
return
/turf/Entered(atom/A as mob|obj)
..()
if ((A && A.density && !( istype(A, /obj/beam) )))
for(var/obj/beam/i_beam/I in src)
spawn( 0 )
if (I)
I.hit()
return
return
/obj/item/weapon/mousetrap/examine()
set src in oview(12)
..()
if(armed)
usr << "\red It looks like it's armed."
/obj/item/weapon/mousetrap/proc/triggered(mob/target as mob, var/type = "feet")
if(!armed)
return
var/datum/organ/external/affecting = null
if(ishuman(target))
var/mob/living/carbon/human/H = target
switch(type)
if("feet")
if(!H.shoes)
affecting = H.organs[pick("l_foot", "r_foot")]
H.weakened = max(3, H.weakened)
if("l_hand", "r_hand")
if(!H.gloves)
affecting = H.organs[type]
H.stunned = max(3, H.stunned)
if(affecting)
affecting.take_damage(1, 0)
H.UpdateDamageIcon()
H.updatehealth()
playsound(target.loc, 'snap.ogg', 50, 1)
icon_state = "mousetrap"
armed = 0
/*
else if (ismouse(target))
target.bruteloss = 100
*/
/obj/item/weapon/mousetrap/attack_self(mob/user as mob)
if(!armed)
icon_state = "mousetraparmed"
user << "\blue You arm the mousetrap."
else
icon_state = "mousetrap"
if((user.brainloss >= 60 || user.mutations & 16) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
src.triggered(user, which_hand)
user << "\red <B>You accidentally trigger the mousetrap!</B>"
for(var/mob/O in viewers(user, null))
if(O == user)
continue
O.show_message(text("\red <B>[user] accidentally sets off the mousetrap, breaking their fingers.</B>"), 1)
return
user << "\blue You disarm the mousetrap."
armed = !armed
playsound(user.loc, 'handcuffs.ogg', 30, 1, -3)
/obj/item/weapon/mousetrap/attack_hand(mob/user as mob)
if(armed)
if((user.brainloss >= 60 || user.mutations & 16) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
src.triggered(user, which_hand)
user << "\red <B>You accidentally trigger the mousetrap!</B>"
for(var/mob/O in viewers(user, null))
if(O == user)
continue
O.show_message(text("\red <B>[user] accidentally sets off the mousetrap, breaking their fingers.</B>"), 1)
return
..()
/obj/item/weapon/mousetrap/HasEntered(AM as mob|obj)
if((ishuman(AM)) && (armed))
var/mob/living/carbon/H = AM
if(H.m_intent == "run")
src.triggered(H)
H << "\red <B>You accidentally step on the mousetrap!</B>"
for(var/mob/O in viewers(H, null))
if(O == H)
continue
O.show_message(text("\red <B>[H] accidentally steps on the mousetrap.</B>"), 1)
..()
/obj/item/weapon/mousetrap/hitby(A as mob|obj)
if(!armed)
return ..()
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>The mousetrap is triggered by [A].</B>"), 1)
src.triggered(null)