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:
mport2004@gmail.com
2011-08-05 07:42:24 +00:00
parent 247ac0b197
commit e98a7893fa
40 changed files with 2440 additions and 2327 deletions

View File

@@ -90,19 +90,6 @@
var/def_zone var/def_zone
pass_flags = PASSTABLE 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 /obj/bedsheetbin
name = "linen bin" name = "linen bin"
desc = "A bin for containing bedsheets. It looks rather cosy." desc = "A bin for containing bedsheets. It looks rather cosy."
@@ -324,22 +311,12 @@
flags = FPRINT | TABLEPASS flags = FPRINT | TABLEPASS
pass_flags = PASSTABLE pass_flags = PASSTABLE
pressure_resistance = 50 pressure_resistance = 50
// causeerrorheresoifixthis
var/obj/item/master = null var/obj/item/master = null
/obj/item/device /obj/item/device
icon = 'device.dmi' 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 /obj/item/device/flash
name = "flash" name = "flash"
desc = "Used for blinding and being an asshole." desc = "Used for blinding and being an asshole."
@@ -379,59 +356,6 @@
icon_off = "plight0" icon_off = "plight0"
brightness_on = 3 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 /obj/item/device/infra_sensor
name = "Infrared Sensor" name = "Infrared Sensor"
desc = "Scans for infrared beams in the vicinity." desc = "Scans for infrared beams in the vicinity."
@@ -442,18 +366,6 @@
m_amt = 150 m_amt = 150
origin_tech = "magnets=2" 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 /obj/item/device/multitool
name = "multitool" name = "multitool"
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors." desc = "Used for pulsing wires to test which to cut. Not recommended by doctors."
@@ -469,21 +381,6 @@
g_amt = 20 g_amt = 20
origin_tech = "magnets=1;engineering=1" 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 /obj/item/device/shield
name = "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." 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 throw_range = 5
w_class = 2.0 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 /obj/item/blueprints
name = "station blueprints" name = "station blueprints"
desc = "Blueprints of the station. There's stamp \"Classified\" and several coffee stains on it." desc = "Blueprints of the station. There's stamp \"Classified\" and several coffee stains on it."

View File

@@ -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

View File

@@ -44,29 +44,6 @@
item_state = "signaler" item_state = "signaler"
var/code = "electronic" 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 /obj/item/device/radio/intercom
name = "Station Intercom (Radio)" name = "Station Intercom (Radio)"
desc = "Talk through this." desc = "Talk through this."

View File

@@ -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

View File

@@ -238,7 +238,7 @@
//DISABLE TECH //DISABLE TECH
/mob/proc/tech()//Shouldnt this just use the emp() proc? /mob/proc/tech()
set category = "Spells" set category = "Spells"
set name = "Disable Technology" set name = "Disable Technology"
set desc = "This spell disables all weapons, cameras and most other technology in range." set desc = "This spell disables all weapons, cameras and most other technology in range."
@@ -252,179 +252,8 @@
usr.say("NEC CANTIO") usr.say("NEC CANTIO")
usr.spellvoice() usr.spellvoice()
empulse(src, 6, 10, nolog=1)
var/turf/myturf = get_turf(usr) return
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()
//BLINK //BLINK

View File

@@ -364,4 +364,4 @@ var/list/nonhuman_positions = list(
) )
/proc/is_important_job(var/job) /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

View File

