mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
The various assemblies should be working now.
Old style bombs and suicide vests temporarily removed. Players can now be job banned from being a pAI. Added null checks to explosion() due to runtime errors. Changelog updated git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1980 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -90,19 +90,6 @@
|
||||
var/def_zone
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
/obj/beam/i_beam
|
||||
name = "i beam"
|
||||
icon = 'projectiles.dmi'
|
||||
icon_state = "ibeam"
|
||||
var/obj/beam/i_beam/next = null
|
||||
var/obj/item/device/infra/master = null
|
||||
var/limit = null
|
||||
var/visible = 0.0
|
||||
var/left = null
|
||||
anchored = 1.0
|
||||
flags = TABLEPASS
|
||||
|
||||
|
||||
/obj/bedsheetbin
|
||||
name = "linen bin"
|
||||
desc = "A bin for containing bedsheets. It looks rather cosy."
|
||||
@@ -324,22 +311,12 @@
|
||||
flags = FPRINT | TABLEPASS
|
||||
pass_flags = PASSTABLE
|
||||
pressure_resistance = 50
|
||||
// causeerrorheresoifixthis
|
||||
var/obj/item/master = null
|
||||
|
||||
/obj/item/device
|
||||
icon = 'device.dmi'
|
||||
|
||||
/obj/item/device/detective_scanner
|
||||
name = "Scanner"
|
||||
desc = "Used to scan objects for DNA and fingerprints."
|
||||
icon_state = "forensic0"
|
||||
var/amount = 20.0
|
||||
var/printing = 0.0
|
||||
w_class = 3.0
|
||||
item_state = "electronic"
|
||||
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY
|
||||
|
||||
|
||||
/obj/item/device/flash
|
||||
name = "flash"
|
||||
desc = "Used for blinding and being an asshole."
|
||||
@@ -379,59 +356,6 @@
|
||||
icon_off = "plight0"
|
||||
brightness_on = 3
|
||||
|
||||
/obj/item/device/analyzer
|
||||
desc = "A hand-held environmental scanner which reports current gas levels."
|
||||
name = "analyzer"
|
||||
icon_state = "atmos"
|
||||
item_state = "analyzer"
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
m_amt = 30
|
||||
g_amt = 20
|
||||
origin_tech = "magnets=1;engineering=1"
|
||||
|
||||
/obj/item/device/healthanalyzer
|
||||
name = "Health Analyzer"
|
||||
icon_state = "health"
|
||||
item_state = "analyzer"
|
||||
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
|
||||
flags = FPRINT | ONBELT | TABLEPASS | CONDUCT
|
||||
throwforce = 3
|
||||
w_class = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 10
|
||||
m_amt = 200
|
||||
origin_tech = "magnets=1;biotech=1"
|
||||
|
||||
/obj/item/device/igniter
|
||||
name = "igniter"
|
||||
desc = "A small electronic device able to ignite combustable substances. Does not function well as a lighter."
|
||||
icon_state = "igniter"
|
||||
var/status = 1.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
item_state = "electronic"
|
||||
m_amt = 100
|
||||
throwforce = 5
|
||||
w_class = 1.0
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
|
||||
/obj/item/device/infra
|
||||
name = "Infrared Beam (Security)"
|
||||
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
|
||||
icon_state = "infrared0"
|
||||
var/obj/beam/i_beam/first = null
|
||||
var/state = 0.0
|
||||
var/visible = 0.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
w_class = 2.0
|
||||
item_state = "electronic"
|
||||
m_amt = 150
|
||||
origin_tech = "magnets=2"
|
||||
|
||||
/obj/item/device/infra_sensor
|
||||
name = "Infrared Sensor"
|
||||
desc = "Scans for infrared beams in the vicinity."
|
||||
@@ -442,18 +366,6 @@
|
||||
m_amt = 150
|
||||
origin_tech = "magnets=2"
|
||||
|
||||
/obj/item/device/t_scanner
|
||||
name = "T-ray scanner"
|
||||
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
|
||||
icon_state = "t-ray0"
|
||||
var/on = 0
|
||||
flags = FPRINT|ONBELT|TABLEPASS
|
||||
w_class = 2
|
||||
item_state = "electronic"
|
||||
m_amt = 150
|
||||
origin_tech = "magnets=1;engineering=1"
|
||||
|
||||
|
||||
/obj/item/device/multitool
|
||||
name = "multitool"
|
||||
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors."
|
||||
@@ -469,21 +381,6 @@
|
||||
g_amt = 20
|
||||
origin_tech = "magnets=1;engineering=1"
|
||||
|
||||
|
||||
/obj/item/device/prox_sensor
|
||||
name = "Proximity Sensor"
|
||||
desc = "Used for scanning and alerting when someone enters a certain proximity."
|
||||
icon_state = "motion0"
|
||||
var/state = 0.0
|
||||
var/timing = 0.0
|
||||
var/time = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
w_class = 2.0
|
||||
item_state = "electronic"
|
||||
m_amt = 300
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
|
||||
/obj/item/device/shield
|
||||
name = "shield"
|
||||
desc = "This is an item which is specially crafted to shield you. It is much like a visible version of the outdated cloaking device."
|
||||
@@ -496,17 +393,6 @@
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
|
||||
/obj/item/device/timer
|
||||
name = "timer"
|
||||
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
|
||||
icon_state = "timer0"
|
||||
item_state = "electronic"
|
||||
var/timing = 0.0
|
||||
var/time = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
w_class = 2.0
|
||||
m_amt = 100
|
||||
|
||||
/obj/item/blueprints
|
||||
name = "station blueprints"
|
||||
desc = "Blueprints of the station. There's stamp \"Classified\" and several coffee stains on it."
|
||||
|
||||
@@ -1,154 +0,0 @@
|
||||
/obj/item/assembly
|
||||
name = "assembly"
|
||||
icon = 'assemblies.dmi'
|
||||
item_state = "assembly"
|
||||
var/status = 0.0
|
||||
throwforce = 10
|
||||
w_class = 3.0
|
||||
throw_speed = 4
|
||||
throw_range = 10
|
||||
|
||||
/obj/item/assembly/a_i_a
|
||||
name = "Health-Analyzer/Igniter/Armor Assembly"
|
||||
desc = "A health-analyzer, igniter and armor assembly."
|
||||
icon_state = "armor-igniter-analyzer"
|
||||
var/obj/item/device/healthanalyzer/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
var/obj/item/clothing/suit/armor/vest/part3 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/m_i_ptank
|
||||
desc = "A very intricate igniter and proximity sensor electrical assembly mounted onto top of a plasma tank."
|
||||
name = "Proximity/Igniter/Plasma Tank Assembly"
|
||||
icon_state = "prox-igniter-tank0"
|
||||
var/obj/item/device/prox_sensor/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
var/obj/item/weapon/tank/plasma/part3 = null
|
||||
status = 0.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/prox_ignite
|
||||
name = "Proximity/Igniter Assembly"
|
||||
desc = "A proximity-activated igniter assembly."
|
||||
icon_state = "prox-igniter0"
|
||||
var/obj/item/device/prox_sensor/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/r_i_ptank
|
||||
desc = "A very intricate igniter and signaller electrical assembly mounted onto top of a plasma tank."
|
||||
name = "Radio/Igniter/Plasma Tank Assembly"
|
||||
icon_state = "radio-igniter-tank"
|
||||
var/obj/item/device/radio/signaler/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
var/obj/item/weapon/tank/plasma/part3 = null
|
||||
status = 0.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/anal_ignite
|
||||
name = "Health-Analyzer/Igniter Assembly"
|
||||
desc = "A health-analyzer igniter assembly."
|
||||
icon_state = "timer-igniter0"
|
||||
var/obj/item/device/healthanalyzer/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
item_state = "electronic"
|
||||
|
||||
/obj/item/assembly/time_ignite
|
||||
name = "Timer/Igniter Assembly"
|
||||
desc = "A timer-activated igniter assembly."
|
||||
icon_state = "timer-igniter0"
|
||||
var/obj/item/device/timer/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/t_i_ptank
|
||||
desc = "A very intricate igniter and timer assembly mounted onto top of a plasma tank."
|
||||
name = "Timer/Igniter/Plasma Tank Assembly"
|
||||
icon_state = "timer-igniter-tank0"
|
||||
var/obj/item/device/timer/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
var/obj/item/weapon/tank/plasma/part3 = null
|
||||
status = 0.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/rad_ignite
|
||||
name = "Radio/Igniter Assembly"
|
||||
desc = "A radio-activated igniter assembly."
|
||||
icon_state = "radio-igniter"
|
||||
var/obj/item/device/radio/signaler/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/rad_infra
|
||||
name = "Signaller/Infrared Assembly"
|
||||
desc = "An infrared-activated radio signaller"
|
||||
icon_state = "infrared-radio0"
|
||||
var/obj/item/device/radio/signaler/part1 = null
|
||||
var/obj/item/device/infra/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/rad_prox
|
||||
name = "Signaller/Prox Sensor Assembly"
|
||||
desc = "A proximity-activated radio signaller."
|
||||
icon_state = "prox-radio0"
|
||||
var/obj/item/device/radio/signaler/part1 = null
|
||||
var/obj/item/device/prox_sensor/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/rad_time
|
||||
name = "Signaller/Timer Assembly"
|
||||
desc = "A radio signaller activated by a count-down timer."
|
||||
icon_state = "timer-radio0"
|
||||
var/obj/item/device/radio/signaler/part1 = null
|
||||
var/obj/item/device/timer/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/shock_kit
|
||||
name = "Shock Kit"
|
||||
desc = "This appears to be made from both an Electric Pack and a Helmet."
|
||||
icon_state = "shock_kit"
|
||||
var/obj/item/clothing/head/helmet/part1 = null
|
||||
var/obj/item/device/radio/electropack/part2 = null
|
||||
status = 0.0
|
||||
w_class = 5.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/weld_rod
|
||||
desc = "A welding torch with metal rods attached to the flame tip."
|
||||
name = "Welder/Rods Assembly"
|
||||
icon_state = "welder-rods"
|
||||
item_state = "welder"
|
||||
var/obj/item/weapon/weldingtool/part1 = null
|
||||
var/obj/item/stack/rods/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
force = 3.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
|
||||
/obj/item/assembly/w_r_ignite
|
||||
desc = "A welding torch and igniter connected by metal rods."
|
||||
name = "Welder/Rods/Igniter Assembly"
|
||||
icon_state = "welder-rods-igniter"
|
||||
item_state = "welder"
|
||||
var/obj/item/weapon/weldingtool/part1 = null
|
||||
var/obj/item/stack/rods/part2 = null
|
||||
var/obj/item/device/igniter/part3 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
force = 3.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
@@ -44,29 +44,6 @@
|
||||
item_state = "signaler"
|
||||
var/code = "electronic"
|
||||
|
||||
/obj/item/device/radio/electropack
|
||||
name = "Electropack"
|
||||
desc = "Dance my monkeys! DANCE!!!"
|
||||
icon_state = "electropack0"
|
||||
var/code = 2
|
||||
var/on = 0
|
||||
var/e_pads = 0.0
|
||||
frequency = 1449
|
||||
w_class = 5.0
|
||||
flags = 323
|
||||
item_state = "electropack"
|
||||
|
||||
/obj/item/device/radio/signaler
|
||||
name = "Remote Signaling Device"
|
||||
desc = "Used to remotely activate devices."
|
||||
icon_state = "signaller"
|
||||
item_state = "signaler"
|
||||
var/code = 30
|
||||
w_class = 1
|
||||
frequency = 1457
|
||||
var/delay = 0
|
||||
var/airlock_wire = null
|
||||
|
||||
/obj/item/device/radio/intercom
|
||||
name = "Station Intercom (Radio)"
|
||||
desc = "Talk through this."
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
/obj/spawner/bomb
|
||||
name = "bomb"
|
||||
icon = 'screen1.dmi'
|
||||
icon_state = "x"
|
||||
var/btype = 0 //0 = radio, 1= prox, 2=time
|
||||
var/explosive = 1 // 0= firebomb
|
||||
var/btemp = 500 // bomb temperature (degC)
|
||||
var/active = 0
|
||||
|
||||
/obj/spawner/bomb/radio
|
||||
btype = 0
|
||||
|
||||
/obj/spawner/bomb/proximity
|
||||
btype = 1
|
||||
|
||||
/obj/spawner/bomb/timer
|
||||
btype = 2
|
||||
|
||||
/obj/spawner/bomb/timer/syndicate
|
||||
btemp = 450
|
||||
|
||||
/obj/spawner/bomb/suicide
|
||||
btype = 3
|
||||
|
||||
/obj/spawner/newbomb
|
||||
name = "bomb"
|
||||
icon = 'screen1.dmi'
|
||||
icon_state = "x"
|
||||
var/btype = 0 // 0=radio, 1=prox, 2=time
|
||||
var/btemp1 = 1500
|
||||
var/btemp2 = 1000 // tank temperatures
|
||||
|
||||
timer
|
||||
btype = 2
|
||||
|
||||
syndicate
|
||||
btemp1 = 150
|
||||
btemp2 = 20
|
||||
|
||||
proximity
|
||||
btype = 1
|
||||
|
||||
radio
|
||||
btype = 0
|
||||
@@ -238,7 +238,7 @@
|
||||
|
||||
//DISABLE TECH
|
||||
|
||||
/mob/proc/tech()//Shouldnt this just use the emp() proc?
|
||||
/mob/proc/tech()
|
||||
set category = "Spells"
|
||||
set name = "Disable Technology"
|
||||
set desc = "This spell disables all weapons, cameras and most other technology in range."
|
||||
@@ -252,179 +252,8 @@
|
||||
|
||||
usr.say("NEC CANTIO")
|
||||
usr.spellvoice()
|
||||
|
||||
var/turf/myturf = get_turf(usr)
|
||||
|
||||
var/obj/overlay/pulse = new/obj/overlay ( myturf )
|
||||
pulse.icon = 'effects.dmi'
|
||||
pulse.icon_state = "emppulse"
|
||||
pulse.name = "emp pulse"
|
||||
pulse.anchored = 1
|
||||
spawn(20)
|
||||
del(pulse)
|
||||
|
||||
for(var/obj/item/weapon/W in range(world.view-1, myturf))
|
||||
|
||||
if (istype(W, /obj/item/assembly/m_i_ptank) || istype(W, /obj/item/assembly/r_i_ptank) || istype(W, /obj/item/assembly/t_i_ptank))
|
||||
|
||||
var/fuckthis
|
||||
if(istype(W:part1,/obj/item/weapon/tank/plasma))
|
||||
fuckthis = W:part1
|
||||
fuckthis:ignite()
|
||||
if(istype(W:part2,/obj/item/weapon/tank/plasma))
|
||||
fuckthis = W:part2
|
||||
fuckthis:ignite()
|
||||
if(istype(W:part3,/obj/item/weapon/tank/plasma))
|
||||
fuckthis = W:part3
|
||||
fuckthis:ignite()
|
||||
|
||||
|
||||
for(var/mob/living/M in viewers(world.view-1, myturf))
|
||||
|
||||
if(M == usr) continue
|
||||
|
||||
if (istype(M, /mob/living/silicon))
|
||||
M.take_overall_damage(0,25)
|
||||
flick("noise", M:flash)
|
||||
M << "\red <B>*BZZZT*</B>"
|
||||
M << "\red Warning: Electromagnetic pulse detected."
|
||||
if(istype(M, /mob/living/silicon/ai))
|
||||
if (prob(30))
|
||||
switch(pick(1,2))
|
||||
if(1)
|
||||
M:cancel_camera()
|
||||
if(2)
|
||||
M:ai_call_shuttle()
|
||||
continue
|
||||
|
||||
|
||||
M << "\red <B>Your equipment malfunctions.</B>" //Yeah, i realise that this WILL
|
||||
//show if theyre not carrying anything
|
||||
//that is affected. lazy.
|
||||
if (locate(/obj/item/weapon/cloaking_device, M))
|
||||
for(var/obj/item/weapon/cloaking_device/S in M)
|
||||
S.active = 0
|
||||
S.icon_state = "shield0"
|
||||
|
||||
if (locate(/obj/item/weapon/gun/energy, M))
|
||||
for(var/obj/item/weapon/gun/energy/G in M)
|
||||
G.power_supply.charge = 0
|
||||
G.update_icon()
|
||||
|
||||
if ((istype(M, /mob/living/carbon/human)) && (istype(M:glasses, /obj/item/clothing/glasses/thermal)))
|
||||
M << "\red <B>Your thermals malfunction.</B>"
|
||||
M.eye_blind = 3
|
||||
M.eye_blurry = 5
|
||||
M.disabilities |= 1
|
||||
spawn(100)
|
||||
M.disabilities &= ~1
|
||||
|
||||
if (locate(/obj/item/device/radio, M))
|
||||
for(var/obj/item/device/radio/R in M) //Add something for the intercoms.
|
||||
R.broadcasting = 0
|
||||
R.listening = 0
|
||||
|
||||
if (locate(/obj/item/device/flash, M))
|
||||
for(var/obj/item/device/flash/F in M) //Add something for the intercoms.
|
||||
F.attack_self()
|
||||
|
||||
if (locate(/obj/item/weapon/melee/baton, M))
|
||||
for(var/obj/item/weapon/melee/baton/B in M) //Add something for the intercoms.
|
||||
B.charges = 0
|
||||
|
||||
if(locate(/obj/item/clothing/under/chameleon, M))
|
||||
for(var/obj/item/clothing/under/chameleon/C in M) //Add something for the intercoms.
|
||||
M << "\red <B>Your jumpsuit malfunctions</B>"
|
||||
C.name = "psychedelic"
|
||||
C.desc = "Groovy!"
|
||||
C.icon_state = "psyche"
|
||||
C.color = "psyche"
|
||||
spawn(200)
|
||||
C.name = "Black Jumpsuit"
|
||||
C.icon_state = "bl_suit"
|
||||
C.color = "black"
|
||||
C.desc = null
|
||||
|
||||
M << "\red <B>BZZZT</B>"
|
||||
|
||||
|
||||
for(var/obj/machinery/A in range(world.view-1, myturf))
|
||||
A.use_power(7500)
|
||||
|
||||
var/obj/overlay/pulse2 = new/obj/overlay ( A.loc )
|
||||
pulse2.icon = 'effects.dmi'
|
||||
pulse2.icon_state = "empdisable"
|
||||
pulse2.name = "emp sparks"
|
||||
pulse2.anchored = 1
|
||||
pulse2.dir = pick(cardinal)
|
||||
|
||||
spawn(10)
|
||||
del(pulse2)
|
||||
|
||||
if(istype(A, /obj/machinery/turret))
|
||||
A:enabled = 0
|
||||
A:lasers = 0
|
||||
A:power_change()
|
||||
|
||||
if(istype(A, /obj/machinery/computer) && prob(20))
|
||||
A:set_broken()
|
||||
|
||||
if(istype(A, /obj/machinery/firealarm) && prob(50))
|
||||
A:alarm()
|
||||
|
||||
if(istype(A, /obj/machinery/power/smes))
|
||||
A:online = 0
|
||||
A:charging = 0
|
||||
A:output = 0
|
||||
A:charge -= 1e6
|
||||
if (A:charge < 0)
|
||||
A:charge = 0
|
||||
spawn(100)
|
||||
A:output = initial(A:output)
|
||||
A:charging = initial(A:charging)
|
||||
A:online = initial(A:online)
|
||||
|
||||
if(istype(A, /obj/machinery/door))
|
||||
if(prob(20) && (istype(A,/obj/machinery/door/airlock) || istype(A,/obj/machinery/door/window)) )
|
||||
A:open()
|
||||
if(A:secondsElectrified != 0) continue
|
||||
A:secondsElectrified = -1
|
||||
spawn(300)
|
||||
A:secondsElectrified = 0
|
||||
|
||||
if(istype(A, /obj/machinery/power/apc))
|
||||
if(A:cell)
|
||||
A:cell:charge -= 1000
|
||||
if (A:cell:charge < 0)
|
||||
A:cell:charge = 0
|
||||
A:lighting = 0
|
||||
A:equipment = 0
|
||||
A:environ = 0
|
||||
spawn(600)
|
||||
A:equipment = 3
|
||||
A:environ = 3
|
||||
|
||||
if(istype(A, /obj/machinery/camera))
|
||||
A.icon_state = "cameraemp"
|
||||
A:network = null //Not the best way but it will do. I think.
|
||||
spawn(600)
|
||||
A:network = initial(A:network)
|
||||
A:icon_state = initial(A:icon_state)
|
||||
for(var/mob/living/silicon/ai/O in world)
|
||||
if (O.current == A)
|
||||
O.cancel_camera()
|
||||
O << "Your connection to the camera has been lost."
|
||||
for(var/mob/O in world)
|
||||
if (istype(O.machine, /obj/machinery/computer/security))
|
||||
var/obj/machinery/computer/security/S = O.machine
|
||||
if (S.current == A)
|
||||
O.machine = null
|
||||
S.current = null
|
||||
O.reset_view(null)
|
||||
O << "The screen bursts into static."
|
||||
|
||||
if(istype(A, /obj/machinery/clonepod))
|
||||
A:malfunction()
|
||||
empulse(src, 6, 10, nolog=1)
|
||||
return
|
||||
|
||||
//BLINK
|
||||
|
||||
|
||||
@@ -364,4 +364,4 @@ var/list/nonhuman_positions = list(
|
||||
)
|
||||
|
||||
/proc/is_important_job(var/job)
|
||||
return (job in head_positions) || (job in list("AI", "Cyborg", "Warden", "Detective"))
|
||||
return (job in head_positions) || (job in list("AI", "Cyborg", "Warden", "Detective", "pAI"))//pAI is in here to prevent guest pAI's as they can easily ruin rounds
|
||||
|
||||
@@ -1,3 +1,28 @@
|
||||
/* The old single tank bombs that dont really work anymore
|
||||
/obj/spawner/bomb
|
||||
name = "bomb"
|
||||
icon = 'screen1.dmi'
|
||||
icon_state = "x"
|
||||
var/btype = 0 //0 = radio, 1= prox, 2=time
|
||||
var/explosive = 1 // 0= firebomb
|
||||
var/btemp = 500 // bomb temperature (degC)
|
||||
var/active = 0
|
||||
|
||||
/obj/spawner/bomb/radio
|
||||
btype = 0
|
||||
|
||||
/obj/spawner/bomb/proximity
|
||||
btype = 1
|
||||
|
||||
/obj/spawner/bomb/timer
|
||||
btype = 2
|
||||
|
||||
/obj/spawner/bomb/timer/syndicate
|
||||
btemp = 450
|
||||
|
||||
/obj/spawner/bomb/suicide
|
||||
btype = 3
|
||||
|
||||
/obj/spawner/bomb/New()
|
||||
..()
|
||||
|
||||
@@ -16,7 +41,7 @@
|
||||
p3.master = R
|
||||
R.status = explosive
|
||||
p1.b_stat = 0
|
||||
p2.status = 1
|
||||
p2.secured = 1
|
||||
p3.air_contents.temperature = btemp + T0C
|
||||
|
||||
// proximity
|
||||
@@ -34,10 +59,10 @@
|
||||
R.status = explosive
|
||||
|
||||
p3.air_contents.temperature = btemp + T0C
|
||||
p2.status = 1
|
||||
p2.secured = 1
|
||||
|
||||
if(src.active)
|
||||
R.part1.state = 1
|
||||
R.part1.secured = 1
|
||||
R.part1.icon_state = text("motion[]", 1)
|
||||
R.c_state(1, src)
|
||||
|
||||
@@ -56,7 +81,7 @@
|
||||
R.status = explosive
|
||||
|
||||
p3.air_contents.temperature = btemp + T0C
|
||||
p2.status = 1
|
||||
p2.secured = 1
|
||||
//bombvest
|
||||
if(3)
|
||||
var/obj/item/clothing/suit/armor/a_i_a_ptank/R = new /obj/item/clothing/suit/armor/a_i_a_ptank(src.loc)
|
||||
@@ -75,9 +100,31 @@
|
||||
R.status = explosive
|
||||
|
||||
p4.air_contents.temperature = btemp + T0C
|
||||
p2.status = 1
|
||||
p2.secured = 1
|
||||
|
||||
del(src)
|
||||
*/
|
||||
|
||||
/obj/spawner/newbomb
|
||||
name = "bomb"
|
||||
icon = 'screen1.dmi'
|
||||
icon_state = "x"
|
||||
var/btype = 0 // 0=radio, 1=prox, 2=time
|
||||
var/btemp1 = 1500
|
||||
var/btemp2 = 1000 // tank temperatures
|
||||
|
||||
timer
|
||||
btype = 2
|
||||
|
||||
syndicate
|
||||
btemp1 = 150
|
||||
btemp2 = 20
|
||||
|
||||
proximity
|
||||
btype = 1
|
||||
|
||||
radio
|
||||
btype = 0
|
||||
|
||||
|
||||
/obj/spawner/newbomb/New()
|
||||
@@ -97,7 +144,8 @@
|
||||
V.tank_two = OT
|
||||
V.attached_device = S
|
||||
|
||||
S.master = V
|
||||
S.holder = V
|
||||
S.Secure()
|
||||
PT.master = V
|
||||
OT.master = V
|
||||
|
||||
@@ -121,7 +169,8 @@
|
||||
V.tank_two = OT
|
||||
V.attached_device = P
|
||||
|
||||
P.master = V
|
||||
P.holder = V
|
||||
P.Secure()
|
||||
PT.master = V
|
||||
OT.master = V
|
||||
|
||||
@@ -144,7 +193,8 @@
|
||||
V.tank_two = OT
|
||||
V.attached_device = T
|
||||
|
||||
T.master = V
|
||||
T.holder = V
|
||||
T.Secure()
|
||||
PT.master = V
|
||||
OT.master = V
|
||||
T.time = 30
|
||||
@@ -585,9 +585,6 @@ Code:
|
||||
active3 = S
|
||||
|
||||
if("Send Signal")
|
||||
for(var/obj/item/assembly/r_i_ptank/R in world) //Bomblist stuff
|
||||
if((R.part1.code == src/radio:code) && (R.part1.frequency == radio:frequency))
|
||||
bombers += "[key_name(usr)] has activated a radio bomb (Freq: [format_frequency(radio:frequency)], Code: [radio:code]). Temp = [R.part3.air_contents.temperature-T0C]."
|
||||
spawn( 0 )
|
||||
radio:send_signal("ACTIVATE")
|
||||
return
|
||||
|
||||
@@ -1,149 +0,0 @@
|
||||
|
||||
/obj/item/device/igniter/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if ((istype(W, /obj/item/device/radio/signaler) && !( src.status )))
|
||||
var/obj/item/device/radio/signaler/S = W
|
||||
if (!( S.b_stat ))
|
||||
return
|
||||
var/obj/item/assembly/rad_ignite/R = new /obj/item/assembly/rad_ignite( user )
|
||||
S.loc = R
|
||||
R.part1 = S
|
||||
S.layer = initial(S.layer)
|
||||
if (user.client)
|
||||
user.client.screen -= S
|
||||
if (user.r_hand == S)
|
||||
user.u_equip(S)
|
||||
user.r_hand = R
|
||||
else
|
||||
user.u_equip(S)
|
||||
user.l_hand = R
|
||||
S.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)
|
||||
|
||||
else if ((istype(W, /obj/item/device/prox_sensor) && !( src.status )))
|
||||
|
||||
var/obj/item/assembly/prox_ignite/R = new /obj/item/assembly/prox_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)
|
||||
|
||||
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)
|
||||
else if ((istype(W, /obj/item/device/healthanalyzer) && !( src.status )))
|
||||
|
||||
var/obj/item/assembly/anal_ignite/R = new /obj/item/assembly/anal_ignite( user ) // Hehehe anal
|
||||
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)
|
||||
|
||||
if (!( istype(W, /obj/item/weapon/screwdriver) ))
|
||||
return
|
||||
src.status = !( src.status )
|
||||
if (src.status)
|
||||
user.show_message("\blue The igniter is ready!")
|
||||
else
|
||||
user.show_message("\blue The igniter can now be attached!")
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/device/igniter/attack_self(mob/user as mob)
|
||||
|
||||
src.add_fingerprint(user)
|
||||
spawn( 5 )
|
||||
ignite()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/device/igniter/proc/ignite()
|
||||
if (src.status)
|
||||
var/turf/location = src.loc
|
||||
|
||||
if (src.master)
|
||||
location = src.master.loc
|
||||
|
||||
location = get_turf(location)
|
||||
if(location)
|
||||
location.hotspot_expose(1000,1000)
|
||||
|
||||
return
|
||||
|
||||
/obj/item/device/igniter/examine()
|
||||
set src in view()
|
||||
|
||||
..()
|
||||
if ((in_range(src, usr) || src.loc == usr))
|
||||
if (src.status)
|
||||
usr.show_message("The igniter is ready!")
|
||||
else
|
||||
usr.show_message("The igniter can be attached!")
|
||||
return
|
||||
@@ -10,8 +10,8 @@
|
||||
|
||||
/obj/item/device/infra_sensor/proc/burst()
|
||||
for(var/obj/beam/i_beam/I in range(src.loc))
|
||||
I.left = 10
|
||||
for(var/obj/item/device/infra/I in range(src.loc))
|
||||
I.left = 8
|
||||
/* for(var/obj/item/device/infra/I in range(src.loc))ugh will have to fix this
|
||||
I.visible = 1
|
||||
spawn( 0 )
|
||||
if ((I && I.first))
|
||||
@@ -22,7 +22,7 @@
|
||||
spawn( 0 )
|
||||
if ((I.part2 && I.part2.first))
|
||||
I.part2.first.vis_spread(1)
|
||||
return
|
||||
return*/
|
||||
return
|
||||
|
||||
/obj/item/device/infra_sensor/attack_self(mob/user as mob)
|
||||
@@ -67,148 +67,4 @@
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/device/infra/proc/hit()
|
||||
if (src.master)
|
||||
spawn()
|
||||
var/datum/signal/signal = new
|
||||
signal.data["message"] = "ACTIVATE"
|
||||
src.master.receive_signal(signal)
|
||||
del(signal)
|
||||
return
|
||||
else
|
||||
for(var/mob/O in hearers(null, null))
|
||||
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
|
||||
return
|
||||
|
||||
/obj/item/device/infra/process()
|
||||
if(!state)
|
||||
processing_items.Remove(src)
|
||||
return null
|
||||
|
||||
if ((!( src.first ) && (src.state && (istype(src.loc, /turf) || (src.master && istype(src.master.loc, /turf))))))
|
||||
var/obj/beam/i_beam/I = new /obj/beam/i_beam( (src.master ? src.master.loc : src.loc) )
|
||||
//world << "infra spawning beam : \ref[I]"
|
||||
I.master = src
|
||||
I.density = 1
|
||||
I.dir = src.dir
|
||||
step(I, I.dir)
|
||||
if (I)
|
||||
//world << "infra: beam at [I.x] [I.y] [I.z]"
|
||||
I.density = 0
|
||||
src.first = I
|
||||
//world << "infra : vis_spread"
|
||||
I.vis_spread(src.visible)
|
||||
spawn( 0 )
|
||||
if (I)
|
||||
//world << "infra: setting limit"
|
||||
I.limit = 20
|
||||
//world << "infra: processing beam \ref[I]"
|
||||
I.process()
|
||||
return
|
||||
if (!( src.state ))
|
||||
//src.first = null
|
||||
del(src.first)
|
||||
return
|
||||
|
||||
/obj/item/device/infra/attackby(obj/item/device/radio/signaler/S as obj, mob/user as mob)
|
||||
..()
|
||||
if ((!( istype(S, /obj/item/device/radio/signaler) ) || !( S.b_stat )))
|
||||
return
|
||||
var/obj/item/assembly/rad_infra/R = new /obj/item/assembly/rad_infra( user )
|
||||
S.loc = R
|
||||
R.part1 = S
|
||||
S.layer = initial(S.layer)
|
||||
if (user.client)
|
||||
user.client.screen -= S
|
||||
if (user.r_hand == S)
|
||||
user.u_equip(S)
|
||||
user.r_hand = R
|
||||
else
|
||||
user.u_equip(S)
|
||||
user.l_hand = R
|
||||
S.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
|
||||
R.dir = src.dir
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/device/infra/attack_self(mob/user as mob)
|
||||
user.machine = src
|
||||
var/dat = text("<TT><B>Infrared Laser</B>\n<B>Status</B>: []<BR>\n<B>Visibility</B>: []<BR>\n</TT>", (src.state ? 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)))
|
||||
user << browse(dat, "window=infra")
|
||||
onclose(user, "infra")
|
||||
return
|
||||
|
||||
/obj/item/device/infra/Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat || usr.restrained())
|
||||
return
|
||||
if ((usr.contents.Find(src) || usr.contents.Find(src.master) || in_range(src, usr) && istype(src.loc, /turf)))
|
||||
usr.machine = src
|
||||
if (href_list["state"])
|
||||
src.state = !( src.state )
|
||||
src.icon_state = text("infrared[]", src.state)
|
||||
if (src.master)
|
||||
src.master:c_state(src.state, src)
|
||||
if(state)
|
||||
processing_items.Add(src)
|
||||
if (href_list["visible"])
|
||||
src.visible = !( src.visible )
|
||||
spawn( 0 )
|
||||
if (src.first)
|
||||
src.first.vis_spread(src.visible)
|
||||
return
|
||||
if (!( src.master ))
|
||||
if (istype(src.loc, /mob))
|
||||
attack_self(src.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if (M.client)
|
||||
src.attack_self(M)
|
||||
//Foreach goto(211)
|
||||
else
|
||||
if (istype(src.master.loc, /mob))
|
||||
src.attack_self(src.master.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src.master))
|
||||
if (M.client)
|
||||
src.attack_self(M)
|
||||
//Foreach goto(287)
|
||||
else
|
||||
usr << browse(null, "window=infra")
|
||||
onclose(usr, "infra")
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/device/infra/attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/item/device/infra/attack_hand()
|
||||
//src.first = null
|
||||
del(src.first)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/device/infra/Move()
|
||||
var/t = src.dir
|
||||
..()
|
||||
src.dir = t
|
||||
//src.first = null
|
||||
del(src.first)
|
||||
return
|
||||
|
||||
/obj/item/device/infra/verb/rotate()
|
||||
set name = "Rotate Infrared Laser"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
src.dir = turn(src.dir, 90)
|
||||
return
|
||||
@@ -1,171 +0,0 @@
|
||||
/obj/item/device/prox_sensor/dropped()
|
||||
spawn(0)
|
||||
src.sense()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/device/prox_sensor/proc/c_state(n)
|
||||
src.icon_state = text("motion[]", n)
|
||||
|
||||
if(src.master)
|
||||
src.master:c_state(n)
|
||||
|
||||
return
|
||||
|
||||
/obj/item/device/prox_sensor/proc/sense()
|
||||
if (src.state)
|
||||
if (src.master)
|
||||
spawn(0)
|
||||
src.master.receive_signal()
|
||||
return
|
||||
else
|
||||
for(var/mob/O in hearers(null, null))
|
||||
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
|
||||
return
|
||||
|
||||
/obj/item/device/prox_sensor/process()
|
||||
if (src.timing)
|
||||
if (src.time > 0)
|
||||
if(!src.state)
|
||||
src.c_state(2)
|
||||
src.time = round(src.time) - 1
|
||||
else
|
||||
time()
|
||||
src.time = 0
|
||||
src.timing = 0
|
||||
if (!src.master)
|
||||
if (istype(src.loc, /mob))
|
||||
attack_self(src.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if (M.client && (M.machine == src.master || M.machine == src))
|
||||
src.attack_self(M)
|
||||
else
|
||||
if (istype(src.master.loc, /mob))
|
||||
src.attack_self(src.master.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src.master))
|
||||
if (M.client && (M.machine == src.master || M.machine == src))
|
||||
src.attack_self(M)
|
||||
else
|
||||
processing_items.Remove(src)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/device/prox_sensor/proc/time()
|
||||
if (src.state == 0)
|
||||
src.state = !( src.state )
|
||||
src.icon_state = text("motion[]", src.state)
|
||||
if (src.master)
|
||||
src.master:c_state(src.state, src)
|
||||
return
|
||||
|
||||
/obj/item/device/prox_sensor/HasProximity(atom/movable/AM as mob|obj)
|
||||
if (istype(AM, /obj/beam))
|
||||
return
|
||||
if (AM.move_speed < 12)
|
||||
src.sense()
|
||||
return
|
||||
|
||||
/obj/item/device/prox_sensor/attackby(obj/item/device/radio/signaler/S as obj, mob/user as mob)
|
||||
..()
|
||||
if ((!( istype(S, /obj/item/device/radio/signaler) ) || !( S.b_stat )))
|
||||
return
|
||||
var/obj/item/assembly/rad_prox/R = new /obj/item/assembly/rad_prox( user )
|
||||
S.loc = R
|
||||
R.part1 = S
|
||||
S.layer = initial(S.layer)
|
||||
if (user.client)
|
||||
user.client.screen -= S
|
||||
if (user.r_hand == S)
|
||||
user.u_equip(S)
|
||||
user.r_hand = R
|
||||
else
|
||||
user.u_equip(S)
|
||||
user.l_hand = R
|
||||
S.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
|
||||
R.dir = src.dir
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/device/prox_sensor/attack_self(mob/user as mob)
|
||||
if (user.stat || user.restrained() || user.lying)
|
||||
return
|
||||
if ((user.contents.Find(src) || user.contents.Find(src.master) || get_dist(src, user) <= 1 && istype(src.loc, /turf)))
|
||||
user.machine = src
|
||||
var/second = src.time % 60
|
||||
var/minute = (src.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>", (src.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 += "<BR><A href='?src=\ref[src];state=1'>[state?"Armed":"Unarmed"]</A> (Movement sensor active when armed!)"
|
||||
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
|
||||
user << browse(dat, "window=prox")
|
||||
onclose(user, "prox")
|
||||
else
|
||||
user << browse(null, "window=prox")
|
||||
user.machine = null
|
||||
return
|
||||
|
||||
/obj/item/device/prox_sensor/Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat || usr.restrained() || usr.lying)
|
||||
return
|
||||
if ((usr.contents.Find(src) || usr.contents.Find(src.master) || (get_dist(src, usr) <= 1) && istype(src.loc, /turf)))
|
||||
usr.machine = src
|
||||
if (href_list["state"])
|
||||
src.state = !( src.state )
|
||||
src.icon_state = text("motion[]", src.state)
|
||||
if (src.master)
|
||||
src.master:c_state(src.state, src)
|
||||
if(state)
|
||||
processing_items.Add(src)
|
||||
|
||||
if (href_list["time"])
|
||||
src.timing = text2num(href_list["time"])
|
||||
if(timing)
|
||||
src.c_state(1)
|
||||
|
||||
if (href_list["tp"])
|
||||
var/tp = text2num(href_list["tp"])
|
||||
src.time += tp
|
||||
src.time = min(max(round(src.time), 0), 600)
|
||||
|
||||
if (href_list["close"])
|
||||
usr << browse(null, "window=prox")
|
||||
usr.machine = null
|
||||
return
|
||||
|
||||
if (!src.master)
|
||||
if (istype(src.loc, /mob))
|
||||
attack_self(src.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if (M.client && (M.machine == src.master || M.machine == src))
|
||||
src.attack_self(M)
|
||||
else
|
||||
if (istype(src.master.loc, /mob))
|
||||
src.attack_self(src.master.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src.master))
|
||||
if (M.client && (M.machine == src.master || M.machine == src))
|
||||
src.attack_self(M)
|
||||
else
|
||||
usr << browse(null, "window=prox")
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/device/prox_sensor/attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/item/device/prox_sensor/Move()
|
||||
..()
|
||||
src.sense()
|
||||
return
|
||||
@@ -9,6 +9,16 @@ PLANT ANALYZER
|
||||
MASS SPECTROMETER
|
||||
|
||||
*/
|
||||
/obj/item/device/t_scanner
|
||||
name = "T-ray scanner"
|
||||
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
|
||||
icon_state = "t-ray0"
|
||||
var/on = 0
|
||||
flags = FPRINT|ONBELT|TABLEPASS
|
||||
w_class = 2
|
||||
item_state = "electronic"
|
||||
m_amt = 150
|
||||
origin_tech = "magnets=1;engineering=1"
|
||||
|
||||
/obj/item/device/t_scanner/attack_self(mob/user)
|
||||
|
||||
@@ -49,6 +59,17 @@ MASS SPECTROMETER
|
||||
if(M)
|
||||
M.invisibility = 2
|
||||
|
||||
/obj/item/device/detective_scanner
|
||||
name = "Scanner"
|
||||
desc = "Used to scan objects for DNA and fingerprints."
|
||||
icon_state = "forensic0"
|
||||
var/amount = 20.0
|
||||
var/printing = 0.0
|
||||
w_class = 3.0
|
||||
item_state = "electronic"
|
||||
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY
|
||||
|
||||
|
||||
/obj/item/device/detective_scanner/attackby(obj/item/weapon/f_card/W as obj, mob/user as mob)
|
||||
..()
|
||||
|
||||
@@ -142,6 +163,20 @@ MASS SPECTROMETER
|
||||
//Foreach goto(186)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/healthanalyzer
|
||||
name = "Health Analyzer"
|
||||
icon_state = "health"
|
||||
item_state = "analyzer"
|
||||
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
|
||||
flags = FPRINT | ONBELT | TABLEPASS | CONDUCT
|
||||
throwforce = 3
|
||||
w_class = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 10
|
||||
m_amt = 200
|
||||
origin_tech = "magnets=1;biotech=1"
|
||||
|
||||
/obj/item/device/healthanalyzer/attack(mob/M as mob, mob/user as mob)
|
||||
if ((user.mutations & CLOWN || user.brainloss >= 60) && prob(50))
|
||||
user << text("\red You try to analyze the floor's vitals!")
|
||||
@@ -187,6 +222,21 @@ MASS SPECTROMETER
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/analyzer
|
||||
desc = "A hand-held environmental scanner which reports current gas levels."
|
||||
name = "analyzer"
|
||||
icon_state = "atmos"
|
||||
item_state = "analyzer"
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
m_amt = 30
|
||||
g_amt = 20
|
||||
origin_tech = "magnets=1;engineering=1"
|
||||
|
||||
/obj/item/device/analyzer/attack_self(mob/user as mob)
|
||||
|
||||
if (user.stat)
|
||||
|
||||
@@ -1,156 +0,0 @@
|
||||
/obj/item/device/timer/proc/time()
|
||||
src.c_state(0)
|
||||
|
||||
if (src.master)
|
||||
spawn( 0 )
|
||||
var/datum/signal/signal = new
|
||||
signal.source = src
|
||||
signal.data["message"] = "ACTIVATE"
|
||||
src.master.receive_signal(signal)
|
||||
del(signal)
|
||||
return
|
||||
else
|
||||
for(var/mob/O in hearers(null, null))
|
||||
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
|
||||
return
|
||||
|
||||
//*****RM
|
||||
|
||||
|
||||
/obj/item/device/timer/proc/c_state(n)
|
||||
src.icon_state = text("timer[]", n)
|
||||
|
||||
if(src.master)
|
||||
src.master:c_state(n)
|
||||
|
||||
return
|
||||
|
||||
//*****
|
||||
|
||||
/obj/item/device/timer/process()
|
||||
if (src.timing)
|
||||
if (src.time > 0)
|
||||
src.time = round(src.time) - 1
|
||||
if(time<5)
|
||||
src.c_state(2)
|
||||
else
|
||||
// they might increase the time while it is timing
|
||||
src.c_state(1)
|
||||
else
|
||||
time()
|
||||
src.time = 0
|
||||
src.timing = 0
|
||||
if (!src.master)
|
||||
if (istype(src.loc, /mob))
|
||||
attack_self(src.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if (M.client && (M.machine == src.master || M.machine == src))
|
||||
src.attack_self(M)
|
||||
else
|
||||
if (istype(src.master.loc, /mob))
|
||||
src.attack_self(src.master.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src.master))
|
||||
if (M.client && (M.machine == src.master || M.machine == src))
|
||||
src.attack_self(M)
|
||||
else
|
||||
// If it's not timing, reset the icon so it doesn't look like it's still about to go off.
|
||||
src.c_state(0)
|
||||
processing_items.Remove(src)
|
||||
|
||||
return
|
||||
|
||||
/obj/item/device/timer/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if (istype(W, /obj/item/device/radio/signaler) )
|
||||
var/obj/item/device/radio/signaler/S = W
|
||||
if(!S.b_stat)
|
||||
return
|
||||
|
||||
var/obj/item/assembly/rad_time/R = new /obj/item/assembly/rad_time( user )
|
||||
S.loc = R
|
||||
R.part1 = S
|
||||
S.layer = initial(S.layer)
|
||||
if (user.client)
|
||||
user.client.screen -= S
|
||||
if (user.r_hand == S)
|
||||
user.u_equip(S)
|
||||
user.r_hand = R
|
||||
else
|
||||
user.u_equip(S)
|
||||
user.l_hand = R
|
||||
S.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
|
||||
R.dir = src.dir
|
||||
src.add_fingerprint(user)
|
||||
R.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/device/timer/attack_self(mob/user as mob)
|
||||
..()
|
||||
if (user.stat || user.restrained() || user.lying)
|
||||
return
|
||||
if ((user.contents.Find(src) || user.contents.Find(src.master) || get_dist(src, user) <= 1 && istype(src.loc, /turf)))
|
||||
user.machine = src
|
||||
var/second = src.time % 60
|
||||
var/minute = (src.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>", (src.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];close=1'>Close</A>"
|
||||
user << browse(dat, "window=timer")
|
||||
onclose(user, "timer")
|
||||
else
|
||||
user << browse(null, "window=timer")
|
||||
user.machine = null
|
||||
|
||||
return
|
||||
|
||||
/obj/item/device/timer/Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat || usr.restrained() || usr.lying)
|
||||
return
|
||||
if ((usr.contents.Find(src) || usr.contents.Find(src.master) || in_range(src, usr) && istype(src.loc, /turf)))
|
||||
usr.machine = src
|
||||
if (href_list["time"])
|
||||
src.timing = text2num(href_list["time"])
|
||||
if(timing)
|
||||
src.c_state(1)
|
||||
processing_items.Add(src)
|
||||
|
||||
if (href_list["tp"])
|
||||
var/tp = text2num(href_list["tp"])
|
||||
src.time += tp
|
||||
src.time = min(max(round(src.time), 0), 600)
|
||||
|
||||
if (href_list["close"])
|
||||
usr << browse(null, "window=timer")
|
||||
usr.machine = null
|
||||
return
|
||||
|
||||
if (!src.master)
|
||||
if (istype(src.loc, /mob))
|
||||
attack_self(src.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if (M.client && (M.machine == src.master || M.machine == src))
|
||||
src.attack_self(M)
|
||||
else
|
||||
if (istype(src.master.loc, /mob))
|
||||
src.attack_self(src.master.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src.master))
|
||||
if (M.client && (M.machine == src.master || M.machine == src))
|
||||
src.attack_self(M)
|
||||
src.add_fingerprint(usr)
|
||||
else
|
||||
usr << browse(null, "window=timer")
|
||||
return
|
||||
return
|
||||
@@ -37,27 +37,36 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
|
||||
if(distance < devastation_range)
|
||||
for(var/atom/object in T.contents)
|
||||
spawn()
|
||||
if(object)
|
||||
object.ex_act(1)
|
||||
if(prob(5))
|
||||
if(T)
|
||||
T.ex_act(2)
|
||||
else
|
||||
if(T)
|
||||
T.ex_act(1)
|
||||
else if(distance < heavy_impact_range)
|
||||
for(var/atom/object in T.contents)
|
||||
spawn()
|
||||
if(object)
|
||||
object.ex_act(2)
|
||||
if(T)
|
||||
T.ex_act(2)
|
||||
else if (distance == heavy_impact_range)
|
||||
for(var/atom/object in T.contents)
|
||||
if(object)
|
||||
object.ex_act(2)
|
||||
if(prob(15) && devastation_range > 2 && heavy_impact_range > 2)
|
||||
secondaryexplosion(T, 1)
|
||||
else
|
||||
if(T)
|
||||
T.ex_act(2)
|
||||
else if(distance <= light_impact_range)
|
||||
for(var/atom/object in T.contents)
|
||||
spawn()
|
||||
if(object)
|
||||
object.ex_act(3)
|
||||
if(T)
|
||||
T.ex_act(3)
|
||||
for(var/mob/living/carbon/mob in T)
|
||||
flick("flash", mob:flash)
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
/obj/item/assembly/shock_kit
|
||||
name = "Shock Kit"
|
||||
desc = "This appears to be made from both an Electric Pack and a Helmet."
|
||||
icon_state = "shock_kit"
|
||||
var/obj/item/clothing/head/helmet/part1 = null
|
||||
var/obj/item/device/radio/electropack/part2 = null
|
||||
var/status = 0.0
|
||||
w_class = 5.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/shock_kit/Del()
|
||||
//src.part1 = null
|
||||
del(src.part1)
|
||||
@@ -4,6 +4,39 @@ GETLINEEEEEEEEEEEEEEEEEEEEE
|
||||
(well not really but it should)
|
||||
|
||||
*/
|
||||
/obj/item/assembly/weld_rod
|
||||
desc = "A welding torch with metal rods attached to the flame tip."
|
||||
name = "Welder/Rods Assembly"
|
||||
icon_state = "welder-rods"
|
||||
item_state = "welder"
|
||||
var/obj/item/weapon/weldingtool/part1 = null
|
||||
var/obj/item/stack/rods/part2 = null
|
||||
var/status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
force = 3.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
|
||||
/obj/item/assembly/w_r_ignite
|
||||
desc = "A welding torch and igniter connected by metal rods."
|
||||
name = "Welder/Rods/Igniter Assembly"
|
||||
icon_state = "welder-rods-igniter"
|
||||
item_state = "welder"
|
||||
var/obj/item/weapon/weldingtool/part1 = null
|
||||
var/obj/item/stack/rods/part2 = null
|
||||
var/obj/item/device/igniter/part3 = null
|
||||
var/status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
force = 3.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
|
||||
|
||||
//TODO:Change this over to a slightly better build system
|
||||
/obj/item/weapon/flamethrower
|
||||
name = "flamethrower"
|
||||
icon_state = "flamethrower"
|
||||
@@ -79,7 +112,7 @@ GETLINEEEEEEEEEEEEEEEEEEEEE
|
||||
|
||||
if (istype(W, /obj/item/device/igniter))
|
||||
var/obj/item/device/igniter/I = W
|
||||
if (!( I.status ))
|
||||
if (!( I.secured ))
|
||||
return
|
||||
var/obj/item/assembly/weld_rod/S = src
|
||||
var/obj/item/assembly/w_r_ignite/R = new /obj/item/assembly/w_r_ignite( user )
|
||||
@@ -127,7 +160,7 @@ GETLINEEEEEEEEEEEEEEEEEEEEE
|
||||
src.part3.loc = T
|
||||
src.part1.master = null
|
||||
src.part2.master = null
|
||||
src.part3.master = null
|
||||
src.part3.holder = null
|
||||
src.part1 = null
|
||||
src.part2 = null
|
||||
src.part3 = null
|
||||
@@ -221,7 +254,7 @@ GETLINEEEEEEEEEEEEEEEEEEEEE
|
||||
S.part2.master = R
|
||||
R.part3 = S.part3
|
||||
S.part3.loc = R
|
||||
S.part3.master = R
|
||||
S.part3.holder = R
|
||||
S.layer = initial(S.layer)
|
||||
if (user.client)
|
||||
user.client.screen -= S
|
||||
|
||||
@@ -1,3 +1,15 @@
|
||||
/obj/item/device/radio/electropack
|
||||
name = "Electropack"
|
||||
desc = "Dance my monkeys! DANCE!!!"
|
||||
icon_state = "electropack0"
|
||||
var/code = 2
|
||||
var/on = 0
|
||||
var/e_pads = 0.0
|
||||
frequency = 1449
|
||||
w_class = 5.0
|
||||
flags = 323
|
||||
item_state = "electropack"
|
||||
|
||||
/obj/item/device/radio/electropack/examine()
|
||||
set src in view()
|
||||
|
||||
|
||||
@@ -1,15 +1,91 @@
|
||||
/obj/item/device/radio/signaler
|
||||
name = "Remote Signaling Device"
|
||||
desc = "Used to remotely activate devices."
|
||||
icon = 'new_assemblies.dmi'
|
||||
icon_state = "signaller"
|
||||
item_state = "signaler"
|
||||
var/code = 30
|
||||
w_class = 1
|
||||
frequency = 1457
|
||||
var/delay = 0
|
||||
var/airlock_wire = null
|
||||
|
||||
/*
|
||||
/obj/item/device/radio/signaler/examine()
|
||||
set src in view()
|
||||
..()
|
||||
if ((in_range(src, usr) || src.loc == usr))
|
||||
if (src.b_stat)
|
||||
usr.show_message("\blue The signaler can be attached and modified!")
|
||||
var
|
||||
secured = 1
|
||||
small_icon_state_left = "signaller_left"
|
||||
small_icon_state_right = "signaller_right"
|
||||
list/small_icon_state_overlays = null
|
||||
obj/holder = null
|
||||
cooldown = 0//To prevent spam
|
||||
|
||||
proc
|
||||
Activate()//Called when this assembly is pulsed by another one
|
||||
Secure()//Code that has to happen when the assembly is ready goes here
|
||||
Unsecure()//Code that has to happen when the assembly is taken off of the ready state goes here
|
||||
Attach_Assembly(var/obj/A, var/mob/user)//Called when an assembly is attacked by another
|
||||
Process_cooldown()//Call this via spawn(10) to have it count down the cooldown var
|
||||
|
||||
|
||||
IsAssembly()
|
||||
return 1
|
||||
|
||||
|
||||
Process_cooldown()
|
||||
cooldown--
|
||||
if(cooldown <= 0) return 0
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Activate()
|
||||
if((!secured) || (cooldown > 0))
|
||||
return 0
|
||||
cooldown = 2
|
||||
send_signal()
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 0
|
||||
|
||||
|
||||
Secure()
|
||||
if(secured)
|
||||
return 0
|
||||
secured = 1
|
||||
return 1
|
||||
|
||||
|
||||
Unsecure()
|
||||
if(!secured)
|
||||
return 0
|
||||
secured = 0
|
||||
return 1
|
||||
|
||||
|
||||
Attach_Assembly(var/obj/A, var/mob/user)
|
||||
holder = new/obj/item/device/assembly_holder(get_turf(src))
|
||||
if(holder:attach(A,src,user))
|
||||
user.show_message("\blue You attach the [A.name] to the [src.name]!")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.IsAssembly())
|
||||
var/obj/item/device/D = W
|
||||
if((!D:secured) && (!src.secured))
|
||||
Attach_Assembly(D,user)
|
||||
if(isscrewdriver(W))
|
||||
if(src.secured)
|
||||
Unsecure()
|
||||
user.show_message("\blue The [src.name] can now be attached!")
|
||||
else
|
||||
usr.show_message("\blue The signaler can not be modified or attached!")
|
||||
Secure()
|
||||
user.show_message("\blue The [src.name] is ready!")
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
*/
|
||||
|
||||
/obj/item/device/radio/signaler/attack_self(mob/user as mob, flag1)
|
||||
user.machine = src
|
||||
@@ -53,23 +129,28 @@ Code:
|
||||
|
||||
|
||||
/obj/item/device/radio/signaler/receive_signal(datum/signal/signal)
|
||||
if(!signal || (signal.encryption != code))
|
||||
return
|
||||
if(cooldown > 0) return 0
|
||||
if(!signal || (signal.encryption != code)) return 0
|
||||
|
||||
if (!( src.wires & 2 ))
|
||||
return
|
||||
if(istype(src.loc, /obj/machinery/door/airlock) && src.airlock_wire && src.wires & 1)
|
||||
// world << "/obj/.../signaler/r_signal([signal]) has master = [src.master] and type [(src.master?src.master.type : "none")]"
|
||||
// world << "[src.airlock_wire] - [src] - [usr] - [signal]"
|
||||
var/obj/machinery/door/airlock/A = src.loc
|
||||
A.pulse(src.airlock_wire)
|
||||
// src.master:r_signal(signal)
|
||||
if(src.master && (src.wires & 1))
|
||||
src.master.receive_signal(signal)
|
||||
if((src.holder) && (holder.IsAssemblyHolder()) && (secured) && (src.wires & 1))
|
||||
spawn(0)
|
||||
holder:Process_Activation(src)
|
||||
return
|
||||
// src.holder.receive_signal(signal)
|
||||
|
||||
for(var/mob/O in hearers(1, src.loc))
|
||||
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/device/radio/signaler/proc/send_signal(message="ACTIVATE")
|
||||
|
||||
if(last_transmission && world.time < (last_transmission + TRANSMISSION_DELAY))
|
||||
@@ -79,6 +160,7 @@ Code:
|
||||
if (!( src.wires & 4 ))
|
||||
return
|
||||
|
||||
if((usr)&&(ismob(usr)))
|
||||
var/time = time2text(world.realtime,"hh:mm:ss")
|
||||
lastsignalers.Add("[time] <B>:</B> [usr.key] used [src] @ location ([src.loc.x],[src.loc.y],[src.loc.z]) <B>:</B> [format_frequency(frequency)]/[code]")
|
||||
|
||||
@@ -95,7 +177,7 @@ Code:
|
||||
//..()
|
||||
if (usr.stat)
|
||||
return
|
||||
if ((usr.contents.Find(src) || (usr.contents.Find(src.master) || (in_range(src, usr) && istype(src.loc, /turf)))))
|
||||
if ((usr.contents.Find(src) || (usr.contents.Find(src.holder) || (in_range(src, usr) && istype(src.loc, /turf)))))
|
||||
usr.machine = src
|
||||
if (href_list["freq"])
|
||||
..()
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
/obj/spawner/bomb/New()
|
||||
..()
|
||||
|
||||
switch (src.btype)
|
||||
// radio
|
||||
if (0)
|
||||
var/obj/item/assembly/r_i_ptank/R = new /obj/item/assembly/r_i_ptank(src.loc)
|
||||
var/obj/item/weapon/tank/plasma/p3 = new /obj/item/weapon/tank/plasma(R)
|
||||
var/obj/item/device/radio/signaler/p1 = new /obj/item/device/radio/signaler(R)
|
||||
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
|
||||
R.part1 = p1
|
||||
R.part2 = p2
|
||||
R.part3 = p3
|
||||
p1.master = R
|
||||
p2.master = R
|
||||
p3.master = R
|
||||
R.status = explosive
|
||||
p1.b_stat = 0
|
||||
p2.status = 1
|
||||
p3.air_contents.temperature = btemp + T0C
|
||||
|
||||
// proximity
|
||||
if (1)
|
||||
var/obj/item/assembly/m_i_ptank/R = new /obj/item/assembly/m_i_ptank(src.loc)
|
||||
var/obj/item/weapon/tank/plasma/p3 = new /obj/item/weapon/tank/plasma(R)
|
||||
var/obj/item/device/prox_sensor/p1 = new /obj/item/device/prox_sensor(R)
|
||||
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
|
||||
R.part1 = p1
|
||||
R.part2 = p2
|
||||
R.part3 = p3
|
||||
p1.master = R
|
||||
p2.master = R
|
||||
p3.master = R
|
||||
R.status = explosive
|
||||
|
||||
p3.air_contents.temperature = btemp +T0C
|
||||
p2.status = 1
|
||||
|
||||
if(src.active)
|
||||
R.part1.state = 1
|
||||
R.part1.icon_state = text("motion[]", 1)
|
||||
R.c_state(1, src)
|
||||
|
||||
// timer
|
||||
if (2)
|
||||
var/obj/item/assembly/t_i_ptank/R = new /obj/item/assembly/t_i_ptank(src.loc)
|
||||
var/obj/item/weapon/tank/plasma/p3 = new /obj/item/weapon/tank/plasma(R)
|
||||
var/obj/item/device/timer/p1 = new /obj/item/device/timer(R)
|
||||
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
|
||||
R.part1 = p1
|
||||
R.part2 = p2
|
||||
R.part3 = p3
|
||||
p1.master = R
|
||||
p2.master = R
|
||||
p3.master = R
|
||||
R.status = explosive
|
||||
|
||||
p3.air_contents.temperature = btemp +T0C
|
||||
p2.status = 1
|
||||
//bombvest
|
||||
if(3)
|
||||
var/obj/item/clothing/suit/armor/a_i_a_ptank/R = new /obj/item/clothing/suit/armor/a_i_a_ptank(src.loc)
|
||||
var/obj/item/weapon/tank/plasma/p4 = new /obj/item/weapon/tank/plasma(R)
|
||||
var/obj/item/device/healthanalyzer/p1 = new /obj/item/device/healthanalyzer(R)
|
||||
var/obj/item/device/igniter/p2 = new /obj/item/device/igniter(R)
|
||||
var/obj/item/clothing/suit/armor/vest/p3 = new /obj/item/clothing/suit/armor/vest(R)
|
||||
R.part1 = p1
|
||||
R.part2 = p2
|
||||
R.part3 = p3
|
||||
R.part4 = p4
|
||||
p1.master = R
|
||||
p2.master = R
|
||||
p3.master = R
|
||||
p4.master = R
|
||||
R.status = explosive
|
||||
|
||||
p4.air_contents.temperature = btemp +T0C
|
||||
p2.status = 1
|
||||
|
||||
del(src)
|
||||
@@ -388,105 +388,6 @@
|
||||
/obj/item/weapon/tank/plasma/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
..()
|
||||
if (istype(W, /obj/item/assembly/rad_ignite))
|
||||
var/obj/item/assembly/rad_ignite/S = W
|
||||
if (!( S.status ))
|
||||
return
|
||||
var/obj/item/assembly/r_i_ptank/R = new
|
||||
|
||||
R.part1 = S.part1
|
||||
S.part1.loc = R
|
||||
S.part1.master = R
|
||||
|
||||
R.part2 = S.part2
|
||||
S.part2.loc = R
|
||||
S.part2.master = R
|
||||
|
||||
src.master = R
|
||||
R.part3 = src
|
||||
|
||||
user.put_in_hand(R)
|
||||
user.before_take_item(src)
|
||||
src.loc = R
|
||||
|
||||
S.part1 = null
|
||||
S.part2 = null
|
||||
del(S)
|
||||
if (istype(W, /obj/item/assembly/prox_ignite))
|
||||
var/obj/item/assembly/prox_ignite/S = W
|
||||
if (!( S.status ))
|
||||
return
|
||||
var/obj/item/assembly/m_i_ptank/R = new
|
||||
R.part1 = S.part1
|
||||
S.part1.loc = R
|
||||
S.part1.master = R
|
||||
|
||||
R.part2 = S.part2
|
||||
S.part2.loc = R
|
||||
S.part2.master = R
|
||||
|
||||
src.master = R
|
||||
R.part3 = src
|
||||
|
||||
user.put_in_hand(R)
|
||||
user.before_take_item(src)
|
||||
src.loc = R
|
||||
|
||||
S.part1 = null
|
||||
S.part2 = null
|
||||
del(S)
|
||||
|
||||
if (istype(W, /obj/item/assembly/time_ignite))
|
||||
var/obj/item/assembly/time_ignite/S = W
|
||||
if (!( S.status ))
|
||||
return
|
||||
var/obj/item/assembly/t_i_ptank/R = new
|
||||
R.part1 = S.part1
|
||||
S.part1.loc = R
|
||||
S.part1.master = R
|
||||
|
||||
R.part2 = S.part2
|
||||
S.part2.loc = R
|
||||
S.part2.master = R
|
||||
|
||||
src.master = R
|
||||
R.part3 = src
|
||||
|
||||
user.put_in_hand(R)
|
||||
user.before_take_item(src)
|
||||
src.loc = R
|
||||
|
||||
S.part1 = null
|
||||
S.part2 = null
|
||||
del(S)
|
||||
if (istype(W, /obj/item/assembly/a_i_a))
|
||||
var/obj/item/assembly/a_i_a/S = W
|
||||
if (!( S.status ))
|
||||
return
|
||||
var/obj/item/clothing/suit/armor/a_i_a_ptank/R = new
|
||||
R.part1 = S.part1
|
||||
S.part1.loc = R
|
||||
S.part1.master = R
|
||||
|
||||
R.part2 = S.part2
|
||||
S.part2.loc = R
|
||||
S.part2.master = R
|
||||
|
||||
R.part3 = S.part3
|
||||
S.part3.loc = R
|
||||
S.part3.master = R
|
||||
|
||||
src.master = R
|
||||
R.part4 = src
|
||||
|
||||
user.put_in_hand(R)
|
||||
user.before_take_item(src)
|
||||
src.loc = R
|
||||
|
||||
S.part1 = null
|
||||
S.part2 = null
|
||||
S.part3 = null
|
||||
del(S)
|
||||
// PantsNote: More flamethrower assembly code. WOO!
|
||||
if (istype(W, /obj/item/assembly/w_r_ignite))
|
||||
var/obj/item/assembly/w_r_ignite/S = W
|
||||
|
||||
@@ -10,6 +10,11 @@
|
||||
var/valve_open = 0
|
||||
var/toggle = 1
|
||||
|
||||
proc
|
||||
Process_Activation(var/obj/item/device/D)
|
||||
|
||||
IsAssemblyHolder()
|
||||
return 1
|
||||
|
||||
attackby(obj/item/item, mob/user)
|
||||
if(istype(item, /obj/item/weapon/tank))
|
||||
@@ -29,25 +34,31 @@
|
||||
user << "\blue You attach the tank to the transfer valve!"
|
||||
|
||||
update_icon()
|
||||
|
||||
else if(istype(item, /obj/item/device/radio/signaler) || istype(item, /obj/item/device/timer) || istype(item, /obj/item/device/infra) || istype(item, /obj/item/device/prox_sensor))
|
||||
//TODO: Have this take an assemblyholder
|
||||
else if(item.IsAssembly())
|
||||
if(item:secured)
|
||||
user << "\red The device is secured!"
|
||||
return
|
||||
if(attached_device)
|
||||
user << "\red There is already an device attached to the valve, remove it first!"
|
||||
return
|
||||
|
||||
user.remove_from_mob(item)
|
||||
attached_device = item
|
||||
user.drop_item()
|
||||
item.loc = src
|
||||
user << "\blue You attach the [item] to the valve controls!"
|
||||
item.master = src
|
||||
user << "\blue You attach the [item] to the valve controls and secure it!"
|
||||
item:holder = src
|
||||
item:Secure()
|
||||
|
||||
bombers += "[key_name(user)] attached a [item] to a transfer valve."
|
||||
message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
||||
log_game("[key_name_admin(user)] attached a [item] to a transfer valve.")
|
||||
attacher = key_name(user)
|
||||
return
|
||||
|
||||
|
||||
|
||||
HasProximity(atom/movable/AM as mob|obj)
|
||||
if(!attached_device) return
|
||||
attached_device.HasProximity(AM)
|
||||
return
|
||||
|
||||
|
||||
@@ -86,7 +97,7 @@
|
||||
if(href_list["rem_device"])
|
||||
if(attached_device)
|
||||
attached_device.loc = get_turf(src)
|
||||
attached_device.master = null
|
||||
attached_device:holder = null
|
||||
attached_device = null
|
||||
update_icon()
|
||||
if(href_list["device"])
|
||||
@@ -97,7 +108,7 @@
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
|
||||
receive_signal(signal)
|
||||
Process_Activation(var/obj/item/device/D)
|
||||
if(toggle)
|
||||
toggle = 0
|
||||
toggle_valve()
|
||||
@@ -89,465 +89,6 @@
|
||||
/obj/mine/New()
|
||||
icon_state = "uglyminearmed"
|
||||
|
||||
/obj/item/assembly/proc/c_state(n, O as obj)
|
||||
return
|
||||
|
||||
//*****RM
|
||||
|
||||
/obj/item/assembly/time_ignite/premade/New()
|
||||
..()
|
||||
part1 = new(src)
|
||||
part2 = new(src)
|
||||
part1.master = src
|
||||
part2.master = src
|
||||
//part2.status = 0
|
||||
|
||||
/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()
|
||||
if (!status)
|
||||
return
|
||||
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
|
||||
src.part1.loc = T
|
||||
src.part1.master = null
|
||||
src.part1 = null
|
||||
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)
|
||||
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.part1.master = null
|
||||
src.part1 = null
|
||||
src.part2.loc = T
|
||||
src.part2.master = 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
|
||||
R.part1 = part1
|
||||
R.part1.master = R
|
||||
part1 = null
|
||||
|
||||
R.part2 = part2
|
||||
R.part2.master = R
|
||||
part2 = null
|
||||
|
||||
user.put_in_hand(R)
|
||||
user.before_take_item(W)
|
||||
R.part3 = W
|
||||
R.part3.master = R
|
||||
del(src)
|
||||
|
||||
/* WTF THIS SHIT? It is working? Shouldn't. --rastaf0
|
||||
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.part1.master = null
|
||||
src.part1 = null
|
||||
src.part2.loc = T
|
||||
src.part2.master = null
|
||||
src.part2 = null
|
||||
src.part3.loc = T
|
||||
src.part3.master = null
|
||||
src.part3 = null
|
||||
|
||||
del(src)
|
||||
return
|
||||
if (( istype(W, /obj/item/weapon/screwdriver) ))
|
||||
if (!src.status && (!part1||!part2||!part3))
|
||||
user << "\red You cannot finish the assembly, not all components are in place!"
|
||||
return
|
||||
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 name = "Rotate Assembly"
|
||||
set category = "Object"
|
||||
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)
|
||||
|
||||
if (src.part1)
|
||||
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))
|
||||
@@ -565,478 +106,6 @@
|
||||
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)
|
||||
|
||||
if (src.part1)
|
||||
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 )
|
||||
part1.sense()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/assembly/m_i_ptank/examine()
|
||||
..()
|
||||
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)
|
||||
return
|
||||
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
|
||||
var/obj/item/assembly/prox_ignite/R = new(get_turf(src.loc))
|
||||
R.part1 = src.part1
|
||||
R.part1.master = R
|
||||
R.part1.loc = R
|
||||
R.part2 = src.part2
|
||||
R.part2.master = R
|
||||
R.part2.loc = R
|
||||
if (user.get_inactive_hand()==src)
|
||||
user.put_in_inactive_hand(part3)
|
||||
else
|
||||
part3.loc = src.loc
|
||||
src.part1 = null
|
||||
src.part2 = null
|
||||
src.part3 = null
|
||||
del(src)
|
||||
return
|
||||
if (!( istype(W, /obj/item/weapon/weldingtool)&&W:welding ))
|
||||
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
|
||||
|
||||
/obj/item/assembly/m_i_ptank/emp_act(severity)
|
||||
|
||||
if(istype(part3,/obj/item/weapon/tank/plasma) && prob(100/severity))
|
||||
part3.ignite()
|
||||
..()
|
||||
|
||||
//*****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)
|
||||
return
|
||||
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
|
||||
var/obj/item/assembly/time_ignite/R = new(get_turf(src.loc))
|
||||
R.part1 = src.part1
|
||||
R.part1.master = R
|
||||
R.part1.loc = R
|
||||
R.part2 = src.part2
|
||||
R.part2.master = R
|
||||
R.part2.loc = R
|
||||
if (user.get_inactive_hand()==src)
|
||||
user.put_in_inactive_hand(part3)
|
||||
else
|
||||
part3.loc = src.loc
|
||||
src.part1 = null
|
||||
src.part2 = null
|
||||
src.part3 = null
|
||||
del(src)
|
||||
return
|
||||
if (!( istype(W, /obj/item/weapon/weldingtool) && W:welding))
|
||||
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
|
||||
if(src)
|
||||
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)
|
||||
|
||||
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/t_i_ptank/emp_act(severity)
|
||||
if(istype(part3,/obj/item/weapon/tank/plasma) && prob(100/severity))
|
||||
part3.ignite()
|
||||
..()
|
||||
|
||||
/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)
|
||||
return
|
||||
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
|
||||
var/obj/item/assembly/rad_ignite/R = new(get_turf(src.loc))
|
||||
R.part1 = src.part1
|
||||
R.part1.master = R
|
||||
R.part1.loc = R
|
||||
R.part2 = src.part2
|
||||
R.part2.master = R
|
||||
R.part2.loc = R
|
||||
if (user.get_inactive_hand()==src)
|
||||
user.put_in_inactive_hand(part3)
|
||||
else
|
||||
part3.loc = src.loc
|
||||
src.part1 = null
|
||||
src.part2 = null
|
||||
src.part3 = null
|
||||
del(src)
|
||||
return
|
||||
if (!( istype(W, /obj/item/weapon/weldingtool) && W:welding ))
|
||||
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/assembly/r_i_ptank/emp_act(severity)
|
||||
if(istype(part3,/obj/item/weapon/tank/plasma) && prob(100/severity))
|
||||
part3.ignite()
|
||||
..()
|
||||
|
||||
//*****RM
|
||||
|
||||
/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)
|
||||
return
|
||||
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
|
||||
var/obj/item/assembly/a_i_a/R = new(get_turf(src.loc))
|
||||
R.part1 = src.part1
|
||||
R.part1.master = R
|
||||
R.part1.loc = R
|
||||
R.part2 = src.part2
|
||||
R.part2.master = R
|
||||
R.part2.loc = R
|
||||
R.part3 = src.part3
|
||||
R.part3.master = R
|
||||
R.part3.loc = R
|
||||
if (user.get_inactive_hand()==src)
|
||||
user.put_in_inactive_hand(part4)
|
||||
else
|
||||
part4.loc = src.loc
|
||||
src.part1 = null
|
||||
src.part2 = null
|
||||
src.part3 = null
|
||||
src.part4 = null
|
||||
del(src)
|
||||
return
|
||||
if (( istype(W, /obj/item/weapon/weldingtool) && W:welding))
|
||||
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)
|
||||
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/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
|
||||
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
return
|
||||
return
|
||||
|
||||
/turf/ex_act(severity)
|
||||
return 0
|
||||
|
||||
/turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area)
|
||||
if (!mover || !isturf(mover.loc))
|
||||
return 1
|
||||
|
||||
@@ -133,20 +133,24 @@ var/showadminmessages = 1
|
||||
if(jobban_isbanned(M, job))
|
||||
jobs += "<a href='?src=\ref[src];jobban3=[job];jobban4=\ref[M]'><font color=red>[dd_replacetext(job, " ", " ")]</font></a> "
|
||||
else
|
||||
jobs += "<a href='?src=\ref[src];jobban3=[job];jobban4=\ref[M]'>[dd_replacetext(job, " ", " ")]</a> " //why doesn't this work the stupid cunt
|
||||
jobs += "<a href='?src=\ref[src];jobban3=[job];jobban4=\ref[M]'>[dd_replacetext(job, " ", " ")]</a> "
|
||||
|
||||
if(jobban_isbanned(M, "Captain"))
|
||||
jobs += "<a href='?src=\ref[src];jobban3=Captain;jobban4=\ref[M]'><font color=red>Captain</font></a> "
|
||||
else
|
||||
jobs += "<a href='?src=\ref[src];jobban3=Captain;jobban4=\ref[M]'>Captain</a> " //why doesn't this work the stupid cunt
|
||||
jobs += "<a href='?src=\ref[src];jobban3=Captain;jobban4=\ref[M]'>Captain</a> "
|
||||
if(jobban_isbanned(M, "Syndicate"))
|
||||
jobs += "<BR><a href='?src=\ref[src];jobban3=Syndicate;jobban4=\ref[M]'><font color=red>[dd_replacetext("Syndicate", " ", " ")]</font></a> "
|
||||
else
|
||||
jobs += "<BR><a href='?src=\ref[src];jobban3=Syndicate;jobban4=\ref[M]'>[dd_replacetext("Syndicate", " ", " ")]</a> " //why doesn't this work the stupid cunt
|
||||
jobs += "<BR><a href='?src=\ref[src];jobban3=Syndicate;jobban4=\ref[M]'>[dd_replacetext("Syndicate", " ", " ")]</a> "
|
||||
if(jobban_isbanned(M, "pAI"))
|
||||
jobs += "<BR><a href='?src=\ref[src];jobban3=pAI;jobban4=\ref[M]'><font color=red>pAI</font></a> "
|
||||
else
|
||||
jobs += "<BR><a href='?src=\ref[src];jobban3=pAI;jobban4=\ref[M]'>pAI</a> "
|
||||
|
||||
body = "<br>[jobs]<br><br>"
|
||||
dat = "<tt>[header][body]</tt>"
|
||||
usr << browse(dat, "window=jobban2;size=600x150")
|
||||
usr << browse(dat, "window=jobban2;size=600x180")
|
||||
return
|
||||
|
||||
if(href_list["jobban3"])
|
||||
@@ -1317,13 +1321,7 @@ var/showadminmessages = 1
|
||||
var/ok = 0
|
||||
switch(href_list["secretsadmin"])
|
||||
if("clear_bombs")
|
||||
for(var/obj/item/assembly/r_i_ptank/O in world)
|
||||
del(O)
|
||||
for(var/obj/item/assembly/m_i_ptank/O in world)
|
||||
del(O)
|
||||
for(var/obj/item/assembly/t_i_ptank/O in world)
|
||||
del(O)
|
||||
ok = 1
|
||||
//I do nothing
|
||||
if("list_bombers")
|
||||
var/dat = "<B>Bombing List<HR>"
|
||||
for(var/l in bombers)
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
Desc: Sorta a hack/workaround to get interfaceish things into this engine.
|
||||
To use an interface just override the proc in your object and set it to return true.
|
||||
If an object returns true for one of these it should have ALL of the commented out procs and vars defined in its class.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Name: IsAssembly
|
||||
Desc: If true is an assembly that can work with the holder
|
||||
*/
|
||||
/obj/proc/IsAssembly()
|
||||
return 0
|
||||
/*
|
||||
var
|
||||
secured = 1
|
||||
small_icon_state_left = null
|
||||
small_icon_state_right = null
|
||||
list/small_icon_state_overlays = null
|
||||
obj/holder = null
|
||||
cooldown = 0//To prevent spam
|
||||
|
||||
proc
|
||||
Activate()//Called when this assembly is pulsed by another one
|
||||
Secure()//Code that has to happen when the assembly is ready goes here
|
||||
Unsecure()//Code that has to happen when the assembly is taken off of the ready state goes here
|
||||
Attach_Assembly(var/obj/A, var/mob/user)//Called when an assembly is attacked by another
|
||||
Process_cooldown()//Call this via spawn(10) to have it count down the cooldown var
|
||||
|
||||
|
||||
IsAssembly()
|
||||
return 1
|
||||
|
||||
|
||||
Process_cooldown()
|
||||
cooldown--
|
||||
if(cooldown <= 0) return 0
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Activate()
|
||||
if((!secured) || (cooldown > 0))//Make sure to add something using cooldown or such to prevent spam
|
||||
return 0
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 0
|
||||
|
||||
|
||||
Secure()
|
||||
if(secured)
|
||||
return 0
|
||||
secured = 1
|
||||
return 1
|
||||
|
||||
|
||||
Unsecure()
|
||||
if(!secured)
|
||||
return 0
|
||||
secured = 0
|
||||
return 1
|
||||
|
||||
|
||||
Attach_Assembly(var/obj/A, var/mob/user)
|
||||
holder = new/obj/item/device/assembly_holder(get_turf(src))
|
||||
if(holder:attach(A,src,user))
|
||||
user.show_message("\blue You attach the [A.name] to the [src.name]!")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.IsAssembly())
|
||||
var/obj/item/device/D = W
|
||||
if((!D:secured) && (!src.secured))
|
||||
Attach_Assembly(D,user)
|
||||
if(isscrewdriver(W))
|
||||
if(src.secured)
|
||||
Unsecure()
|
||||
user.show_message("\blue The [src.name] can now be attached!")
|
||||
else
|
||||
Secure()
|
||||
user.show_message("\blue The [src.name] is ready!")
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
*/
|
||||
|
||||
/*
|
||||
Name: IsAssemblyHolder
|
||||
Desc: If true is an object that can hold an assemblyholder object
|
||||
*/
|
||||
/obj/proc/IsAssemblyHolder()
|
||||
return 0
|
||||
/*
|
||||
proc
|
||||
Process_Activation(var/obj/item/device/D)
|
||||
*/
|
||||
|
||||
172
code/modules/assembly/holder.dm
Normal file
172
code/modules/assembly/holder.dm
Normal file
@@ -0,0 +1,172 @@
|
||||
/obj/item/device/assembly_holder
|
||||
name = "Assembly"
|
||||
desc = "Holds various devices"//Fix this by adding dynamic desc
|
||||
icon = 'new_assemblies.dmi'
|
||||
icon_state = "holder"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
item_state = "electronic"
|
||||
m_amt = 100
|
||||
throwforce = 5
|
||||
w_class = 1.0
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
|
||||
var
|
||||
secured = 0
|
||||
obj/item/device/assembly_left = null
|
||||
obj/item/device/assembly_right = null
|
||||
//The "other" thing will go here
|
||||
|
||||
proc
|
||||
attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
|
||||
Process_Activation(var/obj/item/device/D)
|
||||
|
||||
|
||||
IsAssemblyHolder()
|
||||
return 1
|
||||
|
||||
|
||||
attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
|
||||
if((!D)||(!D2)) return 0
|
||||
if((!D.IsAssembly())||(!D2.IsAssembly())) return 0
|
||||
if((D:secured)||(D2:secured)) return 0
|
||||
if(user)
|
||||
user.remove_from_mob(D)
|
||||
user.remove_from_mob(D2)
|
||||
D:holder = src
|
||||
D2:holder = src
|
||||
D.loc = src
|
||||
D2.loc = src
|
||||
assembly_left = D
|
||||
assembly_right = D2
|
||||
src.name = "[D.name] [D2.name] assembly"
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
|
||||
update_icon()
|
||||
src.overlays = null
|
||||
if(assembly_left)
|
||||
src.overlays += assembly_left:small_icon_state_left
|
||||
for(var/O in assembly_left:small_icon_state_overlays)
|
||||
src.overlays += text("[]_l", O)
|
||||
if(assembly_right)
|
||||
src.overlays += assembly_right:small_icon_state_right
|
||||
for(var/O in assembly_right:small_icon_state_overlays)
|
||||
src.overlays += text("[]_r", O)
|
||||
// if(other)
|
||||
// other.update_icon()
|
||||
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
if ((in_range(src, usr) || src.loc == usr))
|
||||
if (src.secured)
|
||||
usr.show_message("The [src.name] is ready!")
|
||||
else
|
||||
usr.show_message("The [src.name] can be attached!")
|
||||
return
|
||||
|
||||
|
||||
HasProximity(atom/movable/AM as mob|obj)
|
||||
if(!assembly_left || !assembly_right) return 0
|
||||
assembly_left.HasProximity(AM)
|
||||
assembly_right.HasProximity(AM)
|
||||
|
||||
|
||||
Move()//I dont like this but it will do for now
|
||||
var/t = src.dir
|
||||
..()
|
||||
if(istype(assembly_left,/obj/item/device/infra))
|
||||
assembly_left.dir = t
|
||||
del(assembly_left:first)
|
||||
if(istype(assembly_right,/obj/item/device/infra))
|
||||
assembly_right.dir = t
|
||||
del(assembly_right:first)
|
||||
return
|
||||
|
||||
|
||||
attack_hand()//I dont like this one either
|
||||
if(istype(assembly_left,/obj/item/device/infra))
|
||||
del(assembly_left:first)
|
||||
if(istype(assembly_right,/obj/item/device/infra))
|
||||
del(assembly_right:first)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(isscrewdriver(W))
|
||||
if(!assembly_left || !assembly_right)
|
||||
user.show_message("\red Assembly part missing!")
|
||||
return
|
||||
if(src.secured)
|
||||
src.secured = 0
|
||||
assembly_left:Unsecure()
|
||||
assembly_right:Unsecure()
|
||||
user.show_message("\blue The [src.name] can now be taken apart!")
|
||||
else
|
||||
src.secured = 1
|
||||
assembly_left:Secure()
|
||||
assembly_right:Secure()
|
||||
user.show_message("\blue The [src.name] is ready!")
|
||||
update_icon()
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
if(src.secured)
|
||||
if(!assembly_left || !assembly_right)
|
||||
user.show_message("\red Assembly part missing!")
|
||||
return
|
||||
if(istype(assembly_left,assembly_right.type))//If they are the same type it causes issues due to window code
|
||||
switch(alert("Which side would you like to use?",,"Left","Right"))
|
||||
if("Left")
|
||||
assembly_left.attack_self(user)
|
||||
if("Right")
|
||||
assembly_right.attack_self(user)
|
||||
return
|
||||
else
|
||||
assembly_left.attack_self(user)
|
||||
assembly_right.attack_self(user)
|
||||
else
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T) return 0
|
||||
if(assembly_left)
|
||||
assembly_left:holder = null
|
||||
assembly_left.loc = T
|
||||
if(assembly_right)
|
||||
assembly_right:holder = null
|
||||
assembly_right.loc = T
|
||||
spawn(0)
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
Process_Activation(var/obj/item/device/D)
|
||||
if(!D) return 0
|
||||
if(assembly_left == D)
|
||||
assembly_right:Activate()
|
||||
//If anymore things can be on a holder this will have to be edited
|
||||
else if(assembly_right == D)
|
||||
assembly_left:Activate()
|
||||
// else if(assemblyother == D)
|
||||
// assembly_left.Activate()
|
||||
// assembly_right.Activate()
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
110
code/modules/assembly/igniter.dm
Normal file
110
code/modules/assembly/igniter.dm
Normal file
@@ -0,0 +1,110 @@
|
||||
/obj/item/device/igniter
|
||||
name = "igniter"
|
||||
desc = "A small electronic device able to ignite combustable substances. Does not function well as a lighter."
|
||||
icon = 'new_assemblies.dmi'
|
||||
icon_state = "igniter"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
item_state = "electronic"
|
||||
m_amt = 100
|
||||
throwforce = 5
|
||||
w_class = 1.0
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
|
||||
var
|
||||
secured = 1
|
||||
small_icon_state_left = "igniter_left"
|
||||
small_icon_state_right = "igniter_right"
|
||||
list/small_icon_state_overlays = null
|
||||
obj/holder = null
|
||||
cooldown = 0
|
||||
|
||||
proc
|
||||
Activate()//Called when this assembly is pulsed by another one
|
||||
Secure()
|
||||
Unsecure()
|
||||
Attach_Assembly(var/obj/A, var/mob/user)
|
||||
Process_cooldown()
|
||||
|
||||
|
||||
IsAssembly()
|
||||
return 1
|
||||
|
||||
|
||||
Process_cooldown()
|
||||
src.cooldown--
|
||||
if(src.cooldown <= 0) return 0
|
||||
spawn(10)
|
||||
src.Process_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Activate()
|
||||
if((!secured) || (cooldown > 0))
|
||||
return 0
|
||||
var/turf/location = get_turf(src.loc)
|
||||
if(location)
|
||||
location.hotspot_expose(1000,1000)
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Secure()
|
||||
if(secured)
|
||||
return 0
|
||||
secured = 1
|
||||
return 1
|
||||
|
||||
|
||||
Unsecure()
|
||||
if(!secured)
|
||||
return 0
|
||||
secured = 0
|
||||
return 1
|
||||
|
||||
|
||||
Attach_Assembly(var/obj/A, var/mob/user)
|
||||
holder = new/obj/item/device/assembly_holder(get_turf(src))
|
||||
if(holder:attach(A,src,user))
|
||||
user.show_message("\blue You attach the [A.name] to the [src.name]!")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.IsAssembly())
|
||||
var/obj/item/device/D = W
|
||||
if((!D:secured) && (!src.secured))
|
||||
Attach_Assembly(D,user)
|
||||
if(isscrewdriver(W))
|
||||
if(src.secured)
|
||||
Unsecure()
|
||||
user.show_message("\blue The [src.name] can now be attached!")
|
||||
else
|
||||
Secure()
|
||||
user.show_message("\blue The [src.name] is ready!")
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
spawn( 5 )
|
||||
Activate()
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
if ((in_range(src, usr) || src.loc == usr))
|
||||
if (src.secured)
|
||||
usr.show_message("The [src.name] is ready!")
|
||||
else
|
||||
usr.show_message("The [src.name] can be attached!")
|
||||
return
|
||||
338
code/modules/assembly/infrared.dm
Normal file
338
code/modules/assembly/infrared.dm
Normal file
@@ -0,0 +1,338 @@
|
||||
/obj/item/device/infra
|
||||
name = "Infrared Beam"
|
||||
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
|
||||
icon = 'new_assemblies.dmi'
|
||||
icon_state = "infrared_old"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
w_class = 2.0
|
||||
item_state = "electronic"
|
||||
m_amt = 150
|
||||
origin_tech = "magnets=2"
|
||||
var
|
||||
secured = 0
|
||||
small_icon_state_left = "infrared_left"
|
||||
small_icon_state_right = "infrared_right"
|
||||
list/small_icon_state_overlays = null
|
||||
obj/holder = null
|
||||
cooldown = 0//To prevent spam
|
||||
scanning = 0
|
||||
visible = 0
|
||||
obj/beam/i_beam/first = null
|
||||
|
||||
proc
|
||||
Activate()//Called when this assembly is pulsed by another one
|
||||
Secure()//Code that has to happen when the assembly is ready goes here
|
||||
Unsecure()//Code that has to happen when the assembly is taken off of the ready state goes here
|
||||
Attach_Assembly(var/obj/A, var/mob/user)//Called when an assembly is attacked by another
|
||||
Process_cooldown()//Call this via spawn(10) to have it count down the cooldown var
|
||||
beam_trigger()
|
||||
|
||||
|
||||
IsAssembly()
|
||||
return 1
|
||||
|
||||
|
||||
Process_cooldown()
|
||||
cooldown--
|
||||
if(cooldown <= 0) return 0
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Activate()
|
||||
if((!secured) || (cooldown > 0))
|
||||
return 0
|
||||
cooldown = 2
|
||||
src.scanning = !src.scanning
|
||||
update_icon()
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 0
|
||||
|
||||
|
||||
Secure()
|
||||
if(secured)
|
||||
return 0
|
||||
secured = 1
|
||||
processing_items.Add(src)//removal is taken care of it process()
|
||||
return 1
|
||||
|
||||
|
||||
Unsecure()
|
||||
if(!secured)
|
||||
return 0
|
||||
secured = 0
|
||||
return 1
|
||||
|
||||
|
||||
Attach_Assembly(var/obj/A, var/mob/user)
|
||||
holder = new/obj/item/device/assembly_holder(get_turf(src))
|
||||
if(holder:attach(A,src,user))
|
||||
user.show_message("\blue You attach the [A.name] to the [src.name]!")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.IsAssembly())
|
||||
var/obj/item/device/D = W
|
||||
if((!D:secured) && (!src.secured))
|
||||
Attach_Assembly(D,user)
|
||||
if(isscrewdriver(W))
|
||||
if(src.secured)
|
||||
Unsecure()
|
||||
user.show_message("\blue The [src.name] can now be attached!")
|
||||
else
|
||||
Secure()
|
||||
user.show_message("\blue The [src.name] is ready!")
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
update_icon()
|
||||
src.overlays = null
|
||||
src.small_icon_state_overlays = list()
|
||||
if(scanning)
|
||||
src.overlays += text("infrared_old2")
|
||||
src.small_icon_state_overlays += text("infrared_on")
|
||||
|
||||
if(holder)
|
||||
holder.update_icon()
|
||||
return
|
||||
|
||||
|
||||
process()
|
||||
if(!scanning)
|
||||
if(!src.first)
|
||||
del(src.first)
|
||||
|
||||
if ((!( src.first ) && (src.secured && (istype(src.loc, /turf) || (src.holder && istype(src.holder.loc, /turf))))))
|
||||
var/obj/beam/i_beam/I = new /obj/beam/i_beam( (src.holder ? src.holder.loc : src.loc) )
|
||||
I.master = src
|
||||
I.density = 1
|
||||
I.dir = src.dir
|
||||
step(I, I.dir)
|
||||
if (I)
|
||||
I.density = 0
|
||||
src.first = I
|
||||
I.vis_spread(src.visible)
|
||||
spawn( 0 )
|
||||
if (I)
|
||||
//world << "infra: setting limit"
|
||||
I.limit = 8
|
||||
//world << "infra: processing beam \ref[I]"
|
||||
I.process()
|
||||
return
|
||||
|
||||
if(!secured)
|
||||
processing_items.Remove(src)
|
||||
return
|
||||
|
||||
|
||||
attack_hand()
|
||||
del(src.first)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
Move()
|
||||
var/t = src.dir
|
||||
..()
|
||||
src.dir = t
|
||||
del(src.first)
|
||||
return
|
||||
|
||||
|
||||
beam_trigger()
|
||||
if((!secured)||(!scanning)||(cooldown > 0)) return 0
|
||||
if((holder)&&(holder.IsAssemblyHolder()))
|
||||
spawn(0)
|
||||
holder:Process_Activation(src)
|
||||
return
|
||||
for(var/mob/O in hearers(null, null))
|
||||
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
if(!secured) return
|
||||
user.machine = src
|
||||
var/dat = text("<TT><B>Infrared Laser</B>\n<B>Status</B>: []<BR>\n<B>Visibility</B>: []<BR>\n</TT>", (src.scanning ? 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)))
|
||||
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")
|
||||
onclose(user, "infra")
|
||||
return
|
||||
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if(get_dist(src, usr) <= 1)
|
||||
if (href_list["state"])
|
||||
src.scanning = !(src.scanning)
|
||||
update_icon()
|
||||
|
||||
if (href_list["visible"])
|
||||
src.visible = !(src.visible)
|
||||
spawn( 0 )
|
||||
if (src.first)
|
||||
src.first.vis_spread(src.visible)
|
||||
|
||||
if (href_list["close"])
|
||||
usr << browse(null, "window=infra")
|
||||
return
|
||||
|
||||
if(usr)
|
||||
src.attack_self(usr)
|
||||
|
||||
else
|
||||
usr << browse(null, "window=infra")
|
||||
onclose(usr, "infra")
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
verb/rotate()//This really could be better but I dont want to redo it right now
|
||||
set name = "Rotate Infrared Laser"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
src.dir = turn(src.dir, 90)
|
||||
return
|
||||
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
if ((in_range(src, usr) || src.loc == usr))
|
||||
if (src.secured)
|
||||
usr.show_message("The [src.name] is ready!")
|
||||
else
|
||||
usr.show_message("The [src.name] can be attached!")
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/***************************IBeam*********************************/
|
||||
|
||||
/obj/beam/i_beam
|
||||
name = "i beam"
|
||||
icon = 'projectiles.dmi'
|
||||
icon_state = "ibeam"
|
||||
var/obj/beam/i_beam/next = null
|
||||
var/obj/item/device/infra/master = null
|
||||
var/limit = null
|
||||
var/visible = 0.0
|
||||
var/left = null
|
||||
// var/master = null
|
||||
anchored = 1.0
|
||||
flags = TABLEPASS
|
||||
|
||||
|
||||
/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.beam_trigger()
|
||||
//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
|
||||
217
code/modules/assembly/proximity.dm
Normal file
217
code/modules/assembly/proximity.dm
Normal file
@@ -0,0 +1,217 @@
|
||||
/obj/item/device/prox_sensor
|
||||
name = "proximity sensor"
|
||||
desc = "Used for scanning and alerting when someone enters a certain proximity."
|
||||
icon = 'new_assemblies.dmi'
|
||||
icon_state = "prox"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
w_class = 2.0
|
||||
item_state = "electronic"
|
||||
m_amt = 300
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
var
|
||||
secured = 0
|
||||
small_icon_state_left = "prox_left"
|
||||
small_icon_state_right = "prox_right"
|
||||
list/small_icon_state_overlays = null
|
||||
obj/holder = null
|
||||
scanning = 0
|
||||
cooldown = 0//To prevent spam
|
||||
timing = 0
|
||||
time = 0
|
||||
|
||||
proc
|
||||
Activate()//Called when this assembly is pulsed by another one
|
||||
Secure()//Code that has to happen when the assembly is ready goes here
|
||||
Unsecure()//Code that has to happen when the assembly is taken off of the ready state goes here
|
||||
Attach_Assembly(var/obj/A, var/mob/user)//Called when an assembly is attacked by another
|
||||
Process_cooldown()//Call this via spawn(10) to have it count down the cooldown var
|
||||
toggle_scan()
|
||||
sense()
|
||||
|
||||
|
||||
IsAssembly()
|
||||
return 1
|
||||
|
||||
|
||||
Process_cooldown()
|
||||
src.cooldown--
|
||||
if(src.cooldown <= 0) return 0
|
||||
spawn(10)
|
||||
src.Process_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Activate()
|
||||
if((!secured) || (cooldown > 0))
|
||||
return 0
|
||||
cooldown = 2
|
||||
src.timing = !src.timing
|
||||
update_icon()
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 0
|
||||
|
||||
|
||||
Secure()
|
||||
if(secured) return 0
|
||||
secured = 1
|
||||
processing_items.Add(src)//removal is taken care of it process()
|
||||
return 1
|
||||
|
||||
|
||||
Unsecure()
|
||||
if(!secured) return 0
|
||||
secured = 0
|
||||
return 1
|
||||
|
||||
|
||||
Attach_Assembly(var/obj/A, var/mob/user)
|
||||
holder = new/obj/item/device/assembly_holder(get_turf(src))
|
||||
if(holder:attach(A,src,user))
|
||||
user.show_message("\blue You attach the [A.name] to the [src.name]!")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.IsAssembly())
|
||||
var/obj/item/device/D = W
|
||||
if((!D:secured) && (!src.secured))
|
||||
Attach_Assembly(D,user)
|
||||
if(isscrewdriver(W))
|
||||
if(src.secured)
|
||||
Unsecure()
|
||||
user.show_message("\blue The [src.name] can now be attached!")
|
||||
else
|
||||
Secure()
|
||||
user.show_message("\blue The [src.name] is ready!")
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
HasProximity(atom/movable/AM as mob|obj)
|
||||
if (istype(AM, /obj/beam))
|
||||
return
|
||||
if (AM.move_speed < 12)
|
||||
src.sense()
|
||||
return
|
||||
|
||||
|
||||
sense()
|
||||
if((!secured)||(!scanning)||(cooldown > 0)) return 0
|
||||
if((holder)&&(holder.IsAssemblyHolder()))
|
||||
spawn(0)
|
||||
holder:Process_Activation(src)
|
||||
return
|
||||
for(var/mob/O in hearers(null, null))
|
||||
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return
|
||||
|
||||
|
||||
process()
|
||||
if((src.timing) && (src.time >= 0))
|
||||
src.time--
|
||||
if(src.time <= 0)
|
||||
src.timing = 0
|
||||
src.time = 0
|
||||
toggle_scan()
|
||||
|
||||
if(!secured)
|
||||
if(scanning)
|
||||
scanning = 0
|
||||
src.timing = 0
|
||||
processing_items.Remove(src)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
dropped()
|
||||
spawn(0)
|
||||
src.sense()
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
toggle_scan()
|
||||
if(!secured) return 0
|
||||
scanning = !scanning
|
||||
update_icon()
|
||||
|
||||
|
||||
update_icon()
|
||||
src.overlays = null
|
||||
src.small_icon_state_overlays = list()
|
||||
if(timing)
|
||||
src.overlays += text("prox_timing")
|
||||
src.small_icon_state_overlays += text("prox_timing")
|
||||
if(scanning)
|
||||
src.overlays += text("prox_scanning")
|
||||
src.small_icon_state_overlays += text("prox_scanning")
|
||||
if(holder)
|
||||
holder.update_icon()
|
||||
return
|
||||
|
||||
|
||||
Move()
|
||||
..()
|
||||
src.sense()
|
||||
return
|
||||
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
if ((in_range(src, usr) || src.loc == usr))
|
||||
if (src.secured)
|
||||
usr.show_message("The [src.name] is ready!")
|
||||
else
|
||||
usr.show_message("The [src.name] can be attached!")
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
if(!secured)
|
||||
user.show_message("\red The [src.name] is unsecured!")
|
||||
return 0
|
||||
var/second = src.time % 60
|
||||
var/minute = (src.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>", (src.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 += "<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>"
|
||||
user << browse(dat, "window=prox")
|
||||
onclose(user, "prox")
|
||||
return
|
||||
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if(get_dist(src, usr) <= 1)
|
||||
if (href_list["scanning"])
|
||||
toggle_scan()
|
||||
|
||||
if (href_list["time"])
|
||||
src.timing = text2num(href_list["time"])
|
||||
update_icon()
|
||||
|
||||
if (href_list["tp"])
|
||||
var/tp = text2num(href_list["tp"])
|
||||
src.time += tp
|
||||
src.time = min(max(round(src.time), 0), 600)
|
||||
|
||||
if (href_list["close"])
|
||||
usr << browse(null, "window=prox")
|
||||
return
|
||||
|
||||
if(usr)
|
||||
src.attack_self(usr)
|
||||
|
||||
else
|
||||
usr << browse(null, "window=prox")
|
||||
return
|
||||
2
code/modules/assembly/signaler.dm
Normal file
2
code/modules/assembly/signaler.dm
Normal file
@@ -0,0 +1,2 @@
|
||||
//Signalers are now an assembly item, not sure if I should put it in here.
|
||||
//Currently in game/objects/radio/signaler.dm
|
||||
180
code/modules/assembly/timer.dm
Normal file
180
code/modules/assembly/timer.dm
Normal file
@@ -0,0 +1,180 @@
|
||||
/obj/item/device/timer
|
||||
name = "timer"
|
||||
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
|
||||
icon = 'new_assemblies.dmi'
|
||||
icon_state = "timer"
|
||||
item_state = "electronic"
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
w_class = 2.0
|
||||
m_amt = 100
|
||||
var
|
||||
secured = 0
|
||||
small_icon_state_left = "timer_left"
|
||||
small_icon_state_right = "timer_right"
|
||||
list/small_icon_state_overlays = null
|
||||
obj/holder = null
|
||||
cooldown = 0//To prevent spam
|
||||
timing = 0
|
||||
time = 0
|
||||
|
||||
proc
|
||||
Activate()//Called when this assembly is pulsed by another one
|
||||
Secure()//Code that has to happen when the assembly is ready goes here
|
||||
Unsecure()//Code that has to happen when the assembly is taken off of the ready state goes here
|
||||
Attach_Assembly(var/obj/A, var/mob/user)//Called when an assembly is attacked by another
|
||||
Process_cooldown()//Call this via spawn(10) to have it count down the cooldown var
|
||||
timer_end()
|
||||
|
||||
IsAssembly()
|
||||
return 1
|
||||
|
||||
|
||||
Process_cooldown()
|
||||
cooldown--
|
||||
if(cooldown <= 0) return 0
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 1
|
||||
|
||||
|
||||
Activate()
|
||||
if((!secured) || (cooldown > 0))
|
||||
return 0
|
||||
cooldown = 2
|
||||
src.timing = !src.timing
|
||||
update_icon()
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return 0
|
||||
|
||||
|
||||
Secure()
|
||||
if(secured)
|
||||
return 0
|
||||
processing_items.Add(src)//removal is taken care of it process()
|
||||
secured = 1
|
||||
return 1
|
||||
|
||||
|
||||
Unsecure()
|
||||
if(!secured)
|
||||
return 0
|
||||
secured = 0
|
||||
return 1
|
||||
|
||||
|
||||
Attach_Assembly(var/obj/A, var/mob/user)
|
||||
holder = new/obj/item/device/assembly_holder(get_turf(src))
|
||||
if(holder:attach(A,src,user))
|
||||
user.show_message("\blue You attach the [A.name] to the [src.name]!")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(W.IsAssembly())
|
||||
var/obj/item/device/D = W
|
||||
if((!D:secured) && (!src.secured))
|
||||
Attach_Assembly(D,user)
|
||||
if(isscrewdriver(W))
|
||||
if(src.secured)
|
||||
Unsecure()
|
||||
user.show_message("\blue The [src.name] can now be attached!")
|
||||
else
|
||||
Secure()
|
||||
user.show_message("\blue The [src.name] is ready!")
|
||||
return
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
timer_end()
|
||||
if((!secured)||(cooldown > 0)) return 0
|
||||
if((holder)&&(holder.IsAssemblyHolder()))
|
||||
spawn(0)
|
||||
holder:Process_Activation(src)
|
||||
return
|
||||
for(var/mob/O in hearers(null, null))
|
||||
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
|
||||
cooldown = 2
|
||||
spawn(10)
|
||||
Process_cooldown()
|
||||
return
|
||||
|
||||
|
||||
process()
|
||||
if((src.timing) && (src.time >= 0))
|
||||
src.time--
|
||||
if(src.time <= 0)
|
||||
src.timing = 0
|
||||
src.time = 0
|
||||
timer_end()
|
||||
update_icon()
|
||||
|
||||
if(!secured)
|
||||
src.timing = 0
|
||||
processing_items.Remove(src)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
update_icon()
|
||||
src.overlays = null
|
||||
src.small_icon_state_overlays = list()
|
||||
if(timing)
|
||||
src.overlays += text("timer_timing")
|
||||
src.small_icon_state_overlays += text("timer_timing")
|
||||
if(holder)
|
||||
holder.update_icon()
|
||||
return
|
||||
|
||||
|
||||
examine()
|
||||
set src in view()
|
||||
..()
|
||||
if ((in_range(src, usr) || src.loc == usr))
|
||||
if (src.secured)
|
||||
usr.show_message("The [src.name] is ready!")
|
||||
else
|
||||
usr.show_message("The [src.name] can be attached!")
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
if(!secured)
|
||||
user.show_message("\red The [src.name] is unsecured!")
|
||||
return 0
|
||||
var/second = src.time % 60
|
||||
var/minute = (src.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>", (src.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>"
|
||||
user << browse(dat, "window=timer")
|
||||
onclose(user, "timer")
|
||||
return
|
||||
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if(get_dist(src, usr) <= 1)
|
||||
|
||||
if (href_list["time"])
|
||||
src.timing = text2num(href_list["time"])
|
||||
update_icon()
|
||||
|
||||
if (href_list["tp"])
|
||||
var/tp = text2num(href_list["tp"])
|
||||
src.time += tp
|
||||
src.time = min(max(round(src.time), 0), 600)
|
||||
|
||||
if (href_list["close"])
|
||||
usr << browse(null, "window=timer")
|
||||
return
|
||||
|
||||
if(usr)
|
||||
src.attack_self(usr)
|
||||
|
||||
else
|
||||
usr << browse(null, "window=timer")
|
||||
return
|
||||
@@ -28,8 +28,8 @@
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/assembly/time_ignite) && !stage && path != 2)
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)//TODO:Have grenades use the new assembly things
|
||||
if(istype(W,/obj/item/device/assembly_holder) && !stage && path != 2)
|
||||
path = 1
|
||||
user << "\blue You add [W] to the metal casing."
|
||||
playsound(src.loc, 'Screwdriver2.ogg', 25, -3)
|
||||
|
||||
@@ -161,6 +161,8 @@ var/datum/paiController/paiController // Global handler for pAI candidates
|
||||
|
||||
proc/requestRecruits()
|
||||
for(var/mob/dead/observer/O in world)
|
||||
if(jobban_isbanned(O, "pAI"))
|
||||
continue
|
||||
if(asked.Find(O.key))
|
||||
if(world.time < asked[O.key] + askDelay)
|
||||
continue
|
||||
|
||||
@@ -1269,6 +1269,8 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
|
||||
onclose(user, "mob[name]")
|
||||
return
|
||||
|
||||
|
||||
|
||||
/mob/proc/u_equip(W as obj)
|
||||
if (W == r_hand)
|
||||
r_hand = null
|
||||
@@ -1280,8 +1282,18 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
|
||||
back = null
|
||||
else if (W == wear_mask)
|
||||
wear_mask = null
|
||||
|
||||
update_clothing()
|
||||
return
|
||||
|
||||
|
||||
//Attemps to remove an object on a mob. Will not move it to another area or such, just removes from the mob.
|
||||
/mob/proc/remove_from_mob(var/obj/O)
|
||||
src.u_equip(O)
|
||||
if (src.client)
|
||||
src.client.screen -= O
|
||||
O.layer = initial(O.layer)
|
||||
O.screen_loc = null
|
||||
return 1
|
||||
|
||||
|
||||
/mob/proc/ret_grab(obj/list_container/mobl/L as obj, flag)
|
||||
|
||||
951
code/unused/assemblies.dm
Normal file
951
code/unused/assemblies.dm
Normal file
@@ -0,0 +1,951 @@
|
||||
/*/obj/item/assembly
|
||||
name = "assembly"
|
||||
icon = 'assemblies.dmi'
|
||||
item_state = "assembly"
|
||||
var/status = 0.0
|
||||
throwforce = 10
|
||||
w_class = 3.0
|
||||
throw_speed = 4
|
||||
throw_range = 10
|
||||
|
||||
/obj/item/assembly/a_i_a
|
||||
name = "Health-Analyzer/Igniter/Armor Assembly"
|
||||
desc = "A health-analyzer, igniter and armor assembly."
|
||||
icon_state = "armor-igniter-analyzer"
|
||||
var/obj/item/device/healthanalyzer/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
var/obj/item/clothing/suit/armor/vest/part3 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/m_i_ptank
|
||||
desc = "A very intricate igniter and proximity sensor electrical assembly mounted onto top of a plasma tank."
|
||||
name = "Proximity/Igniter/Plasma Tank Assembly"
|
||||
icon_state = "prox-igniter-tank0"
|
||||
var/obj/item/device/prox_sensor/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
var/obj/item/weapon/tank/plasma/part3 = null
|
||||
status = 0.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/prox_ignite
|
||||
name = "Proximity/Igniter Assembly"
|
||||
desc = "A proximity-activated igniter assembly."
|
||||
icon_state = "prox-igniter0"
|
||||
var/obj/item/device/prox_sensor/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/r_i_ptank
|
||||
desc = "A very intricate igniter and signaller electrical assembly mounted onto top of a plasma tank."
|
||||
name = "Radio/Igniter/Plasma Tank Assembly"
|
||||
icon_state = "radio-igniter-tank"
|
||||
var/obj/item/device/radio/signaler/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
var/obj/item/weapon/tank/plasma/part3 = null
|
||||
status = 0.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/anal_ignite
|
||||
name = "Health-Analyzer/Igniter Assembly"
|
||||
desc = "A health-analyzer igniter assembly."
|
||||
icon_state = "timer-igniter0"
|
||||
var/obj/item/device/healthanalyzer/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
item_state = "electronic"
|
||||
|
||||
/obj/item/assembly/time_ignite
|
||||
name = "Timer/Igniter Assembly"
|
||||
desc = "A timer-activated igniter assembly."
|
||||
icon_state = "timer-igniter0"
|
||||
var/obj/item/device/timer/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/t_i_ptank
|
||||
desc = "A very intricate igniter and timer assembly mounted onto top of a plasma tank."
|
||||
name = "Timer/Igniter/Plasma Tank Assembly"
|
||||
icon_state = "timer-igniter-tank0"
|
||||
var/obj/item/device/timer/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
var/obj/item/weapon/tank/plasma/part3 = null
|
||||
status = 0.0
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/rad_ignite
|
||||
name = "Radio/Igniter Assembly"
|
||||
desc = "A radio-activated igniter assembly."
|
||||
icon_state = "radio-igniter"
|
||||
var/obj/item/device/radio/signaler/part1 = null
|
||||
var/obj/item/device/igniter/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/rad_infra
|
||||
name = "Signaller/Infrared Assembly"
|
||||
desc = "An infrared-activated radio signaller"
|
||||
icon_state = "infrared-radio0"
|
||||
var/obj/item/device/radio/signaler/part1 = null
|
||||
var/obj/item/device/infra/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/rad_prox
|
||||
name = "Signaller/Prox Sensor Assembly"
|
||||
desc = "A proximity-activated radio signaller."
|
||||
icon_state = "prox-radio0"
|
||||
var/obj/item/device/radio/signaler/part1 = null
|
||||
var/obj/item/device/prox_sensor/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
|
||||
/obj/item/assembly/rad_time
|
||||
name = "Signaller/Timer Assembly"
|
||||
desc = "A radio signaller activated by a count-down timer."
|
||||
icon_state = "timer-radio0"
|
||||
var/obj/item/device/radio/signaler/part1 = null
|
||||
var/obj/item/device/timer/part2 = null
|
||||
status = null
|
||||
flags = FPRINT | TABLEPASS| CONDUCT
|
||||
*/
|
||||
|
||||
/obj/item/assembly/time_ignite/premade/New()
|
||||
..()
|
||||
part1 = new(src)
|
||||
part2 = new(src)
|
||||
part1.master = src
|
||||
part2.master = src
|
||||
//part2.status = 0
|
||||
|
||||
/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()
|
||||
if (!status)
|
||||
return
|
||||
for(var/mob/O in hearers(1, src.loc))
|
||||
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
|
||||
src.part2.Activate()
|
||||
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
|
||||
src.part1.loc = T
|
||||
src.part1.master = null
|
||||
src.part1 = null
|
||||
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)
|
||||
src.part2.secured = 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.part1.master = null
|
||||
src.part1 = null
|
||||
src.part2.loc = T
|
||||
src.part2.master = 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.secured = 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
|
||||
R.part1 = part1
|
||||
R.part1.master = R
|
||||
part1 = null
|
||||
|
||||
R.part2 = part2
|
||||
R.part2.master = R
|
||||
part2 = null
|
||||
|
||||
user.put_in_hand(R)
|
||||
user.before_take_item(W)
|
||||
R.part3 = W
|
||||
R.part3.master = R
|
||||
del(src)
|
||||
|
||||
/* WTF THIS SHIT? It is working? Shouldn't. --rastaf0
|
||||
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/proc/c_state(n, O as obj)
|
||||
return
|
||||
|
||||
/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.part1.master = null
|
||||
src.part1 = null
|
||||
src.part2.loc = T
|
||||
src.part2.master = null
|
||||
src.part2 = null
|
||||
src.part3.loc = T
|
||||
src.part3.master = null
|
||||
src.part3 = null
|
||||
|
||||
del(src)
|
||||
return
|
||||
if (( istype(W, /obj/item/weapon/screwdriver) ))
|
||||
if (!src.status && (!part1||!part2||!part3))
|
||||
user << "\red You cannot finish the assembly, not all components are in place!"
|
||||
return
|
||||
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 name = "Rotate Assembly"
|
||||
set category = "Object"
|
||||
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.secured = src.status
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/assembly/prox_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/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.Activate()
|
||||
return
|
||||
|
||||
/obj/item/assembly/rad_ignite/Del()
|
||||
del(src.part1)
|
||||
del(src.part2)
|
||||
..()
|
||||
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.secured = src.status
|
||||
src.part1.b_stat = !( src.status )
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/assembly/rad_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/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.Activate()
|
||||
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.secured)
|
||||
//world << "sending signal"
|
||||
receive_signal()
|
||||
else
|
||||
//world << "not active"
|
||||
..()
|
||||
|
||||
/obj/item/assembly/m_i_ptank/proc/prox_check()
|
||||
if(!part1 || !part1.secured)
|
||||
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 )
|
||||
part1.sense()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/assembly/m_i_ptank/examine()
|
||||
..()
|
||||
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)
|
||||
return
|
||||
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
|
||||
var/obj/item/assembly/prox_ignite/R = new(get_turf(src.loc))
|
||||
R.part1 = src.part1
|
||||
R.part1.master = R
|
||||
R.part1.loc = R
|
||||
R.part2 = src.part2
|
||||
R.part2.master = R
|
||||
R.part2.loc = R
|
||||
if (user.get_inactive_hand()==src)
|
||||
user.put_in_inactive_hand(part3)
|
||||
else
|
||||
part3.loc = src.loc
|
||||
src.part1 = null
|
||||
src.part2 = null
|
||||
src.part3 = null
|
||||
del(src)
|
||||
return
|
||||
if (!( istype(W, /obj/item/weapon/weldingtool)&&W:welding ))
|
||||
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.secured = 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.secured = 0.0
|
||||
|
||||
return
|
||||
|
||||
/obj/item/assembly/m_i_ptank/emp_act(severity)
|
||||
|
||||
if(istype(part3,/obj/item/weapon/tank/plasma) && prob(100/severity))
|
||||
part3.ignite()
|
||||
..()
|
||||
|
||||
//*****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)
|
||||
return
|
||||
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
|
||||
var/obj/item/assembly/time_ignite/R = new(get_turf(src.loc))
|
||||
R.part1 = src.part1
|
||||
R.part1.master = R
|
||||
R.part1.loc = R
|
||||
R.part2 = src.part2
|
||||
R.part2.master = R
|
||||
R.part2.loc = R
|
||||
if (user.get_inactive_hand()==src)
|
||||
user.put_in_inactive_hand(part3)
|
||||
else
|
||||
part3.loc = src.loc
|
||||
src.part1 = null
|
||||
src.part2 = null
|
||||
src.part3 = null
|
||||
del(src)
|
||||
return
|
||||
if (!( istype(W, /obj/item/weapon/weldingtool) && W:welding))
|
||||
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
|
||||
if(src)
|
||||
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.secured = src.status
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/assembly/t_i_ptank/attack_self(mob/user as mob)
|
||||
|
||||
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/t_i_ptank/emp_act(severity)
|
||||
if(istype(part3,/obj/item/weapon/tank/plasma) && prob(100/severity))
|
||||
part3.ignite()
|
||||
..()
|
||||
|
||||
/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)
|
||||
return
|
||||
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
|
||||
var/obj/item/assembly/rad_ignite/R = new(get_turf(src.loc))
|
||||
R.part1 = src.part1
|
||||
R.part1.master = R
|
||||
R.part1.loc = R
|
||||
R.part2 = src.part2
|
||||
R.part2.master = R
|
||||
R.part2.loc = R
|
||||
if (user.get_inactive_hand()==src)
|
||||
user.put_in_inactive_hand(part3)
|
||||
else
|
||||
part3.loc = src.loc
|
||||
src.part1 = null
|
||||
src.part2 = null
|
||||
src.part3 = null
|
||||
del(src)
|
||||
return
|
||||
if (!( istype(W, /obj/item/weapon/weldingtool) && W:welding ))
|
||||
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.secured = src.status
|
||||
src.part1.b_stat = !( src.status )
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/assembly/r_i_ptank/emp_act(severity)
|
||||
if(istype(part3,/obj/item/weapon/tank/plasma) && prob(100/severity))
|
||||
part3.ignite()
|
||||
..()
|
||||
|
||||
|
||||
/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)
|
||||
return
|
||||
if ((istype(W, /obj/item/weapon/wrench) && !( src.status )))
|
||||
var/obj/item/assembly/a_i_a/R = new(get_turf(src.loc))
|
||||
R.part1 = src.part1
|
||||
R.part1.master = R
|
||||
R.part1.loc = R
|
||||
R.part2 = src.part2
|
||||
R.part2.master = R
|
||||
R.part2.loc = R
|
||||
R.part3 = src.part3
|
||||
R.part3.master = R
|
||||
R.part3.loc = R
|
||||
if (user.get_inactive_hand()==src)
|
||||
user.put_in_inactive_hand(part4)
|
||||
else
|
||||
part4.loc = src.loc
|
||||
src.part1 = null
|
||||
src.part2 = null
|
||||
src.part3 = null
|
||||
src.part4 = null
|
||||
del(src)
|
||||
return
|
||||
if (( istype(W, /obj/item/weapon/weldingtool) && W:welding))
|
||||
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)
|
||||
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
|
||||
|
||||
|
||||
//*****RM
|
||||
@@ -45,6 +45,15 @@ Stuff which is in development and not yet visible to players or just code relate
|
||||
(is. code improvements for expandability, etc.) should not be listed here. They
|
||||
should be listed in the changelog upon commit tho. Thanks. -->
|
||||
|
||||
<b><font color='blue'>5 August 2011.</font color><b>
|
||||
<ul>
|
||||
<li><b>Mport updated</b>:
|
||||
<ul>
|
||||
<li>The various assemblies should be working now.</li>
|
||||
<li>Old style bombs and suicide vests temporarily removed.</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<b><font color='blue'>3 August 2011.</font color><b>
|
||||
<ul>
|
||||
<li><b>Superxpdude updated</b>:
|
||||
|
||||
BIN
icons/obj/assemblies/new_assemblies.dmi
Normal file
BIN
icons/obj/assemblies/new_assemblies.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
@@ -4858,7 +4858,7 @@
|
||||
"bPv" = (/obj/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
|
||||
"bPw" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/obj/machinery/meter,/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
|
||||
"bPx" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
|
||||
"bPy" = (/obj/table,/obj/item/assembly/time_ignite/premade{pixel_x = -3; pixel_y = -2},/obj/item/assembly/time_ignite/premade{pixel_x = 5; pixel_y = -7},/obj/item/assembly/time_ignite/premade{pixel_x = 5; pixel_y = 5},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
|
||||
"bPy" = (/obj/table,/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
|
||||
"bPz" = (/obj/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/table,/obj/item/device/radio/signaler{pixel_x = 6; pixel_y = 5},/obj/item/device/radio/signaler{pixel_x = 0; pixel_y = 8},/obj/item/device/radio/signaler{pixel_x = -8; pixel_y = 5},/obj/item/device/radio/signaler{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
|
||||
"bPA" = (/obj/grille,/obj/window/reinforced{dir = 4},/obj/window/reinforced{dir = 1},/obj/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple{color = "blue"; icon_state = "intact-b-f"; level = 1; name = "pipe"},/turf/simulated/floor/plating,/area/crew_quarters/hor)
|
||||
"bPB" = (/obj/window/reinforced,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/hor)
|
||||
@@ -5797,7 +5797,7 @@
|
||||
"chy" = (/obj/stool/bed,/obj/item/weapon/bedsheet,/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_mothership)
|
||||
"chz" = (/obj/table,/obj/item/weapon/gun/projectile/automatic/mini_uzi,/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_mothership)
|
||||
"chA" = (/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_mothership)
|
||||
"chB" = (/turf/unsimulated/wall{desc = "Why it no open!"; icon = 'icons/obj/doors/rapid_pdoor.dmi'; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/syndicate_mothership)
|
||||
"chB" = (/turf/unsimulated/wall{desc = "Why it no open!"; icon = 'rapid_pdoor.dmi'; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/syndicate_mothership)
|
||||
"chC" = (/obj/stool,/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_mothership)
|
||||
"chD" = (/obj/rack,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile/shotgun/combat,/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_mothership)
|
||||
"chE" = (/obj/rack,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile/silenced,/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_mothership)
|
||||
@@ -5925,7 +5925,7 @@
|
||||
"cjW" = (/obj/grille,/obj/window/reinforced,/obj/window/reinforced{dir = 1},/turf/unsimulated/floor{name = "plating"},/area/syndicate_mothership)
|
||||
"cjX" = (/obj/grille,/obj/window/reinforced{dir = 4},/obj/window/reinforced,/obj/window/reinforced{dir = 1},/turf/unsimulated/floor{name = "plating"},/area/syndicate_mothership)
|
||||
"cjY" = (/obj/machinery/door/airlock/external{icon_state = "door_locked"; locked = 1},/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_mothership)
|
||||
"cjZ" = (/turf/unsimulated/wall{desc = "Why it no open!"; icon = 'icons/obj/doors/rapid_pdoor.dmi'; icon_state = "pdoor1"; name = "External Airlock"},/area/syndicate_mothership)
|
||||
"cjZ" = (/turf/unsimulated/wall{desc = "Why it no open!"; icon = 'rapid_pdoor.dmi'; icon_state = "pdoor1"; name = "External Airlock"},/area/syndicate_mothership)
|
||||
"cka" = (/obj/landmark{name = "Nuclear-Closet"},/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_station/start)
|
||||
"ckb" = (/obj/grille,/obj/window/reinforced,/obj/window/reinforced{dir = 1},/obj/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/syndicate_mothership)
|
||||
"ckc" = (/obj/stool/chair{dir = 4},/turf/unsimulated/floor{icon = 'shuttle.dmi'; icon_state = "floor4"},/area/syndicate_station/start)
|
||||
@@ -6889,7 +6889,7 @@
|
||||
"cCy" = (/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station)
|
||||
"cCz" = (/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station)
|
||||
"cCA" = (/obj/item/weapon/spacecash,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/planet/clown)
|
||||
"cCB" = (/mob/living/carbon/metroid{desc = "A tamed other thing. Very smart looking."; icon = 'icons/obj/otherthing.dmi'; icon_state = "otherthing"; name = "Tamed Otherthing"; toxloss = 0; voice_message = "gurgles"; voice_name = "otherthing"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
|
||||
"cCB" = (/mob/living/carbon/metroid{desc = "A tamed other thing. Very smart looking."; icon = 'otherthing.dmi'; icon_state = "otherthing"; name = "Tamed Otherthing"; toxloss = 0; voice_message = "gurgles"; voice_name = "otherthing"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
|
||||
"cCC" = (/obj/grille,/obj/window/reinforced,/obj/window/reinforced{dir = 4},/obj/window/reinforced{dir = 8},/turf/unsimulated/floor,/area/wizard_station)
|
||||
"cCD" = (/obj/stool,/turf/unsimulated/floor{dir = 2; icon_state = "carpetside"},/area/wizard_station)
|
||||
"cCE" = (/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
#define FILE_DIR "code/defines/mob/living/silicon"
|
||||
#define FILE_DIR "code/defines/obj"
|
||||
#define FILE_DIR "code/defines/obj/clothing"
|
||||
#define FILE_DIR "code/defines/obj/spawner"
|
||||
#define FILE_DIR "code/defines/procs"
|
||||
#define FILE_DIR "code/FEA"
|
||||
#define FILE_DIR "code/game"
|
||||
@@ -69,7 +68,6 @@
|
||||
#define FILE_DIR "code/game/objects/items/weapons"
|
||||
#define FILE_DIR "code/game/objects/radio"
|
||||
#define FILE_DIR "code/game/objects/secstorage"
|
||||
#define FILE_DIR "code/game/objects/spawners"
|
||||
#define FILE_DIR "code/game/objects/stacks"
|
||||
#define FILE_DIR "code/game/objects/storage"
|
||||
#define FILE_DIR "code/game/verbs"
|
||||
@@ -124,6 +122,7 @@
|
||||
#define FILE_DIR "icons/misc"
|
||||
#define FILE_DIR "icons/mob"
|
||||
#define FILE_DIR "icons/obj"
|
||||
#define FILE_DIR "icons/obj/assemblies"
|
||||
#define FILE_DIR "icons/obj/atmospherics"
|
||||
#define FILE_DIR "icons/obj/clothing"
|
||||
#define FILE_DIR "icons/obj/doors"
|
||||
@@ -250,7 +249,6 @@
|
||||
#include "code\defines\mob\living\silicon\pai.dm"
|
||||
#include "code\defines\mob\living\silicon\robot.dm"
|
||||
#include "code\defines\mob\living\silicon\silicon.dm"
|
||||
#include "code\defines\obj\assemblies.dm"
|
||||
#include "code\defines\obj\closet.dm"
|
||||
#include "code\defines\obj\clothing.dm"
|
||||
#include "code\defines\obj\computer.dm"
|
||||
@@ -277,7 +275,6 @@
|
||||
#include "code\defines\obj\clothing\mask.dm"
|
||||
#include "code\defines\obj\clothing\shoes.dm"
|
||||
#include "code\defines\obj\clothing\suit.dm"
|
||||
#include "code\defines\obj\spawner\bomb.dm"
|
||||
#include "code\defines\procs\AStar.dm"
|
||||
#include "code\defines\procs\captain_announce.dm"
|
||||
#include "code\defines\procs\church_name.dm"
|
||||
@@ -476,10 +473,9 @@
|
||||
#include "code\game\mecha\working\firefighter.dm"
|
||||
#include "code\game\mecha\working\ripley.dm"
|
||||
#include "code\game\mecha\working\working.dm"
|
||||
#include "code\game\objects\assemblies.dm"
|
||||
#include "code\game\objects\biomass.dm"
|
||||
#include "code\game\objects\blood.dm"
|
||||
#include "code\game\objects\bomb.dm"
|
||||
#include "code\game\objects\bombspawner.dm"
|
||||
#include "code\game\objects\cleaner.dm"
|
||||
#include "code\game\objects\closets.dm"
|
||||
#include "code\game\objects\displaycase.dm"
|
||||
@@ -506,6 +502,7 @@
|
||||
#include "code\game\objects\tables_racks.dm"
|
||||
#include "code\game\objects\tank.dm"
|
||||
#include "code\game\objects\toys.dm"
|
||||
#include "code\game\objects\transfer_valve.dm"
|
||||
#include "code\game\objects\traps.dm"
|
||||
#include "code\game\objects\weapons.dm"
|
||||
#include "code\game\objects\window.dm"
|
||||
@@ -543,22 +540,18 @@
|
||||
#include "code\game\objects\devices\chameleonproj.dm"
|
||||
#include "code\game\objects\devices\flash.dm"
|
||||
#include "code\game\objects\devices\flashlight.dm"
|
||||
#include "code\game\objects\devices\igniter.dm"
|
||||
#include "code\game\objects\devices\infra_sensor.dm"
|
||||
#include "code\game\objects\devices\multitool.dm"
|
||||
#include "code\game\objects\devices\paicard.dm"
|
||||
#include "code\game\objects\devices\powersink.dm"
|
||||
#include "code\game\objects\devices\proxy_sensor.dm"
|
||||
#include "code\game\objects\devices\scanners.dm"
|
||||
#include "code\game\objects\devices\shields.dm"
|
||||
#include "code\game\objects\devices\taperecorder.dm"
|
||||
#include "code\game\objects\devices\timer.dm"
|
||||
#include "code\game\objects\devices\PDA\cart.dm"
|
||||
#include "code\game\objects\devices\PDA\PDA.dm"
|
||||
#include "code\game\objects\devices\PDA\radio.dm"
|
||||
#include "code\game\objects\devices\PDA\uplink.dm"
|
||||
#include "code\game\objects\items\apc_frame.dm"
|
||||
#include "code\game\objects\items\assemblies.dm"
|
||||
#include "code\game\objects\items\blueprints.dm"
|
||||
#include "code\game\objects\items\candle.dm"
|
||||
#include "code\game\objects\items\clothing.dm"
|
||||
@@ -566,6 +559,7 @@
|
||||
#include "code\game\objects\items\helper_procs.dm"
|
||||
#include "code\game\objects\items\item.dm"
|
||||
#include "code\game\objects\items\robot_parts.dm"
|
||||
#include "code\game\objects\items\shock_kit.dm"
|
||||
#include "code\game\objects\items\trash.dm"
|
||||
#include "code\game\objects\items\weapons\AI_modules.dm"
|
||||
#include "code\game\objects\items\weapons\cameras.dm"
|
||||
@@ -605,7 +599,6 @@
|
||||
#include "code\game\objects\secstorage\sbriefcase.dm"
|
||||
#include "code\game\objects\secstorage\secstorage.dm"
|
||||
#include "code\game\objects\secstorage\ssafe.dm"
|
||||
#include "code\game\objects\spawners\bomb.dm"
|
||||
#include "code\game\objects\stacks\glass.dm"
|
||||
#include "code\game\objects\stacks\metal.dm"
|
||||
#include "code\game\objects\stacks\minerals.dm"
|
||||
@@ -657,6 +650,12 @@
|
||||
#include "code\modules\admin\verbs\ticklag.dm"
|
||||
#include "code\modules\admin\verbs\tripAI.dm"
|
||||
#include "code\modules\assembly\assembly.dm"
|
||||
#include "code\modules\assembly\holder.dm"
|
||||
#include "code\modules\assembly\igniter.dm"
|
||||
#include "code\modules\assembly\infrared.dm"
|
||||
#include "code\modules\assembly\proximity.dm"
|
||||
#include "code\modules\assembly\signaler.dm"
|
||||
#include "code\modules\assembly\timer.dm"
|
||||
#include "code\modules\chemical\Chemistry-Holder.dm"
|
||||
#include "code\modules\chemical\Chemistry-Machinery.dm"
|
||||
#include "code\modules\chemical\Chemistry-Reagents.dm"
|
||||
|
||||
Reference in New Issue
Block a user