@@ -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() /obj/spawner/bomb/New()
..() ..()
@@ -16,7 +41,7 @@
p3.master = R p3.master = R
R.status = explosive R.status = explosive
p1.b_stat = 0 p1.b_stat = 0
p2.status = 1 p2.secured = 1
p3.air_contents.temperature = btemp + T0C p3.air_contents.temperature = btemp + T0C
// proximity // proximity
@@ -34,10 +59,10 @@
R.status = explosive R.status = explosive
p3.air_contents.temperature = btemp + T0C p3.air_contents.temperature = btemp + T0C
p2.status = 1 p2.secured = 1
if(src.active) if(src.active)
R.part1.state = 1 R.part1.secured = 1
R.part1.icon_state = text("motion[]", 1) R.part1.icon_state = text("motion[]", 1)
R.c_state(1, src) R.c_state(1, src)
@@ -56,7 +81,7 @@
R.status = explosive R.status = explosive
p3.air_contents.temperature = btemp + T0C p3.air_contents.temperature = btemp + T0C
p2.status = 1 p2.secured = 1
//bombvest //bombvest
if(3) 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/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 R.status = explosive
p4.air_contents.temperature = btemp + T0C p4.air_contents.temperature = btemp + T0C
p2.status = 1 p2.secured = 1
del(src) 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() /obj/spawner/newbomb/New()
@@ -97,7 +144,8 @@
V.tank_two = OT V.tank_two = OT
V.attached_device = S V.attached_device = S
S.master = V S.holder = V
S.Secure()
PT.master = V PT.master = V
OT.master = V OT.master = V
@@ -121,7 +169,8 @@
V.tank_two = OT V.tank_two = OT
V.attached_device = P V.attached_device = P
P.master = V P.holder = V
P.Secure()
PT.master = V PT.master = V
OT.master = V OT.master = V
@@ -144,7 +193,8 @@
V.tank_two = OT V.tank_two = OT
V.attached_device = T V.attached_device = T
T.master = V T.holder = V
T.Secure()
PT.master = V PT.master = V
OT.master = V OT.master = V
T.time = 30 T.time = 30

View File

@@ -585,9 +585,6 @@ Code:
active3 = S active3 = S
if("Send Signal") 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 ) spawn( 0 )
radio:send_signal("ACTIVATE") radio:send_signal("ACTIVATE")
return return

View File

@@ -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

View File

@@ -10,8 +10,8 @@
/obj/item/device/infra_sensor/proc/burst() /obj/item/device/infra_sensor/proc/burst()
for(var/obj/beam/i_beam/I in range(src.loc)) for(var/obj/beam/i_beam/I in range(src.loc))
I.left = 10 I.left = 8
for(var/obj/item/device/infra/I in range(src.loc)) /* for(var/obj/item/device/infra/I in range(src.loc))ugh will have to fix this
I.visible = 1 I.visible = 1
spawn( 0 ) spawn( 0 )
if ((I && I.first)) if ((I && I.first))
@@ -22,7 +22,7 @@
spawn( 0 ) spawn( 0 )
if ((I.part2 && I.part2.first)) if ((I.part2 && I.part2.first))
I.part2.first.vis_spread(1) I.part2.first.vis_spread(1)
return return*/
return return
/obj/item/device/infra_sensor/attack_self(mob/user as mob) /obj/item/device/infra_sensor/attack_self(mob/user as mob)
@@ -67,148 +67,4 @@
return return
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

View File

@@ -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

View File

@@ -9,6 +9,16 @@ PLANT ANALYZER
MASS SPECTROMETER 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) /obj/item/device/t_scanner/attack_self(mob/user)
@@ -49,6 +59,17 @@ MASS SPECTROMETER
if(M) if(M)
M.invisibility = 2 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) /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) //Foreach goto(186)
return 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) /obj/item/device/healthanalyzer/attack(mob/M as mob, mob/user as mob)
if ((user.mutations & CLOWN || user.brainloss >= 60) && prob(50)) if ((user.mutations & CLOWN || user.brainloss >= 60) && prob(50))
user << text("\red You try to analyze the floor's vitals!") user << text("\red You try to analyze the floor's vitals!")
@@ -187,6 +222,21 @@ MASS SPECTROMETER
src.add_fingerprint(user) src.add_fingerprint(user)
return 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) /obj/item/device/analyzer/attack_self(mob/user as mob)
if (user.stat) if (user.stat)

View File

@@ -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

View File

@@ -37,28 +37,37 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
if(distance < devastation_range) if(distance < devastation_range)
for(var/atom/object in T.contents) for(var/atom/object in T.contents)
spawn() spawn()
object.ex_act(1) if(object)
object.ex_act(1)
if(prob(5)) if(prob(5))
T.ex_act(2) if(T)
T.ex_act(2)
else else
T.ex_act(1) if(T)
T.ex_act(1)
else if(distance < heavy_impact_range) else if(distance < heavy_impact_range)
for(var/atom/object in T.contents) for(var/atom/object in T.contents)
spawn() spawn()
object.ex_act(2) if(object)
T.ex_act(2) object.ex_act(2)
if(T)
T.ex_act(2)
else if (distance == heavy_impact_range) else if (distance == heavy_impact_range)
for(var/atom/object in T.contents) for(var/atom/object in T.contents)
object.ex_act(2) if(object)
object.ex_act(2)
if(prob(15) && devastation_range > 2 && heavy_impact_range > 2) if(prob(15) && devastation_range > 2 && heavy_impact_range > 2)
secondaryexplosion(T, 1) secondaryexplosion(T, 1)
else else
T.ex_act(2) if(T)
T.ex_act(2)
else if(distance <= light_impact_range) else if(distance <= light_impact_range)
for(var/atom/object in T.contents) for(var/atom/object in T.contents)
spawn() spawn()
object.ex_act(3) if(object)
T.ex_act(3) object.ex_act(3)
if(T)
T.ex_act(3)
for(var/mob/living/carbon/mob in T) for(var/mob/living/carbon/mob in T)
flick("flash", mob:flash) flick("flash", mob:flash)

View File

@@ -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() /obj/item/assembly/shock_kit/Del()
//src.part1 = null //src.part1 = null
del(src.part1) del(src.part1)

View File

@@ -4,6 +4,39 @@ GETLINEEEEEEEEEEEEEEEEEEEEE
(well not really but it should) (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 /obj/item/weapon/flamethrower
name = "flamethrower" name = "flamethrower"
icon_state = "flamethrower" icon_state = "flamethrower"
@@ -79,7 +112,7 @@ GETLINEEEEEEEEEEEEEEEEEEEEE
if (istype(W, /obj/item/device/igniter)) if (istype(W, /obj/item/device/igniter))
var/obj/item/device/igniter/I = W var/obj/item/device/igniter/I = W
if (!( I.status )) if (!( I.secured ))
return return
var/obj/item/assembly/weld_rod/S = src var/obj/item/assembly/weld_rod/S = src
var/obj/item/assembly/w_r_ignite/R = new /obj/item/assembly/w_r_ignite( user ) 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.part3.loc = T
src.part1.master = null src.part1.master = null
src.part2.master = null src.part2.master = null
src.part3.master = null src.part3.holder = null
src.part1 = null src.part1 = null
src.part2 = null src.part2 = null
src.part3 = null src.part3 = null
@@ -221,7 +254,7 @@ GETLINEEEEEEEEEEEEEEEEEEEEE
S.part2.master = R S.part2.master = R
R.part3 = S.part3 R.part3 = S.part3
S.part3.loc = R S.part3.loc = R
S.part3.master = R S.part3.holder = R
S.layer = initial(S.layer) S.layer = initial(S.layer)
if (user.client) if (user.client)
user.client.screen -= S user.client.screen -= S

View File

@@ -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() /obj/item/device/radio/electropack/examine()
set src in view() set src in view()

View File

@@ -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
/* var
/obj/item/device/radio/signaler/examine() secured = 1
set src in view() small_icon_state_left = "signaller_left"
..() small_icon_state_right = "signaller_right"
if ((in_range(src, usr) || src.loc == usr)) list/small_icon_state_overlays = null
if (src.b_stat) obj/holder = null
usr.show_message("\blue The signaler can be attached and modified!") 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
Secure()
user.show_message("\blue The [src.name] is ready!")
return
else else
usr.show_message("\blue The signaler can not be modified or attached!") ..()
return return
*/
/obj/item/device/radio/signaler/attack_self(mob/user as mob, flag1) /obj/item/device/radio/signaler/attack_self(mob/user as mob, flag1)
user.machine = src user.machine = src
@@ -53,23 +129,28 @@ Code:
/obj/item/device/radio/signaler/receive_signal(datum/signal/signal) /obj/item/device/radio/signaler/receive_signal(datum/signal/signal)
if(!signal || (signal.encryption != code)) if(cooldown > 0) return 0
return if(!signal || (signal.encryption != code)) return 0
if (!( src.wires & 2 )) if (!( src.wires & 2 ))
return return
if(istype(src.loc, /obj/machinery/door/airlock) && src.airlock_wire && src.wires & 1) 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 var/obj/machinery/door/airlock/A = src.loc
A.pulse(src.airlock_wire) A.pulse(src.airlock_wire)
// src.master:r_signal(signal) if((src.holder) && (holder.IsAssemblyHolder()) && (secured) && (src.wires & 1))
if(src.master && (src.wires & 1)) spawn(0)
src.master.receive_signal(signal) holder:Process_Activation(src)
return
// src.holder.receive_signal(signal)
for(var/mob/O in hearers(1, src.loc)) for(var/mob/O in hearers(1, src.loc))
O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2) O.show_message(text("\icon[] *beep* *beep*", src), 3, "*beep* *beep*", 2)
cooldown = 2
spawn(10)
Process_cooldown()
return return
/obj/item/device/radio/signaler/proc/send_signal(message="ACTIVATE") /obj/item/device/radio/signaler/proc/send_signal(message="ACTIVATE")
if(last_transmission && world.time < (last_transmission + TRANSMISSION_DELAY)) if(last_transmission && world.time < (last_transmission + TRANSMISSION_DELAY))
@@ -79,8 +160,9 @@ Code:
if (!( src.wires & 4 )) if (!( src.wires & 4 ))
return return
var/time = time2text(world.realtime,"hh:mm:ss") if((usr)&&(ismob(usr)))
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]") 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]")
var/datum/signal/signal = new var/datum/signal/signal = new
signal.source = src signal.source = src
@@ -95,7 +177,7 @@ Code:
//..() //..()
if (usr.stat) if (usr.stat)
return 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 usr.machine = src
if (href_list["freq"]) if (href_list["freq"])
..() ..()

View File

@@ -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)

View File

@@ -388,105 +388,6 @@
/obj/item/weapon/tank/plasma/attackby(obj/item/weapon/W as obj, mob/user as mob) /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! // PantsNote: More flamethrower assembly code. WOO!
if (istype(W, /obj/item/assembly/w_r_ignite)) if (istype(W, /obj/item/assembly/w_r_ignite))
var/obj/item/assembly/w_r_ignite/S = W var/obj/item/assembly/w_r_ignite/S = W

View File

@@ -10,6 +10,11 @@
var/valve_open = 0 var/valve_open = 0
var/toggle = 1 var/toggle = 1
proc
Process_Activation(var/obj/item/device/D)
IsAssemblyHolder()
return 1
attackby(obj/item/item, mob/user) attackby(obj/item/item, mob/user)
if(istype(item, /obj/item/weapon/tank)) if(istype(item, /obj/item/weapon/tank))
@@ -29,25 +34,31 @@
user << "\blue You attach the tank to the transfer valve!" user << "\blue You attach the tank to the transfer valve!"
update_icon() update_icon()
//TODO: Have this take an assemblyholder
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)) else if(item.IsAssembly())
if(item:secured)
user << "\red The device is secured!"
return
if(attached_device) if(attached_device)
user << "\red There is already an device attached to the valve, remove it first!" user << "\red There is already an device attached to the valve, remove it first!"
return return
user.remove_from_mob(item)
attached_device = item attached_device = item
user.drop_item()
item.loc = src item.loc = src
user << "\blue You attach the [item] to the valve controls!" user << "\blue You attach the [item] to the valve controls and secure it!"
item.master = src item:holder = src
item:Secure()
bombers += "[key_name(user)] attached a [item] to a transfer valve." bombers += "[key_name(user)] attached a [item] to a transfer valve."
message_admins("[key_name_admin(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.") log_game("[key_name_admin(user)] attached a [item] to a transfer valve.")
attacher = key_name(user) attacher = key_name(user)
return
HasProximity(atom/movable/AM as mob|obj)
if(!attached_device) return
attached_device.HasProximity(AM)
return return
@@ -86,7 +97,7 @@
if(href_list["rem_device"]) if(href_list["rem_device"])
if(attached_device) if(attached_device)
attached_device.loc = get_turf(src) attached_device.loc = get_turf(src)
attached_device.master = null attached_device:holder = null
attached_device = null attached_device = null
update_icon() update_icon()
if(href_list["device"]) if(href_list["device"])
@@ -97,7 +108,7 @@
src.add_fingerprint(usr) src.add_fingerprint(usr)
return return
receive_signal(signal) Process_Activation(var/obj/item/device/D)
if(toggle) if(toggle)
toggle = 0 toggle = 0
toggle_valve() toggle_valve()
@@ -144,7 +155,7 @@
var/datum/gas_mixture/temp var/datum/gas_mixture/temp
temp = tank_one.air_contents.remove_ratio(1) temp = tank_one.air_contents.remove_ratio(1)
tank_two.air_contents.merge(temp) tank_two.air_contents.merge(temp)
split_gases() split_gases()
if (!valve_open || !tank_one || !tank_two) if (!valve_open || !tank_one || !tank_two)
return return
@@ -174,7 +185,7 @@
src.update_icon() src.update_icon()
sleep(10) sleep(10)
src.update_icon() src.update_icon()
else if(valve_open==1 && (tank_one && tank_two)) else if(valve_open==1 && (tank_one && tank_two))
split_gases() split_gases()
valve_open = 0 valve_open = 0

View File

@@ -89,465 +89,6 @@
/obj/mine/New() /obj/mine/New()
icon_state = "uglyminearmed" 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) /obj/item/weapon/directions/attack_hand(mob/user as mob)
if (istype(usr, /mob/living/carbon/human)) if (istype(usr, /mob/living/carbon/human))
if (prob(50)) if (prob(50))
@@ -565,478 +106,6 @@
return return
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() /atom/proc/ex_act()
return return

View File

@@ -23,6 +23,9 @@
return return
return return
/turf/ex_act(severity)
return 0
/turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area) /turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area)
if (!mover || !isturf(mover.loc)) if (!mover || !isturf(mover.loc))
return 1 return 1

View File

@@ -133,20 +133,24 @@ var/showadminmessages = 1
if(jobban_isbanned(M, job)) if(jobban_isbanned(M, job))
jobs += "<a href='?src=\ref[src];jobban3=[job];jobban4=\ref[M]'><font color=red>[dd_replacetext(job, " ", "&nbsp")]</font></a> " jobs += "<a href='?src=\ref[src];jobban3=[job];jobban4=\ref[M]'><font color=red>[dd_replacetext(job, " ", "&nbsp")]</font></a> "
else else
jobs += "<a href='?src=\ref[src];jobban3=[job];jobban4=\ref[M]'>[dd_replacetext(job, " ", "&nbsp")]</a> " //why doesn't this work the stupid cunt jobs += "<a href='?src=\ref[src];jobban3=[job];jobban4=\ref[M]'>[dd_replacetext(job, " ", "&nbsp")]</a> "
if(jobban_isbanned(M, "Captain")) if(jobban_isbanned(M, "Captain"))
jobs += "<a href='?src=\ref[src];jobban3=Captain;jobban4=\ref[M]'><font color=red>Captain</font></a> " jobs += "<a href='?src=\ref[src];jobban3=Captain;jobban4=\ref[M]'><font color=red>Captain</font></a> "
else 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")) if(jobban_isbanned(M, "Syndicate"))
jobs += "<BR><a href='?src=\ref[src];jobban3=Syndicate;jobban4=\ref[M]'><font color=red>[dd_replacetext("Syndicate", " ", "&nbsp")]</font></a> " jobs += "<BR><a href='?src=\ref[src];jobban3=Syndicate;jobban4=\ref[M]'><font color=red>[dd_replacetext("Syndicate", " ", "&nbsp")]</font></a> "
else else
jobs += "<BR><a href='?src=\ref[src];jobban3=Syndicate;jobban4=\ref[M]'>[dd_replacetext("Syndicate", " ", "&nbsp")]</a> " //why doesn't this work the stupid cunt jobs += "<BR><a href='?src=\ref[src];jobban3=Syndicate;jobban4=\ref[M]'>[dd_replacetext("Syndicate", " ", "&nbsp")]</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>" body = "<br>[jobs]<br><br>"
dat = "<tt>[header][body]</tt>" dat = "<tt>[header][body]</tt>"
usr << browse(dat, "window=jobban2;size=600x150") usr << browse(dat, "window=jobban2;size=600x180")
return return
if(href_list["jobban3"]) if(href_list["jobban3"])
@@ -1317,13 +1321,7 @@ var/showadminmessages = 1
var/ok = 0 var/ok = 0
switch(href_list["secretsadmin"]) switch(href_list["secretsadmin"])
if("clear_bombs") if("clear_bombs")
for(var/obj/item/assembly/r_i_ptank/O in world) //I do nothing
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
if("list_bombers") if("list_bombers")
var/dat = "<B>Bombing List<HR>" var/dat = "<B>Bombing List<HR>"
for(var/l in bombers) for(var/l in bombers)

View File

@@ -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)
*/

View 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

View 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

View 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

View 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

View 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

View 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

View File

@@ -28,8 +28,8 @@
reagents = R reagents = R
R.my_atom = src R.my_atom = src
attackby(obj/item/weapon/W as obj, mob/user as mob) attackby(obj/item/weapon/W as obj, mob/user as mob)//TODO:Have grenades use the new assembly things
if(istype(W,/obj/item/assembly/time_ignite) && !stage && path != 2) if(istype(W,/obj/item/device/assembly_holder) && !stage && path != 2)
path = 1 path = 1
user << "\blue You add [W] to the metal casing." user << "\blue You add [W] to the metal casing."
playsound(src.loc, 'Screwdriver2.ogg', 25, -3) playsound(src.loc, 'Screwdriver2.ogg', 25, -3)

View File

@@ -161,6 +161,8 @@ var/datum/paiController/paiController // Global handler for pAI candidates
proc/requestRecruits() proc/requestRecruits()
for(var/mob/dead/observer/O in world) for(var/mob/dead/observer/O in world)
if(jobban_isbanned(O, "pAI"))
continue
if(asked.Find(O.key)) if(asked.Find(O.key))
if(world.time < asked[O.key] + askDelay) if(world.time < asked[O.key] + askDelay)
continue continue

View File

@@ -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]") onclose(user, "mob[name]")
return return
/mob/proc/u_equip(W as obj) /mob/proc/u_equip(W as obj)
if (W == r_hand) if (W == r_hand)
r_hand = null 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 back = null
else if (W == wear_mask) else if (W == wear_mask)
wear_mask = null wear_mask = null
update_clothing() 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) /mob/proc/ret_grab(obj/list_container/mobl/L as obj, flag)

951
code/unused/assemblies.dm Normal file
View 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

View File

@@ -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 (is. code improvements for expandability, etc.) should not be listed here. They
should be listed in the changelog upon commit tho. Thanks. --> 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> <b><font color='blue'>3 August 2011.</font color><b>
<ul> <ul>
<li><b>Superxpdude updated</b>: <li><b>Superxpdude updated</b>:

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "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) "cCy" = (/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station)
"cCz" = (/turf/unsimulated/floor{dir = 4; 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) "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) "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) "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) "cCE" = (/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)

View File

@@ -23,7 +23,6 @@
#define FILE_DIR "code/defines/mob/living/silicon" #define FILE_DIR "code/defines/mob/living/silicon"
#define FILE_DIR "code/defines/obj" #define FILE_DIR "code/defines/obj"
#define FILE_DIR "code/defines/obj/clothing" #define FILE_DIR "code/defines/obj/clothing"
#define FILE_DIR "code/defines/obj/spawner"
#define FILE_DIR "code/defines/procs" #define FILE_DIR "code/defines/procs"
#define FILE_DIR "code/FEA" #define FILE_DIR "code/FEA"
#define FILE_DIR "code/game" #define FILE_DIR "code/game"
@@ -69,7 +68,6 @@
#define FILE_DIR "code/game/objects/items/weapons" #define FILE_DIR "code/game/objects/items/weapons"
#define FILE_DIR "code/game/objects/radio" #define FILE_DIR "code/game/objects/radio"
#define FILE_DIR "code/game/objects/secstorage" #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/stacks"
#define FILE_DIR "code/game/objects/storage" #define FILE_DIR "code/game/objects/storage"
#define FILE_DIR "code/game/verbs" #define FILE_DIR "code/game/verbs"
@@ -124,6 +122,7 @@
#define FILE_DIR "icons/misc" #define FILE_DIR "icons/misc"
#define FILE_DIR "icons/mob" #define FILE_DIR "icons/mob"
#define FILE_DIR "icons/obj" #define FILE_DIR "icons/obj"
#define FILE_DIR "icons/obj/assemblies"
#define FILE_DIR "icons/obj/atmospherics" #define FILE_DIR "icons/obj/atmospherics"
#define FILE_DIR "icons/obj/clothing" #define FILE_DIR "icons/obj/clothing"
#define FILE_DIR "icons/obj/doors" #define FILE_DIR "icons/obj/doors"
@@ -250,7 +249,6 @@
#include "code\defines\mob\living\silicon\pai.dm" #include "code\defines\mob\living\silicon\pai.dm"
#include "code\defines\mob\living\silicon\robot.dm" #include "code\defines\mob\living\silicon\robot.dm"
#include "code\defines\mob\living\silicon\silicon.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\closet.dm"
#include "code\defines\obj\clothing.dm" #include "code\defines\obj\clothing.dm"
#include "code\defines\obj\computer.dm" #include "code\defines\obj\computer.dm"
@@ -277,7 +275,6 @@
#include "code\defines\obj\clothing\mask.dm" #include "code\defines\obj\clothing\mask.dm"
#include "code\defines\obj\clothing\shoes.dm" #include "code\defines\obj\clothing\shoes.dm"
#include "code\defines\obj\clothing\suit.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\AStar.dm"
#include "code\defines\procs\captain_announce.dm" #include "code\defines\procs\captain_announce.dm"
#include "code\defines\procs\church_name.dm" #include "code\defines\procs\church_name.dm"
@@ -476,10 +473,9 @@
#include "code\game\mecha\working\firefighter.dm" #include "code\game\mecha\working\firefighter.dm"
#include "code\game\mecha\working\ripley.dm" #include "code\game\mecha\working\ripley.dm"
#include "code\game\mecha\working\working.dm" #include "code\game\mecha\working\working.dm"
#include "code\game\objects\assemblies.dm"
#include "code\game\objects\biomass.dm" #include "code\game\objects\biomass.dm"
#include "code\game\objects\blood.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\cleaner.dm"
#include "code\game\objects\closets.dm" #include "code\game\objects\closets.dm"
#include "code\game\objects\displaycase.dm" #include "code\game\objects\displaycase.dm"
@@ -506,6 +502,7 @@
#include "code\game\objects\tables_racks.dm" #include "code\game\objects\tables_racks.dm"
#include "code\game\objects\tank.dm" #include "code\game\objects\tank.dm"
#include "code\game\objects\toys.dm" #include "code\game\objects\toys.dm"
#include "code\game\objects\transfer_valve.dm"
#include "code\game\objects\traps.dm" #include "code\game\objects\traps.dm"
#include "code\game\objects\weapons.dm" #include "code\game\objects\weapons.dm"
#include "code\game\objects\window.dm" #include "code\game\objects\window.dm"
@@ -543,22 +540,18 @@
#include "code\game\objects\devices\chameleonproj.dm" #include "code\game\objects\devices\chameleonproj.dm"
#include "code\game\objects\devices\flash.dm" #include "code\game\objects\devices\flash.dm"
#include "code\game\objects\devices\flashlight.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\infra_sensor.dm"
#include "code\game\objects\devices\multitool.dm" #include "code\game\objects\devices\multitool.dm"
#include "code\game\objects\devices\paicard.dm" #include "code\game\objects\devices\paicard.dm"
#include "code\game\objects\devices\powersink.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\scanners.dm"
#include "code\game\objects\devices\shields.dm" #include "code\game\objects\devices\shields.dm"
#include "code\game\objects\devices\taperecorder.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\cart.dm"
#include "code\game\objects\devices\PDA\PDA.dm" #include "code\game\objects\devices\PDA\PDA.dm"
#include "code\game\objects\devices\PDA\radio.dm" #include "code\game\objects\devices\PDA\radio.dm"
#include "code\game\objects\devices\PDA\uplink.dm" #include "code\game\objects\devices\PDA\uplink.dm"
#include "code\game\objects\items\apc_frame.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\blueprints.dm"
#include "code\game\objects\items\candle.dm" #include "code\game\objects\items\candle.dm"
#include "code\game\objects\items\clothing.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\helper_procs.dm"
#include "code\game\objects\items\item.dm" #include "code\game\objects\items\item.dm"
#include "code\game\objects\items\robot_parts.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\trash.dm"
#include "code\game\objects\items\weapons\AI_modules.dm" #include "code\game\objects\items\weapons\AI_modules.dm"
#include "code\game\objects\items\weapons\cameras.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\sbriefcase.dm"
#include "code\game\objects\secstorage\secstorage.dm" #include "code\game\objects\secstorage\secstorage.dm"
#include "code\game\objects\secstorage\ssafe.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\glass.dm"
#include "code\game\objects\stacks\metal.dm" #include "code\game\objects\stacks\metal.dm"
#include "code\game\objects\stacks\minerals.dm" #include "code\game\objects\stacks\minerals.dm"
@@ -657,6 +650,12 @@
#include "code\modules\admin\verbs\ticklag.dm" #include "code\modules\admin\verbs\ticklag.dm"
#include "code\modules\admin\verbs\tripAI.dm" #include "code\modules\admin\verbs\tripAI.dm"
#include "code\modules\assembly\assembly.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-Holder.dm"
#include "code\modules\chemical\Chemistry-Machinery.dm" #include "code\modules\chemical\Chemistry-Machinery.dm"
#include "code\modules\chemical\Chemistry-Reagents.dm" #include "code\modules\chemical\Chemistry-Reagents.dm"