mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-25 21:19:44 +01:00
@@ -24,7 +24,6 @@
|
||||
/obj/machinery/atmospherics/unary/freezer/New()
|
||||
..()
|
||||
initialize_directions = dir
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
/obj/machinery/atmospherics/unary/heater/New()
|
||||
..()
|
||||
initialize_directions = dir
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
||||
|
||||
@@ -11,7 +11,7 @@ var/const/AALARM_WIRE_AALARM = 16
|
||||
|
||||
/datum/wires/alarm/CanUse(var/mob/living/L)
|
||||
var/obj/machinery/alarm/A = holder
|
||||
if(A.wiresexposed)
|
||||
if(A.panel_open)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/obj/machinery/bluespace_beacon
|
||||
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "floor_beaconf"
|
||||
name = "Bluespace Gigabeacon"
|
||||
@@ -11,45 +10,42 @@
|
||||
idle_power_usage = 0
|
||||
var/obj/item/device/radio/beacon/Beacon
|
||||
|
||||
New()
|
||||
..()
|
||||
var/turf/T = loc
|
||||
/obj/machinery/bluespace_beacon/New()
|
||||
..()
|
||||
var/turf/T = src.loc
|
||||
Beacon = new /obj/item/device/radio/beacon
|
||||
Beacon.invisibility = INVISIBILITY_MAXIMUM
|
||||
Beacon.loc = T
|
||||
|
||||
hide(!T.is_plating())
|
||||
|
||||
/obj/machinery/bluespace_beacon/Destroy()
|
||||
if(Beacon)
|
||||
qdel(Beacon)
|
||||
..()
|
||||
|
||||
// update the invisibility and icon
|
||||
/obj/machinery/bluespace_beacon/hide(var/intact)
|
||||
invisibility = intact ? 101 : 0
|
||||
updateicon()
|
||||
|
||||
// update the icon_state
|
||||
/obj/machinery/bluespace_beacon/proc/updateicon()
|
||||
var/state="floor_beacon"
|
||||
|
||||
if(invisibility)
|
||||
icon_state = "[state]f"
|
||||
else
|
||||
icon_state = "[state]"
|
||||
|
||||
/obj/machinery/bluespace_beacon/process()
|
||||
if(!Beacon)
|
||||
var/turf/T = src.loc
|
||||
Beacon = new /obj/item/device/radio/beacon
|
||||
Beacon.invisibility = INVISIBILITY_MAXIMUM
|
||||
Beacon.loc = T
|
||||
if(Beacon)
|
||||
if(Beacon.loc != src.loc)
|
||||
Beacon.loc = src.loc
|
||||
|
||||
hide(!T.is_plating())
|
||||
|
||||
Destroy()
|
||||
if(Beacon)
|
||||
qdel(Beacon)
|
||||
..()
|
||||
|
||||
// update the invisibility and icon
|
||||
hide(var/intact)
|
||||
invisibility = intact ? 101 : 0
|
||||
updateicon()
|
||||
|
||||
// update the icon_state
|
||||
proc/updateicon()
|
||||
var/state="floor_beacon"
|
||||
|
||||
if(invisibility)
|
||||
icon_state = "[state]f"
|
||||
|
||||
else
|
||||
icon_state = "[state]"
|
||||
|
||||
process()
|
||||
if(!Beacon)
|
||||
var/turf/T = loc
|
||||
Beacon = new /obj/item/device/radio/beacon
|
||||
Beacon.invisibility = INVISIBILITY_MAXIMUM
|
||||
Beacon.loc = T
|
||||
if(Beacon)
|
||||
if(Beacon.loc != loc)
|
||||
Beacon.loc = loc
|
||||
|
||||
updateicon()
|
||||
|
||||
|
||||
updateicon()
|
||||
@@ -1,6 +1,5 @@
|
||||
/obj/machinery/cablelayer
|
||||
name = "automatic cable layer"
|
||||
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "pipe_d"
|
||||
density = 1
|
||||
@@ -42,7 +41,7 @@
|
||||
m = min(m, cable.amount)
|
||||
m = min(m, 30)
|
||||
if(m)
|
||||
playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
use_cable(m)
|
||||
var/obj/item/stack/cable_coil/CC = new (get_turf(src))
|
||||
CC.amount = m
|
||||
|
||||
@@ -10,41 +10,39 @@
|
||||
active_power_usage = 5
|
||||
var/mob/living/carbon/human/victim = null
|
||||
var/strapped = 0.0
|
||||
|
||||
var/obj/machinery/computer/operating/computer = null
|
||||
|
||||
/obj/machinery/optable/New()
|
||||
..()
|
||||
for(dir in list(NORTH,EAST,SOUTH,WEST))
|
||||
computer = locate(/obj/machinery/computer/operating, get_step(src, dir))
|
||||
if (computer)
|
||||
if(computer)
|
||||
computer.table = src
|
||||
break
|
||||
// spawn(100) //Wont the MC just call this process() before and at the 10 second mark anyway?
|
||||
// process()
|
||||
|
||||
/obj/machinery/optable/ex_act(severity)
|
||||
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
//SN src = null
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(50))
|
||||
if(prob(50))
|
||||
//SN src = null
|
||||
qdel(src)
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(25))
|
||||
src.density = 0
|
||||
if(prob(25))
|
||||
density = 0
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/optable/attack_hand(mob/user as mob)
|
||||
if (HULK in usr.mutations)
|
||||
if(HULK in usr.mutations)
|
||||
visible_message("<span class='danger'>\The [usr] destroys \the [src]!</span>")
|
||||
src.density = 0
|
||||
density = 0
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -56,13 +54,12 @@
|
||||
else
|
||||
return 0
|
||||
|
||||
|
||||
/obj/machinery/optable/MouseDrop_T(obj/O as obj, mob/user as mob)
|
||||
|
||||
if ((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O))
|
||||
if((!(istype(O, /obj/item/weapon)) || user.get_active_hand() != O))
|
||||
return
|
||||
user.drop_item()
|
||||
if (O.loc != src.loc)
|
||||
if(O.loc != src.loc)
|
||||
step(O, get_dir(O, src))
|
||||
return
|
||||
|
||||
@@ -70,10 +67,10 @@
|
||||
if(locate(/mob/living/carbon/human, src.loc))
|
||||
var/mob/living/carbon/human/M = locate(/mob/living/carbon/human, src.loc)
|
||||
if(M.lying)
|
||||
src.victim = M
|
||||
victim = M
|
||||
icon_state = M.pulse ? "table2-active" : "table2-idle"
|
||||
return 1
|
||||
src.victim = null
|
||||
victim = null
|
||||
icon_state = "table2-idle"
|
||||
return 0
|
||||
|
||||
@@ -81,21 +78,21 @@
|
||||
check_victim()
|
||||
|
||||
/obj/machinery/optable/proc/take_victim(mob/living/carbon/C, mob/living/carbon/user as mob)
|
||||
if (C == user)
|
||||
if(C == user)
|
||||
user.visible_message("[user] climbs on \the [src].","You climb on \the [src].")
|
||||
else
|
||||
visible_message("<span class='notice'>\The [C] has been laid on \the [src] by [user].</span>", 3)
|
||||
if (C.client)
|
||||
if(C.client)
|
||||
C.client.perspective = EYE_PERSPECTIVE
|
||||
C.client.eye = src
|
||||
C.resting = 1
|
||||
C.loc = src.loc
|
||||
for(var/obj/O in src)
|
||||
O.loc = src.loc
|
||||
src.add_fingerprint(user)
|
||||
add_fingerprint(user)
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/H = C
|
||||
src.victim = H
|
||||
victim = H
|
||||
icon_state = H.pulse ? "table2-active" : "table2-idle"
|
||||
else
|
||||
icon_state = "table2-idle"
|
||||
@@ -121,7 +118,7 @@
|
||||
take_victim(usr,usr)
|
||||
|
||||
/obj/machinery/optable/attackby(obj/item/weapon/W as obj, mob/living/carbon/user as mob)
|
||||
if (istype(W, /obj/item/weapon/grab))
|
||||
if(istype(W, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = W
|
||||
if(iscarbon(G.affecting) && check_table(G.affecting))
|
||||
take_victim(G.affecting,usr)
|
||||
@@ -130,10 +127,10 @@
|
||||
|
||||
/obj/machinery/optable/proc/check_table(mob/living/carbon/patient as mob)
|
||||
check_victim()
|
||||
if(src.victim && get_turf(victim) == get_turf(src) && victim.lying)
|
||||
if(victim && get_turf(victim) == get_turf(src) && victim.lying)
|
||||
usr << "<span class='warning'>\The [src] is already occupied!</span>"
|
||||
return 0
|
||||
if(patient.buckled)
|
||||
usr << "<span class='notice'>Unbuckle \the [patient] first!</span>"
|
||||
return 0
|
||||
return 1
|
||||
return 1
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Sleeper Console"
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon_state = "sleeperconsole"
|
||||
var/obj/machinery/sleeper/connected = null
|
||||
var/obj/machinery/sleeper/sleeper
|
||||
anchored = 1 //About time someone fixed this.
|
||||
density = 0
|
||||
dir = 8
|
||||
@@ -11,21 +11,19 @@
|
||||
interact_offline = 1
|
||||
circuit = /obj/item/weapon/circuitboard/sleeper_console
|
||||
|
||||
//obj/machinery/sleep_console/New()
|
||||
//..()
|
||||
//spawn( 5 )
|
||||
//src.connected = locate(/obj/machinery/sleeper, get_step(src, WEST)) //We assume dir = 8 so sleeper is WEST. Other sprites do exist.
|
||||
//return
|
||||
//return
|
||||
|
||||
/obj/machinery/sleep_console/New()
|
||||
..()
|
||||
spawn(5)
|
||||
//src.machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir))
|
||||
src.connected = locate(/obj/machinery/sleeper) in range(2,src)
|
||||
return
|
||||
return
|
||||
findsleeper()
|
||||
|
||||
/obj/machinery/sleep_console/proc/findsleeper()
|
||||
spawn(5)
|
||||
var/obj/machinery/sleeper/sleepernew = null
|
||||
for(dir in list(NORTH, EAST, SOUTH, WEST)) // Loop through every direction
|
||||
sleepernew = locate(/obj/machinery/sleeper, get_step(src, dir)) // Try to find a scanner in that direction
|
||||
if(sleepernew)
|
||||
sleeper = sleepernew
|
||||
sleepernew.console = src
|
||||
return
|
||||
|
||||
/obj/machinery/sleep_console/attack_ai(var/mob/user)
|
||||
return attack_hand(user)
|
||||
@@ -33,39 +31,25 @@
|
||||
/obj/machinery/sleep_console/attack_hand(var/mob/user)
|
||||
if(..())
|
||||
return 1
|
||||
if(connected)
|
||||
connected.ui_interact(user)
|
||||
|
||||
if(sleeper.panel_open)
|
||||
user << "<span class='notice'>Close the maintenance panel first.</span>"
|
||||
return
|
||||
|
||||
if(!sleeper)
|
||||
findsleeper()
|
||||
if(sleeper)
|
||||
return sleeper.ui_interact(user)
|
||||
else if(sleeper)
|
||||
return sleeper.ui_interact(user)
|
||||
else
|
||||
user << "<span class='warning'>Sleeper not found!</span>"
|
||||
|
||||
/obj/machinery/sleep_console/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
|
||||
user << "<span class='notice'>You start disconnecting the monitor.</span>"
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
A.density = 1
|
||||
A.frame_type = M.board_type
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
if (src.stat & BROKEN)
|
||||
user << "<span class='notice'>The broken glass falls out.</span>"
|
||||
new /obj/item/weapon/material/shard( src.loc )
|
||||
A.state = 3
|
||||
A.icon_state = "[A.frame_type]_3"
|
||||
else
|
||||
user << "<span class='notice'>You disconnect the monitor.</span>"
|
||||
A.state = 4
|
||||
A.icon_state = "[A.frame_type]_4"
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.dir = dir
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
if(computer_deconstruction_screwdriver(user, I))
|
||||
return
|
||||
else
|
||||
src.attack_hand(user)
|
||||
return
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/sleep_console/power_change()
|
||||
..()
|
||||
@@ -86,6 +70,7 @@
|
||||
var/list/available_chemicals = list("inaprovaline" = "Inaprovaline", "stoxin" = "Soporific", "paracetamol" = "Paracetamol", "anti_toxin" = "Dylovene", "dexalin" = "Dexalin")
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker = null
|
||||
var/filtering = 0
|
||||
var/obj/machinery/sleep_console/console
|
||||
|
||||
use_power = 1
|
||||
idle_power_usage = 15
|
||||
@@ -94,7 +79,6 @@
|
||||
/obj/machinery/sleeper/New()
|
||||
..()
|
||||
beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
|
||||
@@ -105,13 +89,6 @@
|
||||
component_parts += new /obj/item/weapon/reagent_containers/syringe(src)
|
||||
component_parts += new /obj/item/stack/material/glass/reinforced(src, 2)
|
||||
|
||||
spawn(5)
|
||||
//src.machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir))
|
||||
var/obj/machinery/sleep_console/C = locate(/obj/machinery/sleep_console) in range(2,src)
|
||||
if(C)
|
||||
C.connected = src
|
||||
return
|
||||
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/sleeper/initialize()
|
||||
@@ -208,12 +185,12 @@
|
||||
return 1
|
||||
|
||||
/obj/machinery/sleeper/attackby(var/obj/item/I, var/mob/user)
|
||||
add_fingerprint(user)
|
||||
if(default_deconstruction_screwdriver(user, I))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, I))
|
||||
else if(default_deconstruction_crowbar(user, I))
|
||||
return
|
||||
add_fingerprint(user)
|
||||
if(istype(I, /obj/item/weapon/reagent_containers/glass))
|
||||
else if(istype(I, /obj/item/weapon/reagent_containers/glass))
|
||||
if(!beaker)
|
||||
beaker = I
|
||||
user.drop_item()
|
||||
@@ -283,21 +260,21 @@
|
||||
if(occupant.client)
|
||||
occupant.client.eye = occupant.client.mob
|
||||
occupant.client.perspective = MOB_PERSPECTIVE
|
||||
occupant.loc = loc
|
||||
occupant.loc = src.loc
|
||||
occupant = null
|
||||
for(var/atom/movable/A in src) // In case an object was dropped inside or something
|
||||
if(A == beaker || A == circuit)
|
||||
continue
|
||||
if(A in component_parts)
|
||||
continue
|
||||
A.loc = loc
|
||||
A.loc = src.loc
|
||||
update_use_power(1)
|
||||
update_icon()
|
||||
toggle_filter()
|
||||
|
||||
/obj/machinery/sleeper/proc/remove_beaker()
|
||||
if(beaker)
|
||||
beaker.loc = loc
|
||||
beaker.loc = src.loc
|
||||
beaker = null
|
||||
toggle_filter()
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
// Pretty much everything here is stolen from the dna scanner FYI
|
||||
|
||||
|
||||
/obj/machinery/bodyscanner
|
||||
var/mob/living/carbon/occupant
|
||||
var/locked
|
||||
@@ -9,25 +8,15 @@
|
||||
icon_state = "body_scanner_0"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
circuit = /obj/item/weapon/circuitboard/body_scanner
|
||||
|
||||
use_power = 1
|
||||
idle_power_usage = 60
|
||||
active_power_usage = 10000 //10 kW. It's a big all-body scanner.
|
||||
|
||||
light_color = "#00FF00"
|
||||
var/obj/machinery/body_scanconsole/console
|
||||
|
||||
/obj/machinery/bodyscanner/New()
|
||||
..()
|
||||
spawn( 5 )
|
||||
var/obj/machinery/body_scanconsole/C = locate(/obj/machinery/body_scanconsole) in range(2,src)
|
||||
if(C)
|
||||
C.connected = src
|
||||
|
||||
/obj/machinery/bodyscanner/map/New()
|
||||
..()
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
@@ -45,10 +34,9 @@
|
||||
/obj/machinery/bodyscanner/attackby(var/obj/item/G, user as mob)
|
||||
if(default_deconstruction_screwdriver(user, G))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, G))
|
||||
else if(default_deconstruction_crowbar(user, G))
|
||||
return
|
||||
|
||||
if(istype(G, /obj/item/weapon/grab))
|
||||
else if(istype(G, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/H = G
|
||||
if(panel_open)
|
||||
user << "<span class='notice'>Close the maintenance panel first.</span>"
|
||||
@@ -126,14 +114,14 @@
|
||||
add_fingerprint(usr)
|
||||
|
||||
/obj/machinery/bodyscanner/proc/go_out()
|
||||
if ((!( src.occupant ) || src.locked))
|
||||
if ((!(occupant) || src.locked))
|
||||
return
|
||||
if (src.occupant.client)
|
||||
src.occupant.client.eye = src.occupant.client.mob
|
||||
src.occupant.client.perspective = MOB_PERSPECTIVE
|
||||
src.occupant.loc = src.loc
|
||||
src.occupant = null
|
||||
src.icon_state = "body_scanner_0"
|
||||
if (occupant.client)
|
||||
occupant.client.eye = occupant.client.mob
|
||||
occupant.client.perspective = MOB_PERSPECTIVE
|
||||
occupant.loc = src.loc
|
||||
occupant = null
|
||||
icon_state = "body_scanner_0"
|
||||
return
|
||||
|
||||
/obj/machinery/bodyscanner/ex_act(severity)
|
||||
@@ -169,7 +157,7 @@
|
||||
|
||||
//Body Scan Console
|
||||
/obj/machinery/body_scanconsole
|
||||
var/obj/machinery/bodyscanner/connected
|
||||
var/obj/machinery/bodyscanner/scanner
|
||||
var/known_implants = list(/obj/item/weapon/implant/chem, /obj/item/weapon/implant/death_alarm, /obj/item/weapon/implant/loyalty, /obj/item/weapon/implant/tracking)
|
||||
var/delete
|
||||
var/temphtml
|
||||
@@ -188,35 +176,22 @@
|
||||
findscanner()
|
||||
|
||||
/obj/machinery/body_scanconsole/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
|
||||
user << "<span class='notice'>You start disconnecting the monitor.</span>"
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
A.density = 1
|
||||
A.frame_type = M.board_type
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
if (src.stat & BROKEN)
|
||||
user << "<span class='notice'>The broken glass falls out.</span>"
|
||||
new /obj/item/weapon/material/shard( src.loc )
|
||||
A.state = 3
|
||||
A.icon_state = "[A.frame_type]_3"
|
||||
else
|
||||
user << "<span class='notice'>You disconnect the monitor.</span>"
|
||||
A.state = 4
|
||||
A.icon_state = "[A.frame_type]_4"
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.dir = dir
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
if(computer_deconstruction_screwdriver(user, I))
|
||||
return
|
||||
else if(istype(I, /obj/item/device/multitool)) //Did you want to link it?
|
||||
var/obj/item/device/multitool/P = I
|
||||
if(P.connectable)
|
||||
if(istype(P.connectable, /obj/machinery/bodyscanner))
|
||||
var/obj/machinery/bodyscanner/C = P.connectable
|
||||
scanner = C
|
||||
C.console = src
|
||||
user << "<span class='warning'> You link the [src] to the [P.connectable]!</span>"
|
||||
else
|
||||
user << "<span class='warning'> You store the [src] in the [P]'s buffer!</span>"
|
||||
P.connectable = src
|
||||
return
|
||||
else
|
||||
src.attack_hand(user)
|
||||
return
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/body_scanconsole/power_change()
|
||||
if(stat & BROKEN)
|
||||
@@ -226,7 +201,7 @@
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
src.icon_state = "body_scannerconsole-p"
|
||||
icon_state = "body_scannerconsole-p"
|
||||
stat |= NOPOWER
|
||||
|
||||
/obj/machinery/body_scanconsole/ex_act(severity)
|
||||
@@ -244,13 +219,14 @@
|
||||
return
|
||||
|
||||
/obj/machinery/body_scanconsole/proc/findscanner()
|
||||
spawn( 5 )
|
||||
spawn(5)
|
||||
var/obj/machinery/bodyscanner/bodyscannernew = null
|
||||
// Loop through every direction
|
||||
for(dir in list(NORTH,EAST,SOUTH,WEST))
|
||||
// Try to find a scanner in that direction
|
||||
bodyscannernew = locate(/obj/machinery/bodyscanner, get_step(src, dir))
|
||||
src.connected = bodyscannernew
|
||||
for(dir in list(NORTH, EAST, SOUTH, WEST)) // Loop through every direction
|
||||
bodyscannernew = locate(/obj/machinery/bodyscanner, get_step(src, dir)) // Try to find a scanner in that direction
|
||||
if(bodyscannernew)
|
||||
scanner = bodyscannernew
|
||||
bodyscannernew.console = src
|
||||
return
|
||||
|
||||
/obj/machinery/body_scanconsole/attack_ai(user as mob)
|
||||
@@ -263,26 +239,30 @@
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
|
||||
if (panel_open)
|
||||
if (scanner.panel_open)
|
||||
user << "<span class='notice'>Close the maintenance panel first.</span>"
|
||||
return
|
||||
|
||||
if(!src.connected)
|
||||
if(!scanner)
|
||||
findscanner()
|
||||
|
||||
ui_interact(user)
|
||||
if(scanner)
|
||||
return ui_interact(user)
|
||||
else if(scanner)
|
||||
return ui_interact(user)
|
||||
else
|
||||
user << "<span class='warning'>Scanner not found!</span>"
|
||||
|
||||
/obj/machinery/body_scanconsole/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
var/data[0]
|
||||
|
||||
data["connected"] = connected ? 1 : 0
|
||||
data["connected"] = scanner ? 1 : 0
|
||||
|
||||
if(connected)
|
||||
data["occupied"] = connected.occupant ? 1 : 0
|
||||
if(scanner)
|
||||
data["occupied"] = scanner.occupant ? 1 : 0
|
||||
|
||||
var/occupantData[0]
|
||||
if(connected.occupant && ishuman(connected.occupant))
|
||||
var/mob/living/carbon/human/H = connected.occupant
|
||||
if(scanner.occupant && ishuman(scanner.occupant))
|
||||
var/mob/living/carbon/human/H = scanner.occupant
|
||||
occupantData["name"] = H.name
|
||||
occupantData["stat"] = H.stat
|
||||
occupantData["health"] = H.health
|
||||
@@ -420,8 +400,8 @@
|
||||
/obj/machinery/body_scanconsole/proc/generate_printing_text()
|
||||
var/dat = ""
|
||||
|
||||
if(connected)
|
||||
var/mob/living/carbon/human/occupant = connected.occupant
|
||||
if(scanner)
|
||||
var/mob/living/carbon/human/occupant = scanner.occupant
|
||||
dat = "<font color='blue'><b>Occupant Statistics:</b></font><br>" //Blah obvious
|
||||
if(istype(occupant)) //is there REALLY someone in there?
|
||||
var/t1
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
var/cooldown_on = 0
|
||||
req_access = list(access_ai_upload)
|
||||
|
||||
|
||||
/obj/machinery/ai_slipper/New()
|
||||
..()
|
||||
update_icon()
|
||||
@@ -25,32 +24,32 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/ai_slipper/update_icon()
|
||||
if (stat & NOPOWER || stat & BROKEN)
|
||||
if(stat & NOPOWER || stat & BROKEN)
|
||||
icon_state = "motion0"
|
||||
else
|
||||
icon_state = disabled ? "motion0" : "motion3"
|
||||
|
||||
/obj/machinery/ai_slipper/proc/setState(var/enabled, var/uses)
|
||||
src.disabled = disabled
|
||||
src.uses = uses
|
||||
src.power_change()
|
||||
disabled = disabled
|
||||
uses = uses
|
||||
power_change()
|
||||
|
||||
/obj/machinery/ai_slipper/attackby(obj/item/weapon/W, mob/user)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
if (istype(user, /mob/living/silicon))
|
||||
return src.attack_hand(user)
|
||||
if(istype(user, /mob/living/silicon))
|
||||
return attack_hand(user)
|
||||
else // trying to unlock the interface
|
||||
if (src.allowed(usr))
|
||||
if(allowed(usr))
|
||||
locked = !locked
|
||||
user << "You [ locked ? "lock" : "unlock"] the device."
|
||||
if (locked)
|
||||
if (user.machine==src)
|
||||
if(locked)
|
||||
if(user.machine==src)
|
||||
user.unset_machine()
|
||||
user << browse(null, "window=ai_slipper")
|
||||
else
|
||||
if (user.machine==src)
|
||||
src.attack_hand(usr)
|
||||
if(user.machine==src)
|
||||
attack_hand(usr)
|
||||
else
|
||||
user << "<span class='warning'>Access denied.</span>"
|
||||
return
|
||||
@@ -62,8 +61,8 @@
|
||||
/obj/machinery/ai_slipper/attack_hand(mob/user as mob)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
if ( (get_dist(src, user) > 1 ))
|
||||
if (!istype(user, /mob/living/silicon))
|
||||
if((get_dist(src, user) > 1))
|
||||
if(!istype(user, /mob/living/silicon))
|
||||
user << text("Too far away.")
|
||||
user.unset_machine()
|
||||
user << browse(null, "window=ai_slipper")
|
||||
@@ -71,18 +70,18 @@
|
||||
|
||||
user.set_machine(src)
|
||||
var/loc = src.loc
|
||||
if (istype(loc, /turf))
|
||||
if(istype(loc, /turf))
|
||||
loc = loc:loc
|
||||
if (!istype(loc, /area))
|
||||
if(!istype(loc, /area))
|
||||
user << text("Turret badly positioned - loc.loc is [].", loc)
|
||||
return
|
||||
var/area/area = loc
|
||||
var/t = "<TT><B>AI Liquid Dispenser</B> ([area.name])<HR>"
|
||||
|
||||
if(src.locked && (!istype(user, /mob/living/silicon)))
|
||||
if(locked && (!istype(user, /mob/living/silicon)))
|
||||
t += "<I>(Swipe ID card to unlock control panel.)</I><BR>"
|
||||
else
|
||||
t += text("Dispenser [] - <A href='?src=\ref[];toggleOn=1'>[]?</a><br>\n", src.disabled?"deactivated":"activated", src, src.disabled?"Enable":"Disable")
|
||||
t += text("Dispenser [] - <A href='?src=\ref[];toggleOn=1'>[]?</a><br>\n", disabled?"deactivated":"activated", src, disabled?"Enable":"Disable")
|
||||
t += text("Uses Left: [uses]. <A href='?src=\ref[src];toggleUse=1'>Activate the dispenser?</A><br>\n")
|
||||
|
||||
user << browse(t, "window=computer;size=575x450")
|
||||
@@ -91,25 +90,25 @@
|
||||
|
||||
/obj/machinery/ai_slipper/Topic(href, href_list)
|
||||
..()
|
||||
if (src.locked)
|
||||
if (!istype(usr, /mob/living/silicon))
|
||||
if(locked)
|
||||
if(!istype(usr, /mob/living/silicon))
|
||||
usr << "Control panel is locked!"
|
||||
return
|
||||
if (href_list["toggleOn"])
|
||||
src.disabled = !src.disabled
|
||||
if(href_list["toggleOn"])
|
||||
disabled = !disabled
|
||||
update_icon()
|
||||
if (href_list["toggleUse"])
|
||||
if(href_list["toggleUse"])
|
||||
if(cooldown_on || disabled)
|
||||
return
|
||||
else
|
||||
new /obj/effect/effect/foam(src.loc)
|
||||
src.uses--
|
||||
uses--
|
||||
cooldown_on = 1
|
||||
cooldown_time = world.timeofday + 100
|
||||
slip_process()
|
||||
return
|
||||
|
||||
src.attack_hand(usr)
|
||||
attack_hand(usr)
|
||||
return
|
||||
|
||||
/obj/machinery/ai_slipper/proc/slip_process()
|
||||
@@ -122,9 +121,9 @@
|
||||
|
||||
cooldown_timeleft = (ticksleft / 10)
|
||||
sleep(5)
|
||||
if (uses <= 0)
|
||||
if(uses <= 0)
|
||||
return
|
||||
if (uses >= 0)
|
||||
if(uses >= 0)
|
||||
cooldown_on = 0
|
||||
src.power_change()
|
||||
return
|
||||
power_change()
|
||||
return
|
||||
+146
-197
@@ -51,10 +51,10 @@
|
||||
var/rcon_setting = 2
|
||||
var/rcon_time = 0
|
||||
var/locked = 1
|
||||
var/wiresexposed = 0 // If it's been screwdrivered open.
|
||||
panel_open = 0 // If it's been screwdrivered open.
|
||||
var/aidisabled = 0
|
||||
var/shorted = 0
|
||||
circuit = /obj/item/weapon/circuitboard/airalarm
|
||||
circuit = /obj/item/weapon/circuitboard/airalarm
|
||||
|
||||
var/datum/wires/alarm/wires
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
/obj/machinery/alarm/proc/first_run()
|
||||
alarm_area = get_area(src)
|
||||
area_uid = alarm_area.uid
|
||||
if (name == "alarm")
|
||||
if(name == "alarm")
|
||||
name = "[alarm_area.name] Air Alarm"
|
||||
|
||||
if(!wires)
|
||||
@@ -123,20 +123,20 @@
|
||||
TLV["carbon dioxide"] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa
|
||||
TLV["phoron"] = list(-1.0, -1.0, 0.2, 0.5) // Partial pressure, kpa
|
||||
TLV["other"] = list(-1.0, -1.0, 0.5, 1.0) // Partial pressure, kpa
|
||||
TLV["pressure"] = list(ONE_ATMOSPHERE*0.80,ONE_ATMOSPHERE*0.90,ONE_ATMOSPHERE*1.10,ONE_ATMOSPHERE*1.20) /* kpa */
|
||||
TLV["temperature"] = list(T0C-26, T0C, T0C+40, T0C+66) // K
|
||||
TLV["pressure"] = list(ONE_ATMOSPHERE * 0.80, ONE_ATMOSPHERE * 0.90, ONE_ATMOSPHERE * 1.10, ONE_ATMOSPHERE * 1.20) /* kpa */
|
||||
TLV["temperature"] = list(T0C - 26, T0C, T0C + 40, T0C + 66) // K
|
||||
|
||||
|
||||
/obj/machinery/alarm/initialize()
|
||||
set_frequency(frequency)
|
||||
if (!master_is_operating())
|
||||
if(!master_is_operating())
|
||||
elect_master()
|
||||
|
||||
/obj/machinery/alarm/process()
|
||||
if((stat & (NOPOWER|BROKEN)) || shorted)
|
||||
return
|
||||
|
||||
var/turf/simulated/location = loc
|
||||
var/turf/simulated/location = src.loc
|
||||
if(!istype(location)) return//returns if loc is not simulated
|
||||
|
||||
var/datum/gas_mixture/environment = location.return_air()
|
||||
@@ -148,16 +148,16 @@
|
||||
var/old_pressurelevel = pressure_dangerlevel
|
||||
danger_level = overall_danger_level(environment)
|
||||
|
||||
if (old_level != danger_level)
|
||||
if(old_level != danger_level)
|
||||
apply_danger_level(danger_level)
|
||||
|
||||
if (old_pressurelevel != pressure_dangerlevel)
|
||||
if (breach_detected())
|
||||
if(old_pressurelevel != pressure_dangerlevel)
|
||||
if(breach_detected())
|
||||
mode = AALARM_MODE_OFF
|
||||
apply_mode()
|
||||
|
||||
if (mode==AALARM_MODE_CYCLE && environment.return_pressure()<ONE_ATMOSPHERE*0.05)
|
||||
mode=AALARM_MODE_FILL
|
||||
if(mode == AALARM_MODE_CYCLE && environment.return_pressure() < ONE_ATMOSPHERE * 0.05)
|
||||
mode = AALARM_MODE_FILL
|
||||
apply_mode()
|
||||
|
||||
//atmos computer remote controll stuff
|
||||
@@ -175,7 +175,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/alarm/proc/handle_heating_cooling(var/datum/gas_mixture/environment)
|
||||
if (!regulating_temperature)
|
||||
if(!regulating_temperature)
|
||||
//check for when we should start adjusting temperature
|
||||
if(!get_danger_level(target_temperature, TLV["temperature"]) && abs(environment.temperature - target_temperature) > 2.0)
|
||||
update_use_power(2)
|
||||
@@ -184,13 +184,13 @@
|
||||
"You hear a click and a faint electronic hum.")
|
||||
else
|
||||
//check for when we should stop adjusting temperature
|
||||
if (get_danger_level(target_temperature, TLV["temperature"]) || abs(environment.temperature - target_temperature) <= 0.5)
|
||||
if(get_danger_level(target_temperature, TLV["temperature"]) || abs(environment.temperature - target_temperature) <= 0.5)
|
||||
update_use_power(1)
|
||||
regulating_temperature = 0
|
||||
visible_message("\The [src] clicks quietly as it stops [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\
|
||||
"You hear a click as a faint electronic humming stops.")
|
||||
|
||||
if (regulating_temperature)
|
||||
if(regulating_temperature)
|
||||
if(target_temperature > T0C + MAX_TEMPERATURE)
|
||||
target_temperature = T0C + MAX_TEMPERATURE
|
||||
|
||||
@@ -198,11 +198,11 @@
|
||||
target_temperature = T0C + MIN_TEMPERATURE
|
||||
|
||||
var/datum/gas_mixture/gas
|
||||
gas = environment.remove(0.25*environment.total_moles)
|
||||
gas = environment.remove(0.25 * environment.total_moles)
|
||||
if(gas)
|
||||
|
||||
if (gas.temperature <= target_temperature) //gas heating
|
||||
var/energy_used = min( gas.get_thermal_energy_change(target_temperature) , active_power_usage)
|
||||
if(gas.temperature <= target_temperature) //gas heating
|
||||
var/energy_used = min(gas.get_thermal_energy_change(target_temperature) , active_power_usage)
|
||||
|
||||
gas.add_thermal_energy(energy_used)
|
||||
//use_power(energy_used, ENVIRON) //handle by update_use_power instead
|
||||
@@ -212,7 +212,7 @@
|
||||
//Assume the heat is being pumped into the hull which is fixed at 20 C
|
||||
//none of this is really proper thermodynamics but whatever
|
||||
|
||||
var/cop = gas.temperature/T20C //coefficient of performance -> power used = heat_transfer/cop
|
||||
var/cop = gas.temperature / T20C //coefficient of performance -> power used = heat_transfer/cop
|
||||
|
||||
heat_transfer = min(heat_transfer, cop * active_power_usage) //this ensures that we don't use more than active_power_usage amount of power
|
||||
|
||||
@@ -223,7 +223,7 @@
|
||||
environment.merge(gas)
|
||||
|
||||
/obj/machinery/alarm/proc/overall_danger_level(var/datum/gas_mixture/environment)
|
||||
var/partial_pressure = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume
|
||||
var/partial_pressure = R_IDEAL_GAS_EQUATION * environment.temperature/environment.volume
|
||||
var/environment_pressure = environment.return_pressure()
|
||||
|
||||
var/other_moles = 0
|
||||
@@ -248,7 +248,7 @@
|
||||
|
||||
// Returns whether this air alarm thinks there is a breach, given the sensors that are available to it.
|
||||
/obj/machinery/alarm/proc/breach_detected()
|
||||
var/turf/simulated/location = loc
|
||||
var/turf/simulated/location = src.loc
|
||||
|
||||
if(!istype(location))
|
||||
return 0
|
||||
@@ -260,20 +260,18 @@
|
||||
var/environment_pressure = environment.return_pressure()
|
||||
var/pressure_levels = TLV["pressure"]
|
||||
|
||||
if (environment_pressure <= pressure_levels[1]) //low pressures
|
||||
if (!(mode == AALARM_MODE_PANIC || mode == AALARM_MODE_CYCLE))
|
||||
if(environment_pressure <= pressure_levels[1]) //low pressures
|
||||
if(!(mode == AALARM_MODE_PANIC || mode == AALARM_MODE_CYCLE))
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
/obj/machinery/alarm/proc/master_is_operating()
|
||||
return alarm_area.master_air_alarm && !(alarm_area.master_air_alarm.stat & (NOPOWER|BROKEN))
|
||||
|
||||
return alarm_area.master_air_alarm && !(alarm_area.master_air_alarm.stat & (NOPOWER | BROKEN))
|
||||
|
||||
/obj/machinery/alarm/proc/elect_master()
|
||||
for (var/obj/machinery/alarm/AA in alarm_area)
|
||||
if (!(AA.stat & (NOPOWER|BROKEN)))
|
||||
for(var/obj/machinery/alarm/AA in alarm_area)
|
||||
if(!(AA.stat & (NOPOWER|BROKEN)))
|
||||
alarm_area.master_air_alarm = AA
|
||||
return 1
|
||||
return 0
|
||||
@@ -286,7 +284,7 @@
|
||||
return 0
|
||||
|
||||
/obj/machinery/alarm/update_icon()
|
||||
if(wiresexposed)
|
||||
if(panel_open)
|
||||
icon_state = "alarmx"
|
||||
set_light(0)
|
||||
return
|
||||
@@ -296,18 +294,18 @@
|
||||
return
|
||||
|
||||
var/icon_level = danger_level
|
||||
if (alarm_area.atmosalm)
|
||||
if(alarm_area.atmosalm)
|
||||
icon_level = max(icon_level, 1) //if there's an atmos alarm but everything is okay locally, no need to go past yellow
|
||||
|
||||
var/new_color = null
|
||||
switch(icon_level)
|
||||
if (0)
|
||||
if(0)
|
||||
icon_state = "alarm0"
|
||||
new_color = "#03A728"
|
||||
if (1)
|
||||
if(1)
|
||||
icon_state = "alarm2" //yes, alarm2 is yellow alarm
|
||||
new_color = "#EC8B2F"
|
||||
if (2)
|
||||
if(2)
|
||||
icon_state = "alarm1"
|
||||
new_color = "#DA0205"
|
||||
|
||||
@@ -316,20 +314,20 @@
|
||||
/obj/machinery/alarm/receive_signal(datum/signal/signal)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
if (alarm_area.master_air_alarm != src)
|
||||
if (master_is_operating())
|
||||
if(alarm_area.master_air_alarm != src)
|
||||
if(master_is_operating())
|
||||
return
|
||||
elect_master()
|
||||
if (alarm_area.master_air_alarm != src)
|
||||
if(alarm_area.master_air_alarm != src)
|
||||
return
|
||||
if(!signal || signal.encryption)
|
||||
return
|
||||
var/id_tag = signal.data["tag"]
|
||||
if (!id_tag)
|
||||
if(!id_tag)
|
||||
return
|
||||
if (signal.data["area"] != area_uid)
|
||||
if(signal.data["area"] != area_uid)
|
||||
return
|
||||
if (signal.data["sigtype"] != "status")
|
||||
if(signal.data["sigtype"] != "status")
|
||||
return
|
||||
|
||||
var/dev_type = signal.data["device"]
|
||||
@@ -342,28 +340,28 @@
|
||||
|
||||
/obj/machinery/alarm/proc/register_env_machine(var/m_id, var/device_type)
|
||||
var/new_name
|
||||
if (device_type=="AVP")
|
||||
if(device_type == "AVP")
|
||||
new_name = "[alarm_area.name] Vent Pump #[alarm_area.air_vent_names.len+1]"
|
||||
alarm_area.air_vent_names[m_id] = new_name
|
||||
else if (device_type=="AScr")
|
||||
else if(device_type == "AScr")
|
||||
new_name = "[alarm_area.name] Air Scrubber #[alarm_area.air_scrub_names.len+1]"
|
||||
alarm_area.air_scrub_names[m_id] = new_name
|
||||
else
|
||||
return
|
||||
spawn (10)
|
||||
send_signal(m_id, list("init" = new_name) )
|
||||
spawn(10)
|
||||
send_signal(m_id, list("init" = new_name))
|
||||
|
||||
/obj/machinery/alarm/proc/refresh_all()
|
||||
for(var/id_tag in alarm_area.air_vent_names)
|
||||
var/list/I = alarm_area.air_vent_info[id_tag]
|
||||
if (I && I["timestamp"]+AALARM_REPORT_TIMEOUT/2 > world.time)
|
||||
if(I && I["timestamp"] + AALARM_REPORT_TIMEOUT / 2 > world.time)
|
||||
continue
|
||||
send_signal(id_tag, list("status") )
|
||||
send_signal(id_tag, list("status"))
|
||||
for(var/id_tag in alarm_area.air_scrub_names)
|
||||
var/list/I = alarm_area.air_scrub_info[id_tag]
|
||||
if (I && I["timestamp"]+AALARM_REPORT_TIMEOUT/2 > world.time)
|
||||
if(I && I["timestamp"] + AALARM_REPORT_TIMEOUT / 2 > world.time)
|
||||
continue
|
||||
send_signal(id_tag, list("status") )
|
||||
send_signal(id_tag, list("status"))
|
||||
|
||||
/obj/machinery/alarm/proc/set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
@@ -390,42 +388,42 @@
|
||||
/obj/machinery/alarm/proc/apply_mode()
|
||||
//propagate mode to other air alarms in the area
|
||||
//TODO: make it so that players can choose between applying the new mode to the room they are in (related area) vs the entire alarm area
|
||||
for (var/obj/machinery/alarm/AA in alarm_area)
|
||||
for(var/obj/machinery/alarm/AA in alarm_area)
|
||||
AA.mode = mode
|
||||
|
||||
switch(mode)
|
||||
if(AALARM_MODE_SCRUBBING)
|
||||
for(var/device_id in alarm_area.air_scrub_names)
|
||||
send_signal(device_id, list("power"= 1, "co2_scrub"= 1, "scrubbing"= 1, "panic_siphon"= 0) )
|
||||
send_signal(device_id, list("power"= 1, "co2_scrub"= 1, "scrubbing"= 1, "panic_siphon"= 0))
|
||||
for(var/device_id in alarm_area.air_vent_names)
|
||||
send_signal(device_id, list("power"= 1, "checks"= "default", "set_external_pressure"= "default") )
|
||||
send_signal(device_id, list("power"= 1, "checks"= "default", "set_external_pressure"= "default"))
|
||||
|
||||
if(AALARM_MODE_PANIC, AALARM_MODE_CYCLE)
|
||||
for(var/device_id in alarm_area.air_scrub_names)
|
||||
send_signal(device_id, list("power"= 1, "panic_siphon"= 1) )
|
||||
send_signal(device_id, list("power"= 1, "panic_siphon"= 1))
|
||||
for(var/device_id in alarm_area.air_vent_names)
|
||||
send_signal(device_id, list("power"= 0) )
|
||||
send_signal(device_id, list("power"= 0))
|
||||
|
||||
if(AALARM_MODE_REPLACEMENT)
|
||||
for(var/device_id in alarm_area.air_scrub_names)
|
||||
send_signal(device_id, list("power"= 1, "panic_siphon"= 1) )
|
||||
send_signal(device_id, list("power"= 1, "panic_siphon"= 1))
|
||||
for(var/device_id in alarm_area.air_vent_names)
|
||||
send_signal(device_id, list("power"= 1, "checks"= "default", "set_external_pressure"= "default") )
|
||||
send_signal(device_id, list("power"= 1, "checks"= "default", "set_external_pressure"= "default"))
|
||||
|
||||
if(AALARM_MODE_FILL)
|
||||
for(var/device_id in alarm_area.air_scrub_names)
|
||||
send_signal(device_id, list("power"= 0) )
|
||||
send_signal(device_id, list("power"= 0))
|
||||
for(var/device_id in alarm_area.air_vent_names)
|
||||
send_signal(device_id, list("power"= 1, "checks"= "default", "set_external_pressure"= "default") )
|
||||
send_signal(device_id, list("power"= 1, "checks"= "default", "set_external_pressure"= "default"))
|
||||
|
||||
if(AALARM_MODE_OFF)
|
||||
for(var/device_id in alarm_area.air_scrub_names)
|
||||
send_signal(device_id, list("power"= 0) )
|
||||
send_signal(device_id, list("power"= 0))
|
||||
for(var/device_id in alarm_area.air_vent_names)
|
||||
send_signal(device_id, list("power"= 0) )
|
||||
send_signal(device_id, list("power"= 0))
|
||||
|
||||
/obj/machinery/alarm/proc/apply_danger_level(var/new_danger_level)
|
||||
if (report_danger_level && alarm_area.atmosalert(new_danger_level, src))
|
||||
if(report_danger_level && alarm_area.atmosalert(new_danger_level, src))
|
||||
post_alert(new_danger_level)
|
||||
|
||||
update_icon()
|
||||
@@ -443,9 +441,9 @@
|
||||
|
||||
if(alert_level==2)
|
||||
alert_signal.data["alert"] = "severe"
|
||||
else if (alert_level==1)
|
||||
else if(alert_level==1)
|
||||
alert_signal.data["alert"] = "minor"
|
||||
else if (alert_level==0)
|
||||
else if(alert_level==0)
|
||||
alert_signal.data["alert"] = "clear"
|
||||
|
||||
frequency.post_signal(src, alert_signal)
|
||||
@@ -455,7 +453,7 @@
|
||||
|
||||
/obj/machinery/alarm/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if (.)
|
||||
if(.)
|
||||
return
|
||||
return interact(user)
|
||||
|
||||
@@ -485,7 +483,7 @@
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "air_alarm.tmpl", src.name, 325, 625, master_ui = master_ui, state = state)
|
||||
ui = new(user, src, ui_key, "air_alarm.tmpl", name, 325, 625, master_ui = master_ui, state = state)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
@@ -570,7 +568,7 @@
|
||||
"carbon dioxide" = "CO<sub>2</sub>",
|
||||
"phoron" = "Toxin",
|
||||
"other" = "Other")
|
||||
for (var/g in gas_names)
|
||||
for(var/g in gas_names)
|
||||
thresholds[++thresholds.len] = list("name" = gas_names[g], "settings" = list())
|
||||
selected = TLV[g]
|
||||
for(var/i = 1, i <= 4, i++)
|
||||
@@ -586,7 +584,6 @@
|
||||
for(var/i = 1, i <= 4, i++)
|
||||
thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = i, "selected" = selected[i]))
|
||||
|
||||
|
||||
data["thresholds"] = thresholds
|
||||
|
||||
/obj/machinery/alarm/CanUseTopic(var/mob/user, var/datum/topic_state/state, var/href_list = list())
|
||||
@@ -660,7 +657,7 @@
|
||||
"panic_siphon",
|
||||
"scrubbing")
|
||||
|
||||
send_signal(device_id, list(href_list["command"] = text2num(href_list["val"]) ) )
|
||||
send_signal(device_id, list(href_list["command"] = text2num(href_list["val"])))
|
||||
return 1
|
||||
|
||||
if("set_threshold")
|
||||
@@ -668,16 +665,16 @@
|
||||
var/threshold = text2num(href_list["var"])
|
||||
var/list/selected = TLV[env]
|
||||
var/list/thresholds = list("lower bound", "low warning", "high warning", "upper bound")
|
||||
var/newval = input("Enter [thresholds[threshold]] for [env]", "Alarm triggers", selected[threshold]) as null|num
|
||||
if (isnull(newval))
|
||||
var/newval = input("Enter [thresholds[threshold]] for [env]", "Alarm triggers", selected[threshold]) as null | num
|
||||
if(isnull(newval))
|
||||
return 1
|
||||
if (newval<0)
|
||||
if(newval<0)
|
||||
selected[threshold] = -1.0
|
||||
else if (env=="temperature" && newval>5000)
|
||||
else if(env=="temperature" && newval>5000)
|
||||
selected[threshold] = 5000
|
||||
else if (env=="pressure" && newval>50*ONE_ATMOSPHERE)
|
||||
else if(env=="pressure" && newval>50*ONE_ATMOSPHERE)
|
||||
selected[threshold] = 50*ONE_ATMOSPHERE
|
||||
else if (env!="temperature" && env!="pressure" && newval>200)
|
||||
else if(env!="temperature" && env!="pressure" && newval>200)
|
||||
selected[threshold] = 200
|
||||
else
|
||||
newval = round(newval,0.01)
|
||||
@@ -727,13 +724,13 @@
|
||||
return 1
|
||||
|
||||
if(href_list["atmos_alarm"])
|
||||
if (alarm_area.atmosalert(2, src))
|
||||
if(alarm_area.atmosalert(2, src))
|
||||
apply_danger_level(2)
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
if(href_list["atmos_reset"])
|
||||
if (alarm_area.atmosalert(0, src))
|
||||
if(alarm_area.atmosalert(0, src))
|
||||
apply_danger_level(0)
|
||||
update_icon()
|
||||
return 1
|
||||
@@ -744,35 +741,13 @@
|
||||
return 1
|
||||
|
||||
/obj/machinery/alarm/attackby(obj/item/W as obj, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
if(istype(W, /obj/item/weapon/screwdriver)) // Opening that Air Alarm up.
|
||||
//user << "You pop the Air Alarm's maintence panel open."
|
||||
wiresexposed = !wiresexposed
|
||||
user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]"
|
||||
update_icon()
|
||||
add_fingerprint(user)
|
||||
if(alarm_deconstruction_screwdriver(user, W))
|
||||
return
|
||||
if(alarm_deconstruction_wirecutters(user, W))
|
||||
return
|
||||
|
||||
if (wiresexposed && istype(W, /obj/item/weapon/wirecutters))
|
||||
user.visible_message("<span class='warning'>[user] has cut the wires inside \the [src]!</span>", "You have cut the wires inside \the [src].")
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
new/obj/item/stack/cable_coil(get_turf(src), 5)
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.frame_type = "airalarm"
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.set_dir(dir)
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
A.state = 2
|
||||
A.icon_state = "airalarm_2"
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card
|
||||
if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
user << "It does nothing"
|
||||
return
|
||||
@@ -822,14 +797,14 @@ FIRE ALARM
|
||||
active_power_usage = 6
|
||||
power_channel = ENVIRON
|
||||
var/last_process = 0
|
||||
var/wiresexposed = 0
|
||||
panel_open = 0
|
||||
var/seclevel
|
||||
circuit = /obj/item/weapon/circuitboard/firealarm
|
||||
circuit = /obj/item/weapon/circuitboard/firealarm
|
||||
|
||||
/obj/machinery/firealarm/update_icon()
|
||||
overlays.Cut()
|
||||
|
||||
if(wiresexposed)
|
||||
if(panel_open)
|
||||
set_light(0)
|
||||
return
|
||||
|
||||
@@ -840,7 +815,7 @@ FIRE ALARM
|
||||
icon_state = "firep"
|
||||
set_light(0)
|
||||
else
|
||||
if(!src.detecting)
|
||||
if(!detecting)
|
||||
icon_state = "fire1"
|
||||
set_light(l_range = 4, l_power = 2, l_color = "#ff0000")
|
||||
else
|
||||
@@ -851,79 +826,56 @@ FIRE ALARM
|
||||
if("red") set_light(l_range = 4, l_power = 2, l_color = "#ff0000")
|
||||
if("delta") set_light(l_range = 4, l_power = 2, l_color = "#FF6633")
|
||||
|
||||
src.overlays += image('icons/obj/monitors.dmi', "overlay_[seclevel]")
|
||||
overlays += image('icons/obj/monitors.dmi', "overlay_[seclevel]")
|
||||
|
||||
/obj/machinery/firealarm/fire_act(datum/gas_mixture/air, temperature, volume)
|
||||
if(src.detecting)
|
||||
if(temperature > T0C+200)
|
||||
src.alarm() // added check of detector status here
|
||||
if(detecting)
|
||||
if(temperature > T0C + 200)
|
||||
alarm() // added check of detector status here
|
||||
return
|
||||
|
||||
/obj/machinery/firealarm/attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/firealarm/bullet_act()
|
||||
return src.alarm()
|
||||
return alarm()
|
||||
|
||||
/obj/machinery/firealarm/emp_act(severity)
|
||||
if(prob(50/severity))
|
||||
alarm(rand(30/severity, 60/severity))
|
||||
if(prob(50 / severity))
|
||||
alarm(rand(30 / severity, 60 / severity))
|
||||
..()
|
||||
|
||||
/obj/machinery/firealarm/attackby(obj/item/W as obj, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
add_fingerprint(user)
|
||||
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
wiresexposed = !wiresexposed
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(wiresexposed)
|
||||
if (istype(W, /obj/item/device/multitool))
|
||||
src.detecting = !( src.detecting )
|
||||
if (src.detecting)
|
||||
if(panel_open)
|
||||
if(istype(W, /obj/item/device/multitool))
|
||||
detecting = !(detecting)
|
||||
if(detecting)
|
||||
user.visible_message("<span class='notice'>\The [user] has reconnected [src]'s detecting unit!</span>", "<span class='notice'>You have reconnected [src]'s detecting unit.</span>")
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] has disconnected [src]'s detecting unit!</span>", "<span class='notice'>You have disconnected [src]'s detecting unit.</span>")
|
||||
else if (istype(W, /obj/item/weapon/wirecutters))
|
||||
user.visible_message("<span class='notice'>\The [user] has cut the wires inside \the [src]!</span>", "<span class='notice'>You have cut the wires inside \the [src].</span>")
|
||||
new/obj/item/stack/cable_coil(get_turf(src), 5)
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.frame_type = "firealarm"
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.set_dir(dir)
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
A.state = 2
|
||||
A.icon_state = "firealarm_2"
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
src.alarm()
|
||||
alarm()
|
||||
return
|
||||
|
||||
/obj/machinery/firealarm/process()//Note: this processing was mostly phased out due to other code, and only runs when needed
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
|
||||
if(src.timing)
|
||||
if(src.time > 0)
|
||||
src.time = src.time - ((world.timeofday - last_process)/10)
|
||||
if(timing)
|
||||
if(time > 0)
|
||||
time = time - ((world.timeofday - last_process) / 10)
|
||||
else
|
||||
src.alarm()
|
||||
src.time = 0
|
||||
src.timing = 0
|
||||
alarm()
|
||||
time = 0
|
||||
timing = 0
|
||||
processing_objects.Remove(src)
|
||||
src.updateDialog()
|
||||
updateDialog()
|
||||
last_process = world.timeofday
|
||||
|
||||
if(locate(/obj/fire) in loc)
|
||||
if(locate(/obj/fire) in src.loc)
|
||||
alarm()
|
||||
|
||||
return
|
||||
@@ -934,41 +886,41 @@ FIRE ALARM
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/firealarm/attack_hand(mob/user as mob)
|
||||
if(user.stat || stat & (NOPOWER|BROKEN))
|
||||
if(user.stat || stat & (NOPOWER | BROKEN))
|
||||
return
|
||||
|
||||
user.set_machine(src)
|
||||
var/area/A = src.loc
|
||||
var/d1
|
||||
var/d2
|
||||
if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon))
|
||||
if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon))
|
||||
A = A.loc
|
||||
|
||||
if (A.fire)
|
||||
if(A.fire)
|
||||
d1 = text("<A href='?src=\ref[];reset=1'>Reset - Lockdown</A>", src)
|
||||
else
|
||||
d1 = text("<A href='?src=\ref[];alarm=1'>Alarm - Lockdown</A>", src)
|
||||
if (src.timing)
|
||||
if(timing)
|
||||
d2 = text("<A href='?src=\ref[];time=0'>Stop Time Lock</A>", src)
|
||||
else
|
||||
d2 = text("<A href='?src=\ref[];time=1'>Initiate Time Lock</A>", src)
|
||||
var/second = round(src.time) % 60
|
||||
var/minute = (round(src.time) - second) / 60
|
||||
var/second = round(time) % 60
|
||||
var/minute = (round(time) - second) / 60
|
||||
var/dat = "<HTML><HEAD></HEAD><BODY><TT><B>Fire alarm</B> [d1]\n<HR>The current alert level is: <b>[get_security_level()]</b><br><br>\nTimer System: [d2]<BR>\nTime Left: [(minute ? "[minute]:" : null)][second] <A href='?src=\ref[src];tp=-30'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=30'>+</A>\n</TT></BODY></HTML>"
|
||||
user << browse(dat, "window=firealarm")
|
||||
onclose(user, "firealarm")
|
||||
else
|
||||
A = A.loc
|
||||
if (A.fire)
|
||||
if(A.fire)
|
||||
d1 = text("<A href='?src=\ref[];reset=1'>[]</A>", src, stars("Reset - Lockdown"))
|
||||
else
|
||||
d1 = text("<A href='?src=\ref[];alarm=1'>[]</A>", src, stars("Alarm - Lockdown"))
|
||||
if (src.timing)
|
||||
if(timing)
|
||||
d2 = text("<A href='?src=\ref[];time=0'>[]</A>", src, stars("Stop Time Lock"))
|
||||
else
|
||||
d2 = text("<A href='?src=\ref[];time=1'>[]</A>", src, stars("Initiate Time Lock"))
|
||||
var/second = round(src.time) % 60
|
||||
var/minute = (round(src.time) - second) / 60
|
||||
var/second = round(time) % 60
|
||||
var/minute = (round(time) - second) / 60
|
||||
var/dat = "<HTML><HEAD></HEAD><BODY><TT><B>[stars("Fire alarm")]</B> [d1]\n<HR><b>The current alert level is: [stars(get_security_level())]</b><br><br>\nTimer System: [d2]<BR>\nTime Left: [(minute ? text("[]:", minute) : null)][second] <A href='?src=\ref[src];tp=-30'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=30'>+</A>\n</TT></BODY></HTML>"
|
||||
user << browse(dat, "window=firealarm")
|
||||
onclose(user, "firealarm")
|
||||
@@ -976,43 +928,43 @@ FIRE ALARM
|
||||
|
||||
/obj/machinery/firealarm/Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat || stat & (BROKEN|NOPOWER))
|
||||
if(usr.stat || stat & (BROKEN | NOPOWER))
|
||||
return
|
||||
|
||||
if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
usr.set_machine(src)
|
||||
if (href_list["reset"])
|
||||
src.reset()
|
||||
else if (href_list["alarm"])
|
||||
src.alarm()
|
||||
else if (href_list["time"])
|
||||
src.timing = text2num(href_list["time"])
|
||||
if(href_list["reset"])
|
||||
reset()
|
||||
else if(href_list["alarm"])
|
||||
alarm()
|
||||
else if(href_list["time"])
|
||||
timing = text2num(href_list["time"])
|
||||
last_process = world.timeofday
|
||||
processing_objects.Add(src)
|
||||
else if (href_list["tp"])
|
||||
else if(href_list["tp"])
|
||||
var/tp = text2num(href_list["tp"])
|
||||
src.time += tp
|
||||
src.time = min(max(round(src.time), 0), 120)
|
||||
time += tp
|
||||
time = min(max(round(time), 0), 120)
|
||||
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
add_fingerprint(usr)
|
||||
else
|
||||
usr << browse(null, "window=firealarm")
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/firealarm/proc/reset()
|
||||
if (!( src.working ))
|
||||
if(!(working))
|
||||
return
|
||||
var/area/area = get_area(src)
|
||||
for(var/obj/machinery/firealarm/FA in area)
|
||||
fire_alarm.clearAlarm(loc, FA)
|
||||
fire_alarm.clearAlarm(src.loc, FA)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/machinery/firealarm/proc/alarm(var/duration = 0)
|
||||
if (!( src.working))
|
||||
if(!(working))
|
||||
return
|
||||
var/area/area = get_area(src)
|
||||
for(var/obj/machinery/firealarm/FA in area)
|
||||
@@ -1066,13 +1018,13 @@ Just a object used in constructing fire alarms
|
||||
ASSERT(isarea(A))
|
||||
var/d1
|
||||
var/d2
|
||||
if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai))
|
||||
if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai))
|
||||
|
||||
if (A.party)
|
||||
if(A.party)
|
||||
d1 = text("<A href='?src=\ref[];reset=1'>No Party :(</A>", src)
|
||||
else
|
||||
d1 = text("<A href='?src=\ref[];alarm=1'>PARTY!!!</A>", src)
|
||||
if (timing)
|
||||
if(timing)
|
||||
d2 = text("<A href='?src=\ref[];time=0'>Stop Time Lock</A>", src)
|
||||
else
|
||||
d2 = text("<A href='?src=\ref[];time=1'>Initiate Time Lock</A>", src)
|
||||
@@ -1082,11 +1034,11 @@ Just a object used in constructing fire alarms
|
||||
user << browse(dat, "window=partyalarm")
|
||||
onclose(user, "partyalarm")
|
||||
else
|
||||
if (A.fire)
|
||||
if(A.fire)
|
||||
d1 = text("<A href='?src=\ref[];reset=1'>[]</A>", src, stars("No Party :("))
|
||||
else
|
||||
d1 = text("<A href='?src=\ref[];alarm=1'>[]</A>", src, stars("PARTY!!!"))
|
||||
if (timing)
|
||||
if(timing)
|
||||
d2 = text("<A href='?src=\ref[];time=0'>[]</A>", src, stars("Stop Time Lock"))
|
||||
else
|
||||
d2 = text("<A href='?src=\ref[];time=1'>[]</A>", src, stars("Initiate Time Lock"))
|
||||
@@ -1098,7 +1050,7 @@ Just a object used in constructing fire alarms
|
||||
return
|
||||
|
||||
/obj/machinery/partyalarm/proc/reset()
|
||||
if (!( working ))
|
||||
if(!(working))
|
||||
return
|
||||
var/area/A = get_area(src)
|
||||
ASSERT(isarea(A))
|
||||
@@ -1106,7 +1058,7 @@ Just a object used in constructing fire alarms
|
||||
return
|
||||
|
||||
/obj/machinery/partyalarm/proc/alarm()
|
||||
if (!( working ))
|
||||
if(!(working))
|
||||
return
|
||||
var/area/A = get_area(src)
|
||||
ASSERT(isarea(A))
|
||||
@@ -1115,23 +1067,20 @@ Just a object used in constructing fire alarms
|
||||
|
||||
/obj/machinery/partyalarm/Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat || stat & (BROKEN|NOPOWER))
|
||||
if(usr.stat || stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon/ai)))
|
||||
if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon/ai)))
|
||||
usr.machine = src
|
||||
if (href_list["reset"])
|
||||
if(href_list["reset"])
|
||||
reset()
|
||||
else
|
||||
if (href_list["alarm"])
|
||||
alarm()
|
||||
else
|
||||
if (href_list["time"])
|
||||
timing = text2num(href_list["time"])
|
||||
else
|
||||
if (href_list["tp"])
|
||||
var/tp = text2num(href_list["tp"])
|
||||
time += tp
|
||||
time = min(max(round(time), 0), 120)
|
||||
else if(href_list["alarm"])
|
||||
alarm()
|
||||
else if(href_list["time"])
|
||||
timing = text2num(href_list["time"])
|
||||
else if(href_list["tp"])
|
||||
var/tp = text2num(href_list["tp"])
|
||||
time += tp
|
||||
time = min(max(round(time), 0), 120)
|
||||
updateUsrDialog()
|
||||
|
||||
add_fingerprint(usr)
|
||||
|
||||
@@ -58,7 +58,6 @@
|
||||
signal.data["sigtype"]="status"
|
||||
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
|
||||
|
||||
|
||||
/obj/machinery/air_sensor/proc/set_frequency(new_frequency)
|
||||
radio_controller.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
@@ -76,12 +75,9 @@ obj/machinery/air_sensor/Destroy()
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_keyboard = "atmos_key"
|
||||
icon_screen = "tank"
|
||||
|
||||
name = "Computer"
|
||||
|
||||
var/frequency = 1439
|
||||
var/list/sensors = list()
|
||||
|
||||
var/list/sensor_information = list()
|
||||
var/datum/radio_frequency/radio_connection
|
||||
circuit = /obj/item/weapon/circuitboard/air_management
|
||||
@@ -121,8 +117,8 @@ obj/machinery/computer/general_air_control/Destroy()
|
||||
data["sensors"] = sensors_ui
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "atmo_control.tmpl", src.name, 525, 600)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "atmo_control.tmpl", name, 525, 600)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(5)
|
||||
@@ -137,14 +133,11 @@ obj/machinery/computer/general_air_control/Destroy()
|
||||
|
||||
/obj/machinery/computer/general_air_control/large_tank_control
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
|
||||
frequency = 1441
|
||||
var/input_tag
|
||||
var/output_tag
|
||||
|
||||
var/list/input_info
|
||||
var/list/output_info
|
||||
|
||||
var/input_flow_setting = 200
|
||||
var/pressure_setting = ONE_ATMOSPHERE * 45
|
||||
circuit = /obj/item/weapon/circuitboard/air_management/tank_control
|
||||
@@ -179,8 +172,8 @@ obj/machinery/computer/general_air_control/Destroy()
|
||||
data["pressure_setting"] = pressure_setting
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "atmo_control.tmpl", src.name, 660, 500)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "atmo_control.tmpl", name, 660, 500)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(5)
|
||||
@@ -251,14 +244,11 @@ obj/machinery/computer/general_air_control/Destroy()
|
||||
|
||||
/obj/machinery/computer/general_air_control/supermatter_core
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
|
||||
frequency = 1438
|
||||
var/input_tag
|
||||
var/output_tag
|
||||
|
||||
var/list/input_info
|
||||
var/list/output_info
|
||||
|
||||
var/input_flow_setting = 700
|
||||
var/pressure_setting = 100
|
||||
circuit = /obj/item/weapon/circuitboard/air_management/supermatter_core
|
||||
@@ -292,8 +282,8 @@ obj/machinery/computer/general_air_control/Destroy()
|
||||
data["pressure_setting"] = pressure_setting
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "atmo_control.tmpl", src.name, 650, 500)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "atmo_control.tmpl", name, 650, 500)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(5)
|
||||
@@ -365,12 +355,9 @@ obj/machinery/computer/general_air_control/Destroy()
|
||||
/obj/machinery/computer/general_air_control/fuel_injection
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_screen = "alert:0"
|
||||
|
||||
var/device_tag
|
||||
var/list/device_info
|
||||
|
||||
var/automation = 0
|
||||
|
||||
var/cutoff_temperature = 2000
|
||||
var/on_temperature = 1200
|
||||
circuit = /obj/item/weapon/circuitboard/air_management/injector_control
|
||||
@@ -427,8 +414,8 @@ obj/machinery/computer/general_air_control/Destroy()
|
||||
data["device_info"] = null
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "atmo_control.tmpl", src.name, 650, 500)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "atmo_control.tmpl", name, 650, 500)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(5)
|
||||
@@ -494,8 +481,4 @@ obj/machinery/computer/general_air_control/Destroy()
|
||||
"sigtype"="command"
|
||||
)
|
||||
|
||||
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
|
||||
|
||||
|
||||
|
||||
|
||||
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
|
||||
@@ -26,7 +26,6 @@
|
||||
/obj/machinery/autolathe/New()
|
||||
..()
|
||||
wires = new(src)
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
@@ -48,7 +47,6 @@
|
||||
current_category = machine_recipes.categories[1]
|
||||
|
||||
/obj/machinery/autolathe/interact(mob/user as mob)
|
||||
|
||||
update_recipe_list()
|
||||
|
||||
if(..() || (disabled && !panel_open))
|
||||
@@ -119,7 +117,6 @@
|
||||
onclose(user, "autolathe")
|
||||
|
||||
/obj/machinery/autolathe/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
|
||||
if(busy)
|
||||
user << "<span class='notice'>\The [src] is busy. Please wait for completion of previous operation.</span>"
|
||||
return
|
||||
@@ -223,7 +220,6 @@
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/autolathe/Topic(href, href_list)
|
||||
|
||||
if(..())
|
||||
return
|
||||
|
||||
@@ -277,7 +273,7 @@
|
||||
if(!making || !src) return
|
||||
|
||||
//Create the desired item.
|
||||
var/obj/item/I = new making.path(loc)
|
||||
var/obj/item/I = new making.path(src.loc)
|
||||
if(multiplier > 1 && istype(I, /obj/item/stack))
|
||||
var/obj/item/stack/S = I
|
||||
S.amount = multiplier
|
||||
@@ -303,7 +299,6 @@
|
||||
mat_efficiency = 1.1 - man_rating * 0.1// Normally, price is 1.25 the amount of material, so this shouldn't go higher than 0.8. Maximum rating of parts is 3
|
||||
|
||||
/obj/machinery/autolathe/dismantle()
|
||||
|
||||
for(var/mat in stored_material)
|
||||
var/material/M = get_material_by_name(mat)
|
||||
if(!istype(M))
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
var/build_eff = 1
|
||||
var/eat_eff = 1
|
||||
|
||||
|
||||
/obj/machinery/biogenerator/New()
|
||||
..()
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
@@ -23,11 +22,9 @@
|
||||
R.my_atom = src
|
||||
|
||||
beaker = new /obj/item/weapon/reagent_containers/glass/bottle(src)
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/biogenerator/on_reagent_change() //When the reagents change, change the icon as well.
|
||||
@@ -96,13 +93,13 @@
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = "<TITLE>Biogenerator</TITLE>Biogenerator:<BR>"
|
||||
if (processing)
|
||||
if(processing)
|
||||
dat += "<FONT COLOR=red>Biogenerator is processing! Please wait...</FONT>"
|
||||
else
|
||||
dat += "Biomass: [points] points.<HR>"
|
||||
switch(menustat)
|
||||
if("menu")
|
||||
if (beaker)
|
||||
if(beaker)
|
||||
dat += "<A href='?src=\ref[src];action=activate'>Activate Biogenerator!</A><BR>"
|
||||
dat += "<A href='?src=\ref[src];action=detach'>Detach Container</A><BR><BR>"
|
||||
dat += "Food<BR>"
|
||||
@@ -139,9 +136,9 @@
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/biogenerator/proc/activate()
|
||||
if (usr.stat)
|
||||
if(usr.stat)
|
||||
return
|
||||
if (stat) //NOPOWER etc
|
||||
if(stat) //NOPOWER etc
|
||||
return
|
||||
if(processing)
|
||||
usr << "<span class='notice'>The biogenerator is in the process of working.</span>"
|
||||
@@ -255,4 +252,4 @@
|
||||
man_rating += P.rating
|
||||
|
||||
build_eff = man_rating
|
||||
eat_eff = bin_rating
|
||||
eat_eff = bin_rating
|
||||
@@ -10,9 +10,8 @@
|
||||
idle_power_usage = 2
|
||||
active_power_usage = 4
|
||||
|
||||
|
||||
/obj/machinery/button/attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/button/attackby(obj/item/weapon/W, mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
return attack_hand(user)
|
||||
@@ -14,7 +14,7 @@
|
||||
/obj/machinery/cell_charger/update_icon()
|
||||
icon_state = "ccharger[charging ? 1 : 0]"
|
||||
|
||||
if(charging && !(stat & (BROKEN|NOPOWER)) )
|
||||
if(charging && !(stat & (BROKEN|NOPOWER)))
|
||||
|
||||
var/newlevel = round(charging.percent() * 4.0 / 99)
|
||||
//world << "nl: [newlevel]"
|
||||
@@ -73,14 +73,14 @@
|
||||
charging.add_fingerprint(user)
|
||||
charging.update_icon()
|
||||
|
||||
src.charging = null
|
||||
charging = null
|
||||
user.visible_message("[user] removes the cell from the charger.", "You remove the cell from the charger.")
|
||||
chargelevel = -1
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/cell_charger/attack_ai(mob/user)
|
||||
if(istype(user, /mob/living/silicon/robot) && Adjacent(user)) // Borgs can remove the cell if they are near enough
|
||||
if(!src.charging)
|
||||
if(!charging)
|
||||
return
|
||||
|
||||
charging.loc = src.loc
|
||||
@@ -104,7 +104,7 @@
|
||||
update_use_power(0)
|
||||
return
|
||||
|
||||
if (charging && !charging.fully_charged())
|
||||
if(charging && !charging.fully_charged())
|
||||
charging.give(active_power_usage*CELLRATE)
|
||||
update_use_power(2)
|
||||
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
|
||||
/obj/machinery/clonepod/New()
|
||||
..()
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
@@ -184,7 +183,7 @@
|
||||
|
||||
else if((occupant.health >= heal_level) && (!eject_wait))
|
||||
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
|
||||
src.audible_message("\The [src] signals that the cloning process is complete.")
|
||||
audible_message("\The [src] signals that the cloning process is complete.")
|
||||
connected_message("Cloning Process Complete.")
|
||||
locked = 0
|
||||
go_out()
|
||||
@@ -235,7 +234,7 @@
|
||||
connected = null
|
||||
else
|
||||
anchored = 1
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
if(anchored)
|
||||
user.visible_message("[user] secures [src] to the floor.", "You secure [src] to the floor.")
|
||||
else
|
||||
@@ -298,7 +297,7 @@
|
||||
|
||||
if(mess) //Clean that mess and dump those gibs!
|
||||
mess = 0
|
||||
gibs(loc)
|
||||
gibs(src.loc)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
@@ -308,7 +307,7 @@
|
||||
if(occupant.client)
|
||||
occupant.client.eye = occupant.client.mob
|
||||
occupant.client.perspective = MOB_PERSPECTIVE
|
||||
occupant.loc = loc
|
||||
occupant.loc = src.loc
|
||||
eject_wait = 0 //If it's still set somehow.
|
||||
domutcheck(occupant) //Waiting until they're out before possible transforming.
|
||||
occupant = null
|
||||
@@ -342,21 +341,21 @@
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
for(var/atom/movable/A as mob|obj in src)
|
||||
A.loc = loc
|
||||
A.loc = src.loc
|
||||
ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if(prob(50))
|
||||
for(var/atom/movable/A as mob|obj in src)
|
||||
A.loc = loc
|
||||
A.loc = src.loc
|
||||
ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
if(3.0)
|
||||
if(prob(25))
|
||||
for(var/atom/movable/A as mob|obj in src)
|
||||
A.loc = loc
|
||||
A.loc = src.loc
|
||||
ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
@@ -366,9 +365,9 @@
|
||||
/obj/machinery/clonepod/update_icon()
|
||||
..()
|
||||
icon_state = "pod_0"
|
||||
if (occupant && !(stat & NOPOWER))
|
||||
if(occupant && !(stat & NOPOWER))
|
||||
icon_state = "pod_1"
|
||||
else if (mess)
|
||||
else if(mess)
|
||||
icon_state = "pod_g"
|
||||
|
||||
//Health Tracker Implant
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
use_power = 1
|
||||
idle_power_usage = 300
|
||||
active_power_usage = 300
|
||||
frame_type = "computer"
|
||||
var/processing = 0
|
||||
|
||||
var/icon_keyboard = "generic_key"
|
||||
@@ -97,37 +96,8 @@
|
||||
return text
|
||||
|
||||
/obj/machinery/computer/attackby(I as obj, user as mob)
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
|
||||
user << "<span class='notice'>You start disconnecting the monitor.</span>"
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
A.density = 1
|
||||
A.frame_type = M.board_type
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
if (src.stat & BROKEN)
|
||||
user << "<span class='notice'>The broken glass falls out.</span>"
|
||||
new /obj/item/weapon/material/shard( src.loc )
|
||||
A.state = 3
|
||||
A.icon_state = "[A.frame_type]_3"
|
||||
else
|
||||
user << "<span class='notice'>You disconnect the monitor.</span>"
|
||||
A.state = 4
|
||||
A.icon_state = "[A.frame_type]_4"
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
if(computer_deconstruction_screwdriver(user, I))
|
||||
return
|
||||
else
|
||||
src.attack_hand(user)
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
attack_hand(user)
|
||||
return
|
||||
@@ -65,25 +65,6 @@
|
||||
|
||||
|
||||
/obj/machinery/computer/guestpass/attackby(obj/I, mob/user)
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
|
||||
user << "<span class='notice'>You start disconnecting the monitor.</span>"
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.frame_type = "guestpass"
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
user << "<span class='notice'>You disconnect the monitor.</span>"
|
||||
A.state = 4
|
||||
A.icon_state = "guestpass_4"
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
return
|
||||
if(istype(I, /obj/item/weapon/card/id))
|
||||
if(!giver && user.unEquip(I))
|
||||
I.forceMove(src)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||
|
||||
//Circuit boards are in /code/game/objects/items/weapons/circuitboards/machinery/
|
||||
|
||||
/obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier.
|
||||
|
||||
+22
-22
@@ -27,10 +27,10 @@
|
||||
initialize_directions = dir
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/Destroy()
|
||||
var/turf/T = loc
|
||||
var/turf/T = src.loc
|
||||
T.contents += contents
|
||||
if(beaker)
|
||||
beaker.loc = get_step(loc, SOUTH) //Beaker is carefully ejected from the wreckage of the cryotube
|
||||
beaker.loc = get_step(src.loc, SOUTH) //Beaker is carefully ejected from the wreckage of the cryotube
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/initialize()
|
||||
@@ -64,7 +64,7 @@
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/relaymove(mob/user as mob)
|
||||
// note that relaymove will also be called for mobs outside the cell with UI open
|
||||
if(src.occupant == user && !user.stat)
|
||||
if(occupant == user && !user.stat)
|
||||
go_out()
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/attack_hand(mob/user)
|
||||
@@ -92,7 +92,7 @@
|
||||
data["hasOccupant"] = occupant ? 1 : 0
|
||||
|
||||
var/occupantData[0]
|
||||
if (occupant)
|
||||
if(occupant)
|
||||
occupantData["name"] = occupant.name
|
||||
occupantData["stat"] = occupant.stat
|
||||
occupantData["health"] = occupant.health
|
||||
@@ -124,13 +124,13 @@
|
||||
data["beakerVolume"] = 0
|
||||
if(beaker)
|
||||
data["beakerLabel"] = beaker.label_text ? beaker.label_text : null
|
||||
if (beaker.reagents && beaker.reagents.reagent_list.len)
|
||||
if(beaker.reagents && beaker.reagents.reagent_list.len)
|
||||
for(var/datum/reagent/R in beaker.reagents.reagent_list)
|
||||
data["beakerVolume"] += R.volume
|
||||
|
||||
// update the ui if it exists, returns null if no ui is passed/found
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
if(!ui)
|
||||
// the ui does not exist, so we'll create a new() one
|
||||
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
|
||||
ui = new(user, src, ui_key, "cryo.tmpl", "Cryo Cell Control System", 520, 410)
|
||||
@@ -158,7 +158,7 @@
|
||||
|
||||
if(href_list["ejectBeaker"])
|
||||
if(beaker)
|
||||
beaker.loc = get_step(loc, SOUTH)
|
||||
beaker.loc = get_step(src.loc, SOUTH)
|
||||
beaker = null
|
||||
|
||||
if(href_list["ejectOccupant"])
|
||||
@@ -235,7 +235,7 @@
|
||||
occupant.adjustOxyLoss(-1)
|
||||
//severe damage should heal waaay slower without proper chemicals
|
||||
if(occupant.bodytemperature < 225)
|
||||
if (occupant.getToxLoss())
|
||||
if(occupant.getToxLoss())
|
||||
occupant.adjustToxLoss(max(-1, -20/occupant.getToxLoss()))
|
||||
var/heal_brute = occupant.getBruteLoss() ? min(1, 20/occupant.getBruteLoss()) : 0
|
||||
var/heal_fire = occupant.getFireLoss() ? min(1, 20/occupant.getFireLoss()) : 0
|
||||
@@ -267,15 +267,15 @@
|
||||
//loc.assume_air(expel_gas)
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/proc/go_out()
|
||||
if(!( occupant ))
|
||||
if(!(occupant))
|
||||
return
|
||||
//for(var/obj/O in src)
|
||||
// O.loc = loc
|
||||
if (occupant.client)
|
||||
// O.loc = src.loc
|
||||
if(occupant.client)
|
||||
occupant.client.eye = occupant.client.mob
|
||||
occupant.client.perspective = MOB_PERSPECTIVE
|
||||
occupant.loc = get_step(loc, SOUTH) //this doesn't account for walls or anything, but i don't forsee that being a problem.
|
||||
if (occupant.bodytemperature < 261 && occupant.bodytemperature >= 70) //Patch by Aranclanos to stop people from taking burn damage after being ejected
|
||||
occupant.loc = get_step(src.loc, SOUTH) //this doesn't account for walls or anything, but i don't forsee that being a problem.
|
||||
if(occupant.bodytemperature < 261 && occupant.bodytemperature >= 70) //Patch by Aranclanos to stop people from taking burn damage after being ejected
|
||||
occupant.bodytemperature = 261 // Changed to 70 from 140 by Zuhayr due to reoccurance of bug.
|
||||
// occupant.metabslow = 0
|
||||
occupant = null
|
||||
@@ -284,22 +284,22 @@
|
||||
update_icon()
|
||||
return
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/proc/put_mob(mob/living/carbon/M as mob)
|
||||
if (stat & (NOPOWER|BROKEN))
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
usr << "<span class='warning'>The cryo cell is not functioning.</span>"
|
||||
return
|
||||
if (!istype(M))
|
||||
if(!istype(M))
|
||||
usr << "<span class='danger'>The cryo cell cannot handle such a lifeform!</span>"
|
||||
return
|
||||
if (occupant)
|
||||
if(occupant)
|
||||
usr << "<span class='danger'>The cryo cell is already occupied!</span>"
|
||||
return
|
||||
if (M.abiotic())
|
||||
if(M.abiotic())
|
||||
usr << "<span class='warning'>Subject may not have abiotic items on.</span>"
|
||||
return
|
||||
if(!node)
|
||||
usr << "<span class='warning'>The cell is not correctly connected to its pipe network!</span>"
|
||||
return
|
||||
if (M.client)
|
||||
if(M.client)
|
||||
M.client.perspective = EYE_PERSPECTIVE
|
||||
M.client.eye = src
|
||||
M.stop_pulling()
|
||||
@@ -320,7 +320,7 @@
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
if(usr == occupant)//If the user is inside the tube...
|
||||
if (usr.stat == 2)//and he's not dead....
|
||||
if(usr.stat == 2)//and he's not dead....
|
||||
return
|
||||
usr << "<span class='notice'>Release sequence activated. This will take two minutes.</span>"
|
||||
sleep(1200)
|
||||
@@ -328,7 +328,7 @@
|
||||
return
|
||||
go_out()//and release him from the eternal prison.
|
||||
else
|
||||
if (usr.stat != 0)
|
||||
if(usr.stat != 0)
|
||||
return
|
||||
go_out()
|
||||
add_fingerprint(usr)
|
||||
@@ -342,7 +342,7 @@
|
||||
if(M.Victim == usr)
|
||||
usr << "You're too busy getting your life sucked out of you."
|
||||
return
|
||||
if (usr.stat != 0)
|
||||
if(usr.stat != 0)
|
||||
return
|
||||
put_mob(usr)
|
||||
return
|
||||
@@ -353,7 +353,7 @@
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/return_air_for_internal_lifeform()
|
||||
//assume that the cryo cell has some kind of breath mask or something that
|
||||
//draws from the cryo tube's environment, instead of the cold internal air.
|
||||
if(loc)
|
||||
if(src.loc)
|
||||
return loc.return_air()
|
||||
else
|
||||
return null
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
* ~ Zuhayr
|
||||
*/
|
||||
|
||||
|
||||
//Main cryopod console.
|
||||
|
||||
/obj/machinery/computer/cryopod
|
||||
@@ -73,18 +72,18 @@
|
||||
allow_items = 1
|
||||
|
||||
/obj/machinery/computer/cryopod/attack_ai()
|
||||
src.attack_hand()
|
||||
attack_hand()
|
||||
|
||||
/obj/machinery/computer/cryopod/attack_hand(mob/user = usr)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
|
||||
user.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
add_fingerprint(usr)
|
||||
|
||||
var/dat
|
||||
|
||||
if (!( ticker ))
|
||||
if(!(ticker))
|
||||
return
|
||||
|
||||
dat += "<hr/><br/><b>[storage_name]</b><br/>"
|
||||
@@ -105,7 +104,7 @@
|
||||
|
||||
var/mob/user = usr
|
||||
|
||||
src.add_fingerprint(user)
|
||||
add_fingerprint(user)
|
||||
|
||||
if(href_list["log"])
|
||||
|
||||
@@ -159,7 +158,7 @@
|
||||
I.forceMove(get_turf(src))
|
||||
frozen_items -= I
|
||||
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/item/weapon/circuitboard/cryopodcontrol
|
||||
@@ -395,7 +394,7 @@
|
||||
O.forceMove(src)
|
||||
|
||||
//Delete all items not on the preservation list.
|
||||
var/list/items = src.contents.Copy()
|
||||
var/list/items = contents.Copy()
|
||||
items -= occupant // Don't delete the occupant
|
||||
items -= announce // or the autosay radio.
|
||||
|
||||
@@ -451,13 +450,13 @@
|
||||
if(PDA_Manifest.len)
|
||||
PDA_Manifest.Cut()
|
||||
for(var/datum/data/record/R in data_core.medical)
|
||||
if ((R.fields["name"] == occupant.real_name))
|
||||
if((R.fields["name"] == occupant.real_name))
|
||||
qdel(R)
|
||||
for(var/datum/data/record/T in data_core.security)
|
||||
if ((T.fields["name"] == occupant.real_name))
|
||||
if((T.fields["name"] == occupant.real_name))
|
||||
qdel(T)
|
||||
for(var/datum/data/record/G in data_core.general)
|
||||
if ((G.fields["name"] == occupant.real_name))
|
||||
if((G.fields["name"] == occupant.real_name))
|
||||
qdel(G)
|
||||
|
||||
icon_state = base_icon_state
|
||||
@@ -536,7 +535,7 @@
|
||||
message_admins("<span class='notice'>[key_name_admin(M)] has entered a stasis pod.</span>")
|
||||
|
||||
//Despawning occurs when process() is called with an occupant without a client.
|
||||
src.add_fingerprint(M)
|
||||
add_fingerprint(M)
|
||||
|
||||
/obj/machinery/cryopod/verb/eject()
|
||||
set name = "Eject Pod"
|
||||
@@ -548,14 +547,14 @@
|
||||
icon_state = base_icon_state
|
||||
|
||||
//Eject any items that aren't meant to be in the pod.
|
||||
var/list/items = src.contents
|
||||
var/list/items = contents
|
||||
if(occupant) items -= occupant
|
||||
if(announce) items -= announce
|
||||
|
||||
for(var/obj/item/W in items)
|
||||
W.forceMove(get_turf(src))
|
||||
|
||||
src.go_out()
|
||||
go_out()
|
||||
add_fingerprint(usr)
|
||||
|
||||
name = initial(name)
|
||||
@@ -569,7 +568,7 @@
|
||||
if(usr.stat != 0 || !check_occupant_allowed(usr))
|
||||
return
|
||||
|
||||
if(src.occupant)
|
||||
if(occupant)
|
||||
usr << "<span class='notice'><B>\The [src] is in use.</B></span>"
|
||||
return
|
||||
|
||||
@@ -585,7 +584,7 @@
|
||||
if(!usr || !usr.client)
|
||||
return
|
||||
|
||||
if(src.occupant)
|
||||
if(occupant)
|
||||
usr << "<span class='notice'><B>\The [src] is in use.</B></span>"
|
||||
return
|
||||
|
||||
@@ -605,7 +604,7 @@
|
||||
|
||||
time_entered = world.time
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
add_fingerprint(usr)
|
||||
|
||||
return
|
||||
|
||||
@@ -626,7 +625,7 @@
|
||||
return
|
||||
|
||||
if(occupant.client)
|
||||
occupant.client.eye = src.occupant.client.mob
|
||||
occupant.client.eye = occupant.client.mob
|
||||
occupant.client.perspective = MOB_PERSPECTIVE
|
||||
|
||||
occupant.forceMove(get_turf(src))
|
||||
@@ -640,7 +639,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/cryopod/proc/set_occupant(var/occupant)
|
||||
src.occupant = occupant
|
||||
occupant = occupant
|
||||
name = initial(name)
|
||||
if(occupant)
|
||||
name = "[name] ([occupant])"
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
/*
|
||||
CONTAINS:
|
||||
|
||||
Deployable items
|
||||
Barricades
|
||||
|
||||
for reference:
|
||||
|
||||
access_security = 1
|
||||
access_brig = 2
|
||||
access_armory = 3
|
||||
@@ -50,7 +48,6 @@ for reference:
|
||||
access_court = 42
|
||||
access_clown = 43
|
||||
access_mime = 44
|
||||
|
||||
*/
|
||||
|
||||
//Barricades!
|
||||
@@ -83,17 +80,17 @@ for reference:
|
||||
return material
|
||||
|
||||
/obj/structure/barricade/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/stack))
|
||||
if(istype(W, /obj/item/stack))
|
||||
var/obj/item/stack/D = W
|
||||
if(D.get_material_name() != material.name)
|
||||
return //hitting things with the wrong type of stack usually doesn't produce messages, and probably doesn't need to.
|
||||
if (health < maxhealth)
|
||||
if (D.get_amount() < 1)
|
||||
if(health < maxhealth)
|
||||
if(D.get_amount() < 1)
|
||||
user << "<span class='warning'>You need one sheet of [material.display_name] to repair \the [src].</span>"
|
||||
return
|
||||
visible_message("<span class='notice'>[user] begins to repair \the [src].</span>")
|
||||
if(do_after(user,20) && health < maxhealth)
|
||||
if (D.use(1))
|
||||
if(D.use(1))
|
||||
health = maxhealth
|
||||
visible_message("<span class='notice'>[user] repairs \the [src].</span>")
|
||||
return
|
||||
@@ -102,11 +99,11 @@ for reference:
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
src.health -= W.force * 1
|
||||
health -= W.force * 1
|
||||
if("brute")
|
||||
src.health -= W.force * 0.75
|
||||
health -= W.force * 0.75
|
||||
else
|
||||
if (src.health <= 0)
|
||||
if(health <= 0)
|
||||
visible_message("<span class='danger'>The barricade is smashed apart!</span>")
|
||||
dismantle()
|
||||
qdel(src)
|
||||
@@ -125,8 +122,8 @@ for reference:
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
src.health -= 25
|
||||
if (src.health <= 0)
|
||||
health -= 25
|
||||
if(health <= 0)
|
||||
visible_message("<span class='danger'>\The [src] is blown apart!</span>")
|
||||
dismantle()
|
||||
return
|
||||
@@ -158,114 +155,114 @@ for reference:
|
||||
var/locked = 0.0
|
||||
// req_access = list(access_maint_tunnels)
|
||||
|
||||
New()
|
||||
/obj/machinery/deployable/barrier/New()
|
||||
..()
|
||||
|
||||
icon_state = "barrier[locked]"
|
||||
|
||||
/obj/machinery/deployable/barrier/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/card/id/))
|
||||
if(allowed(user))
|
||||
if (emagged < 2.0)
|
||||
locked = !locked
|
||||
anchored = !anchored
|
||||
icon_state = "barrier[locked]"
|
||||
if((locked == 1.0) && (emagged < 2.0))
|
||||
user << "Barrier lock toggled on."
|
||||
return
|
||||
else if((locked == 0.0) && (emagged < 2.0))
|
||||
user << "Barrier lock toggled off."
|
||||
return
|
||||
else
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(2, 1, src)
|
||||
s.start()
|
||||
visible_message("<span class='warning'>BZZzZZzZZzZT</span>")
|
||||
return
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/wrench))
|
||||
if(health < maxhealth)
|
||||
health = maxhealth
|
||||
emagged = 0
|
||||
req_access = list(access_security)
|
||||
visible_message("<span class='warning'>[user] repairs \the [src]!</span>")
|
||||
return
|
||||
else if(emagged > 0)
|
||||
emagged = 0
|
||||
req_access = list(access_security)
|
||||
visible_message("<span class='warning'>[user] repairs \the [src]!</span>")
|
||||
return
|
||||
return
|
||||
else
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
health -= W.force * 0.75
|
||||
if("brute")
|
||||
health -= W.force * 0.5
|
||||
else
|
||||
if(health <= 0)
|
||||
explode()
|
||||
..()
|
||||
|
||||
src.icon_state = "barrier[src.locked]"
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/card/id/))
|
||||
if (src.allowed(user))
|
||||
if (src.emagged < 2.0)
|
||||
src.locked = !src.locked
|
||||
src.anchored = !src.anchored
|
||||
src.icon_state = "barrier[src.locked]"
|
||||
if ((src.locked == 1.0) && (src.emagged < 2.0))
|
||||
user << "Barrier lock toggled on."
|
||||
return
|
||||
else if ((src.locked == 0.0) && (src.emagged < 2.0))
|
||||
user << "Barrier lock toggled off."
|
||||
return
|
||||
else
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(2, 1, src)
|
||||
s.start()
|
||||
visible_message("<span class='warning'>BZZzZZzZZzZT</span>")
|
||||
return
|
||||
/obj/machinery/deployable/barrier/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
explode()
|
||||
return
|
||||
else if (istype(W, /obj/item/weapon/wrench))
|
||||
if (src.health < src.maxhealth)
|
||||
src.health = src.maxhealth
|
||||
src.emagged = 0
|
||||
src.req_access = list(access_security)
|
||||
visible_message("<span class='warning'>[user] repairs \the [src]!</span>")
|
||||
return
|
||||
else if (src.emagged > 0)
|
||||
src.emagged = 0
|
||||
src.req_access = list(access_security)
|
||||
visible_message("<span class='warning'>[user] repairs \the [src]!</span>")
|
||||
return
|
||||
if(2.0)
|
||||
health -= 25
|
||||
if(health <= 0)
|
||||
explode()
|
||||
return
|
||||
else
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
src.health -= W.force * 0.75
|
||||
if("brute")
|
||||
src.health -= W.force * 0.5
|
||||
else
|
||||
if (src.health <= 0)
|
||||
src.explode()
|
||||
..()
|
||||
|
||||
/obj/machinery/deployable/barrier/emp_act(severity)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
if(prob(50/severity))
|
||||
locked = !locked
|
||||
anchored = !anchored
|
||||
icon_state = "barrier[locked]"
|
||||
|
||||
ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
src.explode()
|
||||
return
|
||||
if(2.0)
|
||||
src.health -= 25
|
||||
if (src.health <= 0)
|
||||
src.explode()
|
||||
return
|
||||
emp_act(severity)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
if(prob(50/severity))
|
||||
locked = !locked
|
||||
anchored = !anchored
|
||||
icon_state = "barrier[src.locked]"
|
||||
/obj/machinery/deployable/barrier/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff.
|
||||
if(air_group || (height==0))
|
||||
return 1
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff.
|
||||
if(air_group || (height==0))
|
||||
return 1
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
/obj/machinery/deployable/barrier/proc/explode()
|
||||
|
||||
proc/explode()
|
||||
visible_message("<span class='danger'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
visible_message("<span class='danger'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
/* var/obj/item/stack/rods/ =*/
|
||||
PoolOrNew(/obj/item/stack/rods, Tsec)
|
||||
|
||||
/* var/obj/item/stack/rods/ =*/
|
||||
PoolOrNew(/obj/item/stack/rods, Tsec)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
explosion(src.loc,-1,-1,0)
|
||||
if(src)
|
||||
qdel(src)
|
||||
|
||||
explosion(src.loc,-1,-1,0)
|
||||
if(src)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/machinery/deployable/barrier/emag_act(var/remaining_charges, var/mob/user)
|
||||
if (src.emagged == 0)
|
||||
src.emagged = 1
|
||||
src.req_access.Cut()
|
||||
src.req_one_access.Cut()
|
||||
if(emagged == 0)
|
||||
emagged = 1
|
||||
req_access.Cut()
|
||||
req_one_access.Cut()
|
||||
user << "You break the ID authentication lock on \the [src]."
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(2, 1, src)
|
||||
s.start()
|
||||
visible_message("<span class='warning'>BZZzZZzZZzZT</span>")
|
||||
return 1
|
||||
else if (src.emagged == 1)
|
||||
src.emagged = 2
|
||||
else if(emagged == 1)
|
||||
emagged = 2
|
||||
user << "You short out the anchoring mechanism on \the [src]."
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(2, 1, src)
|
||||
s.start()
|
||||
visible_message("<span class='warning'>BZZzZZzZZzZT</span>")
|
||||
return 1
|
||||
return 1
|
||||
@@ -19,12 +19,12 @@
|
||||
|
||||
/obj/machinery/button/remote/attack_ai(mob/user as mob)
|
||||
if(wires & 2)
|
||||
return src.attack_hand(user)
|
||||
return attack_hand(user)
|
||||
else
|
||||
user << "Error, no route to host."
|
||||
|
||||
/obj/machinery/button/remote/attackby(obj/item/weapon/W, mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/button/remote/emag_act(var/remaining_charges, var/mob/user)
|
||||
if(req_access.len || req_one_access.len)
|
||||
@@ -37,7 +37,7 @@
|
||||
if(..())
|
||||
return
|
||||
|
||||
src.add_fingerprint(user)
|
||||
add_fingerprint(user)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
|
||||
@@ -92,9 +92,9 @@
|
||||
|
||||
/obj/machinery/button/remote/airlock/trigger()
|
||||
for(var/obj/machinery/door/airlock/D in world)
|
||||
if(D.id_tag == src.id)
|
||||
if(D.id_tag == id)
|
||||
if(specialfunctions & OPEN)
|
||||
if (D.density)
|
||||
if(D.density)
|
||||
spawn(0)
|
||||
D.open()
|
||||
return
|
||||
@@ -136,7 +136,7 @@
|
||||
|
||||
/obj/machinery/button/remote/blast_door/trigger()
|
||||
for(var/obj/machinery/door/blast/M in world)
|
||||
if(M.id == src.id)
|
||||
if(M.id == id)
|
||||
if(M.density)
|
||||
spawn(0)
|
||||
M.open()
|
||||
@@ -155,7 +155,7 @@
|
||||
|
||||
/obj/machinery/button/remote/emitter/trigger(mob/user as mob)
|
||||
for(var/obj/machinery/power/emitter/E in world)
|
||||
if(E.id == src.id)
|
||||
if(E.id == id)
|
||||
spawn(0)
|
||||
E.activate(user)
|
||||
return
|
||||
@@ -174,21 +174,21 @@
|
||||
update_icon()
|
||||
|
||||
for(var/obj/machinery/door/blast/M in machines)
|
||||
if (M.id == src.id)
|
||||
spawn( 0 )
|
||||
if(M.id == id)
|
||||
spawn(0)
|
||||
M.open()
|
||||
return
|
||||
|
||||
sleep(20)
|
||||
|
||||
for(var/obj/machinery/mass_driver/M in machines)
|
||||
if(M.id == src.id)
|
||||
if(M.id == id)
|
||||
M.drive()
|
||||
|
||||
sleep(50)
|
||||
|
||||
for(var/obj/machinery/door/blast/M in machines)
|
||||
if (M.id == src.id)
|
||||
if(M.id == id)
|
||||
spawn(0)
|
||||
M.close()
|
||||
return
|
||||
@@ -202,4 +202,4 @@
|
||||
if(!active || (stat & NOPOWER))
|
||||
icon_state = "launcherbtt"
|
||||
else
|
||||
icon_state = "launcheract"
|
||||
icon_state = "launcheract"
|
||||
@@ -4,7 +4,6 @@ var/list/doppler_arrays = list()
|
||||
name = "tachyon-doppler array"
|
||||
desc = "A highly precise directional sensor array which measures the release of quants from decaying tachyons. The doppler shifting of the mirror-image formed by these quants can reveal the size, location and temporal affects of energetic disturbances within a large radius ahead of the array."
|
||||
|
||||
|
||||
/obj/machinery/doppler_array/New()
|
||||
..()
|
||||
doppler_arrays += src
|
||||
@@ -39,13 +38,12 @@ var/list/doppler_arrays = list()
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("<span class='game say'><span class='name'>[src]</span> states coldly, \"[message]\"</span>",2)
|
||||
|
||||
|
||||
/obj/machinery/doppler_array/power_change()
|
||||
..()
|
||||
if(stat & BROKEN)
|
||||
icon_state = "[initial(icon_state)]-broken"
|
||||
else
|
||||
if( !(stat & NOPOWER) )
|
||||
if(!(stat & NOPOWER))
|
||||
icon_state = initial(icon_state)
|
||||
else
|
||||
icon_state = "[initial(icon_state)]-off"
|
||||
@@ -1,5 +1,4 @@
|
||||
// It is a gizmo that flashes a small area
|
||||
|
||||
/obj/machinery/flasher
|
||||
name = "Mounted flash"
|
||||
desc = "A wall-mounted flashbulb device."
|
||||
@@ -27,48 +26,48 @@
|
||||
|
||||
/obj/machinery/flasher/power_change()
|
||||
..()
|
||||
if ( !(stat & NOPOWER) )
|
||||
if(!(stat & NOPOWER))
|
||||
icon_state = "[base_state]1"
|
||||
// src.sd_SetLuminosity(2)
|
||||
// sd_SetLuminosity(2)
|
||||
else
|
||||
icon_state = "[base_state]1-p"
|
||||
// src.sd_SetLuminosity(0)
|
||||
// sd_SetLuminosity(0)
|
||||
|
||||
//Don't want to render prison breaks impossible
|
||||
/obj/machinery/flasher/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/wirecutters))
|
||||
if(istype(W, /obj/item/weapon/wirecutters))
|
||||
add_fingerprint(user)
|
||||
src.disable = !src.disable
|
||||
if (src.disable)
|
||||
disable = !disable
|
||||
if(disable)
|
||||
user.visible_message("<span class='warning'>[user] has disconnected the [src]'s flashbulb!</span>", "<span class='warning'>You disconnect the [src]'s flashbulb!</span>")
|
||||
if (!src.disable)
|
||||
if(!disable)
|
||||
user.visible_message("<span class='warning'>[user] has connected the [src]'s flashbulb!</span>", "<span class='warning'>You connect the [src]'s flashbulb!</span>")
|
||||
|
||||
//Let the AI trigger them directly.
|
||||
/obj/machinery/flasher/attack_ai()
|
||||
if (src.anchored)
|
||||
return src.flash()
|
||||
if(anchored)
|
||||
return flash()
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/flasher/proc/flash()
|
||||
if (!(powered()))
|
||||
if(!(powered()))
|
||||
return
|
||||
|
||||
if ((src.disable) || (src.last_flash && world.time < src.last_flash + 150))
|
||||
if((disable) || (last_flash && world.time < last_flash + 150))
|
||||
return
|
||||
|
||||
playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1)
|
||||
flick("[base_state]_flash", src)
|
||||
src.last_flash = world.time
|
||||
last_flash = world.time
|
||||
use_power(1500)
|
||||
|
||||
for (var/mob/O in viewers(src, null))
|
||||
if (get_dist(src, O) > src.range)
|
||||
if(get_dist(src, O) > range)
|
||||
continue
|
||||
|
||||
var/flash_time = strength
|
||||
if (istype(O, /mob/living/carbon/human))
|
||||
if(istype(O, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = O
|
||||
if(!H.eyecheck() <= 0)
|
||||
continue
|
||||
@@ -94,26 +93,26 @@
|
||||
..(severity)
|
||||
|
||||
/obj/machinery/flasher/portable/HasProximity(atom/movable/AM as mob|obj)
|
||||
if ((src.disable) || (src.last_flash && world.time < src.last_flash + 150))
|
||||
if((disable) || (last_flash && world.time < last_flash + 150))
|
||||
return
|
||||
|
||||
if(istype(AM, /mob/living/carbon))
|
||||
var/mob/living/carbon/M = AM
|
||||
if ((M.m_intent != "walk") && (src.anchored))
|
||||
src.flash()
|
||||
if((M.m_intent != "walk") && (anchored))
|
||||
flash()
|
||||
|
||||
/obj/machinery/flasher/portable/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/wrench))
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
add_fingerprint(user)
|
||||
src.anchored = !src.anchored
|
||||
anchored = !anchored
|
||||
|
||||
if (!src.anchored)
|
||||
if(!anchored)
|
||||
user.show_message(text("<span class='warning'>[src] can now be moved.</span>"))
|
||||
src.overlays.Cut()
|
||||
overlays.Cut()
|
||||
|
||||
else if (src.anchored)
|
||||
else if(anchored)
|
||||
user.show_message(text("<span class='warning'>[src] is now secured.</span>"))
|
||||
src.overlays += "[base_state]-s"
|
||||
overlays += "[base_state]-s"
|
||||
|
||||
/obj/machinery/button/flasher
|
||||
name = "flasher button"
|
||||
@@ -130,7 +129,7 @@
|
||||
icon_state = "launcheract"
|
||||
|
||||
for(var/obj/machinery/flasher/M in machines)
|
||||
if(M.id == src.id)
|
||||
if(M.id == id)
|
||||
spawn()
|
||||
M.flash()
|
||||
|
||||
@@ -139,4 +138,4 @@
|
||||
icon_state = "launcherbtt"
|
||||
active = 0
|
||||
|
||||
return
|
||||
return
|
||||
@@ -1,5 +1,3 @@
|
||||
//these are probably broken
|
||||
|
||||
/obj/machinery/floodlight
|
||||
name = "Emergency Floodlight"
|
||||
icon = 'icons/obj/machines/floodlight.dmi'
|
||||
@@ -13,7 +11,7 @@
|
||||
var/brightness_on = 8 //can't remember what the maxed out value is
|
||||
|
||||
/obj/machinery/floodlight/New()
|
||||
src.cell = new(src)
|
||||
cell = new(src)
|
||||
cell.maxcharge = 1000
|
||||
cell.charge = 1000 // 41minutes @ 200W
|
||||
..()
|
||||
@@ -71,7 +69,6 @@
|
||||
if(!turn_on(1))
|
||||
user << "You try to turn on \the [src] but it does not work."
|
||||
|
||||
|
||||
/obj/machinery/floodlight/attack_hand(mob/user as mob)
|
||||
if(open && cell)
|
||||
if(ishuman(user))
|
||||
@@ -79,12 +76,12 @@
|
||||
user.put_in_hands(cell)
|
||||
cell.loc = user.loc
|
||||
else
|
||||
cell.loc = loc
|
||||
cell.loc = src.loc
|
||||
|
||||
cell.add_fingerprint(user)
|
||||
cell.update_icon()
|
||||
|
||||
src.cell = null
|
||||
cell = null
|
||||
on = 0
|
||||
set_light(0)
|
||||
user << "You remove the power cell"
|
||||
@@ -99,10 +96,9 @@
|
||||
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/floodlight/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
if (!open)
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(!open)
|
||||
if(unlocked)
|
||||
unlocked = 0
|
||||
user << "You screw the battery panel in place."
|
||||
@@ -110,7 +106,7 @@
|
||||
unlocked = 1
|
||||
user << "You unscrew the battery panel."
|
||||
|
||||
if (istype(W, /obj/item/weapon/crowbar))
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
if(unlocked)
|
||||
if(open)
|
||||
open = 0
|
||||
@@ -121,7 +117,7 @@
|
||||
open = 1
|
||||
user << "You remove the battery panel."
|
||||
|
||||
if (istype(W, /obj/item/weapon/cell))
|
||||
if(istype(W, /obj/item/weapon/cell))
|
||||
if(open)
|
||||
if(cell)
|
||||
user << "There is a power cell already installed."
|
||||
|
||||
@@ -132,7 +132,7 @@ var/list/floor_light_cache = list()
|
||||
if(1)
|
||||
qdel(src)
|
||||
if(2)
|
||||
if (prob(50))
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
else if(prob(20))
|
||||
stat |= BROKEN
|
||||
@@ -140,7 +140,7 @@ var/list/floor_light_cache = list()
|
||||
if(isnull(damaged))
|
||||
damaged = 0
|
||||
if(3)
|
||||
if (prob(5))
|
||||
if(prob(5))
|
||||
qdel(src)
|
||||
else if(isnull(damaged))
|
||||
damaged = 0
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/obj/machinery/floorlayer
|
||||
|
||||
name = "automatic floor layer"
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "pipe_d"
|
||||
@@ -35,8 +34,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/floorlayer/attackby(var/obj/item/W as obj, var/mob/user as mob)
|
||||
|
||||
if (istype(W, /obj/item/weapon/wrench))
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
var/m = input("Choose work mode", "Mode") as null|anything in mode
|
||||
mode[m] = !mode[m]
|
||||
var/O = mode[m]
|
||||
@@ -109,4 +107,4 @@
|
||||
|
||||
/obj/machinery/floorlayer/proc/CollectTiles(var/turf/w_turf)
|
||||
for(var/obj/item/stack/tile/tile in w_turf)
|
||||
TakeTile(tile)
|
||||
TakeTile(tile)
|
||||
+310
-212
@@ -1,3 +1,177 @@
|
||||
/var/global/list/construction_frame_wall
|
||||
/var/global/list/construction_frame_floor
|
||||
|
||||
/proc/populate_frame_types()
|
||||
//Create global frame type list if it hasn't been made already.
|
||||
construction_frame_wall = list()
|
||||
construction_frame_floor = list()
|
||||
for(var/R in typesof(/datum/frame/frame_types) - /datum/frame/frame_types)
|
||||
var/datum/frame/frame_types/type = new R
|
||||
if(type.frame_style == "wall")
|
||||
construction_frame_wall += type
|
||||
else
|
||||
construction_frame_floor += type
|
||||
|
||||
var/datum/frame/frame_types/cancel/cancel = new /datum/frame/frame_types/cancel
|
||||
construction_frame_wall += cancel
|
||||
construction_frame_floor += cancel
|
||||
|
||||
/datum/frame/frame_types
|
||||
var/name
|
||||
var/frame_size = 5
|
||||
var/frame_class
|
||||
var/circuit
|
||||
var/frame_style = "floor"
|
||||
var/x_offset
|
||||
var/y_offset
|
||||
|
||||
/datum/frame/frame_types/computer
|
||||
name = "Computer"
|
||||
frame_class = "computer"
|
||||
|
||||
/datum/frame/frame_types/machine
|
||||
name = "Machine"
|
||||
frame_class = "machine"
|
||||
|
||||
/datum/frame/frame_types/conveyor
|
||||
name = "Conveyor"
|
||||
frame_class = "machine"
|
||||
circuit = /obj/item/weapon/circuitboard/conveyor
|
||||
|
||||
/datum/frame/frame_types/photocopier
|
||||
name = "Photocopier"
|
||||
frame_class = "machine"
|
||||
|
||||
/datum/frame/frame_types/washing_machine
|
||||
name = "Washing Machine"
|
||||
frame_class = "machine"
|
||||
|
||||
/datum/frame/frame_types/medical_console
|
||||
name = "Medical Console"
|
||||
frame_class = "computer"
|
||||
|
||||
/datum/frame/frame_types/medical_pod
|
||||
name = "Medical Pod"
|
||||
frame_class = "machine"
|
||||
|
||||
/datum/frame/frame_types/dna_analyzer
|
||||
name = "DNA Analyzer"
|
||||
frame_class = "machine"
|
||||
|
||||
/datum/frame/frame_types/mass_driver
|
||||
name = "Mass Driver"
|
||||
frame_class = "machine"
|
||||
circuit = /obj/item/weapon/circuitboard/mass_driver
|
||||
|
||||
/datum/frame/frame_types/holopad
|
||||
name = "Holopad"
|
||||
frame_class = "computer"
|
||||
frame_size = 4
|
||||
|
||||
/datum/frame/frame_types/microwave
|
||||
name = "Microwave"
|
||||
frame_class = "machine"
|
||||
frame_size = 4
|
||||
|
||||
/datum/frame/frame_types/fax
|
||||
name = "Fax"
|
||||
frame_class = "machine"
|
||||
frame_size = 3
|
||||
|
||||
/datum/frame/frame_types/recharger
|
||||
name = "Recharger"
|
||||
frame_class = "machine"
|
||||
circuit = /obj/item/weapon/circuitboard/recharger
|
||||
frame_size = 3
|
||||
|
||||
/datum/frame/frame_types/grinder
|
||||
name = "Grinder"
|
||||
frame_class = "machine"
|
||||
circuit = /obj/item/weapon/circuitboard/grinder
|
||||
frame_size = 3
|
||||
|
||||
/datum/frame/frame_types/display
|
||||
name = "Display"
|
||||
frame_class = "display"
|
||||
frame_style = "wall"
|
||||
x_offset = 32
|
||||
y_offset = 32
|
||||
|
||||
/datum/frame/frame_types/supply_request_console
|
||||
name = "Supply Request Console"
|
||||
frame_class = "display"
|
||||
frame_style = "wall"
|
||||
x_offset = 32
|
||||
y_offset = 32
|
||||
|
||||
/datum/frame/frame_types/atm
|
||||
name = "ATM"
|
||||
frame_class = "display"
|
||||
frame_size = 3
|
||||
frame_style = "wall"
|
||||
x_offset = 32
|
||||
y_offset = 32
|
||||
|
||||
/datum/frame/frame_types/newscaster
|
||||
name = "Newscaster"
|
||||
frame_class = "display"
|
||||
frame_size = 3
|
||||
frame_style = "wall"
|
||||
x_offset = 28
|
||||
y_offset = 30
|
||||
|
||||
/datum/frame/frame_types/wall_charger
|
||||
name = "Wall Charger"
|
||||
frame_class = "machine"
|
||||
circuit = /obj/item/weapon/circuitboard/recharger/wrecharger
|
||||
frame_size = 3
|
||||
frame_style = "wall"
|
||||
x_offset = 32
|
||||
y_offset = 32
|
||||
|
||||
/datum/frame/frame_types/fire_alarm
|
||||
name = "Fire Alarm"
|
||||
frame_class = "alarm"
|
||||
frame_size = 2
|
||||
frame_style = "wall"
|
||||
x_offset = 24
|
||||
y_offset = 24
|
||||
|
||||
/datum/frame/frame_types/air_alarm
|
||||
name = "Air Alarm"
|
||||
frame_class = "alarm"
|
||||
frame_size = 2
|
||||
frame_style = "wall"
|
||||
x_offset = 24
|
||||
y_offset = 24
|
||||
|
||||
/datum/frame/frame_types/guest_pass_console
|
||||
name = "Guest Pass Console"
|
||||
frame_class = "display"
|
||||
frame_size = 2
|
||||
frame_style = "wall"
|
||||
x_offset = 30
|
||||
y_offset = 30
|
||||
|
||||
/datum/frame/frame_types/intercom
|
||||
name = "Intercom"
|
||||
frame_class = "alarm"
|
||||
frame_size = 2
|
||||
frame_style = "wall"
|
||||
x_offset = 28
|
||||
y_offset = 28
|
||||
|
||||
/datum/frame/frame_types/keycard_authenticator
|
||||
name = "Keycard Authenticator"
|
||||
frame_class = "alarm"
|
||||
frame_size = 1
|
||||
frame_style = "wall"
|
||||
x_offset = 24
|
||||
y_offset = 24
|
||||
|
||||
/datum/frame/frame_types/cancel //used to get out of input dialogue
|
||||
name = "Cancel"
|
||||
|
||||
/obj/structure/frame
|
||||
anchored = 0
|
||||
name = "frame"
|
||||
@@ -6,20 +180,16 @@
|
||||
var/state = 0
|
||||
var/obj/item/weapon/circuitboard/circuit = null
|
||||
var/need_circuit = 1
|
||||
var/frame_type = "machine"
|
||||
var/datum/frame/frame_types/frame_type = new /datum/frame/frame_types/machine
|
||||
|
||||
var/list/components = null
|
||||
var/list/req_components = null
|
||||
var/list/req_component_names = null
|
||||
|
||||
var/list/alarms = list("firealarm", "airalarm", "intercom", "keycard")
|
||||
var/list/machines = list(
|
||||
"machine", "photocopier", "fax", "microwave", "conveyor", "recharger", "wrecharger",
|
||||
"washing", "grinder", "teleporter_hub", "teleporter_station", "medpod", "dna_analyzer",
|
||||
"massdriver")
|
||||
var/list/computers = list("computer", "holopad", "console")
|
||||
var/list/displays = list("display", "guestpass", "newscaster", "atm", "request")
|
||||
var/list/no_circuit = list("wrecharger", "recharger", "grinder", "conveyor", "massdriver")
|
||||
/obj/structure/frame/computer //used for maps
|
||||
frame_type = new /datum/frame/frame_types/computer
|
||||
anchored = 1
|
||||
density = 1
|
||||
|
||||
/obj/structure/frame/proc/update_desc()
|
||||
var/D
|
||||
@@ -31,6 +201,12 @@
|
||||
D = "Requires [english_list(component_list)]."
|
||||
desc = D
|
||||
|
||||
/obj/structure/frame/update_icon()
|
||||
..()
|
||||
var/type = lowertext(frame_type.name)
|
||||
type = replacetext(type, " ", "_")
|
||||
icon_state = "[type]_[state]"
|
||||
|
||||
/obj/structure/frame/proc/check_components(mob/user as mob)
|
||||
components = list()
|
||||
req_components = circuit.req_components.Copy()
|
||||
@@ -41,175 +217,110 @@
|
||||
var/obj/ct = A
|
||||
req_component_names[A] = initial(ct.name)
|
||||
|
||||
/obj/structure/frame/New(var/loc, var/dir, var/building = 0, var/obj/item/frame/frame_type, mob/user as mob)
|
||||
/obj/structure/frame/New(var/loc, var/dir, var/building = 0, var/datum/frame/frame_types/type, mob/user as mob)
|
||||
..()
|
||||
if(building)
|
||||
src.frame_type = frame_type
|
||||
icon_state = "[frame_type]_0"
|
||||
frame_type = type
|
||||
state = 0
|
||||
|
||||
if(dir)
|
||||
src.set_dir(dir)
|
||||
set_dir(dir)
|
||||
|
||||
if(frame_type in alarms)
|
||||
if(loc)
|
||||
src.loc = loc
|
||||
if(loc)
|
||||
src.loc = loc
|
||||
|
||||
state = 0
|
||||
if(frame_type == "airalarm" || frame_type == "firealarm" || frame_type == "keycard")
|
||||
if(dir)
|
||||
src.set_dir(dir)
|
||||
pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24)
|
||||
pixel_y = (dir & 3)? (dir == 1 ? -24 : 24) : 0
|
||||
if(frame_type.x_offset)
|
||||
pixel_x = (dir & 3)? 0 : (dir == 4 ? -frame_type.x_offset : frame_type.x_offset)
|
||||
|
||||
if(frame_type == "intercom")
|
||||
if(dir)
|
||||
src.set_dir(dir)
|
||||
pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28)
|
||||
pixel_y = (dir & 3)? (dir == 1 ? -28 : 28) : 0
|
||||
if(frame_type.y_offset)
|
||||
pixel_y = (dir & 3)? (dir == 1 ? -frame_type.y_offset : frame_type.y_offset) : 0
|
||||
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(frame_type in displays)
|
||||
if(loc)
|
||||
src.loc = loc
|
||||
|
||||
if(frame_type == "display" || frame_type == "atm" || frame_type == "request")
|
||||
pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32)
|
||||
pixel_y = (dir & 3)? (dir == 1 ? -32 : 32) : 0
|
||||
|
||||
if(frame_type == "newscaster")
|
||||
pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28)
|
||||
pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0
|
||||
|
||||
if(frame_type == "guestpass")
|
||||
pixel_x = (dir & 3)? 0 : (dir == 4 ? -30 : 30)
|
||||
pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0
|
||||
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(frame_type in no_circuit)
|
||||
if(frame_type.circuit)
|
||||
need_circuit = 0
|
||||
if(frame_type == "wrecharger")
|
||||
circuit = new /obj/item/weapon/circuitboard/recharger/wrecharger(src)
|
||||
if(loc)
|
||||
src.loc = loc
|
||||
circuit = new frame_type.circuit(src)
|
||||
|
||||
state = 0
|
||||
|
||||
pixel_x = (dir & 3)? 0 : (dir == 4 ? -26 : 32)
|
||||
pixel_y = (dir & 3)? (dir == 1 ? -32 : 32) : 0
|
||||
|
||||
update_icon()
|
||||
return
|
||||
if(frame_type == "recharger")
|
||||
circuit = new /obj/item/weapon/circuitboard/recharger(src)
|
||||
if(frame_type == "grinder")
|
||||
circuit = new /obj/item/weapon/circuitboard/grinder(src)
|
||||
if(frame_type == "conveyor")
|
||||
circuit = new /obj/item/weapon/circuitboard/conveyor(src)
|
||||
if(frame_type == "massdriver")
|
||||
circuit = new /obj/item/weapon/circuitboard/mass_driver(src)
|
||||
|
||||
if(frame_type == "computer")
|
||||
if(frame_type.name == "Computer")
|
||||
density = 1
|
||||
if(frame_type in machines)
|
||||
|
||||
if(frame_type.frame_class == "machine")
|
||||
density = 1
|
||||
return
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/structure/frame/attackby(obj/item/P as obj, mob/user as mob)
|
||||
if(istype(P, /obj/item/weapon/wrench))
|
||||
if(state == 0)
|
||||
if(state == 0 && !anchored)
|
||||
user << "<span class='notice'>You start to wrench the frame into place.</span>"
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
src.anchored = 1
|
||||
anchored = 1
|
||||
if(!need_circuit && circuit)
|
||||
src.state = 2
|
||||
state = 2
|
||||
check_components()
|
||||
update_desc()
|
||||
src.icon_state = "[frame_type]_2"
|
||||
user << "<span class='notice'>You wrench the frame into place and set the outer cover.</span>"
|
||||
else
|
||||
src.state = 1
|
||||
user << "<span class='notice'>You wrench the frame into place.</span>"
|
||||
return
|
||||
|
||||
if(state == 1)
|
||||
else if(state == 0 && anchored)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
user << "<span class='notice'>You unfasten the frame.</span>"
|
||||
src.anchored = 0
|
||||
src.state = 0
|
||||
return
|
||||
anchored = 0
|
||||
|
||||
if(istype(P, /obj/item/weapon/weldingtool))
|
||||
else if(istype(P, /obj/item/weapon/weldingtool))
|
||||
if(state == 0)
|
||||
var/obj/item/weapon/weldingtool/WT = P
|
||||
if(!WT.remove_fuel(0, user))
|
||||
if(WT.remove_fuel(0, user))
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
if(src && WT.isOn())
|
||||
user << "<span class='notice'>You deconstruct the frame.</span>"
|
||||
new /obj/item/stack/material/steel(src.loc, frame_type.frame_size)
|
||||
qdel(src)
|
||||
return
|
||||
else if(!WT.remove_fuel(0, user))
|
||||
user << "The welding tool must be on to complete this task."
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
if(!src || !WT.isOn()) return
|
||||
user << "<span class='notice'>You deconstruct the frame.</span>"
|
||||
if(frame_type == "holopad" || frame_type == "microwave")
|
||||
new /obj/item/stack/material/steel( src.loc, 4 )
|
||||
else if(frame_type == "fax" || frame_type == "newscaster" || frame_type == "recharger" || frame_type == "wrecharger" || frame_type == "grinder")
|
||||
new /obj/item/stack/material/steel( src.loc, 3 )
|
||||
else if(frame_type == "firealarm" || frame_type == "airalarm" || frame_type == "intercom" || frame_type == "guestpass")
|
||||
new /obj/item/stack/material/steel( src.loc, 2 )
|
||||
else if(frame_type == "keycard")
|
||||
new /obj/item/stack/material/steel( src.loc, 1 )
|
||||
else
|
||||
new /obj/item/stack/material/steel( src.loc, 5 )
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/weapon/circuitboard) && need_circuit && !circuit)
|
||||
if(state == 1)
|
||||
else if(istype(P, /obj/item/weapon/circuitboard) && need_circuit && !circuit)
|
||||
if(state == 0 && anchored)
|
||||
var/obj/item/weapon/circuitboard/B = P
|
||||
if(B.board_type == frame_type)
|
||||
var/datum/frame/frame_types/board_type = B.board_type
|
||||
if(board_type.name == frame_type.name)
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user << "<span class='notice'>You place the circuit board inside the frame.</span>"
|
||||
src.icon_state = "[frame_type]_1"
|
||||
src.circuit = P
|
||||
circuit = P
|
||||
user.drop_item()
|
||||
P.loc = src
|
||||
if(frame_type in machines) //because machines are assholes
|
||||
state = 1
|
||||
if(frame_type.frame_class == "machine")
|
||||
check_components()
|
||||
update_desc()
|
||||
return
|
||||
else
|
||||
user << "<span class='warning'>This frame does not accept circuit boards of this type!</span>"
|
||||
return
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/weapon/screwdriver))
|
||||
else if(istype(P, /obj/item/weapon/screwdriver))
|
||||
if(state == 1)
|
||||
if(need_circuit && circuit)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
user << "<span class='notice'>You screw the circuit board into place.</span>"
|
||||
src.state = 2
|
||||
src.icon_state = "[frame_type]_2"
|
||||
return
|
||||
state = 2
|
||||
|
||||
if(state == 2)
|
||||
else if(state == 2)
|
||||
if(need_circuit && circuit)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
user << "<span class='notice'>You unfasten the circuit board.</span>"
|
||||
src.state = 1
|
||||
src.icon_state = "[frame_type]_1"
|
||||
return
|
||||
state = 1
|
||||
|
||||
if(!need_circuit && circuit)
|
||||
else if(!need_circuit && circuit)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
user << "<span class='notice'>You unfasten the outer cover.</span>"
|
||||
src.state = 1
|
||||
src.icon_state = "[frame_type]_0"
|
||||
return
|
||||
state = 0
|
||||
|
||||
if(state == 3)
|
||||
if(frame_type in machines)
|
||||
else if(state == 3)
|
||||
if(frame_type.frame_class == "machine")
|
||||
var/component_check = 1
|
||||
for(var/R in req_components)
|
||||
if(req_components[R] > 0)
|
||||
@@ -217,7 +328,7 @@
|
||||
break
|
||||
if(component_check)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, src.dir)
|
||||
var/obj/machinery/new_machine = new circuit.build_path(src.loc, dir)
|
||||
// Handle machines that have allocated default parts in thier constructor.
|
||||
if(new_machine.component_parts)
|
||||
for(var/CP in new_machine.component_parts)
|
||||
@@ -226,9 +337,9 @@
|
||||
else
|
||||
new_machine.component_parts = list()
|
||||
|
||||
src.circuit.construct(new_machine)
|
||||
circuit.construct(new_machine)
|
||||
|
||||
for(var/obj/O in src.components)
|
||||
for(var/obj/O in components)
|
||||
if(circuit.contain_parts)
|
||||
O.loc = new_machine
|
||||
else
|
||||
@@ -240,173 +351,158 @@
|
||||
|
||||
new_machine.RefreshParts()
|
||||
|
||||
new_machine.pixel_x = src.pixel_x
|
||||
new_machine.pixel_y = src.pixel_y
|
||||
new_machine.pixel_x = pixel_x
|
||||
new_machine.pixel_y = pixel_y
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
if(frame_type in alarms)
|
||||
else if(frame_type.frame_class == "alarm")
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
user << "<span class='notice'>You fasten the cover.</span>"
|
||||
var/obj/machinery/B = new src.circuit.build_path ( src.loc )
|
||||
B.pixel_x = src.pixel_x
|
||||
B.pixel_y = src.pixel_y
|
||||
var/obj/machinery/B = new circuit.build_path(src.loc)
|
||||
B.pixel_x = pixel_x
|
||||
B.pixel_y = pixel_y
|
||||
B.set_dir(dir)
|
||||
src.circuit.construct(B)
|
||||
circuit.construct(B)
|
||||
circuit.loc = null
|
||||
B.circuit = circuit
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(state == 4)
|
||||
if(frame_type in computers)
|
||||
else if(state == 4)
|
||||
if(frame_type.frame_class == "computer")
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
user << "<span class='notice'>You connect the monitor.</span>"
|
||||
var/obj/machinery/B = new src.circuit.build_path ( src.loc )
|
||||
B.pixel_x = src.pixel_x
|
||||
B.pixel_y = src.pixel_y
|
||||
var/obj/machinery/B = new circuit.build_path(src.loc)
|
||||
B.pixel_x = pixel_x
|
||||
B.pixel_y = pixel_y
|
||||
B.set_dir(dir)
|
||||
src.circuit.construct(B)
|
||||
circuit.construct(B)
|
||||
circuit.loc = null
|
||||
B.circuit = circuit
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(frame_type in displays)
|
||||
else if(frame_type.frame_class == "display")
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
user << "<span class='notice'>You connect the monitor.</span>"
|
||||
var/obj/machinery/B = new src.circuit.build_path ( src.loc )
|
||||
B.pixel_x = src.pixel_x
|
||||
B.pixel_y = src.pixel_y
|
||||
var/obj/machinery/B = new circuit.build_path(src.loc)
|
||||
B.pixel_x = pixel_x
|
||||
B.pixel_y = pixel_y
|
||||
B.set_dir(dir)
|
||||
src.circuit.construct(B)
|
||||
circuit.construct(B)
|
||||
circuit.loc = null
|
||||
B.circuit = circuit
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/weapon/crowbar))
|
||||
else if(istype(P, /obj/item/weapon/crowbar))
|
||||
if(state == 1)
|
||||
if(need_circuit && circuit)
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
user << "<span class='notice'>You remove the circuit board.</span>"
|
||||
src.state = 1
|
||||
src.icon_state = "[frame_type]_0"
|
||||
circuit.loc = src.loc
|
||||
src.circuit = null
|
||||
if(frame_type in machines) //becuase machines are assholes
|
||||
state = 0
|
||||
circuit.forceMove(src.loc)
|
||||
circuit = null
|
||||
if(frame_type.frame_class == "machine")
|
||||
req_components = null
|
||||
return
|
||||
|
||||
if(state == 3)
|
||||
if(frame_type in machines)
|
||||
else if(state == 3)
|
||||
if(frame_type.frame_class == "machine")
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
if(components.len == 0)
|
||||
user << "<span class='notice'>There are no components to remove.</span>"
|
||||
else
|
||||
user << "<span class='notice'>You remove the components.</span>"
|
||||
for(var/obj/item/weapon/W in components)
|
||||
W.forceMove(loc)
|
||||
W.forceMove(src.loc)
|
||||
check_components()
|
||||
update_desc()
|
||||
user << desc
|
||||
return
|
||||
|
||||
if(state == 4)
|
||||
if(frame_type in computers)
|
||||
else if(state == 4)
|
||||
if(frame_type.frame_class == "computer")
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
user << "<span class='notice'>You remove the glass panel.</span>"
|
||||
src.state = 3
|
||||
src.icon_state = "[frame_type]_3"
|
||||
new /obj/item/stack/material/glass( src.loc, 2 )
|
||||
return
|
||||
state = 3
|
||||
new /obj/item/stack/material/glass(src.loc, 2)
|
||||
|
||||
if(frame_type in displays)
|
||||
else if(frame_type.frame_class == "display")
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
user << "<span class='notice'>You remove the glass panel.</span>"
|
||||
src.state = 3
|
||||
src.icon_state = "[frame_type]_3"
|
||||
new /obj/item/stack/material/glass( src.loc, 2 )
|
||||
return
|
||||
state = 3
|
||||
new /obj/item/stack/material/glass(src.loc, 2)
|
||||
|
||||
if(istype(P, /obj/item/stack/cable_coil))
|
||||
else if(istype(P, /obj/item/stack/cable_coil))
|
||||
if(state == 2)
|
||||
var/obj/item/stack/cable_coil/C = P
|
||||
if (C.get_amount() < 5)
|
||||
if(C.get_amount() < 5)
|
||||
user << "<span class='warning'>You need five coils of wire to add them to the frame.</span>"
|
||||
return
|
||||
user << "<span class='notice'>You start to add cables to the frame.</span>"
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
if(do_after(user, 20) && state == 2)
|
||||
if (C.use(5))
|
||||
if(C.use(5))
|
||||
user << "<span class='notice'>You add cables to the frame.</span>"
|
||||
state = 3
|
||||
icon_state = "[frame_type]_3"
|
||||
if(frame_type in machines)
|
||||
if(frame_type.frame_class == "machine")
|
||||
user << desc
|
||||
return
|
||||
|
||||
if(istype(P, /obj/item/weapon/wirecutters))
|
||||
else if(istype(P, /obj/item/weapon/wirecutters))
|
||||
if(state == 3)
|
||||
if(frame_type in computers)
|
||||
if(frame_type.frame_class == "computer")
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
user << "<span class='notice'>You remove the cables.</span>"
|
||||
src.state = 2
|
||||
src.icon_state = "[frame_type]_2"
|
||||
new /obj/item/stack/cable_coil( src.loc, 5 )
|
||||
return
|
||||
state = 2
|
||||
new /obj/item/stack/cable_coil(src.loc, 5)
|
||||
|
||||
if(frame_type in displays)
|
||||
else if(frame_type.frame_class == "display")
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
user << "<span class='notice'>You remove the cables.</span>"
|
||||
src.state = 2
|
||||
src.icon_state = "[frame_type]_2"
|
||||
new /obj/item/stack/cable_coil( src.loc, 5 )
|
||||
return
|
||||
state = 2
|
||||
new /obj/item/stack/cable_coil(src.loc, 5)
|
||||
|
||||
if(frame_type in alarms)
|
||||
else if(frame_type.frame_class == "alarm")
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
user << "<span class='notice'>You remove the cables.</span>"
|
||||
src.state = 2
|
||||
src.icon_state = "[frame_type]_2"
|
||||
new /obj/item/stack/cable_coil( src.loc, 5 )
|
||||
return
|
||||
state = 2
|
||||
new /obj/item/stack/cable_coil(src.loc, 5)
|
||||
|
||||
if(frame_type in machines)
|
||||
else if(frame_type.frame_class == "machine")
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
user << "<span class='notice'>You remove the cables.</span>"
|
||||
src.state = 2
|
||||
src.icon_state = "[frame_type]_2"
|
||||
new /obj/item/stack/cable_coil( src.loc, 5 )
|
||||
return
|
||||
state = 2
|
||||
new /obj/item/stack/cable_coil(src.loc, 5)
|
||||
|
||||
if(istype(P, /obj/item/stack/material) && P.get_material_name() == "glass")
|
||||
else if(istype(P, /obj/item/stack/material) && P.get_material_name() == "glass")
|
||||
if(state == 3)
|
||||
if(frame_type in computers)
|
||||
if(frame_type.frame_class == "computer")
|
||||
var/obj/item/stack/G = P
|
||||
if (G.get_amount() < 2)
|
||||
if(G.get_amount() < 2)
|
||||
user << "<span class='warning'>You need two sheets of glass to put in the glass panel.</span>"
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start to put in the glass panel.</span>"
|
||||
if(do_after(user, 20) && state == 3)
|
||||
if (G.use(2))
|
||||
if(G.use(2))
|
||||
user << "<span class='notice'>You put in the glass panel.</span>"
|
||||
src.state = 4
|
||||
src.icon_state = "[frame_type]_4"
|
||||
return
|
||||
state = 4
|
||||
|
||||
if(frame_type in displays)
|
||||
else if(frame_type.frame_class == "display")
|
||||
var/obj/item/stack/G = P
|
||||
if (G.get_amount() < 2)
|
||||
if(G.get_amount() < 2)
|
||||
user << "<span class='warning'>You need two sheets of glass to put in the glass panel.</span>"
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
user << "<span class='notice'>You start to put in the glass panel.</span>"
|
||||
if(do_after(user, 20) && state == 3)
|
||||
if (G.use(2))
|
||||
if(G.use(2))
|
||||
user << "<span class='notice'>You put in the glass panel.</span>"
|
||||
src.state = 4
|
||||
src.icon_state = "[frame_type]_4"
|
||||
return
|
||||
state = 4
|
||||
|
||||
if(istype(P, /obj/item))
|
||||
else if(istype(P, /obj/item))
|
||||
if(state == 3)
|
||||
if(frame_type in machines)
|
||||
if(frame_type.frame_class == "machine")
|
||||
for(var/I in req_components)
|
||||
if(istype(P, I) && (req_components[I] > 0))
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
@@ -423,10 +519,10 @@
|
||||
update_desc()
|
||||
break
|
||||
|
||||
if(istype(P, /obj/item/stack/material/glass/reinforced))
|
||||
else if(istype(P, /obj/item/stack/material/glass/reinforced))
|
||||
var/obj/item/stack/material/glass/reinforced/CP = P
|
||||
if(CP.get_amount() > 1)
|
||||
var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided
|
||||
var/camt = min(CP.amount, req_components[I]) // amount of glass to take, idealy amount required, but limited by amount provided
|
||||
var/obj/item/stack/material/glass/reinforced/CC = new /obj/item/stack/material/glass/reinforced(src)
|
||||
CC.amount = camt
|
||||
CC.update_icon()
|
||||
@@ -445,4 +541,6 @@
|
||||
user << desc
|
||||
if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil) && !istype(P, /obj/item/stack/material))
|
||||
user << "<span class='warning'>You cannot add that component to the machine!</span>"
|
||||
return
|
||||
return
|
||||
|
||||
update_icon()
|
||||
@@ -19,11 +19,9 @@ Possible to do for anyone motivated enough:
|
||||
Itegrate EMP effect to disable the unit.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Holopad
|
||||
*/
|
||||
|
||||
#define HOLOPAD_PASSIVE_POWER_USAGE 1
|
||||
#define HOLOGRAM_POWER_USAGE 2
|
||||
#define RANGE_BASED 4
|
||||
@@ -37,39 +35,19 @@ var/const/HOLOPAD_MODE = RANGE_BASED
|
||||
icon_state = "holopad0"
|
||||
show_messages = 1
|
||||
circuit = /obj/item/weapon/circuitboard/holopad
|
||||
|
||||
layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them.
|
||||
|
||||
var/power_per_hologram = 500 //per usage per hologram
|
||||
idle_power_usage = 5
|
||||
use_power = 1
|
||||
|
||||
var/list/mob/living/silicon/ai/masters = new() //List of AIs that use the holopad
|
||||
var/last_request = 0 //to prevent request spam. ~Carn
|
||||
var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating.
|
||||
|
||||
/obj/machinery/hologram/holopad/attackby(obj/item/I as obj, user as mob)
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
|
||||
user << "<span class='notice'>You start removing the glass.</span>"
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
A.density = 1
|
||||
A.frame_type = "holopad"
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
user << "<span class='notice'>You remove the glass.</span>"
|
||||
A.state = 4
|
||||
A.icon_state = "holopad_4"
|
||||
M.deconstruct(src)
|
||||
for (var/mob/living/silicon/ai/master in masters)
|
||||
clear_holo(master)
|
||||
qdel(src)
|
||||
if(computer_deconstruction_screwdriver(user, I))
|
||||
return
|
||||
else
|
||||
src.attack_hand(user)
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
/obj/machinery/hologram/holopad/attack_hand(var/mob/living/carbon/human/user) //Carn: Hologram requests.
|
||||
@@ -87,7 +65,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED
|
||||
user << "<span class='notice'>A request for AI presence was already sent recently.</span>"
|
||||
|
||||
/obj/machinery/hologram/holopad/attack_ai(mob/living/silicon/ai/user)
|
||||
if (!istype(user))
|
||||
if(!istype(user))
|
||||
return
|
||||
/*There are pretty much only three ways to interact here.
|
||||
I don't need to check for client since they're clicking on an object.
|
||||
@@ -102,11 +80,11 @@ var/const/HOLOPAD_MODE = RANGE_BASED
|
||||
|
||||
/obj/machinery/hologram/holopad/proc/activate_holo(mob/living/silicon/ai/user)
|
||||
if(!(stat & NOPOWER) && user.eyeobj.loc == src.loc)//If the projector has power and client eye is on it
|
||||
if (user.holo)
|
||||
if(user.holo)
|
||||
user << "<span class='danger'>ERROR:</span> Image feed in progress."
|
||||
return
|
||||
create_holo(user)//Create one.
|
||||
src.visible_message("A holographic image of [user] flicks to life right before your eyes!")
|
||||
visible_message("A holographic image of [user] flicks to life right before your eyes!")
|
||||
else
|
||||
user << "<span class='danger'>ERROR:</span> Unable to project hologram."
|
||||
return
|
||||
@@ -165,7 +143,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
|
||||
user.holo = null
|
||||
qdel(masters[user])//Get rid of user's hologram
|
||||
masters -= user //Discard AI from the list of those who use holopad
|
||||
if (!masters.len)//If no users left
|
||||
if(!masters.len)//If no users left
|
||||
set_light(0) //pad lighting (hologram lighting will be handled automatically since its owner was deleted)
|
||||
icon_state = "holopad0"
|
||||
return 1
|
||||
@@ -214,10 +192,10 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
|
||||
if(1.0)
|
||||
qdel(src)
|
||||
if(2.0)
|
||||
if (prob(50))
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
if(3.0)
|
||||
if (prob(5))
|
||||
if(prob(5))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -14,20 +14,20 @@
|
||||
var/on_icon = "sign_on"
|
||||
|
||||
/obj/machinery/holosign/proc/toggle()
|
||||
if (stat & (BROKEN|NOPOWER))
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
lit = !lit
|
||||
use_power = lit ? 2 : 1
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/holosign/update_icon()
|
||||
if (!lit)
|
||||
if(!lit)
|
||||
icon_state = "sign_off"
|
||||
else
|
||||
icon_state = on_icon
|
||||
|
||||
/obj/machinery/holosign/power_change()
|
||||
if (stat & NOPOWER)
|
||||
if(stat & NOPOWER)
|
||||
lit = 0
|
||||
use_power = 0
|
||||
update_icon()
|
||||
@@ -55,8 +55,8 @@
|
||||
icon_state = "light[active]"
|
||||
|
||||
for(var/obj/machinery/holosign/M in machines)
|
||||
if (M.id == src.id)
|
||||
spawn( 0 )
|
||||
if(M.id == id)
|
||||
spawn(0)
|
||||
M.toggle()
|
||||
return
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
active_power_usage = 4
|
||||
|
||||
/obj/machinery/igniter/attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/igniter/attack_hand(mob/user as mob)
|
||||
if(..())
|
||||
@@ -19,14 +19,14 @@
|
||||
add_fingerprint(user)
|
||||
|
||||
use_power(50)
|
||||
src.on = !( src.on )
|
||||
src.icon_state = text("igniter[]", src.on)
|
||||
on = !(on)
|
||||
icon_state = text("igniter[]", on)
|
||||
return
|
||||
|
||||
/obj/machinery/igniter/process() //ugh why is this even in process()?
|
||||
if (src.on && !(stat & NOPOWER) )
|
||||
if(on && !(stat & NOPOWER))
|
||||
var/turf/location = src.loc
|
||||
if (isturf(location))
|
||||
if(isturf(location))
|
||||
location.hotspot_expose(1000,500,1)
|
||||
return 1
|
||||
|
||||
@@ -36,8 +36,8 @@
|
||||
|
||||
/obj/machinery/igniter/power_change()
|
||||
..()
|
||||
if(!( stat & NOPOWER) )
|
||||
icon_state = "igniter[src.on]"
|
||||
if(!(stat & NOPOWER))
|
||||
icon_state = "igniter[on]"
|
||||
else
|
||||
icon_state = "igniter0"
|
||||
|
||||
@@ -57,56 +57,54 @@
|
||||
idle_power_usage = 2
|
||||
active_power_usage = 4
|
||||
|
||||
|
||||
/obj/machinery/sparker/New()
|
||||
..()
|
||||
|
||||
/obj/machinery/sparker/power_change()
|
||||
..()
|
||||
if ( !(stat & NOPOWER) && disable == 0 )
|
||||
if(!(stat & NOPOWER) && disable == 0)
|
||||
|
||||
icon_state = "[base_state]"
|
||||
// src.sd_SetLuminosity(2)
|
||||
// sd_SetLuminosity(2)
|
||||
else
|
||||
icon_state = "[base_state]-p"
|
||||
// src.sd_SetLuminosity(0)
|
||||
// sd_SetLuminosity(0)
|
||||
|
||||
/obj/machinery/sparker/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
add_fingerprint(user)
|
||||
src.disable = !src.disable
|
||||
if (src.disable)
|
||||
disable = !disable
|
||||
if(disable)
|
||||
user.visible_message("<span class='warning'>[user] has disabled the [src]!</span>", "<span class='warning'>You disable the connection to the [src].</span>")
|
||||
icon_state = "[base_state]-d"
|
||||
if (!src.disable)
|
||||
if(!disable)
|
||||
user.visible_message("<span class='warning'>[user] has reconnected the [src]!</span>", "<span class='warning'>You fix the connection to the [src].</span>")
|
||||
if(src.powered())
|
||||
if(powered())
|
||||
icon_state = "[base_state]"
|
||||
else
|
||||
icon_state = "[base_state]-p"
|
||||
|
||||
/obj/machinery/sparker/attack_ai()
|
||||
if (src.anchored)
|
||||
return src.ignite()
|
||||
if(anchored)
|
||||
return ignite()
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/sparker/proc/ignite()
|
||||
if (!(powered()))
|
||||
if(!(powered()))
|
||||
return
|
||||
|
||||
if ((src.disable) || (src.last_spark && world.time < src.last_spark + 50))
|
||||
if((disable) || (last_spark && world.time < last_spark + 50))
|
||||
return
|
||||
|
||||
|
||||
flick("[base_state]-spark", src)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(2, 1, src)
|
||||
s.start()
|
||||
src.last_spark = world.time
|
||||
last_spark = world.time
|
||||
use_power(1000)
|
||||
var/turf/location = src.loc
|
||||
if (isturf(location))
|
||||
if(isturf(location))
|
||||
location.hotspot_expose(1000,500,1)
|
||||
return 1
|
||||
|
||||
@@ -132,14 +130,14 @@
|
||||
icon_state = "launcheract"
|
||||
|
||||
for(var/obj/machinery/sparker/M in machines)
|
||||
if (M.id == src.id)
|
||||
spawn( 0 )
|
||||
if(M.id == id)
|
||||
spawn(0)
|
||||
M.ignite()
|
||||
|
||||
for(var/obj/machinery/igniter/M in machines)
|
||||
if(M.id == src.id)
|
||||
if(M.id == id)
|
||||
use_power(50)
|
||||
M.on = !( M.on )
|
||||
M.on = !(M.on)
|
||||
M.icon_state = text("igniter[]", M.on)
|
||||
|
||||
sleep(50)
|
||||
@@ -147,4 +145,4 @@
|
||||
icon_state = "launcherbtt"
|
||||
active = 0
|
||||
|
||||
return
|
||||
return
|
||||
@@ -10,7 +10,7 @@
|
||||
/obj/machinery/iv_drip/var/obj/item/weapon/reagent_containers/beaker = null
|
||||
|
||||
/obj/machinery/iv_drip/update_icon()
|
||||
if(src.attached)
|
||||
if(attached)
|
||||
icon_state = "hooked"
|
||||
else
|
||||
icon_state = ""
|
||||
@@ -41,28 +41,28 @@
|
||||
return
|
||||
|
||||
if(attached)
|
||||
visible_message("[src.attached] is detached from \the [src]")
|
||||
src.attached = null
|
||||
src.update_icon()
|
||||
visible_message("[attached] is detached from \the [src]")
|
||||
attached = null
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(in_range(src, usr) && ishuman(over_object) && get_dist(over_object, src) <= 1)
|
||||
visible_message("[usr] attaches \the [src] to \the [over_object].")
|
||||
src.attached = over_object
|
||||
src.update_icon()
|
||||
attached = over_object
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/iv_drip/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/reagent_containers))
|
||||
if(!isnull(src.beaker))
|
||||
if(istype(W, /obj/item/weapon/reagent_containers))
|
||||
if(!isnull(beaker))
|
||||
user << "There is already a reagent container loaded!"
|
||||
return
|
||||
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.beaker = W
|
||||
beaker = W
|
||||
user << "You attach \the [W] to \the [src]."
|
||||
src.update_icon()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
@@ -70,11 +70,11 @@
|
||||
user << "<span class='notice'>You start to dismantle the IV drip.</span>"
|
||||
if(do_after(user, 15))
|
||||
user << "<span class='notice'>You dismantle the IV drip.</span>"
|
||||
var/obj/item/stack/rods/A = new /obj/item/stack/rods( src.loc )
|
||||
var/obj/item/stack/rods/A = new /obj/item/stack/rods(src.loc)
|
||||
A.amount = 6
|
||||
if(src.beaker)
|
||||
src.beaker.loc = get_turf(src)
|
||||
src.beaker = null
|
||||
if(beaker)
|
||||
beaker.loc = get_turf(src)
|
||||
beaker = null
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
@@ -84,24 +84,24 @@
|
||||
/obj/machinery/iv_drip/process()
|
||||
set background = 1
|
||||
|
||||
if(src.attached)
|
||||
if(attached)
|
||||
|
||||
if(!(get_dist(src, src.attached) <= 1 && isturf(src.attached.loc)))
|
||||
visible_message("The needle is ripped out of [src.attached], doesn't that hurt?")
|
||||
src.attached:apply_damage(3, BRUTE, pick("r_arm", "l_arm"))
|
||||
src.attached = null
|
||||
src.update_icon()
|
||||
if(!(get_dist(src, attached) <= 1 && isturf(attached.loc)))
|
||||
visible_message("The needle is ripped out of [attached], doesn't that hurt?")
|
||||
attached:apply_damage(3, BRUTE, pick("r_arm", "l_arm"))
|
||||
attached = null
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(src.attached && src.beaker)
|
||||
if(attached && beaker)
|
||||
// Give blood
|
||||
if(mode)
|
||||
if(src.beaker.volume > 0)
|
||||
if(beaker.volume > 0)
|
||||
var/transfer_amount = REM
|
||||
if(istype(src.beaker, /obj/item/weapon/reagent_containers/blood))
|
||||
if(istype(beaker, /obj/item/weapon/reagent_containers/blood))
|
||||
// speed up transfer on blood packs
|
||||
transfer_amount = 4
|
||||
src.beaker.reagents.trans_to_mob(src.attached, transfer_amount, CHEM_BLOOD)
|
||||
beaker.reagents.trans_to_mob(attached, transfer_amount, CHEM_BLOOD)
|
||||
update_icon()
|
||||
|
||||
// Take blood
|
||||
@@ -130,7 +130,7 @@
|
||||
|
||||
var/datum/reagent/B = T.take_blood(beaker,amount)
|
||||
|
||||
if (B)
|
||||
if(B)
|
||||
beaker.reagents.reagent_list |= B
|
||||
beaker.reagents.update_total()
|
||||
beaker.on_reagent_change()
|
||||
@@ -138,9 +138,9 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/iv_drip/attack_hand(mob/user as mob)
|
||||
if(src.beaker)
|
||||
src.beaker.loc = get_turf(src)
|
||||
src.beaker = null
|
||||
if(beaker)
|
||||
beaker.loc = get_turf(src)
|
||||
beaker = null
|
||||
update_icon()
|
||||
else
|
||||
return ..()
|
||||
@@ -163,7 +163,7 @@
|
||||
|
||||
/obj/machinery/iv_drip/examine(mob/user)
|
||||
..(user)
|
||||
if (!(user in view(2)) && user!=src.loc) return
|
||||
if(!(user in view(2)) && user != src.loc) return
|
||||
|
||||
user << "The IV drip is [mode ? "injecting" : "taking blood"]."
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
|
||||
usr << "<span class='notice'>[attached ? attached : "No one"] is attached.</span>"
|
||||
|
||||
/obj/machinery/iv_drip/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
/obj/machinery/iv_drip/CanPass(atom/movable/mover, turf/target, height = 0, air_group = 0)
|
||||
if(height && istype(mover) && mover.checkpass(PASSTABLE)) //allow bullets, beams, thrown objects, mice, drones, and the like through.
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
@@ -38,7 +38,6 @@ datum/track/New(var/title_name, var/audio)
|
||||
|
||||
/obj/machinery/media/jukebox/New()
|
||||
..()
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
reagents = new/datum/reagents(100)
|
||||
reagents.my_atom = src
|
||||
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/motor(src)
|
||||
|
||||
@@ -18,19 +18,17 @@
|
||||
/obj/machinery/light_switch/New()
|
||||
..()
|
||||
spawn(5)
|
||||
src.area = get_area(src)
|
||||
area = get_area(src)
|
||||
|
||||
if(otherarea)
|
||||
src.area = locate(text2path("/area/[otherarea]"))
|
||||
area = locate(text2path("/area/[otherarea]"))
|
||||
|
||||
if(!name)
|
||||
name = "light switch ([area.name])"
|
||||
|
||||
src.on = src.area.lightswitch
|
||||
on = area.lightswitch
|
||||
updateicon()
|
||||
|
||||
|
||||
|
||||
/obj/machinery/light_switch/proc/updateicon()
|
||||
if(!overlay)
|
||||
overlay = image(icon, "light1-overlay", LIGHTING_LAYER+0.1)
|
||||
@@ -77,4 +75,4 @@
|
||||
..(severity)
|
||||
return
|
||||
power_change()
|
||||
..(severity)
|
||||
..(severity)
|
||||
@@ -113,7 +113,6 @@ Class Procs:
|
||||
var/global/gl_uid = 1
|
||||
var/interact_offline = 0 // Can the machine be interacted with while de-powered.
|
||||
var/circuit = null
|
||||
var/frame_type = "machine"
|
||||
|
||||
/obj/machinery/New(l, d=0)
|
||||
..(l)
|
||||
@@ -124,6 +123,8 @@ Class Procs:
|
||||
else
|
||||
machines += src
|
||||
machinery_sort_required = 1
|
||||
if(circuit)
|
||||
circuit = new circuit(src)
|
||||
|
||||
/obj/machinery/Destroy()
|
||||
machines -= src
|
||||
@@ -165,11 +166,11 @@ Class Procs:
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(50))
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(25))
|
||||
if(prob(25))
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
@@ -182,20 +183,20 @@ Class Procs:
|
||||
/obj/machinery/proc/auto_use_power()
|
||||
if(!powered(power_channel))
|
||||
return 0
|
||||
if(src.use_power == 1)
|
||||
use_power(idle_power_usage,power_channel, 1)
|
||||
else if(src.use_power >= 2)
|
||||
use_power(active_power_usage,power_channel, 1)
|
||||
if(use_power == 1)
|
||||
use_power(idle_power_usage, power_channel, 1)
|
||||
else if(use_power >= 2)
|
||||
use_power(active_power_usage, power_channel, 1)
|
||||
return 1
|
||||
|
||||
/obj/machinery/proc/operable(var/additional_flags = 0)
|
||||
return !inoperable(additional_flags)
|
||||
|
||||
/obj/machinery/proc/inoperable(var/additional_flags = 0)
|
||||
return (stat & (NOPOWER|BROKEN|additional_flags))
|
||||
return (stat & (NOPOWER | BROKEN | additional_flags))
|
||||
|
||||
/obj/machinery/CanUseTopic(var/mob/user)
|
||||
if(!interact_offline && (stat & (NOPOWER|BROKEN)))
|
||||
if(!interact_offline && (stat & (NOPOWER | BROKEN)))
|
||||
return STATUS_CLOSE
|
||||
|
||||
return ..()
|
||||
@@ -214,20 +215,19 @@ Class Procs:
|
||||
// For some reason attack_robot doesn't work
|
||||
// This is to stop robots from using cameras to remotely control machines.
|
||||
if(user.client && user.client.eye == user)
|
||||
return src.attack_hand(user)
|
||||
return attack_hand(user)
|
||||
else
|
||||
return src.attack_hand(user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/attack_hand(mob/user as mob)
|
||||
if(inoperable(MAINT))
|
||||
return 1
|
||||
if(user.lying || user.stat)
|
||||
return 1
|
||||
if ( ! (istype(usr, /mob/living/carbon/human) || \
|
||||
istype(usr, /mob/living/silicon)))
|
||||
if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/living/silicon)))
|
||||
usr << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return 1
|
||||
if (ishuman(user))
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.getBrainLoss() >= 55)
|
||||
visible_message("<span class='warning'>[H] stares cluelessly at [src].</span>")
|
||||
@@ -236,7 +236,7 @@ Class Procs:
|
||||
user << "<span class='warning'>You momentarily forget how to use [src].</span>"
|
||||
return 1
|
||||
|
||||
src.add_fingerprint(user)
|
||||
add_fingerprint(user)
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -252,7 +252,7 @@ Class Procs:
|
||||
O.show_message("\icon[src] <span class = 'notice'>[msg]</span>", 2)
|
||||
|
||||
/obj/machinery/proc/ping(text=null)
|
||||
if (!text)
|
||||
if(!text)
|
||||
text = "\The [src] pings."
|
||||
|
||||
state(text, "blue")
|
||||
@@ -266,7 +266,7 @@ Class Procs:
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
if (electrocute_mob(user, get_area(src), src, 0.7))
|
||||
if(electrocute_mob(user, get_area(src), src, 0.7))
|
||||
var/area/temp_area = get_area(src)
|
||||
if(temp_area)
|
||||
var/obj/machinery/power/apc/temp_apc = temp_area.get_apc()
|
||||
@@ -304,7 +304,7 @@ Class Procs:
|
||||
RefreshParts()
|
||||
else
|
||||
user << "<span class='notice'>Following parts detected in the machine:</span>"
|
||||
for(var/var/obj/item/C in component_parts)
|
||||
for(var/var/obj/item/C in component_parts) //var/var/obj/item/C?
|
||||
user << "<span class='notice'> [C.name]</span>"
|
||||
return 1
|
||||
|
||||
@@ -324,31 +324,77 @@ Class Procs:
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
/obj/machinery/proc/computer_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S)
|
||||
if(!istype(S))
|
||||
return 0
|
||||
if(!circuit)
|
||||
return 0
|
||||
user << "<span class='notice'>You start disconnecting the monitor.</span>"
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
if(stat & BROKEN)
|
||||
user << "<span class='notice'>The broken glass falls out.</span>"
|
||||
new /obj/item/weapon/material/shard(src.loc)
|
||||
else
|
||||
user << "<span class='notice'>You disconnect the monitor.</span>"
|
||||
. = dismantle()
|
||||
|
||||
/obj/machinery/proc/alarm_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S)
|
||||
if(!istype(S))
|
||||
return 0
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
panel_open = !panel_open
|
||||
user << "The wires have been [panel_open ? "exposed" : "unexposed"]"
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
/obj/machinery/proc/alarm_deconstruction_wirecutters(var/mob/user, var/obj/item/weapon/wirecutters/W)
|
||||
if(!istype(W))
|
||||
return 0
|
||||
if(!panel_open)
|
||||
return 0
|
||||
user.visible_message("<span class='warning'>[user] has cut the wires inside \the [src]!</span>", "You have cut the wires inside \the [src].")
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
new/obj/item/stack/cable_coil(get_turf(src), 5)
|
||||
. = dismantle()
|
||||
|
||||
/obj/machinery/proc/dismantle()
|
||||
playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
|
||||
var/obj/structure/frame/A = new /obj/structure/frame(src.loc)
|
||||
var/obj/item/weapon/circuitboard/M = circuit
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
A.density = 1
|
||||
A.frame_type = M.board_type
|
||||
if(A.frame_type in A.no_circuit)
|
||||
if(A.frame_type.circuit)
|
||||
A.need_circuit = 0
|
||||
for (var/obj/D in src.component_parts)
|
||||
D.forceMove(loc)
|
||||
if(A.components)
|
||||
A.components.Cut()
|
||||
|
||||
if(A.frame_type.frame_class == "machine")
|
||||
for(var/obj/D in component_parts)
|
||||
D.forceMove(src.loc)
|
||||
if(A.components)
|
||||
A.components.Cut()
|
||||
else
|
||||
A.components = list()
|
||||
component_parts = list()
|
||||
A.check_components()
|
||||
|
||||
if(A.frame_type.frame_class == "alarm")
|
||||
A.state = 2
|
||||
else if(A.frame_type.frame_class == "computer" || A.frame_type.frame_class == "display")
|
||||
if(stat & BROKEN)
|
||||
A.state = 3
|
||||
else
|
||||
A.state = 4
|
||||
else
|
||||
A.components = list()
|
||||
component_parts = list()
|
||||
A.icon_state = "[A.frame_type]_3"
|
||||
A.state = 3
|
||||
A.dir = dir
|
||||
A.state = 3
|
||||
|
||||
A.set_dir(dir)
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.check_components()
|
||||
A.update_desc()
|
||||
A.update_icon()
|
||||
M.loc = null
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
return 1
|
||||
return 1
|
||||
+281
-291
@@ -5,7 +5,6 @@
|
||||
// This was created for firing ranges, but I suppose this could have other applications - Doohl
|
||||
|
||||
/obj/machinery/magnetic_module
|
||||
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "floor_magnet-f"
|
||||
name = "Electromagnetic Generator"
|
||||
@@ -29,166 +28,157 @@
|
||||
var/center_y = 0
|
||||
var/max_dist = 20 // absolute value of center_x,y cannot exceed this integer
|
||||
|
||||
New()
|
||||
..()
|
||||
var/turf/T = loc
|
||||
hide(!T.is_plating())
|
||||
center = T
|
||||
/obj/machinery/magnetic_module/New()
|
||||
..()
|
||||
var/turf/T = loc
|
||||
hide(!T.is_plating())
|
||||
center = T
|
||||
|
||||
spawn(10) // must wait for map loading to finish
|
||||
if(radio_controller)
|
||||
radio_controller.add_object(src, freq, RADIO_MAGNETS)
|
||||
spawn(10) // must wait for map loading to finish
|
||||
if(radio_controller)
|
||||
radio_controller.add_object(src, freq, RADIO_MAGNETS)
|
||||
|
||||
spawn()
|
||||
magnetic_process()
|
||||
spawn()
|
||||
magnetic_process()
|
||||
|
||||
// update the invisibility and icon
|
||||
hide(var/intact)
|
||||
invisibility = intact ? 101 : 0
|
||||
updateicon()
|
||||
// update the invisibility and icon
|
||||
/obj/machinery/magnetic_module/hide(var/intact)
|
||||
invisibility = intact ? 101 : 0
|
||||
updateicon()
|
||||
|
||||
// update the icon_state
|
||||
proc/updateicon()
|
||||
var/state="floor_magnet"
|
||||
var/onstate=""
|
||||
if(!on)
|
||||
onstate="0"
|
||||
// update the icon_state
|
||||
/obj/machinery/magnetic_module/proc/updateicon()
|
||||
var/state="floor_magnet"
|
||||
var/onstate=""
|
||||
if(!on)
|
||||
onstate="0"
|
||||
|
||||
if(invisibility)
|
||||
icon_state = "[state][onstate]-f" // if invisible, set icon to faded version
|
||||
// in case of being revealed by T-scanner
|
||||
else
|
||||
icon_state = "[state][onstate]"
|
||||
if(invisibility)
|
||||
icon_state = "[state][onstate]-f" // if invisible, set icon to faded version
|
||||
// in case of being revealed by T-scanner
|
||||
else
|
||||
icon_state = "[state][onstate]"
|
||||
|
||||
receive_signal(datum/signal/signal)
|
||||
/obj/machinery/magnetic_module/receive_signal(datum/signal/signal)
|
||||
var/command = signal.data["command"]
|
||||
var/modifier = signal.data["modifier"]
|
||||
var/signal_code = signal.data["code"]
|
||||
if(command && (signal_code == code))
|
||||
|
||||
var/command = signal.data["command"]
|
||||
var/modifier = signal.data["modifier"]
|
||||
var/signal_code = signal.data["code"]
|
||||
if(command && (signal_code == code))
|
||||
Cmd(command, modifier)
|
||||
|
||||
Cmd(command, modifier)
|
||||
/obj/machinery/magnetic_module/proc/Cmd(var/command, var/modifier)
|
||||
if(command)
|
||||
switch(command)
|
||||
if("set-electriclevel")
|
||||
if(modifier) electricity_level = modifier
|
||||
if("set-magneticfield")
|
||||
if(modifier) magnetic_field = modifier
|
||||
|
||||
if("add-elec")
|
||||
electricity_level++
|
||||
if(electricity_level > 12)
|
||||
electricity_level = 12
|
||||
if("sub-elec")
|
||||
electricity_level--
|
||||
if(electricity_level <= 0)
|
||||
electricity_level = 1
|
||||
if("add-mag")
|
||||
magnetic_field++
|
||||
if(magnetic_field > 4)
|
||||
magnetic_field = 4
|
||||
if("sub-mag")
|
||||
magnetic_field--
|
||||
if(magnetic_field <= 0)
|
||||
magnetic_field = 1
|
||||
|
||||
if("set-x")
|
||||
if(modifier) center_x = modifier
|
||||
if("set-y")
|
||||
if(modifier) center_y = modifier
|
||||
|
||||
proc/Cmd(var/command, var/modifier)
|
||||
if("N") // NORTH
|
||||
center_y++
|
||||
if("S") // SOUTH
|
||||
center_y--
|
||||
if("E") // EAST
|
||||
center_x++
|
||||
if("W") // WEST
|
||||
center_x--
|
||||
if("C") // CENTER
|
||||
center_x = 0
|
||||
center_y = 0
|
||||
if("R") // RANDOM
|
||||
center_x = rand(-max_dist, max_dist)
|
||||
center_y = rand(-max_dist, max_dist)
|
||||
|
||||
if(command)
|
||||
switch(command)
|
||||
if("set-electriclevel")
|
||||
if(modifier) electricity_level = modifier
|
||||
if("set-magneticfield")
|
||||
if(modifier) magnetic_field = modifier
|
||||
if("set-code")
|
||||
if(modifier) code = modifier
|
||||
if("toggle-power")
|
||||
on = !on
|
||||
|
||||
if("add-elec")
|
||||
electricity_level++
|
||||
if(electricity_level > 12)
|
||||
electricity_level = 12
|
||||
if("sub-elec")
|
||||
electricity_level--
|
||||
if(electricity_level <= 0)
|
||||
electricity_level = 1
|
||||
if("add-mag")
|
||||
magnetic_field++
|
||||
if(magnetic_field > 4)
|
||||
magnetic_field = 4
|
||||
if("sub-mag")
|
||||
magnetic_field--
|
||||
if(magnetic_field <= 0)
|
||||
magnetic_field = 1
|
||||
if(on)
|
||||
spawn()
|
||||
magnetic_process()
|
||||
|
||||
if("set-x")
|
||||
if(modifier) center_x = modifier
|
||||
if("set-y")
|
||||
if(modifier) center_y = modifier
|
||||
/obj/machinery/magnetic_module/process()
|
||||
if(stat & NOPOWER)
|
||||
on = 0
|
||||
|
||||
if("N") // NORTH
|
||||
center_y++
|
||||
if("S") // SOUTH
|
||||
center_y--
|
||||
if("E") // EAST
|
||||
center_x++
|
||||
if("W") // WEST
|
||||
center_x--
|
||||
if("C") // CENTER
|
||||
center_x = 0
|
||||
center_y = 0
|
||||
if("R") // RANDOM
|
||||
center_x = rand(-max_dist, max_dist)
|
||||
center_y = rand(-max_dist, max_dist)
|
||||
// Sanity checks:
|
||||
if(electricity_level <= 0)
|
||||
electricity_level = 1
|
||||
if(magnetic_field <= 0)
|
||||
magnetic_field = 1
|
||||
|
||||
if("set-code")
|
||||
if(modifier) code = modifier
|
||||
if("toggle-power")
|
||||
on = !on
|
||||
// Limitations:
|
||||
if(abs(center_x) > max_dist)
|
||||
center_x = max_dist
|
||||
if(abs(center_y) > max_dist)
|
||||
center_y = max_dist
|
||||
if(magnetic_field > 4)
|
||||
magnetic_field = 4
|
||||
if(electricity_level > 12)
|
||||
electricity_level = 12
|
||||
|
||||
if(on)
|
||||
spawn()
|
||||
magnetic_process()
|
||||
// Update power usage:
|
||||
if(on)
|
||||
use_power = 2
|
||||
active_power_usage = electricity_level*15
|
||||
else
|
||||
use_power = 0
|
||||
|
||||
// Overload conditions:
|
||||
/* // Eeeehhh kinda stupid
|
||||
if(on)
|
||||
if(electricity_level > 11)
|
||||
if(prob(electricity_level))
|
||||
explosion(loc, 0, 1, 2, 3) // ooo dat shit EXPLODES son
|
||||
spawn(2)
|
||||
qdel(src)
|
||||
*/
|
||||
|
||||
updateicon()
|
||||
|
||||
process()
|
||||
if(stat & NOPOWER)
|
||||
on = 0
|
||||
/obj/machinery/magnetic_module/proc/magnetic_process() // proc that actually does the pulling
|
||||
if(pulling) return
|
||||
while(on)
|
||||
|
||||
// Sanity checks:
|
||||
if(electricity_level <= 0)
|
||||
electricity_level = 1
|
||||
if(magnetic_field <= 0)
|
||||
magnetic_field = 1
|
||||
pulling = 1
|
||||
center = locate(x+center_x, y+center_y, z)
|
||||
if(center)
|
||||
for(var/obj/M in orange(magnetic_field, center))
|
||||
if(!M.anchored && (M.flags & CONDUCT))
|
||||
step_towards(M, center)
|
||||
|
||||
for(var/mob/living/silicon/S in orange(magnetic_field, center))
|
||||
if(istype(S, /mob/living/silicon/ai)) continue
|
||||
step_towards(S, center)
|
||||
|
||||
// Limitations:
|
||||
if(abs(center_x) > max_dist)
|
||||
center_x = max_dist
|
||||
if(abs(center_y) > max_dist)
|
||||
center_y = max_dist
|
||||
if(magnetic_field > 4)
|
||||
magnetic_field = 4
|
||||
if(electricity_level > 12)
|
||||
electricity_level = 12
|
||||
use_power(electricity_level * 5)
|
||||
sleep(13 - electricity_level)
|
||||
|
||||
// Update power usage:
|
||||
if(on)
|
||||
use_power = 2
|
||||
active_power_usage = electricity_level*15
|
||||
else
|
||||
use_power = 0
|
||||
|
||||
|
||||
// Overload conditions:
|
||||
/* // Eeeehhh kinda stupid
|
||||
if(on)
|
||||
if(electricity_level > 11)
|
||||
if(prob(electricity_level))
|
||||
explosion(loc, 0, 1, 2, 3) // ooo dat shit EXPLODES son
|
||||
spawn(2)
|
||||
qdel(src)
|
||||
*/
|
||||
|
||||
updateicon()
|
||||
|
||||
|
||||
proc/magnetic_process() // proc that actually does the pulling
|
||||
if(pulling) return
|
||||
while(on)
|
||||
|
||||
pulling = 1
|
||||
center = locate(x+center_x, y+center_y, z)
|
||||
if(center)
|
||||
for(var/obj/M in orange(magnetic_field, center))
|
||||
if(!M.anchored && (M.flags & CONDUCT))
|
||||
step_towards(M, center)
|
||||
|
||||
for(var/mob/living/silicon/S in orange(magnetic_field, center))
|
||||
if(istype(S, /mob/living/silicon/ai)) continue
|
||||
step_towards(S, center)
|
||||
|
||||
use_power(electricity_level * 5)
|
||||
sleep(13 - electricity_level)
|
||||
|
||||
pulling = 0
|
||||
pulling = 0
|
||||
|
||||
/obj/machinery/magnetic_module/Destroy()
|
||||
if(radio_controller)
|
||||
@@ -220,186 +210,186 @@
|
||||
var/datum/radio_frequency/radio_connection
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
/obj/machinery/magnetic_controller/New()
|
||||
..()
|
||||
|
||||
if(autolink)
|
||||
for(var/obj/machinery/magnetic_module/M in world)
|
||||
if(M.freq == frequency && M.code == code)
|
||||
magnets.Add(M)
|
||||
if(autolink)
|
||||
for(var/obj/machinery/magnetic_module/M in world)
|
||||
if(M.freq == frequency && M.code == code)
|
||||
magnets.Add(M)
|
||||
|
||||
|
||||
spawn(45) // must wait for map loading to finish
|
||||
if(radio_controller)
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_MAGNETS)
|
||||
spawn(45) // must wait for map loading to finish
|
||||
if(radio_controller)
|
||||
radio_connection = radio_controller.add_object(src, frequency, RADIO_MAGNETS)
|
||||
|
||||
|
||||
if(path) // check for default path
|
||||
filter_path() // renders rpath
|
||||
if(path) // check for default path
|
||||
filter_path() // renders rpath
|
||||
|
||||
|
||||
process()
|
||||
if(magnets.len == 0 && autolink)
|
||||
for(var/obj/machinery/magnetic_module/M in world)
|
||||
if(M.freq == frequency && M.code == code)
|
||||
magnets.Add(M)
|
||||
/obj/machinery/magnetic_controller/process()
|
||||
if(magnets.len == 0 && autolink)
|
||||
for(var/obj/machinery/magnetic_module/M in world)
|
||||
if(M.freq == frequency && M.code == code)
|
||||
magnets.Add(M)
|
||||
|
||||
|
||||
attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
/obj/machinery/magnetic_controller/attack_ai(mob/user as mob)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/magnetic_controller/attack_hand(mob/user as mob)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = "<B>Magnetic Control Console</B><BR><BR>"
|
||||
if(!autolink)
|
||||
dat += {"
|
||||
Frequency: <a href='?src=\ref[src];operation=setfreq'>[frequency]</a><br>
|
||||
Code: <a href='?src=\ref[src];operation=setfreq'>[code]</a><br>
|
||||
<a href='?src=\ref[src];operation=probe'>Probe Generators</a><br>
|
||||
"}
|
||||
|
||||
if(magnets.len >= 1)
|
||||
|
||||
dat += "Magnets confirmed: <br>"
|
||||
var/i = 0
|
||||
for(var/obj/machinery/magnetic_module/M in magnets)
|
||||
i++
|
||||
dat += " < \[[i]\] (<a href='?src=\ref[src];radio-op=togglepower'>[M.on ? "On":"Off"]</a>) | Electricity level: <a href='?src=\ref[src];radio-op=minuselec'>-</a> [M.electricity_level] <a href='?src=\ref[src];radio-op=pluselec'>+</a>; Magnetic field: <a href='?src=\ref[src];radio-op=minusmag'>-</a> [M.magnetic_field] <a href='?src=\ref[src];radio-op=plusmag'>+</a><br>"
|
||||
|
||||
dat += "<br>Speed: <a href='?src=\ref[src];operation=minusspeed'>-</a> [speed] <a href='?src=\ref[src];operation=plusspeed'>+</a><br>"
|
||||
dat += "Path: {<a href='?src=\ref[src];operation=setpath'>[path]</a>}<br>"
|
||||
dat += "Moving: <a href='?src=\ref[src];operation=togglemoving'>[moving ? "Enabled":"Disabled"]</a>"
|
||||
|
||||
|
||||
user << browse(dat, "window=magnet;size=400x500")
|
||||
onclose(user, "magnet")
|
||||
|
||||
/obj/machinery/magnetic_controller/Topic(href, href_list)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
usr.set_machine(src)
|
||||
add_fingerprint(usr)
|
||||
|
||||
if(href_list["radio-op"])
|
||||
|
||||
// Prepare signal beforehand, because this is a radio operation
|
||||
var/datum/signal/signal = new
|
||||
signal.transmission_method = 1 // radio transmission
|
||||
signal.source = src
|
||||
signal.frequency = frequency
|
||||
signal.data["code"] = code
|
||||
|
||||
// Apply any necessary commands
|
||||
switch(href_list["radio-op"])
|
||||
if("togglepower")
|
||||
signal.data["command"] = "toggle-power"
|
||||
|
||||
if("minuselec")
|
||||
signal.data["command"] = "sub-elec"
|
||||
if("pluselec")
|
||||
signal.data["command"] = "add-elec"
|
||||
|
||||
if("minusmag")
|
||||
signal.data["command"] = "sub-mag"
|
||||
if("plusmag")
|
||||
signal.data["command"] = "add-mag"
|
||||
|
||||
|
||||
// Broadcast the signal
|
||||
|
||||
radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS)
|
||||
|
||||
spawn(1)
|
||||
updateUsrDialog() // pretty sure this increases responsiveness
|
||||
|
||||
if(href_list["operation"])
|
||||
switch(href_list["operation"])
|
||||
if("plusspeed")
|
||||
speed ++
|
||||
if(speed > 10)
|
||||
speed = 10
|
||||
if("minusspeed")
|
||||
speed --
|
||||
if(speed <= 0)
|
||||
speed = 1
|
||||
if("setpath")
|
||||
var/newpath = sanitize(input(usr, "Please define a new path!",,path) as text|null)
|
||||
if(newpath && newpath != "")
|
||||
moving = 0 // stop moving
|
||||
path = newpath
|
||||
pathpos = 1 // reset position
|
||||
filter_path() // renders rpath
|
||||
|
||||
if("togglemoving")
|
||||
moving = !moving
|
||||
if(moving)
|
||||
spawn() MagnetMove()
|
||||
|
||||
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/magnetic_controller/proc/MagnetMove()
|
||||
if(looping) return
|
||||
|
||||
while(moving && rpath.len >= 1)
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = "<B>Magnetic Control Console</B><BR><BR>"
|
||||
if(!autolink)
|
||||
dat += {"
|
||||
Frequency: <a href='?src=\ref[src];operation=setfreq'>[frequency]</a><br>
|
||||
Code: <a href='?src=\ref[src];operation=setfreq'>[code]</a><br>
|
||||
<a href='?src=\ref[src];operation=probe'>Probe Generators</a><br>
|
||||
"}
|
||||
break
|
||||
|
||||
if(magnets.len >= 1)
|
||||
looping = 1
|
||||
|
||||
dat += "Magnets confirmed: <br>"
|
||||
var/i = 0
|
||||
for(var/obj/machinery/magnetic_module/M in magnets)
|
||||
i++
|
||||
dat += " < \[[i]\] (<a href='?src=\ref[src];radio-op=togglepower'>[M.on ? "On":"Off"]</a>) | Electricity level: <a href='?src=\ref[src];radio-op=minuselec'>-</a> [M.electricity_level] <a href='?src=\ref[src];radio-op=pluselec'>+</a>; Magnetic field: <a href='?src=\ref[src];radio-op=minusmag'>-</a> [M.magnetic_field] <a href='?src=\ref[src];radio-op=plusmag'>+</a><br>"
|
||||
// Prepare the radio signal
|
||||
var/datum/signal/signal = new
|
||||
signal.transmission_method = 1 // radio transmission
|
||||
signal.source = src
|
||||
signal.frequency = frequency
|
||||
signal.data["code"] = code
|
||||
|
||||
dat += "<br>Speed: <a href='?src=\ref[src];operation=minusspeed'>-</a> [speed] <a href='?src=\ref[src];operation=plusspeed'>+</a><br>"
|
||||
dat += "Path: {<a href='?src=\ref[src];operation=setpath'>[path]</a>}<br>"
|
||||
dat += "Moving: <a href='?src=\ref[src];operation=togglemoving'>[moving ? "Enabled":"Disabled"]</a>"
|
||||
if(pathpos > rpath.len) // if the position is greater than the length, we just loop through the list!
|
||||
pathpos = 1
|
||||
|
||||
var/nextmove = uppertext(rpath[pathpos]) // makes it un-case-sensitive
|
||||
|
||||
if(!(nextmove in list("N","S","E","W","C","R")))
|
||||
// N, S, E, W are directional
|
||||
// C is center
|
||||
// R is random (in magnetic field's bounds)
|
||||
qdel(signal)
|
||||
break // break the loop if the character located is invalid
|
||||
|
||||
signal.data["command"] = nextmove
|
||||
|
||||
|
||||
user << browse(dat, "window=magnet;size=400x500")
|
||||
onclose(user, "magnet")
|
||||
|
||||
Topic(href, href_list)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
|
||||
if(href_list["radio-op"])
|
||||
|
||||
// Prepare signal beforehand, because this is a radio operation
|
||||
var/datum/signal/signal = new
|
||||
signal.transmission_method = 1 // radio transmission
|
||||
signal.source = src
|
||||
signal.frequency = frequency
|
||||
signal.data["code"] = code
|
||||
|
||||
// Apply any necessary commands
|
||||
switch(href_list["radio-op"])
|
||||
if("togglepower")
|
||||
signal.data["command"] = "toggle-power"
|
||||
|
||||
if("minuselec")
|
||||
signal.data["command"] = "sub-elec"
|
||||
if("pluselec")
|
||||
signal.data["command"] = "add-elec"
|
||||
|
||||
if("minusmag")
|
||||
signal.data["command"] = "sub-mag"
|
||||
if("plusmag")
|
||||
signal.data["command"] = "add-mag"
|
||||
|
||||
|
||||
// Broadcast the signal
|
||||
pathpos++ // increase iterator
|
||||
|
||||
// Broadcast the signal
|
||||
spawn()
|
||||
radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS)
|
||||
|
||||
spawn(1)
|
||||
updateUsrDialog() // pretty sure this increases responsiveness
|
||||
if(speed == 10)
|
||||
sleep(1)
|
||||
else
|
||||
sleep(12-speed)
|
||||
|
||||
if(href_list["operation"])
|
||||
switch(href_list["operation"])
|
||||
if("plusspeed")
|
||||
speed ++
|
||||
if(speed > 10)
|
||||
speed = 10
|
||||
if("minusspeed")
|
||||
speed --
|
||||
if(speed <= 0)
|
||||
speed = 1
|
||||
if("setpath")
|
||||
var/newpath = sanitize(input(usr, "Please define a new path!",,path) as text|null)
|
||||
if(newpath && newpath != "")
|
||||
moving = 0 // stop moving
|
||||
path = newpath
|
||||
pathpos = 1 // reset position
|
||||
filter_path() // renders rpath
|
||||
|
||||
if("togglemoving")
|
||||
moving = !moving
|
||||
if(moving)
|
||||
spawn() MagnetMove()
|
||||
looping = 0
|
||||
|
||||
|
||||
updateUsrDialog()
|
||||
/obj/machinery/magnetic_controller/proc/filter_path()
|
||||
// Generates the rpath variable using the path string, think of this as "string2list"
|
||||
// Doesn't use params2list() because of the akward way it stacks entities
|
||||
rpath = list() // clear rpath
|
||||
var/maximum_character = min(50, length(path)) // chooses the maximum length of the iterator. 50 max length
|
||||
|
||||
proc/MagnetMove()
|
||||
if(looping) return
|
||||
for(var/i=1, i<=maximum_character, i++) // iterates through all characters in path
|
||||
|
||||
while(moving && rpath.len >= 1)
|
||||
var/nextchar = copytext(path, i, i+1) // find next character
|
||||
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
break
|
||||
if(!(nextchar in list(";", "&", "*", " "))) // if char is a separator, ignore
|
||||
rpath += copytext(path, i, i+1) // else, add to list
|
||||
|
||||
looping = 1
|
||||
|
||||
// Prepare the radio signal
|
||||
var/datum/signal/signal = new
|
||||
signal.transmission_method = 1 // radio transmission
|
||||
signal.source = src
|
||||
signal.frequency = frequency
|
||||
signal.data["code"] = code
|
||||
|
||||
if(pathpos > rpath.len) // if the position is greater than the length, we just loop through the list!
|
||||
pathpos = 1
|
||||
|
||||
var/nextmove = uppertext(rpath[pathpos]) // makes it un-case-sensitive
|
||||
|
||||
if(!(nextmove in list("N","S","E","W","C","R")))
|
||||
// N, S, E, W are directional
|
||||
// C is center
|
||||
// R is random (in magnetic field's bounds)
|
||||
qdel(signal)
|
||||
break // break the loop if the character located is invalid
|
||||
|
||||
signal.data["command"] = nextmove
|
||||
|
||||
|
||||
pathpos++ // increase iterator
|
||||
|
||||
// Broadcast the signal
|
||||
spawn()
|
||||
radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS)
|
||||
|
||||
if(speed == 10)
|
||||
sleep(1)
|
||||
else
|
||||
sleep(12-speed)
|
||||
|
||||
looping = 0
|
||||
|
||||
|
||||
proc/filter_path()
|
||||
// Generates the rpath variable using the path string, think of this as "string2list"
|
||||
// Doesn't use params2list() because of the akward way it stacks entities
|
||||
rpath = list() // clear rpath
|
||||
var/maximum_character = min( 50, length(path) ) // chooses the maximum length of the iterator. 50 max length
|
||||
|
||||
for(var/i=1, i<=maximum_character, i++) // iterates through all characters in path
|
||||
|
||||
var/nextchar = copytext(path, i, i+1) // find next character
|
||||
|
||||
if(!(nextchar in list(";", "&", "*", " "))) // if char is a separator, ignore
|
||||
rpath += copytext(path, i, i+1) // else, add to list
|
||||
|
||||
// there doesn't HAVE to be separators but it makes paths syntatically visible
|
||||
// there doesn't HAVE to be separators but it makes paths syntatically visible
|
||||
|
||||
/obj/machinery/magnetic_controller/Destroy()
|
||||
if(radio_controller)
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
|
||||
/obj/machinery/mass_driver/New()
|
||||
..()
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/motor(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/motor(src)
|
||||
@@ -59,7 +58,7 @@
|
||||
M << "<span class='notice'>The mass driver lets out a screech, it mustn't be able to handle any more items.</span>"
|
||||
break
|
||||
use_power(500)
|
||||
spawn( 0 )
|
||||
spawn(0)
|
||||
O.throw_at(target, drive_range * power, power)
|
||||
flick("mass_driver1", src)
|
||||
return
|
||||
|
||||
+178
-182
@@ -1,11 +1,9 @@
|
||||
// Navigation beacon for AI robots
|
||||
// Functions as a transponder: looks for incoming signal matching
|
||||
|
||||
|
||||
var/global/list/navbeacons // no I don't like putting this in, but it will do for now
|
||||
|
||||
/obj/machinery/navbeacon
|
||||
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "navbeacon0-f"
|
||||
name = "navigation beacon"
|
||||
@@ -13,162 +11,160 @@ var/global/list/navbeacons // no I don't like putting this in, but it will do
|
||||
level = 1 // underfloor
|
||||
layer = 2.5
|
||||
anchored = 1
|
||||
|
||||
var/open = 0 // true if cover is open
|
||||
var/locked = 1 // true if controls are locked
|
||||
var/freq = 1445 // radio frequency
|
||||
var/location = "" // location response text
|
||||
var/list/codes // assoc. list of transponder codes
|
||||
var/codes_txt = "" // codes as set on map: "tag1;tag2" or "tag1=value;tag2=value"
|
||||
|
||||
req_access = list(access_engine)
|
||||
|
||||
New()
|
||||
..()
|
||||
/obj/machinery/navbeacon/New()
|
||||
..()
|
||||
|
||||
set_codes()
|
||||
set_codes()
|
||||
|
||||
var/turf/T = loc
|
||||
hide(!T.is_plating())
|
||||
var/turf/T = loc
|
||||
hide(!T.is_plating())
|
||||
|
||||
// add beacon to MULE bot beacon list
|
||||
if(freq == 1400)
|
||||
if(!navbeacons)
|
||||
navbeacons = new()
|
||||
navbeacons += src
|
||||
// add beacon to MULE bot beacon list
|
||||
if(freq == 1400)
|
||||
if(!navbeacons)
|
||||
navbeacons = new()
|
||||
navbeacons += src
|
||||
|
||||
|
||||
spawn(5) // must wait for map loading to finish
|
||||
if(radio_controller)
|
||||
radio_controller.add_object(src, freq, RADIO_NAVBEACONS)
|
||||
spawn(5) // must wait for map loading to finish
|
||||
if(radio_controller)
|
||||
radio_controller.add_object(src, freq, RADIO_NAVBEACONS)
|
||||
|
||||
// set the transponder codes assoc list from codes_txt
|
||||
proc/set_codes()
|
||||
if(!codes_txt)
|
||||
return
|
||||
|
||||
codes = new()
|
||||
|
||||
var/list/entries = splittext(codes_txt, ";") // entries are separated by semicolons
|
||||
|
||||
for(var/e in entries)
|
||||
var/index = findtext(e, "=") // format is "key=value"
|
||||
if(index)
|
||||
var/key = copytext(e, 1, index)
|
||||
var/val = copytext(e, index+1)
|
||||
codes[key] = val
|
||||
else
|
||||
codes[e] = "1"
|
||||
|
||||
|
||||
// called when turf state changes
|
||||
// hide the object if turf is intact
|
||||
hide(var/intact)
|
||||
invisibility = intact ? 101 : 0
|
||||
updateicon()
|
||||
|
||||
// update the icon_state
|
||||
proc/updateicon()
|
||||
var/state="navbeacon[open]"
|
||||
|
||||
if(invisibility)
|
||||
icon_state = "[state]-f" // if invisible, set icon to faded version
|
||||
// in case revealed by T-scanner
|
||||
else
|
||||
icon_state = "[state]"
|
||||
|
||||
|
||||
// look for a signal of the form "findbeacon=X"
|
||||
// where X is any
|
||||
// or the location
|
||||
// or one of the set transponder keys
|
||||
// if found, return a signal
|
||||
receive_signal(datum/signal/signal)
|
||||
|
||||
var/request = signal.data["findbeacon"]
|
||||
if(request && ((request in codes) || request == "any" || request == location))
|
||||
spawn(1)
|
||||
post_signal()
|
||||
|
||||
// return a signal giving location and transponder codes
|
||||
|
||||
proc/post_signal()
|
||||
|
||||
var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq)
|
||||
|
||||
if(!frequency) return
|
||||
|
||||
var/datum/signal/signal = new()
|
||||
signal.source = src
|
||||
signal.transmission_method = 1
|
||||
signal.data["beacon"] = location
|
||||
|
||||
for(var/key in codes)
|
||||
signal.data[key] = codes[key]
|
||||
|
||||
frequency.post_signal(src, signal, filter = RADIO_NAVBEACONS)
|
||||
|
||||
|
||||
attackby(var/obj/item/I, var/mob/user)
|
||||
var/turf/T = loc
|
||||
if(!T.is_plating())
|
||||
return // prevent intraction when T-scanner revealed
|
||||
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
open = !open
|
||||
|
||||
user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", "You [open ? "open" : "close"] the beacon's cover.")
|
||||
|
||||
updateicon()
|
||||
|
||||
else if (istype(I, /obj/item/weapon/card/id)||istype(I, /obj/item/device/pda))
|
||||
if(open)
|
||||
if (src.allowed(user))
|
||||
src.locked = !src.locked
|
||||
user << "Controls are now [src.locked ? "locked." : "unlocked."]"
|
||||
else
|
||||
user << "<span class='warning'>Access denied.</span>"
|
||||
updateDialog()
|
||||
else
|
||||
user << "You must open the cover first!"
|
||||
// set the transponder codes assoc list from codes_txt
|
||||
/obj/machinery/navbeacon/proc/set_codes()
|
||||
if(!codes_txt)
|
||||
return
|
||||
|
||||
attack_ai(var/mob/user)
|
||||
interact(user, 1)
|
||||
codes = new()
|
||||
|
||||
attack_hand(var/mob/user)
|
||||
var/list/entries = splittext(codes_txt, ";") // entries are separated by semicolons
|
||||
|
||||
if(!user.IsAdvancedToolUser())
|
||||
return 0
|
||||
|
||||
interact(user, 0)
|
||||
|
||||
interact(var/mob/user, var/ai = 0)
|
||||
var/turf/T = loc
|
||||
if(!T.is_plating())
|
||||
return // prevent intraction when T-scanner revealed
|
||||
|
||||
if(!open && !ai) // can't alter controls if not open, unless you're an AI
|
||||
user << "The beacon's control cover is closed."
|
||||
return
|
||||
for(var/e in entries)
|
||||
var/index = findtext(e, "=") // format is "key=value"
|
||||
if(index)
|
||||
var/key = copytext(e, 1, index)
|
||||
var/val = copytext(e, index+1)
|
||||
codes[key] = val
|
||||
else
|
||||
codes[e] = "1"
|
||||
|
||||
|
||||
var/t
|
||||
// called when turf state changes
|
||||
// hide the object if turf is intact
|
||||
/obj/machinery/navbeacon/hide(var/intact)
|
||||
invisibility = intact ? 101 : 0
|
||||
updateicon()
|
||||
|
||||
if(locked && !ai)
|
||||
t = {"<TT><B>Navigation Beacon</B><HR><BR>
|
||||
// update the icon_state
|
||||
/obj/machinery/navbeacon/proc/updateicon()
|
||||
var/state="navbeacon[open]"
|
||||
|
||||
if(invisibility)
|
||||
icon_state = "[state]-f" // if invisible, set icon to faded version
|
||||
// in case revealed by T-scanner
|
||||
else
|
||||
icon_state = "[state]"
|
||||
|
||||
|
||||
// look for a signal of the form "findbeacon=X"
|
||||
// where X is any
|
||||
// or the location
|
||||
// or one of the set transponder keys
|
||||
// if found, return a signal
|
||||
/obj/machinery/navbeacon/receive_signal(datum/signal/signal)
|
||||
|
||||
var/request = signal.data["findbeacon"]
|
||||
if(request && ((request in codes) || request == "any" || request == location))
|
||||
spawn(1)
|
||||
post_signal()
|
||||
|
||||
// return a signal giving location and transponder codes
|
||||
|
||||
/obj/machinery/navbeacon/proc/post_signal()
|
||||
|
||||
var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq)
|
||||
|
||||
if(!frequency) return
|
||||
|
||||
var/datum/signal/signal = new()
|
||||
signal.source = src
|
||||
signal.transmission_method = 1
|
||||
signal.data["beacon"] = location
|
||||
|
||||
for(var/key in codes)
|
||||
signal.data[key] = codes[key]
|
||||
|
||||
frequency.post_signal(src, signal, filter = RADIO_NAVBEACONS)
|
||||
|
||||
|
||||
/obj/machinery/navbeacon/attackby(var/obj/item/I, var/mob/user)
|
||||
var/turf/T = loc
|
||||
if(!T.is_plating())
|
||||
return // prevent intraction when T-scanner revealed
|
||||
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
open = !open
|
||||
|
||||
user.visible_message("[user] [open ? "opens" : "closes"] the beacon's cover.", "You [open ? "open" : "close"] the beacon's cover.")
|
||||
|
||||
updateicon()
|
||||
|
||||
else if(istype(I, /obj/item/weapon/card/id)||istype(I, /obj/item/device/pda))
|
||||
if(open)
|
||||
if(allowed(user))
|
||||
locked = !locked
|
||||
user << "Controls are now [locked ? "locked." : "unlocked."]"
|
||||
else
|
||||
user << "<span class='warning'>Access denied.</span>"
|
||||
updateDialog()
|
||||
else
|
||||
user << "You must open the cover first!"
|
||||
return
|
||||
|
||||
/obj/machinery/navbeacon/attack_ai(var/mob/user)
|
||||
interact(user, 1)
|
||||
|
||||
/obj/machinery/navbeacon/attack_hand(var/mob/user)
|
||||
|
||||
if(!user.IsAdvancedToolUser())
|
||||
return 0
|
||||
|
||||
interact(user, 0)
|
||||
|
||||
/obj/machinery/navbeacon/interact(var/mob/user, var/ai = 0)
|
||||
var/turf/T = loc
|
||||
if(!T.is_plating())
|
||||
return // prevent intraction when T-scanner revealed
|
||||
|
||||
if(!open && !ai) // can't alter controls if not open, unless you're an AI
|
||||
user << "The beacon's control cover is closed."
|
||||
return
|
||||
|
||||
|
||||
var/t
|
||||
|
||||
if(locked && !ai)
|
||||
t = {"<TT><B>Navigation Beacon</B><HR><BR>
|
||||
<i>(swipe card to unlock controls)</i><BR>
|
||||
Frequency: [format_frequency(freq)]<BR><HR>
|
||||
Location: [location ? location : "(none)"]</A><BR>
|
||||
Transponder Codes:<UL>"}
|
||||
|
||||
for(var/key in codes)
|
||||
t += "<LI>[key] ... [codes[key]]"
|
||||
t+= "<UL></TT>"
|
||||
for(var/key in codes)
|
||||
t += "<LI>[key] ... [codes[key]]"
|
||||
t+= "<UL></TT>"
|
||||
|
||||
else
|
||||
else
|
||||
|
||||
t = {"<TT><B>Navigation Beacon</B><HR><BR>
|
||||
t = {"<TT><B>Navigation Beacon</B><HR><BR>
|
||||
<i>(swipe card to lock controls)</i><BR>
|
||||
Frequency:
|
||||
<A href='byond://?src=\ref[src];freq=-10'>-</A>
|
||||
@@ -180,75 +176,75 @@ Frequency:
|
||||
Location: <A href='byond://?src=\ref[src];locedit=1'>[location ? location : "(none)"]</A><BR>
|
||||
Transponder Codes:<UL>"}
|
||||
|
||||
for(var/key in codes)
|
||||
t += "<LI>[key] ... [codes[key]]"
|
||||
t += " <small><A href='byond://?src=\ref[src];edit=1;code=[key]'>(edit)</A>"
|
||||
t += " <A href='byond://?src=\ref[src];delete=1;code=[key]'>(delete)</A></small><BR>"
|
||||
t += "<small><A href='byond://?src=\ref[src];add=1;'>(add new)</A></small><BR>"
|
||||
t+= "<UL></TT>"
|
||||
for(var/key in codes)
|
||||
t += "<LI>[key] ... [codes[key]]"
|
||||
t += " <small><A href='byond://?src=\ref[src];edit=1;code=[key]'>(edit)</A>"
|
||||
t += " <A href='byond://?src=\ref[src];delete=1;code=[key]'>(delete)</A></small><BR>"
|
||||
t += "<small><A href='byond://?src=\ref[src];add=1;'>(add new)</A></small><BR>"
|
||||
t+= "<UL></TT>"
|
||||
|
||||
user << browse(t, "window=navbeacon")
|
||||
onclose(user, "navbeacon")
|
||||
user << browse(t, "window=navbeacon")
|
||||
onclose(user, "navbeacon")
|
||||
return
|
||||
|
||||
/obj/machinery/navbeacon/Topic(href, href_list)
|
||||
..()
|
||||
if(usr.stat)
|
||||
return
|
||||
if((in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon)))
|
||||
if(open && !locked)
|
||||
usr.set_machine(src)
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat)
|
||||
return
|
||||
if ((in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon)))
|
||||
if(open && !locked)
|
||||
usr.set_machine(src)
|
||||
if(href_list["freq"])
|
||||
freq = sanitize_frequency(freq + text2num(href_list["freq"]))
|
||||
updateDialog()
|
||||
|
||||
if (href_list["freq"])
|
||||
freq = sanitize_frequency(freq + text2num(href_list["freq"]))
|
||||
else if(href_list["locedit"])
|
||||
var/newloc = sanitize(input("Enter New Location", "Navigation Beacon", location) as text|null)
|
||||
if(newloc)
|
||||
location = newloc
|
||||
updateDialog()
|
||||
|
||||
else if(href_list["locedit"])
|
||||
var/newloc = sanitize(input("Enter New Location", "Navigation Beacon", location) as text|null)
|
||||
if(newloc)
|
||||
location = newloc
|
||||
updateDialog()
|
||||
else if(href_list["edit"])
|
||||
var/codekey = href_list["code"]
|
||||
|
||||
else if(href_list["edit"])
|
||||
var/codekey = href_list["code"]
|
||||
var/newkey = input("Enter Transponder Code Key", "Navigation Beacon", codekey) as text|null
|
||||
if(!newkey)
|
||||
return
|
||||
|
||||
var/newkey = input("Enter Transponder Code Key", "Navigation Beacon", codekey) as text|null
|
||||
if(!newkey)
|
||||
return
|
||||
var/codeval = codes[codekey]
|
||||
var/newval = input("Enter Transponder Code Value", "Navigation Beacon", codeval) as text|null
|
||||
if(!newval)
|
||||
newval = codekey
|
||||
return
|
||||
|
||||
var/codeval = codes[codekey]
|
||||
var/newval = input("Enter Transponder Code Value", "Navigation Beacon", codeval) as text|null
|
||||
if(!newval)
|
||||
newval = codekey
|
||||
return
|
||||
codes.Remove(codekey)
|
||||
codes[newkey] = newval
|
||||
|
||||
codes.Remove(codekey)
|
||||
codes[newkey] = newval
|
||||
updateDialog()
|
||||
|
||||
updateDialog()
|
||||
else if(href_list["delete"])
|
||||
var/codekey = href_list["code"]
|
||||
codes.Remove(codekey)
|
||||
updateDialog()
|
||||
|
||||
else if(href_list["delete"])
|
||||
var/codekey = href_list["code"]
|
||||
codes.Remove(codekey)
|
||||
updateDialog()
|
||||
else if(href_list["add"])
|
||||
|
||||
else if(href_list["add"])
|
||||
var/newkey = input("Enter New Transponder Code Key", "Navigation Beacon") as text|null
|
||||
if(!newkey)
|
||||
return
|
||||
|
||||
var/newkey = input("Enter New Transponder Code Key", "Navigation Beacon") as text|null
|
||||
if(!newkey)
|
||||
return
|
||||
var/newval = input("Enter New Transponder Code Value", "Navigation Beacon") as text|null
|
||||
if(!newval)
|
||||
newval = "1"
|
||||
return
|
||||
|
||||
var/newval = input("Enter New Transponder Code Value", "Navigation Beacon") as text|null
|
||||
if(!newval)
|
||||
newval = "1"
|
||||
return
|
||||
if(!codes)
|
||||
codes = new()
|
||||
|
||||
if(!codes)
|
||||
codes = new()
|
||||
codes[newkey] = newval
|
||||
|
||||
codes[newkey] = newval
|
||||
|
||||
updateDialog()
|
||||
updateDialog()
|
||||
|
||||
/obj/machinery/navbeacon/Destroy()
|
||||
navbeacons.Remove(src)
|
||||
|
||||
+211
-244
@@ -101,9 +101,9 @@
|
||||
|
||||
var/list/receiving_pdas = new
|
||||
for (var/obj/item/device/pda/P in PDAs)
|
||||
if (!P.owner)
|
||||
if(!P.owner)
|
||||
continue
|
||||
if (P.toff)
|
||||
if(P.toff)
|
||||
continue
|
||||
receiving_pdas += P
|
||||
|
||||
@@ -120,7 +120,6 @@ var/datum/feed_network/news_network = new /datum/feed_network //The global n
|
||||
|
||||
var/list/obj/machinery/newscaster/allCasters = list() //Global list that will contain reference to all newscasters in existence.
|
||||
|
||||
|
||||
/obj/machinery/newscaster
|
||||
name = "newscaster"
|
||||
desc = "A standard newsfeed handler for use on commercial space stations. All the news you absolutely have no use for, in one place!"
|
||||
@@ -167,7 +166,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
light_range = 0
|
||||
anchored = 1
|
||||
var/obj/machinery/exonet_node/node = null
|
||||
circuit = /obj/item/weapon/circuitboard/newscaster
|
||||
circuit = /obj/item/weapon/circuitboard/newscaster
|
||||
|
||||
/obj/machinery/newscaster/security_unit //Security unit
|
||||
name = "Security Newscaster"
|
||||
@@ -175,10 +174,10 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
|
||||
/obj/machinery/newscaster/New() //Constructor, ho~
|
||||
allCasters += src
|
||||
src.paper_remaining = 15 // Will probably change this to something better
|
||||
paper_remaining = 15 // Will probably change this to something better
|
||||
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) // Let's give it an appropriate unit number
|
||||
src.unit_no++
|
||||
src.update_icon() //for any custom ones on the map...
|
||||
unit_no++
|
||||
update_icon() //for any custom ones on the map...
|
||||
spawn(10) //Should be enough time for the node to spawn at tcomms.
|
||||
node = get_exonet_node()
|
||||
..() //I just realised the newscasters weren't in the global machines list. The superconstructor call will tend to that
|
||||
@@ -191,21 +190,21 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
if(!ispowered || isbroken)
|
||||
icon_state = "newscaster_off"
|
||||
if(isbroken) //If the thing is smashed, add crack overlay on top of the unpowered sprite.
|
||||
src.overlays.Cut()
|
||||
src.overlays += image(src.icon, "crack3")
|
||||
overlays.Cut()
|
||||
overlays += image(icon, "crack3")
|
||||
return
|
||||
|
||||
src.overlays.Cut() //reset overlays
|
||||
overlays.Cut() //reset overlays
|
||||
|
||||
if(news_network.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message
|
||||
icon_state = "newscaster_wanted"
|
||||
return
|
||||
|
||||
if(alert) //new message alert overlay
|
||||
src.overlays += "newscaster_alert"
|
||||
overlays += "newscaster_alert"
|
||||
|
||||
if(hitstaken > 0) //Cosmetic damage overlay
|
||||
src.overlays += image(src.icon, "crack[hitstaken]")
|
||||
overlays += image(icon, "crack[hitstaken]")
|
||||
|
||||
icon_state = "newscaster_normal"
|
||||
return
|
||||
@@ -214,14 +213,13 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
if(isbroken) //Broken shit can't be powered.
|
||||
return
|
||||
..()
|
||||
if( !(stat & NOPOWER) )
|
||||
src.ispowered = 1
|
||||
src.update_icon()
|
||||
if(!(stat & NOPOWER))
|
||||
ispowered = 1
|
||||
update_icon()
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
src.ispowered = 0
|
||||
src.update_icon()
|
||||
|
||||
ispowered = 0
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/newscaster/ex_act(severity)
|
||||
switch(severity)
|
||||
@@ -229,25 +227,24 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
src.isbroken=1
|
||||
isbroken=1
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
else
|
||||
src.update_icon() //can't place it above the return and outside the if-else. or we might get runtimes of null.update_icon() if(prob(50)) goes in.
|
||||
update_icon() //can't place it above the return and outside the if-else. or we might get runtimes of null.update_icon() if(prob(50)) goes in.
|
||||
return
|
||||
else
|
||||
if(prob(50))
|
||||
src.isbroken=1
|
||||
src.update_icon()
|
||||
isbroken=1
|
||||
update_icon()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/newscaster/attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/newscaster/attack_hand(mob/user as mob) //########### THE MAIN BEEF IS HERE! And in the proc below this...############
|
||||
|
||||
if(!src.ispowered || src.isbroken)
|
||||
if(!ispowered || isbroken)
|
||||
return
|
||||
|
||||
if(!node)
|
||||
@@ -261,16 +258,16 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
if(!user.IsAdvancedToolUser())
|
||||
return 0
|
||||
|
||||
if(istype(user, /mob/living/carbon/human) || istype(user,/mob/living/silicon) )
|
||||
if(istype(user, /mob/living/carbon/human) || istype(user,/mob/living/silicon))
|
||||
var/mob/living/human_or_robot_user = user
|
||||
var/dat
|
||||
dat = text("<HEAD><TITLE>Newscaster</TITLE></HEAD><H3>Newscaster Unit #[src.unit_no]</H3>")
|
||||
dat = text("<HEAD><TITLE>Newscaster</TITLE></HEAD><H3>Newscaster Unit #[unit_no]</H3>")
|
||||
|
||||
src.scan_user(human_or_robot_user) //Newscaster scans you
|
||||
scan_user(human_or_robot_user) //Newscaster scans you
|
||||
|
||||
switch(screen)
|
||||
if(0)
|
||||
dat += "Welcome to Newscasting Unit #[src.unit_no].<BR> Interface & News networks Operational."
|
||||
dat += "Welcome to Newscasting Unit #[unit_no].<BR> Interface & News networks Operational."
|
||||
dat += "<BR><FONT SIZE=1>Property of Nanotransen Inc</FONT>"
|
||||
if(news_network.wanted_issue)
|
||||
dat+= "<HR><A href='?src=\ref[src];view_wanted=1'>Read Wanted Issue</A>"
|
||||
@@ -280,7 +277,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
dat+= "<BR><A href='?src=\ref[src];menu_paper=1'>Print newspaper</A>"
|
||||
dat+= "<BR><A href='?src=\ref[src];refresh=1'>Re-scan User</A>"
|
||||
dat+= "<BR><BR><A href='?src=\ref[human_or_robot_user];mach_close=newscaster_main'>Exit</A>"
|
||||
if(src.securityCaster)
|
||||
if(securityCaster)
|
||||
var/wanted_already = 0
|
||||
if(news_network.wanted_issue)
|
||||
wanted_already = 1
|
||||
@@ -289,10 +286,10 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
dat+="<BR><A href='?src=\ref[src];menu_wanted=1'>[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue</A>"
|
||||
dat+="<BR><A href='?src=\ref[src];menu_censor_story=1'>Censor Feed Stories</A>"
|
||||
dat+="<BR><A href='?src=\ref[src];menu_censor_channel=1'>Mark Feed Channel with [company_name] D-Notice</A>"
|
||||
dat+="<BR><HR>The newscaster recognises you as: <FONT COLOR='green'>[src.scanned_user]</FONT>"
|
||||
dat+="<BR><HR>The newscaster recognises you as: <FONT COLOR='green'>[scanned_user]</FONT>"
|
||||
if(1)
|
||||
dat+= "Station Feed Channels<HR>"
|
||||
if( isemptylist(news_network.network_channels) )
|
||||
if(isemptylist(news_network.network_channels))
|
||||
dat+="<I>No active channels found...</I>"
|
||||
else
|
||||
for(var/datum/feed_channel/CHANNEL in news_network.network_channels)
|
||||
@@ -304,30 +301,30 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Back</A>"
|
||||
if(2)
|
||||
dat+="Creating new Feed Channel..."
|
||||
dat+="<HR><B><A href='?src=\ref[src];set_channel_name=1'>Channel Name</A>:</B> [src.channel_name]<BR>"
|
||||
dat+="<B>Channel Author:</B> <FONT COLOR='green'>[src.scanned_user]</FONT><BR>"
|
||||
dat+="<B><A href='?src=\ref[src];set_channel_lock=1'>Will Accept Public Feeds</A>:</B> [(src.c_locked) ? ("NO") : ("YES")]<BR><BR>"
|
||||
dat+="<HR><B><A href='?src=\ref[src];set_channel_name=1'>Channel Name</A>:</B> [channel_name]<BR>"
|
||||
dat+="<B>Channel Author:</B> <FONT COLOR='green'>[scanned_user]</FONT><BR>"
|
||||
dat+="<B><A href='?src=\ref[src];set_channel_lock=1'>Will Accept Public Feeds</A>:</B> [(c_locked) ? ("NO") : ("YES")]<BR><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];submit_new_channel=1'>Submit</A><BR><BR><A href='?src=\ref[src];setScreen=[0]'>Cancel</A><BR>"
|
||||
if(3)
|
||||
dat+="Creating new Feed Message..."
|
||||
dat+="<HR><B><A href='?src=\ref[src];set_channel_receiving=1'>Receiving Channel</A>:</B> [src.channel_name]<BR>" //MARK
|
||||
dat+="<B>Message Author:</B> <FONT COLOR='green'>[src.scanned_user]</FONT><BR>"
|
||||
dat+="<B><A href='?src=\ref[src];set_new_message=1'>Message Body</A>:</B> [src.msg] <BR>"
|
||||
dat+="<B><A href='?src=\ref[src];set_attachment=1'>Attach Photo</A>:</B> [(src.photo_data ? "Photo Attached" : "No Photo")]</BR>"
|
||||
dat+="<HR><B><A href='?src=\ref[src];set_channel_receiving=1'>Receiving Channel</A>:</B> [channel_name]<BR>" //MARK
|
||||
dat+="<B>Message Author:</B> <FONT COLOR='green'>[scanned_user]</FONT><BR>"
|
||||
dat+="<B><A href='?src=\ref[src];set_new_message=1'>Message Body</A>:</B> [msg] <BR>"
|
||||
dat+="<B><A href='?src=\ref[src];set_attachment=1'>Attach Photo</A>:</B> [(photo_data ? "Photo Attached" : "No Photo")]</BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];submit_new_message=1'>Submit</A><BR><BR><A href='?src=\ref[src];setScreen=[0]'>Cancel</A><BR>"
|
||||
if(4)
|
||||
dat+="Feed story successfully submitted to [src.channel_name].<BR><BR>"
|
||||
dat+="Feed story successfully submitted to [channel_name].<BR><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Return</A><BR>"
|
||||
if(5)
|
||||
dat+="Feed Channel [src.channel_name] created successfully.<BR><BR>"
|
||||
dat+="Feed Channel [channel_name] created successfully.<BR><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Return</A><BR>"
|
||||
if(6)
|
||||
dat+="<B><FONT COLOR='maroon'>ERROR: Could not submit Feed story to Network.</B></FONT><HR><BR>"
|
||||
if(src.channel_name=="")
|
||||
if(channel_name=="")
|
||||
dat+="<FONT COLOR='maroon'>•Invalid receiving channel name.</FONT><BR>"
|
||||
if(src.scanned_user=="Unknown")
|
||||
if(scanned_user=="Unknown")
|
||||
dat+="<FONT COLOR='maroon'>•Channel author unverified.</FONT><BR>"
|
||||
if(src.msg == "" || src.msg == "\[REDACTED\]")
|
||||
if(msg == "" || msg == "\[REDACTED\]")
|
||||
dat+="<FONT COLOR='maroon'>•Invalid message body.</FONT><BR>"
|
||||
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[3]'>Return</A><BR>"
|
||||
@@ -339,18 +336,18 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
existing_authors += FC.backup_author
|
||||
else
|
||||
existing_authors += FC.author
|
||||
if(src.scanned_user in existing_authors)
|
||||
if(scanned_user in existing_authors)
|
||||
dat+="<FONT COLOR='maroon'>•There already exists a Feed channel under your name.</FONT><BR>"
|
||||
if(src.channel_name=="" || src.channel_name == "\[REDACTED\]")
|
||||
if(channel_name=="" || channel_name == "\[REDACTED\]")
|
||||
dat+="<FONT COLOR='maroon'>•Invalid channel name.</FONT><BR>"
|
||||
var/check = 0
|
||||
for(var/datum/feed_channel/FC in news_network.network_channels)
|
||||
if(FC.channel_name == src.channel_name)
|
||||
if(FC.channel_name == channel_name)
|
||||
check = 1
|
||||
break
|
||||
if(check)
|
||||
dat+="<FONT COLOR='maroon'>•Channel name already in use.</FONT><BR>"
|
||||
if(src.scanned_user=="Unknown")
|
||||
if(scanned_user=="Unknown")
|
||||
dat+="<FONT COLOR='maroon'>•Channel author unverified.</FONT><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[2]'>Return</A><BR>"
|
||||
if(8)
|
||||
@@ -363,20 +360,20 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
else
|
||||
active_num--
|
||||
dat+="Network currently serves a total of [total_num] Feed channels, [active_num] of which are active, and a total of [message_num] Feed Stories." //TODO: CONTINUE
|
||||
dat+="<BR><BR><B>Liquid Paper remaining:</B> [(src.paper_remaining) *100 ] cm^3"
|
||||
dat+="<BR><BR><B>Liquid Paper remaining:</B> [(paper_remaining) *100 ] cm^3"
|
||||
dat+="<BR><BR><A href='?src=\ref[src];print_paper=[0]'>Print Paper</A>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Cancel</A>"
|
||||
if(9)
|
||||
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[created by: <FONT COLOR='maroon'>[src.viewing_channel.author]</FONT>\]</FONT><HR>"
|
||||
if(src.viewing_channel.censored)
|
||||
dat+="<B>[viewing_channel.channel_name]: </B><FONT SIZE=1>\[created by: <FONT COLOR='maroon'>[viewing_channel.author]</FONT>\]</FONT><HR>"
|
||||
if(viewing_channel.censored)
|
||||
dat+="<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [company_name] D-Notice.<BR>"
|
||||
dat+="No further feed story additions are allowed while the D-Notice is in effect.</FONT><BR><BR>"
|
||||
else
|
||||
if( isemptylist(src.viewing_channel.messages) )
|
||||
if(isemptylist(viewing_channel.messages))
|
||||
dat+="<I>No feed messages found in channel...</I><BR>"
|
||||
else
|
||||
var/i = 0
|
||||
for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages)
|
||||
for(var/datum/feed_message/MESSAGE in viewing_channel.messages)
|
||||
i++
|
||||
dat+="-[MESSAGE.body] <BR>"
|
||||
if(MESSAGE.img)
|
||||
@@ -412,28 +409,28 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Back</A>"
|
||||
if(12)
|
||||
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[ created by: <FONT COLOR='maroon'>[src.viewing_channel.author]</FONT> \]</FONT><BR>"
|
||||
dat+="<FONT SIZE=2><A href='?src=\ref[src];censor_channel_author=\ref[src.viewing_channel]'>[(src.viewing_channel.author=="\[REDACTED\]") ? ("Undo Author censorship") : ("Censor channel Author")]</A></FONT><HR>"
|
||||
dat+="<B>[viewing_channel.channel_name]: </B><FONT SIZE=1>\[ created by: <FONT COLOR='maroon'>[viewing_channel.author]</FONT> \]</FONT><BR>"
|
||||
dat+="<FONT SIZE=2><A href='?src=\ref[src];censor_channel_author=\ref[viewing_channel]'>[(viewing_channel.author=="\[REDACTED\]") ? ("Undo Author censorship") : ("Censor channel Author")]</A></FONT><HR>"
|
||||
|
||||
|
||||
if( isemptylist(src.viewing_channel.messages) )
|
||||
if(isemptylist(viewing_channel.messages))
|
||||
dat+="<I>No feed messages found in channel...</I><BR>"
|
||||
else
|
||||
for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages)
|
||||
for(var/datum/feed_message/MESSAGE in viewing_channel.messages)
|
||||
dat+="-[MESSAGE.body] <BR><FONT SIZE=1>\[[MESSAGE.message_type] by <FONT COLOR='maroon'>[MESSAGE.author]</FONT>\]</FONT><BR>"
|
||||
dat+="<FONT SIZE=2><A href='?src=\ref[src];censor_channel_story_body=\ref[MESSAGE]'>[(MESSAGE.body == "\[REDACTED\]") ? ("Undo story censorship") : ("Censor story")]</A> - <A href='?src=\ref[src];censor_channel_story_author=\ref[MESSAGE]'>[(MESSAGE.author == "\[REDACTED\]") ? ("Undo Author Censorship") : ("Censor message Author")]</A></FONT><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[10]'>Back</A>"
|
||||
if(13)
|
||||
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[ created by: <FONT COLOR='maroon'>[src.viewing_channel.author]</FONT> \]</FONT><BR>"
|
||||
dat+="Channel messages listed below. If you deem them dangerous to the station, you can <A href='?src=\ref[src];toggle_d_notice=\ref[src.viewing_channel]'>Bestow a D-Notice upon the channel</A>.<HR>"
|
||||
if(src.viewing_channel.censored)
|
||||
dat+="<B>[viewing_channel.channel_name]: </B><FONT SIZE=1>\[ created by: <FONT COLOR='maroon'>[viewing_channel.author]</FONT> \]</FONT><BR>"
|
||||
dat+="Channel messages listed below. If you deem them dangerous to the station, you can <A href='?src=\ref[src];toggle_d_notice=\ref[viewing_channel]'>Bestow a D-Notice upon the channel</A>.<HR>"
|
||||
if(viewing_channel.censored)
|
||||
dat+="<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [company_name] D-Notice.<BR>"
|
||||
dat+="No further feed story additions are allowed while the D-Notice is in effect.<BR><BR>"
|
||||
else
|
||||
if( isemptylist(src.viewing_channel.messages) )
|
||||
if(isemptylist(viewing_channel.messages))
|
||||
dat+="<I>No feed messages found in channel...</I><BR>"
|
||||
else
|
||||
for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages)
|
||||
for(var/datum/feed_message/MESSAGE in viewing_channel.messages)
|
||||
dat+="-[MESSAGE.body] <BR><FONT SIZE=1>\[[MESSAGE.message_type] by <FONT COLOR='maroon'>[MESSAGE.author]</FONT>\]</FONT><BR>"
|
||||
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[11]'>Back</A>"
|
||||
@@ -448,27 +445,27 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
if(wanted_already)
|
||||
dat+="<FONT SIZE=2><BR><I>A wanted issue is already in Feed Circulation. You can edit or cancel it below.</FONT></I>"
|
||||
dat+="<HR>"
|
||||
dat+="<A href='?src=\ref[src];set_wanted_name=1'>Criminal Name</A>: [src.channel_name] <BR>"
|
||||
dat+="<A href='?src=\ref[src];set_wanted_desc=1'>Description</A>: [src.msg] <BR>"
|
||||
dat+="<A href='?src=\ref[src];set_attachment=1'>Attach Photo</A>: [(src.photo_data ? "Photo Attached" : "No Photo")]</BR>"
|
||||
dat+="<A href='?src=\ref[src];set_wanted_name=1'>Criminal Name</A>: [channel_name] <BR>"
|
||||
dat+="<A href='?src=\ref[src];set_wanted_desc=1'>Description</A>: [msg] <BR>"
|
||||
dat+="<A href='?src=\ref[src];set_attachment=1'>Attach Photo</A>: [(photo_data ? "Photo Attached" : "No Photo")]</BR>"
|
||||
if(wanted_already)
|
||||
dat+="<B>Wanted Issue created by:</B><FONT COLOR='green'> [news_network.wanted_issue.backup_author]</FONT><BR>"
|
||||
else
|
||||
dat+="<B>Wanted Issue will be created under prosecutor:</B><FONT COLOR='green'> [src.scanned_user]</FONT><BR>"
|
||||
dat+="<B>Wanted Issue will be created under prosecutor:</B><FONT COLOR='green'> [scanned_user]</FONT><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];submit_wanted=[end_param]'>[(wanted_already) ? ("Edit Issue") : ("Submit")]</A>"
|
||||
if(wanted_already)
|
||||
dat+="<BR><A href='?src=\ref[src];cancel_wanted=1'>Take down Issue</A>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Cancel</A>"
|
||||
if(15)
|
||||
dat+="<FONT COLOR='green'>Wanted issue for [src.channel_name] is now in Network Circulation.</FONT><BR><BR>"
|
||||
dat+="<FONT COLOR='green'>Wanted issue for [channel_name] is now in Network Circulation.</FONT><BR><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Return</A><BR>"
|
||||
if(16)
|
||||
dat+="<B><FONT COLOR='maroon'>ERROR: Wanted Issue rejected by Network.</B></FONT><HR><BR>"
|
||||
if(src.channel_name=="" || src.channel_name == "\[REDACTED\]")
|
||||
if(channel_name=="" || channel_name == "\[REDACTED\]")
|
||||
dat+="<FONT COLOR='maroon'>•Invalid name for person wanted.</FONT><BR>"
|
||||
if(src.scanned_user=="Unknown")
|
||||
if(scanned_user=="Unknown")
|
||||
dat+="<FONT COLOR='maroon'>•Issue author unverified.</FONT><BR>"
|
||||
if(src.msg == "" || src.msg == "\[REDACTED\]")
|
||||
if(msg == "" || msg == "\[REDACTED\]")
|
||||
dat+="<FONT COLOR='maroon'>•Invalid description.</FONT><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Return</A><BR>"
|
||||
if(17)
|
||||
@@ -486,7 +483,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
dat+="None"
|
||||
dat+="<BR><BR><A href='?src=\ref[src];setScreen=[0]'>Back</A><BR>"
|
||||
if(19)
|
||||
dat+="<FONT COLOR='green'>Wanted issue for [src.channel_name] successfully edited.</FONT><BR><BR>"
|
||||
dat+="<FONT COLOR='green'>Wanted issue for [channel_name] successfully edited.</FONT><BR><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Return</A><BR>"
|
||||
if(20)
|
||||
dat+="<FONT COLOR='green'>Printing successful. Please receive your newspaper from the bottom of the machine.</FONT><BR><BR>"
|
||||
@@ -504,17 +501,17 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
/obj/machinery/newscaster/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
usr.set_machine(src)
|
||||
if(href_list["set_channel_name"])
|
||||
src.channel_name = sanitizeSafe(input(usr, "Provide a Feed Channel Name", "Network Channel Handler", ""), MAX_LNAME_LEN)
|
||||
src.updateUsrDialog()
|
||||
//src.update_icon()
|
||||
channel_name = sanitizeSafe(input(usr, "Provide a Feed Channel Name", "Network Channel Handler", ""), MAX_LNAME_LEN)
|
||||
updateUsrDialog()
|
||||
//update_icon()
|
||||
|
||||
else if(href_list["set_channel_lock"])
|
||||
src.c_locked = !src.c_locked
|
||||
src.updateUsrDialog()
|
||||
//src.update_icon()
|
||||
c_locked = !c_locked
|
||||
updateUsrDialog()
|
||||
//update_icon()
|
||||
|
||||
else if(href_list["submit_new_channel"])
|
||||
//var/list/existing_channels = list() //OBSOLETE
|
||||
@@ -527,73 +524,73 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
existing_authors +=FC.author
|
||||
var/check = 0
|
||||
for(var/datum/feed_channel/FC in news_network.network_channels)
|
||||
if(FC.channel_name == src.channel_name)
|
||||
if(FC.channel_name == channel_name)
|
||||
check = 1
|
||||
break
|
||||
if(src.channel_name == "" || src.channel_name == "\[REDACTED\]" || src.scanned_user == "Unknown" || check || (src.scanned_user in existing_authors) )
|
||||
src.screen=7
|
||||
if(channel_name == "" || channel_name == "\[REDACTED\]" || scanned_user == "Unknown" || check || (scanned_user in existing_authors))
|
||||
screen=7
|
||||
else
|
||||
var/choice = alert("Please confirm Feed channel creation","Network Channel Handler","Confirm","Cancel")
|
||||
if(choice=="Confirm")
|
||||
news_network.CreateFeedChannel(src.channel_name, src.scanned_user, c_locked)
|
||||
src.screen=5
|
||||
src.updateUsrDialog()
|
||||
//src.update_icon()
|
||||
news_network.CreateFeedChannel(channel_name, scanned_user, c_locked)
|
||||
screen=5
|
||||
updateUsrDialog()
|
||||
//update_icon()
|
||||
|
||||
else if(href_list["set_channel_receiving"])
|
||||
//var/list/datum/feed_channel/available_channels = list()
|
||||
var/list/available_channels = list()
|
||||
for(var/datum/feed_channel/F in news_network.network_channels)
|
||||
if( (!F.locked || F.author == scanned_user) && !F.censored)
|
||||
if((!F.locked || F.author == scanned_user) && !F.censored)
|
||||
available_channels += F.channel_name
|
||||
src.channel_name = input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in available_channels
|
||||
src.updateUsrDialog()
|
||||
channel_name = input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in available_channels
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["set_new_message"])
|
||||
src.msg = sanitize(input(usr, "Write your Feed story", "Network Channel Handler", ""))
|
||||
src.updateUsrDialog()
|
||||
msg = sanitize(input(usr, "Write your Feed story", "Network Channel Handler", ""))
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["set_attachment"])
|
||||
AttachPhoto(usr)
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["submit_new_message"])
|
||||
if(src.msg =="" || src.msg=="\[REDACTED\]" || src.scanned_user == "Unknown" || src.channel_name == "" )
|
||||
src.screen=6
|
||||
if(msg =="" || msg=="\[REDACTED\]" || scanned_user == "Unknown" || channel_name == "")
|
||||
screen=6
|
||||
else
|
||||
var/image = photo_data ? photo_data.photo : null
|
||||
feedback_inc("newscaster_stories",1)
|
||||
news_network.SubmitArticle(src.msg, src.scanned_user, src.channel_name, image, 0)
|
||||
src.screen=4
|
||||
news_network.SubmitArticle(msg, scanned_user, channel_name, image, 0)
|
||||
screen=4
|
||||
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["create_channel"])
|
||||
src.screen=2
|
||||
src.updateUsrDialog()
|
||||
screen=2
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["create_feed_story"])
|
||||
src.screen=3
|
||||
src.updateUsrDialog()
|
||||
screen=3
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["menu_paper"])
|
||||
src.screen=8
|
||||
src.updateUsrDialog()
|
||||
screen=8
|
||||
updateUsrDialog()
|
||||
else if(href_list["print_paper"])
|
||||
if(!src.paper_remaining)
|
||||
src.screen=21
|
||||
if(!paper_remaining)
|
||||
screen=21
|
||||
else
|
||||
src.print_paper()
|
||||
src.screen = 20
|
||||
src.updateUsrDialog()
|
||||
print_paper()
|
||||
screen = 20
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["menu_censor_story"])
|
||||
src.screen=10
|
||||
src.updateUsrDialog()
|
||||
screen=10
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["menu_censor_channel"])
|
||||
src.screen=11
|
||||
src.updateUsrDialog()
|
||||
screen=11
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["menu_wanted"])
|
||||
var/already_wanted = 0
|
||||
@@ -601,48 +598,48 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
already_wanted = 1
|
||||
|
||||
if(already_wanted)
|
||||
src.channel_name = news_network.wanted_issue.author
|
||||
src.msg = news_network.wanted_issue.body
|
||||
src.screen = 14
|
||||
src.updateUsrDialog()
|
||||
channel_name = news_network.wanted_issue.author
|
||||
msg = news_network.wanted_issue.body
|
||||
screen = 14
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["set_wanted_name"])
|
||||
src.channel_name = sanitizeSafe(input(usr, "Provide the name of the Wanted person", "Network Security Handler", ""), MAX_LNAME_LEN)
|
||||
src.updateUsrDialog()
|
||||
channel_name = sanitizeSafe(input(usr, "Provide the name of the Wanted person", "Network Security Handler", ""), MAX_LNAME_LEN)
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["set_wanted_desc"])
|
||||
src.msg = sanitize(input(usr, "Provide the a description of the Wanted person and any other details you deem important", "Network Security Handler", ""))
|
||||
src.updateUsrDialog()
|
||||
msg = sanitize(input(usr, "Provide the a description of the Wanted person and any other details you deem important", "Network Security Handler", ""))
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["submit_wanted"])
|
||||
var/input_param = text2num(href_list["submit_wanted"])
|
||||
if(src.msg == "" || src.channel_name == "" || src.scanned_user == "Unknown")
|
||||
src.screen = 16
|
||||
if(msg == "" || channel_name == "" || scanned_user == "Unknown")
|
||||
screen = 16
|
||||
else
|
||||
var/choice = alert("Please confirm Wanted Issue [(input_param==1) ? ("creation.") : ("edit.")]","Network Security Handler","Confirm","Cancel")
|
||||
if(choice=="Confirm")
|
||||
if(input_param==1) //If input_param == 1 we're submitting a new wanted issue. At 2 we're just editing an existing one. See the else below
|
||||
var/datum/feed_message/WANTED = new /datum/feed_message
|
||||
WANTED.author = src.channel_name
|
||||
WANTED.body = src.msg
|
||||
WANTED.backup_author = src.scanned_user //I know, a bit wacky
|
||||
WANTED.author = channel_name
|
||||
WANTED.body = msg
|
||||
WANTED.backup_author = scanned_user //I know, a bit wacky
|
||||
if(photo_data)
|
||||
WANTED.img = photo_data.photo.img
|
||||
news_network.wanted_issue = WANTED
|
||||
news_network.alert_readers()
|
||||
src.screen = 15
|
||||
screen = 15
|
||||
else
|
||||
if(news_network.wanted_issue.is_admin_message)
|
||||
alert("The wanted issue has been distributed by a [company_name] higherup. You cannot edit it.","Ok")
|
||||
return
|
||||
news_network.wanted_issue.author = src.channel_name
|
||||
news_network.wanted_issue.body = src.msg
|
||||
news_network.wanted_issue.backup_author = src.scanned_user
|
||||
news_network.wanted_issue.author = channel_name
|
||||
news_network.wanted_issue.body = msg
|
||||
news_network.wanted_issue.backup_author = scanned_user
|
||||
if(photo_data)
|
||||
news_network.wanted_issue.img = photo_data.photo.img
|
||||
src.screen = 19
|
||||
screen = 19
|
||||
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["cancel_wanted"])
|
||||
if(news_network.wanted_issue.is_admin_message)
|
||||
@@ -653,12 +650,12 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
news_network.wanted_issue = null
|
||||
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
|
||||
NEWSCASTER.update_icon()
|
||||
src.screen=17
|
||||
src.updateUsrDialog()
|
||||
screen=17
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["view_wanted"])
|
||||
src.screen=18
|
||||
src.updateUsrDialog()
|
||||
screen=18
|
||||
updateUsrDialog()
|
||||
else if(href_list["censor_channel_author"])
|
||||
var/datum/feed_channel/FC = locate(href_list["censor_channel_author"])
|
||||
if(FC.is_admin_channel)
|
||||
@@ -670,7 +667,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
else
|
||||
FC.author = FC.backup_author
|
||||
FC.update()
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["censor_channel_story_author"])
|
||||
var/datum/feed_message/MSG = locate(href_list["censor_channel_story_author"])
|
||||
@@ -683,7 +680,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
else
|
||||
MSG.author = MSG.backup_author
|
||||
MSG.parent_channel.update()
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["censor_channel_story_body"])
|
||||
var/datum/feed_message/MSG = locate(href_list["censor_channel_story_body"])
|
||||
@@ -703,13 +700,13 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
MSG.img = MSG.backup_img
|
||||
|
||||
MSG.parent_channel.update()
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["pick_d_notice"])
|
||||
var/datum/feed_channel/FC = locate(href_list["pick_d_notice"])
|
||||
src.viewing_channel = FC
|
||||
src.screen=13
|
||||
src.updateUsrDialog()
|
||||
viewing_channel = FC
|
||||
screen=13
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["toggle_d_notice"])
|
||||
var/datum/feed_channel/FC = locate(href_list["toggle_d_notice"])
|
||||
@@ -718,70 +715,46 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
return
|
||||
FC.censored = !FC.censored
|
||||
FC.update()
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["view"])
|
||||
src.screen=1
|
||||
src.updateUsrDialog()
|
||||
screen=1
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["setScreen"]) //Brings us to the main menu and resets all fields~
|
||||
src.screen = text2num(href_list["setScreen"])
|
||||
if (src.screen == 0)
|
||||
src.scanned_user = "Unknown";
|
||||
screen = text2num(href_list["setScreen"])
|
||||
if(screen == 0)
|
||||
scanned_user = "Unknown";
|
||||
msg = "";
|
||||
src.c_locked=0;
|
||||
c_locked=0;
|
||||
channel_name="";
|
||||
src.viewing_channel = null
|
||||
src.updateUsrDialog()
|
||||
viewing_channel = null
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["show_channel"])
|
||||
var/datum/feed_channel/FC = locate(href_list["show_channel"])
|
||||
src.viewing_channel = FC
|
||||
src.screen = 9
|
||||
src.updateUsrDialog()
|
||||
viewing_channel = FC
|
||||
screen = 9
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["pick_censor_channel"])
|
||||
var/datum/feed_channel/FC = locate(href_list["pick_censor_channel"])
|
||||
src.viewing_channel = FC
|
||||
src.screen = 12
|
||||
src.updateUsrDialog()
|
||||
viewing_channel = FC
|
||||
screen = 12
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["refresh"])
|
||||
src.updateUsrDialog()
|
||||
|
||||
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/newscaster/attackby(I as obj, user as mob)
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
|
||||
user << "<span class='notice'>You start disconnecting the monitor.</span>"
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.frame_type = "newscaster"
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
if (src.stat & isbroken == 1)
|
||||
user << "<span class='notice'>The broken glass falls out.</span>"
|
||||
new /obj/item/weapon/material/shard( src.loc )
|
||||
A.state = 3
|
||||
A.icon_state = "newscaster_3"
|
||||
else
|
||||
user << "<span class='notice'>You disconnect the monitor.</span>"
|
||||
A.state = 4
|
||||
A.icon_state = "newscaster_4"
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
if(computer_deconstruction_screwdriver(user, I))
|
||||
return
|
||||
else
|
||||
src.attack_hand(user)
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
/obj/machinery/newscaster/attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user) //or maybe it'll have some special functions? No idea.
|
||||
return attack_hand(user) //or maybe it'll have some special functions? No idea.
|
||||
|
||||
/datum/news_photo
|
||||
var/is_synth = 0
|
||||
@@ -807,12 +780,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
else if(istype(user,/mob/living/silicon))
|
||||
var/mob/living/silicon/tempAI = user
|
||||
var/obj/item/weapon/photo/selection = tempAI.GetPicture()
|
||||
if (!selection)
|
||||
if(!selection)
|
||||
return
|
||||
|
||||
photo_data = new(selection, 1)
|
||||
|
||||
|
||||
//########################################################################################################################
|
||||
//###################################### NEWSPAPER! ######################################################################
|
||||
//########################################################################################################################
|
||||
@@ -836,34 +808,34 @@ obj/item/weapon/newspaper/attack_self(mob/user as mob)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/human_user = user
|
||||
var/dat
|
||||
src.pages = 0
|
||||
pages = 0
|
||||
switch(screen)
|
||||
if(0) //Cover
|
||||
dat+="<DIV ALIGN='center'><B><FONT SIZE=6>The Griffon</FONT></B></div>"
|
||||
dat+="<DIV ALIGN='center'><FONT SIZE=2>[company_name]-standard newspaper, for use on [company_name]© Space Facilities</FONT></div><HR>"
|
||||
if(isemptylist(src.news_content))
|
||||
if(src.important_message)
|
||||
dat+="Contents:<BR><ul><B><FONT COLOR='red'>**</FONT>Important Security Announcement<FONT COLOR='red'>**</FONT></B> <FONT SIZE=2>\[page [src.pages+2]\]</FONT><BR></ul>"
|
||||
if(isemptylist(news_content))
|
||||
if(important_message)
|
||||
dat+="Contents:<BR><ul><B><FONT COLOR='red'>**</FONT>Important Security Announcement<FONT COLOR='red'>**</FONT></B> <FONT SIZE=2>\[page [pages+2]\]</FONT><BR></ul>"
|
||||
else
|
||||
dat+="<I>Other than the title, the rest of the newspaper is unprinted...</I>"
|
||||
else
|
||||
dat+="Contents:<BR><ul>"
|
||||
for(var/datum/feed_channel/NP in src.news_content)
|
||||
src.pages++
|
||||
if(src.important_message)
|
||||
dat+="<B><FONT COLOR='red'>**</FONT>Important Security Announcement<FONT COLOR='red'>**</FONT></B> <FONT SIZE=2>\[page [src.pages+2]\]</FONT><BR>"
|
||||
for(var/datum/feed_channel/NP in news_content)
|
||||
pages++
|
||||
if(important_message)
|
||||
dat+="<B><FONT COLOR='red'>**</FONT>Important Security Announcement<FONT COLOR='red'>**</FONT></B> <FONT SIZE=2>\[page [pages+2]\]</FONT><BR>"
|
||||
var/temp_page=0
|
||||
for(var/datum/feed_channel/NP in src.news_content)
|
||||
for(var/datum/feed_channel/NP in news_content)
|
||||
temp_page++
|
||||
dat+="<B>[NP.channel_name]</B> <FONT SIZE=2>\[page [temp_page+1]\]</FONT><BR>"
|
||||
dat+="</ul>"
|
||||
if(scribble_page==curr_page)
|
||||
dat+="<BR><I>There is a small scribble near the end of this page... It reads: \"[src.scribble]\"</I>"
|
||||
dat+="<BR><I>There is a small scribble near the end of this page... It reads: \"[scribble]\"</I>"
|
||||
dat+= "<HR><DIV STYLE='float:right;'><A href='?src=\ref[src];next_page=1'>Next Page</A></DIV> <div style='float:left;'><A href='?src=\ref[human_user];mach_close=newspaper_main'>Done reading</A></DIV>"
|
||||
if(1) // X channel pages inbetween.
|
||||
for(var/datum/feed_channel/NP in src.news_content)
|
||||
src.pages++ //Let's get it right again.
|
||||
var/datum/feed_channel/C = src.news_content[src.curr_page]
|
||||
for(var/datum/feed_channel/NP in news_content)
|
||||
pages++ //Let's get it right again.
|
||||
var/datum/feed_channel/C = news_content[curr_page]
|
||||
dat+="<FONT SIZE=4><B>[C.channel_name]</B></FONT><FONT SIZE=1> \[created by: <FONT COLOR='maroon'>[C.author]</FONT>\]</FONT><BR><BR>"
|
||||
if(C.censored)
|
||||
dat+="This channel was deemed dangerous to the general welfare of the station and therefore marked with a <B><FONT COLOR='red'>D-Notice</B></FONT>. Its contents were not transferred to the newspaper at the time of printing."
|
||||
@@ -882,12 +854,12 @@ obj/item/weapon/newspaper/attack_self(mob/user as mob)
|
||||
dat+="<FONT SIZE=1>\[[MESSAGE.message_type] by <FONT COLOR='maroon'>[MESSAGE.author]</FONT>\]</FONT><BR><BR>"
|
||||
dat+="</ul>"
|
||||
if(scribble_page==curr_page)
|
||||
dat+="<BR><I>There is a small scribble near the end of this page... It reads: \"[src.scribble]\"</I>"
|
||||
dat+="<BR><I>There is a small scribble near the end of this page... It reads: \"[scribble]\"</I>"
|
||||
dat+= "<BR><HR><DIV STYLE='float:left;'><A href='?src=\ref[src];prev_page=1'>Previous Page</A></DIV> <DIV STYLE='float:right;'><A href='?src=\ref[src];next_page=1'>Next Page</A></DIV>"
|
||||
if(2) //Last page
|
||||
for(var/datum/feed_channel/NP in src.news_content)
|
||||
src.pages++
|
||||
if(src.important_message!=null)
|
||||
for(var/datum/feed_channel/NP in news_content)
|
||||
pages++
|
||||
if(important_message!=null)
|
||||
dat+="<DIV STYLE='float:center;'><FONT SIZE=4><B>Wanted Issue:</B></FONT SIZE></DIV><BR><BR>"
|
||||
dat+="<B>Criminal name</B>: <FONT COLOR='maroon'>[important_message.author]</FONT><BR>"
|
||||
dat+="<B>Description</B>: [important_message.body]<BR>"
|
||||
@@ -900,91 +872,86 @@ obj/item/weapon/newspaper/attack_self(mob/user as mob)
|
||||
else
|
||||
dat+="<I>Apart from some uninteresting Classified ads, there's nothing on this page...</I>"
|
||||
if(scribble_page==curr_page)
|
||||
dat+="<BR><I>There is a small scribble near the end of this page... It reads: \"[src.scribble]\"</I>"
|
||||
dat+="<BR><I>There is a small scribble near the end of this page... It reads: \"[scribble]\"</I>"
|
||||
dat+= "<HR><DIV STYLE='float:left;'><A href='?src=\ref[src];prev_page=1'>Previous Page</A></DIV>"
|
||||
else
|
||||
dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com"
|
||||
|
||||
dat+="<BR><HR><div align='center'>[src.curr_page+1]</div>"
|
||||
dat+="<BR><HR><div align='center'>[curr_page+1]</div>"
|
||||
human_user << browse(dat, "window=newspaper_main;size=300x400")
|
||||
onclose(human_user, "newspaper_main")
|
||||
else
|
||||
user << "The paper is full of intelligible symbols!"
|
||||
|
||||
|
||||
obj/item/weapon/newspaper/Topic(href, href_list)
|
||||
var/mob/living/U = usr
|
||||
..()
|
||||
if ((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) ))
|
||||
if((src in U.contents) || (istype(loc, /turf) && in_range(src, U)))
|
||||
U.set_machine(src)
|
||||
if(href_list["next_page"])
|
||||
if(curr_page==src.pages+1)
|
||||
if(curr_page == pages+1)
|
||||
return //Don't need that at all, but anyway.
|
||||
if(src.curr_page == src.pages) //We're at the middle, get to the end
|
||||
src.screen = 2
|
||||
if(curr_page == pages) //We're at the middle, get to the end
|
||||
screen = 2
|
||||
else
|
||||
if(curr_page == 0) //We're at the start, get to the middle
|
||||
src.screen=1
|
||||
src.curr_page++
|
||||
playsound(src.loc, "pageturn", 50, 1)
|
||||
screen = 1
|
||||
curr_page++
|
||||
playsound(loc, "pageturn", 50, 1)
|
||||
|
||||
else if(href_list["prev_page"])
|
||||
if(curr_page == 0)
|
||||
return
|
||||
if(curr_page == 1)
|
||||
src.screen = 0
|
||||
screen = 0
|
||||
|
||||
else
|
||||
if(curr_page == src.pages+1) //we're at the end, let's go back to the middle.
|
||||
src.screen = 1
|
||||
src.curr_page--
|
||||
if(curr_page == pages+1) //we're at the end, let's go back to the middle.
|
||||
screen = 1
|
||||
curr_page--
|
||||
playsound(src.loc, "pageturn", 50, 1)
|
||||
|
||||
if (istype(src.loc, /mob))
|
||||
src.attack_self(src.loc)
|
||||
|
||||
if(istype(src.loc, /mob))
|
||||
attack_self(src.loc)
|
||||
|
||||
obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/pen))
|
||||
if(src.scribble_page == src.curr_page)
|
||||
if(scribble_page == curr_page)
|
||||
user << "<FONT COLOR='blue'>There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?</FONT>"
|
||||
else
|
||||
var/s = sanitize(input(user, "Write something", "Newspaper", ""))
|
||||
s = sanitize(s)
|
||||
if (!s)
|
||||
if(!s)
|
||||
return
|
||||
if (!in_range(src, usr) && src.loc != usr)
|
||||
if(!in_range(src, usr) && src.loc != usr)
|
||||
return
|
||||
src.scribble_page = src.curr_page
|
||||
src.scribble = s
|
||||
src.attack_self(user)
|
||||
scribble_page = curr_page
|
||||
scribble = s
|
||||
attack_self(user)
|
||||
return
|
||||
|
||||
|
||||
////////////////////////////////////helper procs
|
||||
|
||||
|
||||
/obj/machinery/newscaster/proc/scan_user(mob/living/user as mob)
|
||||
if(istype(user,/mob/living/carbon/human)) //User is a human
|
||||
var/mob/living/carbon/human/human_user = user
|
||||
if(human_user.wear_id) //Newscaster scans you
|
||||
if(istype(human_user.wear_id, /obj/item/device/pda) ) //autorecognition, woo!
|
||||
if(istype(human_user.wear_id, /obj/item/device/pda)) //autorecognition, woo!
|
||||
var/obj/item/device/pda/P = human_user.wear_id
|
||||
if(P.id)
|
||||
src.scanned_user = GetNameAndAssignmentFromId(P.id)
|
||||
scanned_user = GetNameAndAssignmentFromId(P.id)
|
||||
else
|
||||
src.scanned_user = "Unknown"
|
||||
else if(istype(human_user.wear_id, /obj/item/weapon/card/id) )
|
||||
scanned_user = "Unknown"
|
||||
else if(istype(human_user.wear_id, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/ID = human_user.wear_id
|
||||
src.scanned_user = GetNameAndAssignmentFromId(ID)
|
||||
scanned_user = GetNameAndAssignmentFromId(ID)
|
||||
else
|
||||
src.scanned_user ="Unknown"
|
||||
scanned_user ="Unknown"
|
||||
else
|
||||
src.scanned_user ="Unknown"
|
||||
scanned_user ="Unknown"
|
||||
else
|
||||
var/mob/living/silicon/ai_user = user
|
||||
src.scanned_user = "[ai_user.name] ([ai_user.job])"
|
||||
|
||||
scanned_user = "[ai_user.name] ([ai_user.job])"
|
||||
|
||||
/obj/machinery/newscaster/proc/print_paper()
|
||||
feedback_inc("newscaster_newspapers_printed",1)
|
||||
@@ -994,7 +961,7 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(news_network.wanted_issue)
|
||||
NEWSPAPER.important_message = news_network.wanted_issue
|
||||
NEWSPAPER.loc = get_turf(src)
|
||||
src.paper_remaining--
|
||||
paper_remaining--
|
||||
return
|
||||
|
||||
/obj/machinery/newscaster/proc/newsAlert(var/news_call)
|
||||
@@ -1003,15 +970,15 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
var/turf/T = get_turf(src)
|
||||
if(news_call)
|
||||
for(var/mob/O in hearers(world.view-1, T))
|
||||
O.show_message("<span class='newscaster'><EM>[src.name]</EM> beeps, \"[news_call]\"</span>",2)
|
||||
src.alert = 1
|
||||
src.update_icon()
|
||||
O.show_message("<span class='newscaster'><EM>[name]</EM> beeps, \"[news_call]\"</span>",2)
|
||||
alert = 1
|
||||
update_icon()
|
||||
spawn(300)
|
||||
src.alert = 0
|
||||
src.update_icon()
|
||||
alert = 0
|
||||
update_icon()
|
||||
playsound(src.loc, 'sound/machines/twobeep.ogg', 75, 1)
|
||||
else
|
||||
for(var/mob/O in hearers(world.view-1, T))
|
||||
O.show_message("<span class='newscaster'><EM>[src.name]</EM> beeps, \"Attention! Wanted issue distributed!\"</span>",2)
|
||||
O.show_message("<span class='newscaster'><EM>[name]</EM> beeps, \"Attention! Wanted issue distributed!\"</span>",2)
|
||||
playsound(src.loc, 'sound/machines/warning-buzzer.ogg', 75, 1)
|
||||
return
|
||||
|
||||
+143
-148
@@ -25,83 +25,79 @@ var/bomb_set
|
||||
// 3 is sealant open, 4 is unwrenched, 5 is removed from bolts.
|
||||
use_power = 0
|
||||
|
||||
|
||||
|
||||
/obj/machinery/nuclearbomb/New()
|
||||
..()
|
||||
r_code = "[rand(10000, 99999.0)]"//Creates a random code upon object spawn.
|
||||
|
||||
src.wires["Red"] = 0
|
||||
src.wires["Blue"] = 0
|
||||
src.wires["Green"] = 0
|
||||
src.wires["Marigold"] = 0
|
||||
src.wires["Fuschia"] = 0
|
||||
src.wires["Black"] = 0
|
||||
src.wires["Pearl"] = 0
|
||||
wires["Red"] = 0
|
||||
wires["Blue"] = 0
|
||||
wires["Green"] = 0
|
||||
wires["Marigold"] = 0
|
||||
wires["Fuschia"] = 0
|
||||
wires["Black"] = 0
|
||||
wires["Pearl"] = 0
|
||||
var/list/w = list("Red","Blue","Green","Marigold","Black","Fuschia","Pearl")
|
||||
src.light_wire = pick(w)
|
||||
w -= src.light_wire
|
||||
src.timing_wire = pick(w)
|
||||
w -= src.timing_wire
|
||||
src.safety_wire = pick(w)
|
||||
w -= src.safety_wire
|
||||
light_wire = pick(w)
|
||||
w -= light_wire
|
||||
timing_wire = pick(w)
|
||||
w -= timing_wire
|
||||
safety_wire = pick(w)
|
||||
w -= safety_wire
|
||||
|
||||
/obj/machinery/nuclearbomb/process()
|
||||
if (src.timing)
|
||||
if(timing)
|
||||
bomb_set = 1 //So long as there is one nuke timing, it means one nuke is armed.
|
||||
src.timeleft--
|
||||
if (src.timeleft <= 0)
|
||||
timeleft--
|
||||
if(timeleft <= 0)
|
||||
explode()
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if ((M.client && M.machine == src))
|
||||
src.attack_hand(M)
|
||||
if((M.client && M.machine == src))
|
||||
attack_hand(M)
|
||||
return
|
||||
|
||||
/obj/machinery/nuclearbomb/attackby(obj/item/weapon/O as obj, mob/user as mob)
|
||||
|
||||
if (istype(O, /obj/item/weapon/screwdriver))
|
||||
src.add_fingerprint(user)
|
||||
if (src.auth)
|
||||
if (src.opened == 0)
|
||||
src.opened = 1
|
||||
if(istype(O, /obj/item/weapon/screwdriver))
|
||||
add_fingerprint(user)
|
||||
if(auth)
|
||||
if(opened == 0)
|
||||
opened = 1
|
||||
overlays += image(icon, "npanel_open")
|
||||
user << "You unscrew the control panel of [src]."
|
||||
|
||||
else
|
||||
src.opened = 0
|
||||
opened = 0
|
||||
overlays -= image(icon, "npanel_open")
|
||||
user << "You screw the control panel of [src] back on."
|
||||
else
|
||||
if (src.opened == 0)
|
||||
if(opened == 0)
|
||||
user << "The [src] emits a buzzing noise, the panel staying locked in."
|
||||
if (src.opened == 1)
|
||||
src.opened = 0
|
||||
if(opened == 1)
|
||||
opened = 0
|
||||
overlays -= image(icon, "npanel_open")
|
||||
user << "You screw the control panel of [src] back on."
|
||||
flick("nuclearbombc", src)
|
||||
|
||||
return
|
||||
if (istype(O, /obj/item/weapon/wirecutters) || istype(O, /obj/item/device/multitool))
|
||||
if (src.opened == 1)
|
||||
if(istype(O, /obj/item/weapon/wirecutters) || istype(O, /obj/item/device/multitool))
|
||||
if(opened == 1)
|
||||
nukehack_win(user)
|
||||
return
|
||||
|
||||
if (src.extended)
|
||||
if (istype(O, /obj/item/weapon/disk/nuclear))
|
||||
if(extended)
|
||||
if(istype(O, /obj/item/weapon/disk/nuclear))
|
||||
usr.drop_item()
|
||||
O.loc = src
|
||||
src.auth = O
|
||||
src.add_fingerprint(user)
|
||||
auth = O
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
if (src.anchored)
|
||||
if(anchored)
|
||||
switch(removal_stage)
|
||||
if(0)
|
||||
if(istype(O,/obj/item/weapon/weldingtool))
|
||||
|
||||
var/obj/item/weapon/weldingtool/WT = O
|
||||
if(!WT.isOn()) return
|
||||
if (WT.get_fuel() < 5) // uses up 5 fuel.
|
||||
if(WT.get_fuel() < 5) // uses up 5 fuel.
|
||||
user << "<span class='warning'>You need more fuel to complete this task.</span>"
|
||||
return
|
||||
|
||||
@@ -128,7 +124,7 @@ var/bomb_set
|
||||
|
||||
var/obj/item/weapon/weldingtool/WT = O
|
||||
if(!WT.isOn()) return
|
||||
if (WT.get_fuel() < 5) // uses up 5 fuel.
|
||||
if(WT.get_fuel() < 5) // uses up 5 fuel.
|
||||
user << "<span class='warning'>You need more fuel to complete this task.</span>"
|
||||
return
|
||||
|
||||
@@ -165,51 +161,51 @@ var/bomb_set
|
||||
..()
|
||||
|
||||
/obj/machinery/nuclearbomb/attack_hand(mob/user as mob)
|
||||
if (src.extended)
|
||||
if (!ishuman(user))
|
||||
if(extended)
|
||||
if(!ishuman(user))
|
||||
usr << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return 1
|
||||
|
||||
user.set_machine(src)
|
||||
var/dat = text("<TT><B>Nuclear Fission Explosive</B><BR>\nAuth. Disk: <A href='?src=\ref[];auth=1'>[]</A><HR>", src, (src.auth ? "++++++++++" : "----------"))
|
||||
if (src.auth)
|
||||
if (src.yes_code)
|
||||
dat += text("\n<B>Status</B>: []-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] <A href='?src=\ref[];timer=1'>Toggle</A><BR>\nTime: <A href='?src=\ref[];time=-10'>-</A> <A href='?src=\ref[];time=-1'>-</A> [] <A href='?src=\ref[];time=1'>+</A> <A href='?src=\ref[];time=10'>+</A><BR>\n<BR>\nSafety: [] <A href='?src=\ref[];safety=1'>Toggle</A><BR>\nAnchor: [] <A href='?src=\ref[];anchor=1'>Toggle</A><BR>\n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src, src, src, src.timeleft, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src)
|
||||
var/dat = text("<TT><B>Nuclear Fission Explosive</B><BR>\nAuth. Disk: <A href='?src=\ref[];auth=1'>[]</A><HR>", src, (auth ? "++++++++++" : "----------"))
|
||||
if(auth)
|
||||
if(yes_code)
|
||||
dat += text("\n<B>Status</B>: []-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] <A href='?src=\ref[];timer=1'>Toggle</A><BR>\nTime: <A href='?src=\ref[];time=-10'>-</A> <A href='?src=\ref[];time=-1'>-</A> [] <A href='?src=\ref[];time=1'>+</A> <A href='?src=\ref[];time=10'>+</A><BR>\n<BR>\nSafety: [] <A href='?src=\ref[];safety=1'>Toggle</A><BR>\nAnchor: [] <A href='?src=\ref[];anchor=1'>Toggle</A><BR>\n", (timing ? "Func/Set" : "Functional"), (safety ? "Safe" : "Engaged"), timeleft, (timing ? "On" : "Off"), src, src, src, timeleft, src, src, (safety ? "On" : "Off"), src, (anchored ? "Engaged" : "Off"), src)
|
||||
else
|
||||
dat += text("\n<B>Status</B>: Auth. S2-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\n[] Safety: Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
dat += text("\n<B>Status</B>: Auth. S2-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\n[] Safety: Toggle<BR>\nAnchor: [] Toggle<BR>\n", (safety ? "Safe" : "Engaged"), timeleft, (timing ? "On" : "Off"), timeleft, (safety ? "On" : "Off"), (anchored ? "Engaged" : "Off"))
|
||||
else
|
||||
if (src.timing)
|
||||
dat += text("\n<B>Status</B>: Set-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\nSafety: [] Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
if(timing)
|
||||
dat += text("\n<B>Status</B>: Set-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\nSafety: [] Toggle<BR>\nAnchor: [] Toggle<BR>\n", (safety ? "Safe" : "Engaged"), timeleft, (timing ? "On" : "Off"), timeleft, (safety ? "On" : "Off"), (anchored ? "Engaged" : "Off"))
|
||||
else
|
||||
dat += text("\n<B>Status</B>: Auth. S1-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\nSafety: [] Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
dat += text("\n<B>Status</B>: Auth. S1-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\nSafety: [] Toggle<BR>\nAnchor: [] Toggle<BR>\n", (safety ? "Safe" : "Engaged"), timeleft, (timing ? "On" : "Off"), timeleft, (safety ? "On" : "Off"), (anchored ? "Engaged" : "Off"))
|
||||
var/message = "AUTH"
|
||||
if (src.auth)
|
||||
message = text("[]", src.code)
|
||||
if (src.yes_code)
|
||||
if(auth)
|
||||
message = text("[]", code)
|
||||
if(yes_code)
|
||||
message = "*****"
|
||||
dat += text("<HR>\n>[]<BR>\n<A href='?src=\ref[];type=1'>1</A>-<A href='?src=\ref[];type=2'>2</A>-<A href='?src=\ref[];type=3'>3</A><BR>\n<A href='?src=\ref[];type=4'>4</A>-<A href='?src=\ref[];type=5'>5</A>-<A href='?src=\ref[];type=6'>6</A><BR>\n<A href='?src=\ref[];type=7'>7</A>-<A href='?src=\ref[];type=8'>8</A>-<A href='?src=\ref[];type=9'>9</A><BR>\n<A href='?src=\ref[];type=R'>R</A>-<A href='?src=\ref[];type=0'>0</A>-<A href='?src=\ref[];type=E'>E</A><BR>\n</TT>", message, src, src, src, src, src, src, src, src, src, src, src, src)
|
||||
user << browse(dat, "window=nuclearbomb;size=300x400")
|
||||
onclose(user, "nuclearbomb")
|
||||
else if (src.deployable)
|
||||
else if(deployable)
|
||||
if(removal_stage < 5)
|
||||
src.anchored = 1
|
||||
anchored = 1
|
||||
visible_message("<span class='warning'>With a steely snap, bolts slide out of [src] and anchor it to the flooring!</span>")
|
||||
else
|
||||
visible_message("<span class='warning'>\The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.</span>")
|
||||
if(!src.lighthack)
|
||||
if(!lighthack)
|
||||
flick("nuclearbombc", src)
|
||||
src.icon_state = "nuclearbomb1"
|
||||
src.extended = 1
|
||||
icon_state = "nuclearbomb1"
|
||||
extended = 1
|
||||
return
|
||||
|
||||
obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
|
||||
var/dat as text
|
||||
dat += "<TT><B>Nuclear Fission Explosive</B><BR>\nNuclear Device Wires:</A><HR>"
|
||||
for(var/wire in src.wires)
|
||||
dat += text("[wire] Wire: <A href='?src=\ref[src];wire=[wire];act=wire'>[src.wires[wire] ? "Mend" : "Cut"]</A> <A href='?src=\ref[src];wire=[wire];act=pulse'>Pulse</A><BR>")
|
||||
dat += text("<HR>The device is [src.timing ? "shaking!" : "still"]<BR>")
|
||||
dat += text("The device is [src.safety ? "quiet" : "whirring"].<BR>")
|
||||
dat += text("The lights are [src.lighthack ? "static" : "functional"].<BR>")
|
||||
for(var/wire in wires)
|
||||
dat += text("[wire] Wire: <A href='?src=\ref[src];wire=[wire];act=wire'>[wires[wire] ? "Mend" : "Cut"]</A> <A href='?src=\ref[src];wire=[wire];act=pulse'>Pulse</A><BR>")
|
||||
dat += text("<HR>The device is [timing ? "shaking!" : "still"]<BR>")
|
||||
dat += text("The device is [safety ? "quiet" : "whirring"].<BR>")
|
||||
dat += text("The lights are [lighthack ? "static" : "functional"].<BR>")
|
||||
user << browse("<HTML><HEAD><TITLE>Bomb Defusion</TITLE></HEAD><BODY>[dat]</BODY></HTML>","window=nukebomb_hack")
|
||||
onclose(user, "nukebomb_hack")
|
||||
|
||||
@@ -218,141 +214,140 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
|
||||
set name = "Make Deployable"
|
||||
set src in oview(1)
|
||||
|
||||
if (!usr.canmove || usr.stat || usr.restrained())
|
||||
if(!usr.canmove || usr.stat || usr.restrained())
|
||||
return
|
||||
if (!ishuman(usr))
|
||||
if(!ishuman(usr))
|
||||
usr << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return 1
|
||||
|
||||
if (src.deployable)
|
||||
if(deployable)
|
||||
usr << "<span class='warning'>You close several panels to make [src] undeployable.</span>"
|
||||
src.deployable = 0
|
||||
deployable = 0
|
||||
else
|
||||
usr << "<span class='warning'>You adjust some panels to make [src] deployable.</span>"
|
||||
src.deployable = 1
|
||||
deployable = 1
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/nuclearbomb/Topic(href, href_list)
|
||||
..()
|
||||
if (!usr.canmove || usr.stat || usr.restrained())
|
||||
if(!usr.canmove || usr.stat || usr.restrained())
|
||||
return
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||
if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||
usr.set_machine(src)
|
||||
if(href_list["act"])
|
||||
var/temp_wire = href_list["wire"]
|
||||
if(href_list["act"] == "pulse")
|
||||
if (!istype(usr.get_active_hand(), /obj/item/device/multitool))
|
||||
if(!istype(usr.get_active_hand(), /obj/item/device/multitool))
|
||||
usr << "You need a multitool!"
|
||||
else
|
||||
if(src.wires[temp_wire])
|
||||
if(wires[temp_wire])
|
||||
usr << "You can't pulse a cut wire."
|
||||
else
|
||||
if(src.light_wire == temp_wire)
|
||||
src.lighthack = !src.lighthack
|
||||
spawn(100) src.lighthack = !src.lighthack
|
||||
if(src.timing_wire == temp_wire)
|
||||
if(src.timing)
|
||||
if(light_wire == temp_wire)
|
||||
lighthack = !lighthack
|
||||
spawn(100) lighthack = !lighthack
|
||||
if(timing_wire == temp_wire)
|
||||
if(timing)
|
||||
explode()
|
||||
if(src.safety_wire == temp_wire)
|
||||
src.safety = !src.safety
|
||||
spawn(100) src.safety = !src.safety
|
||||
if(src.safety == 1)
|
||||
if(safety_wire == temp_wire)
|
||||
safety = !safety
|
||||
spawn(100) safety = !safety
|
||||
if(safety == 1)
|
||||
visible_message("<span class='notice'>The [src] quiets down.</span>")
|
||||
if(!src.lighthack)
|
||||
if (src.icon_state == "nuclearbomb2")
|
||||
src.icon_state = "nuclearbomb1"
|
||||
if(!lighthack)
|
||||
if(icon_state == "nuclearbomb2")
|
||||
icon_state = "nuclearbomb1"
|
||||
else
|
||||
visible_message("<span class='notice'>The [src] emits a quiet whirling noise!</span>")
|
||||
if(href_list["act"] == "wire")
|
||||
if (!istype(usr.get_active_hand(), /obj/item/weapon/wirecutters))
|
||||
if(!istype(usr.get_active_hand(), /obj/item/weapon/wirecutters))
|
||||
usr << "You need wirecutters!"
|
||||
else
|
||||
wires[temp_wire] = !wires[temp_wire]
|
||||
if(src.safety_wire == temp_wire)
|
||||
if(src.timing)
|
||||
if(safety_wire == temp_wire)
|
||||
if(timing)
|
||||
explode()
|
||||
if(src.timing_wire == temp_wire)
|
||||
if(!src.lighthack)
|
||||
if (src.icon_state == "nuclearbomb2")
|
||||
src.icon_state = "nuclearbomb1"
|
||||
src.timing = 0
|
||||
if(timing_wire == temp_wire)
|
||||
if(!lighthack)
|
||||
if(icon_state == "nuclearbomb2")
|
||||
icon_state = "nuclearbomb1"
|
||||
timing = 0
|
||||
bomb_set = 0
|
||||
if(src.light_wire == temp_wire)
|
||||
src.lighthack = !src.lighthack
|
||||
if(light_wire == temp_wire)
|
||||
lighthack = !lighthack
|
||||
|
||||
if (href_list["auth"])
|
||||
if (src.auth)
|
||||
src.auth.loc = src.loc
|
||||
src.yes_code = 0
|
||||
src.auth = null
|
||||
if(href_list["auth"])
|
||||
if(auth)
|
||||
auth.loc = src.loc
|
||||
yes_code = 0
|
||||
auth = null
|
||||
else
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
if (istype(I, /obj/item/weapon/disk/nuclear))
|
||||
if(istype(I, /obj/item/weapon/disk/nuclear))
|
||||
usr.drop_item()
|
||||
I.loc = src
|
||||
src.auth = I
|
||||
if (src.auth)
|
||||
if (href_list["type"])
|
||||
if (href_list["type"] == "E")
|
||||
if (src.code == src.r_code)
|
||||
src.yes_code = 1
|
||||
src.code = null
|
||||
auth = I
|
||||
if(auth)
|
||||
if(href_list["type"])
|
||||
if(href_list["type"] == "E")
|
||||
if(code == r_code)
|
||||
yes_code = 1
|
||||
code = null
|
||||
else
|
||||
src.code = "ERROR"
|
||||
code = "ERROR"
|
||||
else
|
||||
if (href_list["type"] == "R")
|
||||
src.yes_code = 0
|
||||
src.code = null
|
||||
if(href_list["type"] == "R")
|
||||
yes_code = 0
|
||||
code = null
|
||||
else
|
||||
src.code += text("[]", href_list["type"])
|
||||
if (length(src.code) > 5)
|
||||
src.code = "ERROR"
|
||||
if (src.yes_code)
|
||||
if (href_list["time"])
|
||||
code += text("[]", href_list["type"])
|
||||
if(length(code) > 5)
|
||||
code = "ERROR"
|
||||
if(yes_code)
|
||||
if(href_list["time"])
|
||||
var/time = text2num(href_list["time"])
|
||||
src.timeleft += time
|
||||
src.timeleft = min(max(round(src.timeleft), 60), 600)
|
||||
if (href_list["timer"])
|
||||
if (src.timing == -1.0)
|
||||
timeleft += time
|
||||
timeleft = min(max(round(timeleft), 60), 600)
|
||||
if(href_list["timer"])
|
||||
if(timing == -1.0)
|
||||
return
|
||||
if (src.safety)
|
||||
if(safety)
|
||||
usr << "<span class='warning'>The safety is still on.</span>"
|
||||
return
|
||||
src.timing = !( src.timing )
|
||||
if (src.timing)
|
||||
if(!src.lighthack)
|
||||
src.icon_state = "nuclearbomb2"
|
||||
if(!src.safety)
|
||||
timing = !(timing)
|
||||
if(timing)
|
||||
if(!lighthack)
|
||||
icon_state = "nuclearbomb2"
|
||||
if(!safety)
|
||||
bomb_set = 1//There can still be issues with this reseting when there are multiple bombs. Not a big deal tho for Nuke/N
|
||||
else
|
||||
bomb_set = 0
|
||||
else
|
||||
bomb_set = 0
|
||||
if(!src.lighthack)
|
||||
src.icon_state = "nuclearbomb1"
|
||||
if (href_list["safety"])
|
||||
src.safety = !( src.safety )
|
||||
if(!lighthack)
|
||||
icon_state = "nuclearbomb1"
|
||||
if(href_list["safety"])
|
||||
safety = !(safety)
|
||||
if(safety)
|
||||
src.timing = 0
|
||||
timing = 0
|
||||
bomb_set = 0
|
||||
if (href_list["anchor"])
|
||||
if(href_list["anchor"])
|
||||
|
||||
if(removal_stage == 5)
|
||||
src.anchored = 0
|
||||
anchored = 0
|
||||
visible_message("<span class='warning'>\The [src] makes a highly unpleasant crunching noise. It looks like the anchoring bolts have been cut.</span>")
|
||||
return
|
||||
|
||||
src.anchored = !( src.anchored )
|
||||
if(src.anchored)
|
||||
anchored = !(anchored)
|
||||
if(anchored)
|
||||
visible_message("<span class='warning'>With a steely snap, bolts slide out of [src] and anchor it to the flooring.</span>")
|
||||
else
|
||||
visible_message("<span class='warning'>The anchoring bolts slide back into the depths of [src].</span>")
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
add_fingerprint(usr)
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if ((M.client && M.machine == src))
|
||||
src.attack_hand(M)
|
||||
if((M.client && M.machine == src))
|
||||
attack_hand(M)
|
||||
else
|
||||
usr << browse(null, "window=nuclearbomb")
|
||||
return
|
||||
@@ -365,23 +360,23 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
|
||||
|
||||
#define NUKERANGE 80
|
||||
/obj/machinery/nuclearbomb/proc/explode()
|
||||
if (src.safety)
|
||||
src.timing = 0
|
||||
if(safety)
|
||||
timing = 0
|
||||
return
|
||||
src.timing = -1.0
|
||||
src.yes_code = 0
|
||||
src.safety = 1
|
||||
if(!src.lighthack)
|
||||
src.icon_state = "nuclearbomb3"
|
||||
timing = -1.0
|
||||
yes_code = 0
|
||||
safety = 1
|
||||
if(!lighthack)
|
||||
icon_state = "nuclearbomb3"
|
||||
playsound(src,'sound/machines/Alarm.ogg',100,0,5)
|
||||
if (ticker && ticker.mode)
|
||||
if(ticker && ticker.mode)
|
||||
ticker.mode.explosion_in_progress = 1
|
||||
sleep(100)
|
||||
|
||||
var/off_station = 0
|
||||
var/turf/bomb_location = get_turf(src)
|
||||
if(bomb_location && (bomb_location.z in config.station_levels))
|
||||
if( (bomb_location.x < (128-NUKERANGE)) || (bomb_location.x > (128+NUKERANGE)) || (bomb_location.y < (128-NUKERANGE)) || (bomb_location.y > (128+NUKERANGE)) )
|
||||
if((bomb_location.x < (128-NUKERANGE)) || (bomb_location.x > (128+NUKERANGE)) || (bomb_location.y < (128-NUKERANGE)) || (bomb_location.y > (128+NUKERANGE)))
|
||||
off_station = 1
|
||||
else
|
||||
off_station = 2
|
||||
|
||||
@@ -1,27 +1,23 @@
|
||||
//#define AMAP
|
||||
|
||||
/obj/machinery/computer/security/verb/station_map()
|
||||
set name = ".map"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
usr.set_machine(src)
|
||||
if(!mapping) return
|
||||
|
||||
log_game("[usr]([usr.key]) used station map L[z] in [src.loc.loc]")
|
||||
|
||||
src.drawmap(usr)
|
||||
drawmap(usr)
|
||||
|
||||
/obj/machinery/computer/security/proc/drawmap(var/mob/user as mob)
|
||||
|
||||
var/icx = round(world.maxx/16) + 1
|
||||
var/icy = round(world.maxy/16) + 1
|
||||
|
||||
var/xoff = round( (icx*16-world.maxx)-2)
|
||||
var/yoff = round( (icy*16-world.maxy)-2)
|
||||
var/xoff = round((icx*16-world.maxx)-2)
|
||||
var/yoff = round((icy*16-world.maxy)-2)
|
||||
|
||||
var/icount = icx * icy
|
||||
|
||||
|
||||
var/list/imap = list()
|
||||
|
||||
#ifdef AMAP
|
||||
@@ -32,7 +28,6 @@
|
||||
|
||||
//world << "[icount] images in list"
|
||||
|
||||
|
||||
for(var/wx = 1 ; wx <= world.maxx; wx++)
|
||||
|
||||
for(var/wy = 1; wy <= world.maxy; wy++)
|
||||
@@ -42,8 +37,6 @@
|
||||
var/colour
|
||||
var/colour2
|
||||
|
||||
|
||||
|
||||
if(!T)
|
||||
colour = rgb(0,0,0)
|
||||
|
||||
@@ -79,9 +72,6 @@
|
||||
else
|
||||
colour = rgb(0,40,0)
|
||||
|
||||
|
||||
|
||||
|
||||
if(sense)
|
||||
|
||||
for(var/atom/AM in T.contents)
|
||||
@@ -127,10 +117,8 @@
|
||||
var/turf_total = environment.total_moles()
|
||||
//var/turf_total = T.co2 + T.oxygen + T.poison + T.sl_gas + T.n2
|
||||
|
||||
|
||||
var/t1 = turf_total / MOLES_CELLSTANDARD * 150
|
||||
|
||||
|
||||
if(t1<=100)
|
||||
colour2 = rgb(t1*2.55,0,0)
|
||||
else
|
||||
@@ -150,19 +138,16 @@
|
||||
var/icon/I = imap[1+(ix + icx*iy)*2]
|
||||
var/icon/I2 = imap[2+(ix + icx*iy)*2]
|
||||
|
||||
|
||||
//world << "icon: \icon[I]"
|
||||
|
||||
I.DrawBox(colour, rx, ry, rx+1, ry+1)
|
||||
|
||||
I2.DrawBox(colour2, rx, ry, rx+1, ry+1)
|
||||
|
||||
|
||||
user.clearmap()
|
||||
|
||||
user.mapobjs = list()
|
||||
|
||||
|
||||
for(var/i=0; i<icount;i++)
|
||||
var/obj/screen/H = new /obj/screen()
|
||||
|
||||
@@ -217,7 +202,7 @@
|
||||
colour = rgb(0,0,t1*2.55)
|
||||
else
|
||||
t1 = min(100, t1-100)
|
||||
colour = rgb( t1*2.55, t1*2.55, 255)
|
||||
colour = rgb(t1*2.55, t1*2.55, 255)
|
||||
|
||||
if("/turf/simulated/wall")
|
||||
colour = rgb(96,96,96)
|
||||
@@ -234,7 +219,6 @@
|
||||
else
|
||||
colour = rgb(0,40,0)
|
||||
|
||||
|
||||
if(sense)
|
||||
|
||||
for(var/atom/AM in T.contents)
|
||||
@@ -268,7 +252,6 @@
|
||||
var/green = getg(colour)
|
||||
var/blue = getb(colour)
|
||||
|
||||
|
||||
green = min(255, green+40)
|
||||
blue = min(255, blue+40)
|
||||
|
||||
@@ -283,17 +266,14 @@
|
||||
//world << "trying [ix],[iy] : [ix+icx*iy]"
|
||||
var/icon/I = imap[1+(ix + icx*iy)]
|
||||
|
||||
|
||||
//world << "icon: \icon[I]"
|
||||
|
||||
I.DrawBox(colour, rx, ry, rx, ry)
|
||||
|
||||
|
||||
user.clearmap()
|
||||
|
||||
user.mapobjs = list()
|
||||
|
||||
|
||||
for(var/i=0; i<icount;i++)
|
||||
var/obj/screen/H = new /obj/screen()
|
||||
|
||||
@@ -322,8 +302,6 @@
|
||||
user.clearmap()*/
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/machinery/computer/security/proc/close(mob/user)
|
||||
spawn(20)
|
||||
var/using = null
|
||||
@@ -337,18 +315,16 @@
|
||||
else
|
||||
user.clearmap()
|
||||
|
||||
|
||||
return
|
||||
|
||||
proc/getr(col)
|
||||
return hex2num( copytext(col, 2,4))
|
||||
return hex2num(copytext(col, 2,4))
|
||||
|
||||
proc/getg(col)
|
||||
return hex2num( copytext(col, 4,6))
|
||||
return hex2num(copytext(col, 4,6))
|
||||
|
||||
proc/getb(col)
|
||||
return hex2num( copytext(col, 6))
|
||||
|
||||
return hex2num(copytext(col, 6))
|
||||
|
||||
/mob/proc/clearmap()
|
||||
src.client.screen -= src.mapobjs
|
||||
@@ -356,5 +332,4 @@ proc/getb(col)
|
||||
qdel(O)
|
||||
|
||||
mapobjs = null
|
||||
src.unset_machine()
|
||||
|
||||
src.unset_machine()
|
||||
@@ -232,7 +232,7 @@ var/list/turret_icons
|
||||
data["settings"] = settings
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
@@ -256,7 +256,6 @@ var/list/turret_icons
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/machinery/porta_turret/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
@@ -324,7 +323,7 @@ var/list/turret_icons
|
||||
user << "<span class='warning'>Cannot secure turrets in space!</span>"
|
||||
return
|
||||
|
||||
user.visible_message( \
|
||||
user.visible_message(\
|
||||
"<span class='warning'>[user] begins [anchored ? "un" : ""]securing the turret.</span>", \
|
||||
"<span class='notice'>You begin [anchored ? "un" : ""]securing the turret.</span>" \
|
||||
)
|
||||
@@ -386,7 +385,7 @@ var/list/turret_icons
|
||||
return
|
||||
|
||||
health -= force
|
||||
if (force > 5 && prob(45))
|
||||
if(force > 5 && prob(45))
|
||||
spark_system.start()
|
||||
if(health <= 0)
|
||||
die() //the death process :(
|
||||
@@ -434,14 +433,14 @@ var/list/turret_icons
|
||||
|
||||
/obj/machinery/porta_turret/ex_act(severity)
|
||||
switch (severity)
|
||||
if (1)
|
||||
if(1)
|
||||
qdel(src)
|
||||
if (2)
|
||||
if (prob(25))
|
||||
if(2)
|
||||
if(prob(25))
|
||||
qdel(src)
|
||||
else
|
||||
take_damage(initial(health) * 8) //should instakill most turrets
|
||||
if (3)
|
||||
if(3)
|
||||
take_damage(initial(health) * 8 / 3)
|
||||
|
||||
/obj/machinery/porta_turret/proc/die() //called when the turret dies, ie, health <= 0
|
||||
@@ -600,8 +599,8 @@ var/list/turret_icons
|
||||
timeout = 10
|
||||
|
||||
/obj/machinery/porta_turret/proc/set_raised_raising(var/raised, var/raising)
|
||||
src.raised = raised
|
||||
src.raising = raising
|
||||
raised = raised
|
||||
raising = raising
|
||||
density = raised || raising
|
||||
|
||||
/obj/machinery/porta_turret/proc/target(var/mob/living/target)
|
||||
@@ -677,9 +676,9 @@ var/list/turret_icons
|
||||
/obj/machinery/porta_turret/proc/setState(var/datum/turret_checks/TC)
|
||||
if(controllock)
|
||||
return
|
||||
src.enabled = TC.enabled
|
||||
src.lethal = TC.lethal
|
||||
src.iconholder = TC.lethal
|
||||
enabled = TC.enabled
|
||||
lethal = TC.lethal
|
||||
iconholder = TC.lethal
|
||||
|
||||
check_synth = TC.check_synth
|
||||
check_access = TC.check_access
|
||||
@@ -689,7 +688,7 @@ var/list/turret_icons
|
||||
check_anomalies = TC.check_anomalies
|
||||
ailock = TC.ailock
|
||||
|
||||
src.power_change()
|
||||
power_change()
|
||||
|
||||
/*
|
||||
Portable turret constructions
|
||||
@@ -707,7 +706,6 @@ var/list/turret_icons
|
||||
var/installation = null //the gun type installed
|
||||
var/gun_charge = 0 //the gun charge of the gun type installed
|
||||
|
||||
|
||||
/obj/machinery/porta_turret_construct/attackby(obj/item/I, mob/user)
|
||||
//this is a bit unwieldy but self-explanatory
|
||||
switch(build_step)
|
||||
@@ -722,7 +720,7 @@ var/list/turret_icons
|
||||
else if(istype(I, /obj/item/weapon/crowbar) && !anchored)
|
||||
playsound(loc, 'sound/items/Crowbar.ogg', 75, 1)
|
||||
user << "<span class='notice'>You dismantle the turret construction.</span>"
|
||||
new /obj/item/stack/material/steel( loc, 5)
|
||||
new /obj/item/stack/material/steel(loc, 5)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -744,7 +742,6 @@ var/list/turret_icons
|
||||
build_step = 0
|
||||
return
|
||||
|
||||
|
||||
if(2)
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
@@ -765,10 +762,9 @@ var/list/turret_icons
|
||||
if(!src || !WT.remove_fuel(5, user)) return
|
||||
build_step = 1
|
||||
user << "You remove the turret's interior metal armor."
|
||||
new /obj/item/stack/material/steel( loc, 2)
|
||||
new /obj/item/stack/material/steel(loc, 2)
|
||||
return
|
||||
|
||||
|
||||
if(3)
|
||||
if(istype(I, /obj/item/weapon/gun/energy)) //the gun installation part
|
||||
|
||||
@@ -873,7 +869,6 @@ var/list/turret_icons
|
||||
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/porta_turret_construct/attack_hand(mob/user)
|
||||
switch(build_step)
|
||||
if(4)
|
||||
@@ -899,7 +894,6 @@ var/list/turret_icons
|
||||
/atom/movable/porta_turret_cover
|
||||
icon = 'icons/obj/turrets.dmi'
|
||||
|
||||
|
||||
#undef TURRET_PRIORITY_TARGET
|
||||
#undef TURRET_SECONDARY_TARGET
|
||||
#undef TURRET_NOT_TARGET
|
||||
#undef TURRET_NOT_TARGET
|
||||
@@ -1,5 +1,4 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||
|
||||
obj/machinery/recharger
|
||||
name = "recharger"
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
@@ -16,8 +15,7 @@ obj/machinery/recharger
|
||||
var/portable = 1
|
||||
circuit = /obj/item/weapon/circuitboard/recharger
|
||||
|
||||
obj/machinery/recharger/New()
|
||||
circuit = new circuit(src)
|
||||
/obj/machinery/recharger/New()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
||||
component_parts += new /obj/item/stack/cable_coil(src, 5)
|
||||
@@ -25,13 +23,13 @@ obj/machinery/recharger/New()
|
||||
..()
|
||||
return
|
||||
|
||||
obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
|
||||
/obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
|
||||
if(istype(user,/mob/living/silicon))
|
||||
return
|
||||
|
||||
var/allowed = 0
|
||||
for (var/allowed_type in allowed_devices)
|
||||
if (istype(G, allowed_type)) allowed = 1
|
||||
if(istype(G, allowed_type)) allowed = 1
|
||||
|
||||
if(allowed)
|
||||
if(charging)
|
||||
@@ -41,10 +39,10 @@ obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
|
||||
if(!powered())
|
||||
user << "<span class='warning'>The [name] blinks red as you try to insert the item!</span>"
|
||||
return
|
||||
if (istype(G, /obj/item/weapon/gun/energy/gun/nuclear) || istype(G, /obj/item/weapon/gun/energy/crossbow))
|
||||
if(istype(G, /obj/item/weapon/gun/energy/gun/nuclear) || istype(G, /obj/item/weapon/gun/energy/crossbow))
|
||||
user << "<span class='notice'>Your gun's recharge port was removed to make room for a miniaturized reactor.</span>"
|
||||
return
|
||||
if (istype(G, /obj/item/weapon/gun/energy/staff))
|
||||
if(istype(G, /obj/item/weapon/gun/energy/staff))
|
||||
return
|
||||
if(istype(G, /obj/item/device/laptop))
|
||||
var/obj/item/device/laptop/L = G
|
||||
@@ -67,7 +65,7 @@ obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
|
||||
else if(default_deconstruction_crowbar(user, G))
|
||||
return
|
||||
|
||||
obj/machinery/recharger/attack_hand(mob/user as mob)
|
||||
/obj/machinery/recharger/attack_hand(mob/user as mob)
|
||||
if(istype(user,/mob/living/silicon))
|
||||
return
|
||||
|
||||
@@ -79,7 +77,7 @@ obj/machinery/recharger/attack_hand(mob/user as mob)
|
||||
charging = null
|
||||
update_icon()
|
||||
|
||||
obj/machinery/recharger/process()
|
||||
/obj/machinery/recharger/process()
|
||||
if(stat & (NOPOWER|BROKEN) || !anchored)
|
||||
update_use_power(0)
|
||||
icon_state = icon_state_idle
|
||||
@@ -137,7 +135,7 @@ obj/machinery/recharger/process()
|
||||
update_use_power(1)
|
||||
return
|
||||
|
||||
obj/machinery/recharger/emp_act(severity)
|
||||
/obj/machinery/recharger/emp_act(severity)
|
||||
if(stat & (NOPOWER|BROKEN) || !anchored)
|
||||
..(severity)
|
||||
return
|
||||
@@ -153,14 +151,14 @@ obj/machinery/recharger/emp_act(severity)
|
||||
B.bcell.charge = 0
|
||||
..(severity)
|
||||
|
||||
obj/machinery/recharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier.
|
||||
/obj/machinery/recharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier.
|
||||
if(charging)
|
||||
icon_state = icon_state_charging
|
||||
else
|
||||
icon_state = icon_state_idle
|
||||
|
||||
|
||||
obj/machinery/recharger/wallcharger
|
||||
/obj/machinery/recharger/wallcharger
|
||||
name = "wall recharger"
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "wrecharger0"
|
||||
@@ -170,5 +168,4 @@ obj/machinery/recharger/wallcharger
|
||||
icon_state_charging = "wrecharger1"
|
||||
icon_state_idle = "wrecharger0"
|
||||
portable = 0
|
||||
circuit = /obj/item/weapon/circuitboard/recharger/wrecharger
|
||||
frame_type = "wrecharger"
|
||||
circuit = /obj/item/weapon/circuitboard/recharger/wrecharger
|
||||
@@ -24,7 +24,6 @@
|
||||
|
||||
/obj/machinery/recharge_station/New()
|
||||
..()
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
@@ -32,7 +31,6 @@
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
||||
component_parts += new /obj/item/weapon/cell/high(src)
|
||||
component_parts += new /obj/item/stack/cable_coil(src, 5)
|
||||
|
||||
RefreshParts()
|
||||
|
||||
update_icon()
|
||||
@@ -80,9 +78,9 @@
|
||||
|
||||
if(!has_cell_power())
|
||||
return 0
|
||||
if(src.use_power == 1)
|
||||
if(use_power == 1)
|
||||
cell.use(idle_power_usage * CELLRATE)
|
||||
else if(src.use_power >= 2)
|
||||
else if(use_power >= 2)
|
||||
cell.use(active_power_usage * CELLRATE)
|
||||
return 1
|
||||
|
||||
@@ -266,7 +264,7 @@
|
||||
if(!occupant)
|
||||
return
|
||||
|
||||
occupant.forceMove(loc)
|
||||
occupant.forceMove(src.loc)
|
||||
occupant.reset_view()
|
||||
occupant = null
|
||||
update_icon()
|
||||
|
||||
@@ -78,7 +78,7 @@ obj/machinery/scanner/attack_hand(mob/living/carbon/human/user)
|
||||
print.stamped = 1
|
||||
|
||||
for(var/datum/data/record/test in data_core.general)
|
||||
if (test.fields["name"] == mname)
|
||||
if(test.fields["name"] == mname)
|
||||
return
|
||||
|
||||
var/datum/data/record/G = new()
|
||||
@@ -136,6 +136,4 @@ obj/machinery/scanner/attack_hand(mob/living/carbon/human/user)
|
||||
data_core.general += G
|
||||
data_core.medical += M
|
||||
data_core.security += S
|
||||
data_core.locked += L
|
||||
|
||||
|
||||
data_core.locked += L
|
||||
@@ -74,11 +74,11 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
|
||||
name = "[department] Requests Console"
|
||||
allConsoles += src
|
||||
if (departmentType & RC_ASSIST)
|
||||
if(departmentType & RC_ASSIST)
|
||||
req_console_assistance |= department
|
||||
if (departmentType & RC_SUPPLY)
|
||||
if(departmentType & RC_SUPPLY)
|
||||
req_console_supplies |= department
|
||||
if (departmentType & RC_INFO)
|
||||
if(departmentType & RC_INFO)
|
||||
req_console_information |= department
|
||||
|
||||
set_light(1)
|
||||
@@ -87,15 +87,15 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
allConsoles -= src
|
||||
var/lastDeptRC = 1
|
||||
for (var/obj/machinery/requests_console/Console in allConsoles)
|
||||
if (Console.department == department)
|
||||
if(Console.department == department)
|
||||
lastDeptRC = 0
|
||||
break
|
||||
if(lastDeptRC)
|
||||
if (departmentType & RC_ASSIST)
|
||||
if(departmentType & RC_ASSIST)
|
||||
req_console_assistance -= department
|
||||
if (departmentType & RC_SUPPLY)
|
||||
if(departmentType & RC_SUPPLY)
|
||||
req_console_supplies -= department
|
||||
if (departmentType & RC_INFO)
|
||||
if(departmentType & RC_INFO)
|
||||
req_console_information -= department
|
||||
..()
|
||||
|
||||
@@ -126,7 +126,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
data["announceAuth"] = announceAuth
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "request_console.tmpl", "[department] Request Console", 520, 410)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
@@ -162,7 +162,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
announcement.Announce(message, msg_sanitized = 1)
|
||||
reset_message(1)
|
||||
|
||||
if( href_list["department"] && message )
|
||||
if(href_list["department"] && message)
|
||||
var/log_msg = message
|
||||
var/pass = 0
|
||||
screen = RCS_SENTFAIL
|
||||
@@ -183,7 +183,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
return
|
||||
if(tempScreen == RCS_VIEWMSGS)
|
||||
for (var/obj/machinery/requests_console/Console in allConsoles)
|
||||
if (Console.department == department)
|
||||
if(Console.department == department)
|
||||
Console.newmessagepriority = 0
|
||||
Console.icon_state = "req_comp0"
|
||||
Console.set_light(1)
|
||||
@@ -200,9 +200,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
|
||||
//err... hacking code, which has no reason for existing... but anyway... it was once supposed to unlock priority 3 messanging on that console (EXTREME priority...), but the code for that was removed.
|
||||
/obj/machinery/requests_console/attackby(var/obj/item/weapon/O as obj, var/mob/user as mob)
|
||||
if(default_deconstruction_screwdriver(user, O))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, O))
|
||||
if(computer_deconstruction_screwdriver(user, O))
|
||||
return
|
||||
if(istype(O, /obj/item/device/multitool))
|
||||
if(panel_open)
|
||||
@@ -216,15 +214,15 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
|
||||
name = "[department] Requests Console"
|
||||
allConsoles += src
|
||||
if (departmentType & RC_ASSIST)
|
||||
if(departmentType & RC_ASSIST)
|
||||
req_console_assistance |= department
|
||||
if (departmentType & RC_SUPPLY)
|
||||
if(departmentType & RC_SUPPLY)
|
||||
req_console_supplies |= department
|
||||
if (departmentType & RC_INFO)
|
||||
if(departmentType & RC_INFO)
|
||||
req_console_information |= department
|
||||
return
|
||||
|
||||
if (istype(O, /obj/item/weapon/card/id))
|
||||
if(istype(O, /obj/item/weapon/card/id))
|
||||
if(inoperable(MAINT)) return
|
||||
if(screen == RCS_MESSAUTH)
|
||||
var/obj/item/weapon/card/id/T = O
|
||||
@@ -232,14 +230,14 @@ var/list/obj/machinery/requests_console/allConsoles = list()
|
||||
updateUsrDialog()
|
||||
if(screen == RCS_ANNOUNCE)
|
||||
var/obj/item/weapon/card/id/ID = O
|
||||
if (access_RC_announce in ID.GetAccess())
|
||||
if(access_RC_announce in ID.GetAccess())
|
||||
announceAuth = 1
|
||||
announcement.announcer = ID.assignment ? "[ID.assignment] [ID.registered_name]" : ID.registered_name
|
||||
else
|
||||
reset_message()
|
||||
user << "<span class='warning'>You are not authorized to send announcements.</span>"
|
||||
updateUsrDialog()
|
||||
if (istype(O, /obj/item/weapon/stamp))
|
||||
if(istype(O, /obj/item/weapon/stamp))
|
||||
if(inoperable(MAINT)) return
|
||||
if(screen == RCS_MESSAUTH)
|
||||
var/obj/item/weapon/stamp/T = O
|
||||
|
||||
@@ -12,40 +12,40 @@
|
||||
active_power_usage = 10000
|
||||
|
||||
/obj/machinery/robotic_fabricator/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if (istype(O, /obj/item/stack/material) && O.get_material_name() == DEFAULT_WALL_MATERIAL)
|
||||
if(istype(O, /obj/item/stack/material) && O.get_material_name() == DEFAULT_WALL_MATERIAL)
|
||||
var/obj/item/stack/M = O
|
||||
if (src.metal_amount < 150000.0)
|
||||
if(metal_amount < 150000.0)
|
||||
var/count = 0
|
||||
src.overlays += "fab-load-metal"
|
||||
overlays += "fab-load-metal"
|
||||
spawn(15)
|
||||
if(M)
|
||||
if(!M.get_amount())
|
||||
return
|
||||
while(metal_amount < 150000 && M.amount)
|
||||
src.metal_amount += O.matter[DEFAULT_WALL_MATERIAL] /*O:height * O:width * O:length * 100000.0*/
|
||||
metal_amount += O.matter[DEFAULT_WALL_MATERIAL] /*O:height * O:width * O:length * 100000.0*/
|
||||
M.use(1)
|
||||
count++
|
||||
|
||||
user << "You insert [count] metal sheet\s into the fabricator."
|
||||
src.overlays -= "fab-load-metal"
|
||||
overlays -= "fab-load-metal"
|
||||
updateDialog()
|
||||
else
|
||||
user << "The robot part maker is full. Please remove metal from the robot part maker in order to insert more."
|
||||
|
||||
/obj/machinery/robotic_fabricator/attack_hand(user as mob)
|
||||
var/dat
|
||||
if (..())
|
||||
if(..())
|
||||
return
|
||||
|
||||
if (src.operating)
|
||||
if(operating)
|
||||
dat = {"
|
||||
<TT>Building [src.being_built.name].<BR>
|
||||
<TT>Building [being_built.name].<BR>
|
||||
Please wait until completion...</TT><BR>
|
||||
<BR>
|
||||
"}
|
||||
else
|
||||
dat = {"
|
||||
<B>Metal Amount:</B> [min(150000, src.metal_amount)] cm<sup>3</sup> (MAX: 150,000)<BR><HR>
|
||||
<B>Metal Amount:</B> [min(150000, metal_amount)] cm<sup>3</sup> (MAX: 150,000)<BR><HR>
|
||||
<BR>
|
||||
<A href='?src=\ref[src];make=1'>Left Arm (25,000 cc metal.)<BR>
|
||||
<A href='?src=\ref[src];make=2'>Right Arm (25,000 cc metal.)<BR>
|
||||
@@ -61,14 +61,14 @@ Please wait until completion...</TT><BR>
|
||||
return
|
||||
|
||||
/obj/machinery/robotic_fabricator/Topic(href, href_list)
|
||||
if (..())
|
||||
if(..())
|
||||
return
|
||||
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
add_fingerprint(usr)
|
||||
|
||||
if (href_list["make"])
|
||||
if (!src.operating)
|
||||
if(href_list["make"])
|
||||
if(!operating)
|
||||
var/part_type = text2num(href_list["make"])
|
||||
|
||||
var/build_type = ""
|
||||
@@ -76,63 +76,63 @@ Please wait until completion...</TT><BR>
|
||||
var/build_cost = 25000
|
||||
|
||||
switch (part_type)
|
||||
if (1)
|
||||
if(1)
|
||||
build_type = "/obj/item/robot_parts/l_arm"
|
||||
build_time = 200
|
||||
build_cost = 25000
|
||||
|
||||
if (2)
|
||||
if(2)
|
||||
build_type = "/obj/item/robot_parts/r_arm"
|
||||
build_time = 200
|
||||
build_cost = 25000
|
||||
|
||||
if (3)
|
||||
if(3)
|
||||
build_type = "/obj/item/robot_parts/l_leg"
|
||||
build_time = 200
|
||||
build_cost = 25000
|
||||
|
||||
if (4)
|
||||
if(4)
|
||||
build_type = "/obj/item/robot_parts/r_leg"
|
||||
build_time = 200
|
||||
build_cost = 25000
|
||||
|
||||
if (5)
|
||||
if(5)
|
||||
build_type = "/obj/item/robot_parts/chest"
|
||||
build_time = 350
|
||||
build_cost = 50000
|
||||
|
||||
if (6)
|
||||
if(6)
|
||||
build_type = "/obj/item/robot_parts/head"
|
||||
build_time = 350
|
||||
build_cost = 50000
|
||||
|
||||
if (7)
|
||||
if(7)
|
||||
build_type = "/obj/item/robot_parts/robot_suit"
|
||||
build_time = 600
|
||||
build_cost = 75000
|
||||
|
||||
var/building = text2path(build_type)
|
||||
if (!isnull(building))
|
||||
if (src.metal_amount >= build_cost)
|
||||
src.operating = 1
|
||||
src.update_use_power(2)
|
||||
if(!isnull(building))
|
||||
if(metal_amount >= build_cost)
|
||||
operating = 1
|
||||
update_use_power(2)
|
||||
|
||||
src.metal_amount = max(0, src.metal_amount - build_cost)
|
||||
metal_amount = max(0, metal_amount - build_cost)
|
||||
|
||||
src.being_built = new building(src)
|
||||
being_built = new building(src)
|
||||
|
||||
src.overlays += "fab-active"
|
||||
src.updateUsrDialog()
|
||||
overlays += "fab-active"
|
||||
updateUsrDialog()
|
||||
|
||||
spawn (build_time)
|
||||
if (!isnull(src.being_built))
|
||||
src.being_built.loc = get_turf(src)
|
||||
src.being_built = null
|
||||
src.update_use_power(1)
|
||||
src.operating = 0
|
||||
src.overlays -= "fab-active"
|
||||
if(!isnull(being_built))
|
||||
being_built.loc = get_turf(src)
|
||||
being_built = null
|
||||
update_use_power(1)
|
||||
operating = 0
|
||||
overlays -= "fab-active"
|
||||
return
|
||||
|
||||
for (var/mob/M in viewers(1, src))
|
||||
if (M.client && M.machine == src)
|
||||
src.attack_hand(M)
|
||||
if(M.client && M.machine == src)
|
||||
attack_hand(M)
|
||||
@@ -36,7 +36,7 @@ obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob
|
||||
//Grass.
|
||||
else if(istype(O, /obj/item/stack/tile/grass))
|
||||
var/obj/item/stack/tile/grass/S = O
|
||||
if (S.use(1))
|
||||
if(S.use(1))
|
||||
user << "<span class='notice'>You extract some seeds from the grass tile.</span>"
|
||||
new /obj/item/seeds/grassseed(loc)
|
||||
|
||||
|
||||
@@ -11,11 +11,10 @@
|
||||
var/set_temperature = T0C + 20 //K
|
||||
var/heating_power = 40000
|
||||
|
||||
|
||||
/obj/machinery/space_heater/New()
|
||||
..()
|
||||
if (cell_type)
|
||||
src.cell = new cell_type(src)
|
||||
if(cell_type)
|
||||
cell = new cell_type(src)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/space_heater/update_icon()
|
||||
@@ -79,7 +78,7 @@
|
||||
return
|
||||
|
||||
/obj/machinery/space_heater/attack_hand(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
add_fingerprint(user)
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/space_heater/interact(mob/user as mob)
|
||||
@@ -113,9 +112,9 @@
|
||||
|
||||
|
||||
/obj/machinery/space_heater/Topic(href, href_list)
|
||||
if (usr.stat)
|
||||
if(usr.stat)
|
||||
return
|
||||
if ((in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon)))
|
||||
if((in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon)))
|
||||
usr.set_machine(src)
|
||||
|
||||
switch(href_list["op"])
|
||||
@@ -153,8 +152,6 @@
|
||||
usr.unset_machine()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/machinery/space_heater/process()
|
||||
if(on)
|
||||
if(cell && cell.charge)
|
||||
@@ -166,7 +163,7 @@
|
||||
if(removed)
|
||||
var/heat_transfer = removed.get_thermal_energy_change(set_temperature)
|
||||
if(heat_transfer > 0) //heating air
|
||||
heat_transfer = min( heat_transfer , heating_power ) //limit by the power rating of the heater
|
||||
heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater
|
||||
|
||||
removed.add_thermal_energy(heat_transfer)
|
||||
cell.use(heat_transfer*CELLRATE)
|
||||
|
||||
@@ -53,28 +53,12 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/status_display/attackby(I as obj, user as mob)
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.frame_type = "display"
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
user << "<span class='notice'>You disconnect the monitor.</span>"
|
||||
A.state = 4
|
||||
A.icon_state = "display_4"
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
if(computer_deconstruction_screwdriver(user, I))
|
||||
return
|
||||
else
|
||||
src.attack_hand(user)
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
|
||||
// register for radio system
|
||||
/obj/machinery/status_display/initialize()
|
||||
..()
|
||||
@@ -108,7 +92,7 @@
|
||||
if(STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME) //emergency shuttle timer
|
||||
if(emergency_shuttle.waiting_to_leave())
|
||||
message1 = "-ETD-"
|
||||
if (emergency_shuttle.shuttle.is_launching())
|
||||
if(emergency_shuttle.shuttle.is_launching())
|
||||
message2 = "Launch"
|
||||
else
|
||||
message2 = get_shuttle_timer_departure()
|
||||
@@ -201,7 +185,7 @@
|
||||
|
||||
/obj/machinery/status_display/proc/get_supply_shuttle_timer()
|
||||
var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
|
||||
if (!shuttle)
|
||||
if(!shuttle)
|
||||
return "Error"
|
||||
|
||||
if(shuttle.has_arrive_time())
|
||||
|
||||
@@ -70,31 +70,16 @@ var/list/ai_status_emotions = list(
|
||||
var/emotion = "Neutral"
|
||||
|
||||
/obj/machinery/ai_status_display/attackby(I as obj, user as mob)
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.frame_type = "display"
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
user << "<span class='notice'>You disconnect the monitor.</span>"
|
||||
A.state = 4
|
||||
A.icon_state = "display_4"
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
if(computer_deconstruction_screwdriver(user, I))
|
||||
return
|
||||
else
|
||||
src.attack_hand(user)
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
/obj/machinery/ai_status_display/attack_ai/(mob/user as mob)
|
||||
var/list/ai_emotions = get_ai_emotions(user.ckey)
|
||||
var/emote = input("Please, select a status!", "AI Status", null, null) in ai_emotions
|
||||
src.emotion = emote
|
||||
emotion = emote
|
||||
|
||||
/obj/machinery/ai_status_display/process()
|
||||
return
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// SUIT STORAGE UNIT /////////////////
|
||||
//////////////////////////////////////
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit
|
||||
name = "Suit Storage Unit"
|
||||
desc = "An industrial U-Stor-It Storage unit designed to accomodate all kinds of space suits. Its on-board equipment also allows the user to decontaminate the contents through a UV-ray purging cycle. There's a warning label dangling from the control pad, reading \"STRICTLY NO BIOLOGICALS IN THE CONFINES OF THE UNIT\"."
|
||||
@@ -34,9 +33,8 @@
|
||||
HELMET_TYPE = /obj/item/clothing/head/helmet/space
|
||||
MASK_TYPE = /obj/item/clothing/mask/breath
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/New()
|
||||
src.update_icon()
|
||||
update_icon()
|
||||
if(SUIT_TYPE)
|
||||
SUIT = new SUIT_TYPE(src)
|
||||
if(HELMET_TYPE)
|
||||
@@ -54,40 +52,37 @@
|
||||
hassuit = 1
|
||||
if(OCCUPANT)
|
||||
hashuman = 1
|
||||
icon_state = text("suitstorage[][][][][][][][][]",hashelmet,hassuit,hashuman,src.isopen,src.islocked,src.isUV,src.ispowered,src.isbroken,src.issuperUV)
|
||||
|
||||
icon_state = text("suitstorage[][][][][][][][][]", hashelmet, hassuit, hashuman, isopen, islocked, isUV, ispowered, isbroken, issuperUV)
|
||||
|
||||
/obj/machinery/suit_storage_unit/power_change()
|
||||
..()
|
||||
if( !(stat & NOPOWER) )
|
||||
src.ispowered = 1
|
||||
src.update_icon()
|
||||
if(!(stat & NOPOWER))
|
||||
ispowered = 1
|
||||
update_icon()
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
src.ispowered = 0
|
||||
src.islocked = 0
|
||||
src.isopen = 1
|
||||
src.dump_everything()
|
||||
src.update_icon()
|
||||
|
||||
ispowered = 0
|
||||
islocked = 0
|
||||
isopen = 1
|
||||
dump_everything()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/suit_storage_unit/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
if(prob(50))
|
||||
src.dump_everything() //So suits dont survive all the time
|
||||
dump_everything() //So suits dont survive all the time
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if(prob(50))
|
||||
src.dump_everything()
|
||||
dump_everything()
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/attack_hand(mob/user as mob)
|
||||
var/dat
|
||||
if(..())
|
||||
@@ -96,45 +91,45 @@
|
||||
return
|
||||
if(!user.IsAdvancedToolUser())
|
||||
return 0
|
||||
if(src.panelopen) //The maintenance panel is open. Time for some shady stuff
|
||||
if(panelopen) //The maintenance panel is open. Time for some shady stuff
|
||||
dat+= "<HEAD><TITLE>Suit storage unit: Maintenance panel</TITLE></HEAD>"
|
||||
dat+= "<Font color ='black'><B>Maintenance panel controls</B></font><HR>"
|
||||
dat+= "<font color ='grey'>The panel is ridden with controls, button and meters, labeled in strange signs and symbols that <BR>you cannot understand. Probably the manufactoring world's language.<BR> Among other things, a few controls catch your eye.</font><BR><BR>"
|
||||
dat+= text("<font color ='black'>A small dial with a small lambda symbol on it. It's pointing towards a gauge that reads []</font>.<BR> <font color='blue'><A href='?src=\ref[];toggleUV=1'> Turn towards []</A></font><BR>",(src.issuperUV ? "15nm" : "185nm"),src,(src.issuperUV ? "185nm" : "15nm") )
|
||||
dat+= text("<font color ='black'>A thick old-style button, with 2 grimy LED lights next to it. The [] LED is on.</font><BR><font color ='blue'><A href='?src=\ref[];togglesafeties=1'>Press button</a></font>",(src.safetieson? "<font color='green'><B>GREEN</B></font>" : "<font color='red'><B>RED</B></font>"),src)
|
||||
dat+= text("<font color ='black'>A small dial with a small lambda symbol on it. It's pointing towards a gauge that reads []</font>.<BR> <font color='blue'><A href='?src=\ref[];toggleUV=1'> Turn towards []</A></font><BR>",(issuperUV ? "15nm" : "185nm"),src,(issuperUV ? "185nm" : "15nm"))
|
||||
dat+= text("<font color ='black'>A thick old-style button, with 2 grimy LED lights next to it. The [] LED is on.</font><BR><font color ='blue'><A href='?src=\ref[];togglesafeties=1'>Press button</a></font>",(safetieson? "<font color='green'><B>GREEN</B></font>" : "<font color='red'><B>RED</B></font>"),src)
|
||||
dat+= text("<HR><BR><A href='?src=\ref[];mach_close=suit_storage_unit'>Close panel</A>", user)
|
||||
//user << browse(dat, "window=ssu_m_panel;size=400x500")
|
||||
//onclose(user, "ssu_m_panel")
|
||||
else if(src.isUV) //The thing is running its cauterisation cycle. You have to wait.
|
||||
else if(isUV) //The thing is running its cauterisation cycle. You have to wait.
|
||||
dat += "<HEAD><TITLE>Suit storage unit</TITLE></HEAD>"
|
||||
dat+= "<font color ='red'><B>Unit is cauterising contents with selected UV ray intensity. Please wait.</font></B><BR>"
|
||||
//dat+= "<font colr='black'><B>Cycle end in: [src.cycletimeleft()] seconds. </font></B>"
|
||||
//dat+= "<font colr='black'><B>Cycle end in: [cycletimeleft()] seconds. </font></B>"
|
||||
//user << browse(dat, "window=ssu_cycling_panel;size=400x500")
|
||||
//onclose(user, "ssu_cycling_panel")
|
||||
|
||||
else
|
||||
if(!src.isbroken)
|
||||
if(!isbroken)
|
||||
dat+= "<HEAD><TITLE>Suit storage unit</TITLE></HEAD>"
|
||||
dat+= "<font color='blue'><font size = 4><B>U-Stor-It Suit Storage Unit, model DS1900</B></FONT><BR>"
|
||||
dat+= "<B>Welcome to the Unit control panel.</B></FONT><HR>"
|
||||
dat+= text("<font color='black'>Helmet storage compartment: <B>[]</B></font><BR>",(src.HELMET ? HELMET.name : "</font><font color ='grey'>No helmet detected.") )
|
||||
if(HELMET && src.isopen)
|
||||
dat+= text("<font color='black'>Helmet storage compartment: <B>[]</B></font><BR>",(HELMET ? HELMET.name : "</font><font color ='grey'>No helmet detected."))
|
||||
if(HELMET && isopen)
|
||||
dat+=text("<A href='?src=\ref[];dispense_helmet=1'>Dispense helmet</A><BR>",src)
|
||||
dat+= text("<font color='black'>Suit storage compartment: <B>[]</B></font><BR>",(src.SUIT ? SUIT.name : "</font><font color ='grey'>No exosuit detected.") )
|
||||
if(SUIT && src.isopen)
|
||||
dat+= text("<font color='black'>Suit storage compartment: <B>[]</B></font><BR>",(SUIT ? SUIT.name : "</font><font color ='grey'>No exosuit detected."))
|
||||
if(SUIT && isopen)
|
||||
dat+=text("<A href='?src=\ref[];dispense_suit=1'>Dispense suit</A><BR>",src)
|
||||
dat+= text("<font color='black'>Breathmask storage compartment: <B>[]</B></font><BR>",(src.MASK ? MASK.name : "</font><font color ='grey'>No breathmask detected.") )
|
||||
if(MASK && src.isopen)
|
||||
dat+= text("<font color='black'>Breathmask storage compartment: <B>[]</B></font><BR>",(MASK ? MASK.name : "</font><font color ='grey'>No breathmask detected."))
|
||||
if(MASK && isopen)
|
||||
dat+=text("<A href='?src=\ref[];dispense_mask=1'>Dispense mask</A><BR>",src)
|
||||
if(src.OCCUPANT)
|
||||
if(OCCUPANT)
|
||||
dat+= "<HR><B><font color ='red'>WARNING: Biological entity detected inside the Unit's storage. Please remove.</B></font><BR>"
|
||||
dat+= "<A href='?src=\ref[src];eject_guy=1'>Eject extra load</A>"
|
||||
dat+= text("<HR><font color='black'>Unit is: [] - <A href='?src=\ref[];toggle_open=1'>[] Unit</A></font> ",(src.isopen ? "Open" : "Closed"),src,(src.isopen ? "Close" : "Open"))
|
||||
if(src.isopen)
|
||||
dat+= text("<HR><font color='black'>Unit is: [] - <A href='?src=\ref[];toggle_open=1'>[] Unit</A></font> ",(isopen ? "Open" : "Closed"),src,(isopen ? "Close" : "Open"))
|
||||
if(isopen)
|
||||
dat+="<HR>"
|
||||
else
|
||||
dat+= text(" - <A href='?src=\ref[];toggle_lock=1'><font color ='orange'>*[] Unit*</A></font><HR>",src,(src.islocked ? "Unlock" : "Lock") )
|
||||
dat+= text("Unit status: []",(src.islocked? "<font color ='red'><B>**LOCKED**</B></font><BR>" : "<font color ='green'><B>**UNLOCKED**</B></font><BR>") )
|
||||
dat+= text(" - <A href='?src=\ref[];toggle_lock=1'><font color ='orange'>*[] Unit*</A></font><HR>",src,(islocked ? "Unlock" : "Lock"))
|
||||
dat+= text("Unit status: []",(islocked? "<font color ='red'><B>**LOCKED**</B></font><BR>" : "<font color ='green'><B>**UNLOCKED**</B></font><BR>"))
|
||||
dat+= text("<A href='?src=\ref[];start_UV=1'>Start Disinfection cycle</A><BR>",src)
|
||||
dat += text("<BR><BR><A href='?src=\ref[];mach_close=suit_storage_unit'>Close control panel</A>", user)
|
||||
//user << browse(dat, "window=Suit Storage Unit;size=400x500")
|
||||
@@ -154,54 +149,54 @@
|
||||
/obj/machinery/suit_storage_unit/Topic(href, href_list) //I fucking HATE this proc
|
||||
if(..())
|
||||
return
|
||||
if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon/ai)))
|
||||
if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon/ai)))
|
||||
usr.set_machine(src)
|
||||
if (href_list["toggleUV"])
|
||||
src.toggleUV(usr)
|
||||
src.updateUsrDialog()
|
||||
src.update_icon()
|
||||
if (href_list["togglesafeties"])
|
||||
src.togglesafeties(usr)
|
||||
src.updateUsrDialog()
|
||||
src.update_icon()
|
||||
if (href_list["dispense_helmet"])
|
||||
src.dispense_helmet(usr)
|
||||
src.updateUsrDialog()
|
||||
src.update_icon()
|
||||
if (href_list["dispense_suit"])
|
||||
src.dispense_suit(usr)
|
||||
src.updateUsrDialog()
|
||||
src.update_icon()
|
||||
if (href_list["dispense_mask"])
|
||||
src.dispense_mask(usr)
|
||||
src.updateUsrDialog()
|
||||
src.update_icon()
|
||||
if (href_list["toggle_open"])
|
||||
src.toggle_open(usr)
|
||||
src.updateUsrDialog()
|
||||
src.update_icon()
|
||||
if (href_list["toggle_lock"])
|
||||
src.toggle_lock(usr)
|
||||
src.updateUsrDialog()
|
||||
src.update_icon()
|
||||
if (href_list["start_UV"])
|
||||
src.start_UV(usr)
|
||||
src.updateUsrDialog()
|
||||
src.update_icon()
|
||||
if (href_list["eject_guy"])
|
||||
src.eject_occupant(usr)
|
||||
src.updateUsrDialog()
|
||||
src.update_icon()
|
||||
/*if (href_list["refresh"])
|
||||
src.updateUsrDialog()*/
|
||||
src.add_fingerprint(usr)
|
||||
if(href_list["toggleUV"])
|
||||
toggleUV(usr)
|
||||
updateUsrDialog()
|
||||
update_icon()
|
||||
if(href_list["togglesafeties"])
|
||||
togglesafeties(usr)
|
||||
updateUsrDialog()
|
||||
update_icon()
|
||||
if(href_list["dispense_helmet"])
|
||||
dispense_helmet(usr)
|
||||
updateUsrDialog()
|
||||
update_icon()
|
||||
if(href_list["dispense_suit"])
|
||||
dispense_suit(usr)
|
||||
updateUsrDialog()
|
||||
update_icon()
|
||||
if(href_list["dispense_mask"])
|
||||
dispense_mask(usr)
|
||||
updateUsrDialog()
|
||||
update_icon()
|
||||
if(href_list["toggle_open"])
|
||||
toggle_open(usr)
|
||||
updateUsrDialog()
|
||||
update_icon()
|
||||
if(href_list["toggle_lock"])
|
||||
toggle_lock(usr)
|
||||
updateUsrDialog()
|
||||
update_icon()
|
||||
if(href_list["start_UV"])
|
||||
start_UV(usr)
|
||||
updateUsrDialog()
|
||||
update_icon()
|
||||
if(href_list["eject_guy"])
|
||||
eject_occupant(usr)
|
||||
updateUsrDialog()
|
||||
update_icon()
|
||||
/*if(href_list["refresh"])
|
||||
updateUsrDialog()*/
|
||||
add_fingerprint(usr)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/proc/toggleUV(mob/user as mob)
|
||||
// var/protected = 0
|
||||
// var/mob/living/carbon/human/H = user
|
||||
if(!src.panelopen)
|
||||
if(!panelopen)
|
||||
return
|
||||
|
||||
/*if(istype(H)) //Let's check if the guy's wearing electrically insulated gloves
|
||||
@@ -215,25 +210,25 @@
|
||||
user << "<font color='red'>You try to touch the controls but you get zapped. There must be a short circuit somewhere.</font>"
|
||||
return*/
|
||||
else //welp, the guy is protected, we can continue
|
||||
if(src.issuperUV)
|
||||
if(issuperUV)
|
||||
user << "You slide the dial back towards \"185nm\"."
|
||||
src.issuperUV = 0
|
||||
issuperUV = 0
|
||||
else
|
||||
user << "You crank the dial all the way up to \"15nm\"."
|
||||
src.issuperUV = 1
|
||||
issuperUV = 1
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/proc/togglesafeties(mob/user as mob)
|
||||
// var/protected = 0
|
||||
// var/mob/living/carbon/human/H = user
|
||||
if(!src.panelopen) //Needed check due to bugs
|
||||
if(!panelopen) //Needed check due to bugs
|
||||
return
|
||||
|
||||
/*if(istype(H)) //Let's check if the guy's wearing electrically insulated gloves
|
||||
if(H.gloves)
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
if(istype(G,/obj/item/clothing/gloves/yellow) )
|
||||
if(istype(G,/obj/item/clothing/gloves/yellow))
|
||||
protected = 1
|
||||
|
||||
if(!protected)
|
||||
@@ -242,146 +237,146 @@
|
||||
return*/
|
||||
else
|
||||
user << "You push the button. The coloured LED next to it changes."
|
||||
src.safetieson = !src.safetieson
|
||||
safetieson = !safetieson
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/proc/dispense_helmet(mob/user as mob)
|
||||
if(!src.HELMET)
|
||||
if(!HELMET)
|
||||
return //Do I even need this sanity check? Nyoro~n
|
||||
else
|
||||
src.HELMET.loc = src.loc
|
||||
src.HELMET = null
|
||||
HELMET.loc = src.loc
|
||||
HELMET = null
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/proc/dispense_suit(mob/user as mob)
|
||||
if(!src.SUIT)
|
||||
if(!SUIT)
|
||||
return
|
||||
else
|
||||
src.SUIT.loc = src.loc
|
||||
src.SUIT = null
|
||||
SUIT.loc = src.loc
|
||||
SUIT = null
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/proc/dispense_mask(mob/user as mob)
|
||||
if(!src.MASK)
|
||||
if(!MASK)
|
||||
return
|
||||
else
|
||||
src.MASK.loc = src.loc
|
||||
src.MASK = null
|
||||
MASK.loc = src.loc
|
||||
MASK = null
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/proc/dump_everything()
|
||||
src.islocked = 0 //locks go free
|
||||
if(src.SUIT)
|
||||
src.SUIT.loc = src.loc
|
||||
src.SUIT = null
|
||||
if(src.HELMET)
|
||||
src.HELMET.loc = src.loc
|
||||
src.HELMET = null
|
||||
if(src.MASK)
|
||||
src.MASK.loc = src.loc
|
||||
src.MASK = null
|
||||
if(src.OCCUPANT)
|
||||
src.eject_occupant(OCCUPANT)
|
||||
islocked = 0 //locks go free
|
||||
if(SUIT)
|
||||
SUIT.loc = src.loc
|
||||
SUIT = null
|
||||
if(HELMET)
|
||||
HELMET.loc = src.loc
|
||||
HELMET = null
|
||||
if(MASK)
|
||||
MASK.loc = src.loc
|
||||
MASK = null
|
||||
if(OCCUPANT)
|
||||
eject_occupant(OCCUPANT)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/proc/toggle_open(mob/user as mob)
|
||||
if(src.islocked || src.isUV)
|
||||
if(islocked || isUV)
|
||||
user << "<font color='red'>Unable to open unit.</font>"
|
||||
return
|
||||
if(src.OCCUPANT)
|
||||
src.eject_occupant(user)
|
||||
if(OCCUPANT)
|
||||
eject_occupant(user)
|
||||
return // eject_occupant opens the door, so we need to return
|
||||
src.isopen = !src.isopen
|
||||
isopen = !isopen
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/proc/toggle_lock(mob/user as mob)
|
||||
if(src.OCCUPANT && src.safetieson)
|
||||
if(OCCUPANT && safetieson)
|
||||
user << "<font color='red'>The Unit's safety protocols disallow locking when a biological form is detected inside its compartments.</font>"
|
||||
return
|
||||
if(src.isopen)
|
||||
if(isopen)
|
||||
return
|
||||
src.islocked = !src.islocked
|
||||
islocked = !islocked
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/proc/start_UV(mob/user as mob)
|
||||
if(src.isUV || src.isopen) //I'm bored of all these sanity checks
|
||||
if(isUV || isopen) //I'm bored of all these sanity checks
|
||||
return
|
||||
if(src.OCCUPANT && src.safetieson)
|
||||
if(OCCUPANT && safetieson)
|
||||
user << "<font color='red'><B>WARNING:</B> Biological entity detected in the confines of the Unit's storage. Cannot initiate cycle.</font>"
|
||||
return
|
||||
if(!src.HELMET && !src.MASK && !src.SUIT && !src.OCCUPANT ) //shit's empty yo
|
||||
if(!HELMET && !MASK && !SUIT && !OCCUPANT) //shit's empty yo
|
||||
user << "<font color='red'>Unit storage bays empty. Nothing to disinfect -- Aborting.</font>"
|
||||
return
|
||||
user << "You start the Unit's cauterisation cycle."
|
||||
src.cycletime_left = 20
|
||||
src.isUV = 1
|
||||
if(src.OCCUPANT && !src.islocked)
|
||||
src.islocked = 1 //Let's lock it for good measure
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
cycletime_left = 20
|
||||
isUV = 1
|
||||
if(OCCUPANT && !islocked)
|
||||
islocked = 1 //Let's lock it for good measure
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
|
||||
var/i //our counter
|
||||
for(i=0,i<4,i++)
|
||||
sleep(50)
|
||||
if(src.OCCUPANT)
|
||||
if(OCCUPANT)
|
||||
OCCUPANT.apply_effect(50, IRRADIATE)
|
||||
var/obj/item/organ/internal/diona/nutrients/rad_organ = locate() in OCCUPANT.internal_organs
|
||||
if (!rad_organ)
|
||||
if (OCCUPANT.can_feel_pain())
|
||||
if(!rad_organ)
|
||||
if(OCCUPANT.can_feel_pain())
|
||||
OCCUPANT.emote("scream")
|
||||
if(src.issuperUV)
|
||||
if(issuperUV)
|
||||
var/burndamage = rand(28,35)
|
||||
OCCUPANT.take_organ_damage(0,burndamage)
|
||||
else
|
||||
var/burndamage = rand(6,10)
|
||||
OCCUPANT.take_organ_damage(0,burndamage)
|
||||
if(i==3) //End of the cycle
|
||||
if(!src.issuperUV)
|
||||
if(src.HELMET)
|
||||
if(!issuperUV)
|
||||
if(HELMET)
|
||||
HELMET.clean_blood()
|
||||
if(src.SUIT)
|
||||
if(SUIT)
|
||||
SUIT.clean_blood()
|
||||
if(src.MASK)
|
||||
if(MASK)
|
||||
MASK.clean_blood()
|
||||
else //It was supercycling, destroy everything
|
||||
if(src.HELMET)
|
||||
src.HELMET = null
|
||||
if(src.SUIT)
|
||||
src.SUIT = null
|
||||
if(src.MASK)
|
||||
src.MASK = null
|
||||
if(HELMET)
|
||||
HELMET = null
|
||||
if(SUIT)
|
||||
SUIT = null
|
||||
if(MASK)
|
||||
MASK = null
|
||||
visible_message("<font color='red'>With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber.</font>", 3)
|
||||
src.isbroken = 1
|
||||
src.isopen = 1
|
||||
src.islocked = 0
|
||||
src.eject_occupant(OCCUPANT) //Mixing up these two lines causes bug. DO NOT DO IT.
|
||||
src.isUV = 0 //Cycle ends
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
isbroken = 1
|
||||
isopen = 1
|
||||
islocked = 0
|
||||
eject_occupant(OCCUPANT) //Mixing up these two lines causes bug. DO NOT DO IT.
|
||||
isUV = 0 //Cycle ends
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/* spawn(200) //Let's clean dat shit after 20 secs //Eh, this doesn't work
|
||||
if(src.HELMET)
|
||||
if(HELMET)
|
||||
HELMET.clean_blood()
|
||||
if(src.SUIT)
|
||||
if(SUIT)
|
||||
SUIT.clean_blood()
|
||||
if(src.MASK)
|
||||
if(MASK)
|
||||
MASK.clean_blood()
|
||||
src.isUV = 0 //Cycle ends
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
isUV = 0 //Cycle ends
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
|
||||
var/i
|
||||
for(i=0,i<4,i++) //Gradually give the guy inside some damaged based on the intensity
|
||||
spawn(50)
|
||||
if(src.OCCUPANT)
|
||||
if(src.issuperUV)
|
||||
if(OCCUPANT)
|
||||
if(issuperUV)
|
||||
OCCUPANT.take_organ_damage(0,40)
|
||||
user << "Test. You gave him 40 damage"
|
||||
else
|
||||
@@ -391,33 +386,33 @@
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/proc/cycletimeleft()
|
||||
if(src.cycletime_left >= 1)
|
||||
src.cycletime_left--
|
||||
return src.cycletime_left
|
||||
if(cycletime_left >= 1)
|
||||
cycletime_left--
|
||||
return cycletime_left
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/proc/eject_occupant(mob/user as mob)
|
||||
if (src.islocked)
|
||||
if(islocked)
|
||||
return
|
||||
|
||||
if (!src.OCCUPANT)
|
||||
if(!OCCUPANT)
|
||||
return
|
||||
// for(var/obj/O in src)
|
||||
// O.loc = src.loc
|
||||
|
||||
if (src.OCCUPANT.client)
|
||||
if(OCCUPANT.client)
|
||||
if(user != OCCUPANT)
|
||||
OCCUPANT << "<font color='blue'>The machine kicks you out!</font>"
|
||||
if(user.loc != src.loc)
|
||||
OCCUPANT << "<font color='blue'>You leave the not-so-cozy confines of the SSU.</font>"
|
||||
|
||||
src.OCCUPANT.client.eye = src.OCCUPANT.client.mob
|
||||
src.OCCUPANT.client.perspective = MOB_PERSPECTIVE
|
||||
src.OCCUPANT.loc = src.loc
|
||||
src.OCCUPANT = null
|
||||
if(!src.isopen)
|
||||
src.isopen = 1
|
||||
src.update_icon()
|
||||
OCCUPANT.client.eye = OCCUPANT.client.mob
|
||||
OCCUPANT.client.perspective = MOB_PERSPECTIVE
|
||||
OCCUPANT.loc = src.loc
|
||||
OCCUPANT = null
|
||||
if(!isopen)
|
||||
isopen = 1
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
@@ -426,12 +421,12 @@
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if (usr.stat != 0)
|
||||
if(usr.stat != 0)
|
||||
return
|
||||
src.eject_occupant(usr)
|
||||
eject_occupant(usr)
|
||||
add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
src.update_icon()
|
||||
updateUsrDialog()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
@@ -440,15 +435,15 @@
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if (usr.stat != 0)
|
||||
if(usr.stat != 0)
|
||||
return
|
||||
if (!src.isopen)
|
||||
if(!isopen)
|
||||
usr << "<font color='red'>The unit's doors are shut.</font>"
|
||||
return
|
||||
if (!src.ispowered || src.isbroken)
|
||||
if(!ispowered || isbroken)
|
||||
usr << "<font color='red'>The unit is not operational.</font>"
|
||||
return
|
||||
if ( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) )
|
||||
if((OCCUPANT) || (HELMET) || (SUIT))
|
||||
usr << "<font color='red'>It's too cluttered inside for you to fit in!</font>"
|
||||
return
|
||||
visible_message("[usr] starts squeezing into the suit storage unit!", 3)
|
||||
@@ -458,111 +453,111 @@
|
||||
usr.client.eye = src
|
||||
usr.loc = src
|
||||
// usr.metabslow = 1
|
||||
src.OCCUPANT = usr
|
||||
src.isopen = 0 //Close the thing after the guy gets inside
|
||||
src.update_icon()
|
||||
OCCUPANT = usr
|
||||
isopen = 0 //Close the thing after the guy gets inside
|
||||
update_icon()
|
||||
|
||||
// for(var/obj/O in src)
|
||||
// qdel(O)
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
add_fingerprint(usr)
|
||||
updateUsrDialog()
|
||||
return
|
||||
else
|
||||
src.OCCUPANT = null //Testing this as a backup sanity test
|
||||
OCCUPANT = null //Testing this as a backup sanity test
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(!src.ispowered)
|
||||
if(!ispowered)
|
||||
return
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
src.panelopen = !src.panelopen
|
||||
panelopen = !panelopen
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
||||
user << text("<font color='blue'>You [] the unit's maintenance panel.</font>",(src.panelopen ? "open up" : "close") )
|
||||
src.updateUsrDialog()
|
||||
user << text("<font color='blue'>You [] the unit's maintenance panel.</font>",(panelopen ? "open up" : "close"))
|
||||
updateUsrDialog()
|
||||
return
|
||||
if ( istype(I, /obj/item/weapon/grab) )
|
||||
if(istype(I, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = I
|
||||
if( !(ismob(G.affecting)) )
|
||||
if(!(ismob(G.affecting)))
|
||||
return
|
||||
if (!src.isopen)
|
||||
if(!isopen)
|
||||
usr << "<font color='red'>The unit's doors are shut.</font>"
|
||||
return
|
||||
if (!src.ispowered || src.isbroken)
|
||||
if(!ispowered || isbroken)
|
||||
usr << "<font color='red'>The unit is not operational.</font>"
|
||||
return
|
||||
if ( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) ) //Unit needs to be absolutely empty
|
||||
if((OCCUPANT) || (HELMET) || (SUIT)) //Unit needs to be absolutely empty
|
||||
user << "<font color='red'>The unit's storage area is too cluttered.</font>"
|
||||
return
|
||||
visible_message("[user] starts putting [G.affecting.name] into the Suit Storage Unit.", 3)
|
||||
if(do_after(user, 20))
|
||||
if(!G || !G.affecting) return //derpcheck
|
||||
var/mob/M = G.affecting
|
||||
if (M.client)
|
||||
if(M.client)
|
||||
M.client.perspective = EYE_PERSPECTIVE
|
||||
M.client.eye = src
|
||||
M.loc = src
|
||||
src.OCCUPANT = M
|
||||
src.isopen = 0 //close ittt
|
||||
OCCUPANT = M
|
||||
isopen = 0 //close ittt
|
||||
|
||||
//for(var/obj/O in src)
|
||||
// O.loc = src.loc
|
||||
src.add_fingerprint(user)
|
||||
add_fingerprint(user)
|
||||
qdel(G)
|
||||
src.updateUsrDialog()
|
||||
src.update_icon()
|
||||
updateUsrDialog()
|
||||
update_icon()
|
||||
return
|
||||
return
|
||||
if( istype(I,/obj/item/clothing/suit/space) )
|
||||
if(!src.isopen)
|
||||
if(istype(I,/obj/item/clothing/suit/space))
|
||||
if(!isopen)
|
||||
return
|
||||
var/obj/item/clothing/suit/space/S = I
|
||||
if(src.SUIT)
|
||||
if(SUIT)
|
||||
user << "<font color='blue'>The unit already contains a suit.</font>"
|
||||
return
|
||||
user << "You load the [S.name] into the storage compartment."
|
||||
user.drop_item()
|
||||
S.loc = src
|
||||
src.SUIT = S
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
SUIT = S
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
return
|
||||
if( istype(I,/obj/item/clothing/head/helmet) )
|
||||
if(!src.isopen)
|
||||
if(istype(I,/obj/item/clothing/head/helmet))
|
||||
if(!isopen)
|
||||
return
|
||||
var/obj/item/clothing/head/helmet/H = I
|
||||
if(src.HELMET)
|
||||
if(HELMET)
|
||||
user << "<font color='blue'>The unit already contains a helmet.</font>"
|
||||
return
|
||||
user << "You load the [H.name] into the storage compartment."
|
||||
user.drop_item()
|
||||
H.loc = src
|
||||
src.HELMET = H
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
HELMET = H
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
return
|
||||
if( istype(I,/obj/item/clothing/mask) )
|
||||
if(!src.isopen)
|
||||
if(istype(I,/obj/item/clothing/mask))
|
||||
if(!isopen)
|
||||
return
|
||||
var/obj/item/clothing/mask/M = I
|
||||
if(src.MASK)
|
||||
if(MASK)
|
||||
user << "<font color='blue'>The unit already contains a mask.</font>"
|
||||
return
|
||||
user << "You load the [M.name] into the storage compartment."
|
||||
user.drop_item()
|
||||
M.loc = src
|
||||
src.MASK = M
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
MASK = M
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
return
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
return attack_hand(user)
|
||||
|
||||
//////////////////////////////REMINDER: Make it lock once you place some fucker inside.
|
||||
|
||||
@@ -649,12 +644,12 @@
|
||||
can_repair = 1
|
||||
|
||||
/obj/machinery/suit_cycler/attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/suit_cycler/attackby(obj/item/I as obj, mob/user as mob)
|
||||
|
||||
if(electrified != 0)
|
||||
if(src.shock(user, 100))
|
||||
if(shock(user, 100))
|
||||
return
|
||||
|
||||
//Hacking init.
|
||||
@@ -673,7 +668,7 @@
|
||||
user << "<span class='danger'>The suit cycler is locked.</span>"
|
||||
return
|
||||
|
||||
if(src.contents.len > 0)
|
||||
if(contents.len > 0)
|
||||
user << "<span class='danger'>There is no room inside the cycler for [G.affecting.name].</span>"
|
||||
return
|
||||
|
||||
@@ -682,23 +677,23 @@
|
||||
if(do_after(user, 20))
|
||||
if(!G || !G.affecting) return
|
||||
var/mob/M = G.affecting
|
||||
if (M.client)
|
||||
if(M.client)
|
||||
M.client.perspective = EYE_PERSPECTIVE
|
||||
M.client.eye = src
|
||||
M.loc = src
|
||||
src.occupant = M
|
||||
occupant = M
|
||||
|
||||
src.add_fingerprint(user)
|
||||
add_fingerprint(user)
|
||||
qdel(G)
|
||||
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
|
||||
return
|
||||
else if(istype(I,/obj/item/weapon/screwdriver))
|
||||
|
||||
panel_open = !panel_open
|
||||
user << "You [panel_open ? "open" : "close"] the maintenance panel."
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
else if(istype(I,/obj/item/clothing/head/helmet/space) && !istype(I, /obj/item/clothing/head/helmet/space/rig))
|
||||
@@ -720,8 +715,8 @@
|
||||
I.loc = src
|
||||
helmet = I
|
||||
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
else if(istype(I,/obj/item/clothing/suit/space/void))
|
||||
@@ -743,8 +738,8 @@
|
||||
I.loc = src
|
||||
suit = I
|
||||
|
||||
src.update_icon()
|
||||
src.updateUsrDialog()
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
..()
|
||||
@@ -762,7 +757,7 @@
|
||||
emagged = 1
|
||||
safeties = 0
|
||||
req_access = list()
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
return 1
|
||||
|
||||
/obj/machinery/suit_cycler/attack_hand(mob/user as mob)
|
||||
@@ -776,19 +771,19 @@
|
||||
return 0
|
||||
|
||||
if(electrified != 0)
|
||||
if(src.shock(user, 100))
|
||||
if(shock(user, 100))
|
||||
return
|
||||
|
||||
usr.set_machine(src)
|
||||
|
||||
var/dat = "<HEAD><TITLE>Suit Cycler Interface</TITLE></HEAD>"
|
||||
|
||||
if(src.active)
|
||||
if(active)
|
||||
dat+= "<br><font color='red'><B>The [model_text ? "[model_text] " : ""]suit cycler is currently in use. Please wait...</b></font>"
|
||||
|
||||
else if(locked)
|
||||
dat += "<br><font color='red'><B>The [model_text ? "[model_text] " : ""]suit cycler is currently locked. Please contact your system administrator.</b></font>"
|
||||
if(src.allowed(usr))
|
||||
if(allowed(usr))
|
||||
dat += "<br><a href='?src=\ref[src];toggle_lock=1'>\[unlock unit\]</a>"
|
||||
else
|
||||
dat += "<h1>Suit cycler</h1>"
|
||||
@@ -857,7 +852,7 @@
|
||||
|
||||
else if(href_list["toggle_lock"])
|
||||
|
||||
if(src.allowed(usr))
|
||||
if(allowed(usr))
|
||||
locked = !locked
|
||||
usr << "You [locked ? "" : "un"]lock \the [src]."
|
||||
else
|
||||
@@ -871,7 +866,7 @@
|
||||
|
||||
active = 1
|
||||
irradiating = 10
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
|
||||
sleep(10)
|
||||
|
||||
@@ -887,7 +882,7 @@
|
||||
if(radiation_level > 1)
|
||||
suit.clean_blood()
|
||||
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/suit_cycler/process()
|
||||
@@ -924,7 +919,7 @@
|
||||
T.visible_message("\icon[src]<span class='notice'>The [src] pings loudly.</span>")
|
||||
icon_state = initial(icon_state)
|
||||
active = 0
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/suit_cycler/proc/repair_suit()
|
||||
if(!suit || !suit.damage || !suit.can_breach)
|
||||
@@ -940,7 +935,7 @@
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if (usr.stat != 0)
|
||||
if(usr.stat != 0)
|
||||
return
|
||||
|
||||
eject_occupant(usr)
|
||||
@@ -951,10 +946,10 @@
|
||||
user << "<span class='warning'>The cycler is locked.</span>"
|
||||
return
|
||||
|
||||
if (!occupant)
|
||||
if(!occupant)
|
||||
return
|
||||
|
||||
if (occupant.client)
|
||||
if(occupant.client)
|
||||
occupant.client.eye = occupant.client.mob
|
||||
occupant.client.perspective = MOB_PERSPECTIVE
|
||||
|
||||
@@ -962,8 +957,8 @@
|
||||
occupant = null
|
||||
|
||||
add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
src.update_icon()
|
||||
updateUsrDialog()
|
||||
update_icon()
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
message2 = ""
|
||||
|
||||
var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
|
||||
if (!shuttle)
|
||||
if(!shuttle)
|
||||
message2 = "Error"
|
||||
else if(shuttle.has_arrive_time())
|
||||
message2 = get_supply_shuttle_timer()
|
||||
if(lentext(message2) > CHARS_PER_LINE)
|
||||
message2 = "Error"
|
||||
else if (shuttle.is_launching())
|
||||
if (shuttle.at_station())
|
||||
else if(shuttle.is_launching())
|
||||
if(shuttle.at_station())
|
||||
message2 = "Launch"
|
||||
else
|
||||
message2 = "ETA"
|
||||
|
||||
@@ -111,9 +111,9 @@
|
||||
target_drop_time = world.time + drop_delay
|
||||
else if(world.time >= target_drop_time)
|
||||
deactivate(permanent = 1)
|
||||
var/drop_x = src.x-2
|
||||
var/drop_y = src.y-2
|
||||
var/drop_x = src.x - 2
|
||||
var/drop_y = src.y - 2
|
||||
var/drop_z = src.z
|
||||
command_announcement.Announce(starsys_name+" Rapid Fabrication priority supply request #[rand(1000,9999)]-[rand(100,999)] recieved. Shipment dispatched via ballistic supply pod for immediate delivery. Have a nice day.", "Thank You For Your Patronage")
|
||||
spawn(rand(100,300))
|
||||
spawn(rand(100, 300))
|
||||
new /datum/random_map/droppod/supply(null, drop_x, drop_y, drop_z, supplied_drop = drop_type) // Splat.
|
||||
|
||||
@@ -5,16 +5,13 @@
|
||||
// If he accepts there is a random chance he will be accepted, rejected, or rejected and killed
|
||||
// Bringing certain items can help improve the chance to become a traitor
|
||||
|
||||
|
||||
/obj/machinery/syndicate_beacon
|
||||
name = "ominous beacon"
|
||||
desc = "This looks suspicious..."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "syndbeacon"
|
||||
|
||||
anchored = 1
|
||||
density = 1
|
||||
|
||||
var/temptext = ""
|
||||
var/selfdestructing = 0
|
||||
var/charges = 1
|
||||
@@ -43,18 +40,18 @@
|
||||
return
|
||||
if(href_list["betraitor"])
|
||||
if(charges < 1)
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
return
|
||||
var/mob/M = locate(href_list["traitormob"])
|
||||
if(M.mind.special_role || jobban_isbanned(M, "Syndicate"))
|
||||
temptext = "<i>We have no need for you at this time. Have a pleasant day.</i><br>"
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
return
|
||||
charges -= 1
|
||||
switch(rand(1,2))
|
||||
if(1)
|
||||
temptext = "<font color=red><i><b>Double-crosser. You planned to betray us from the start. Allow us to repay the favor in kind.</b></i></font>"
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
spawn(rand(50,200)) selfdestruct()
|
||||
return
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
@@ -64,11 +61,9 @@
|
||||
traitors.equip(N)
|
||||
message_admins("[N]/([N.ckey]) has accepted a traitor objective from a syndicate beacon.")
|
||||
|
||||
|
||||
src.updateUsrDialog()
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/syndicate_beacon/proc/selfdestruct()
|
||||
selfdestructing = 1
|
||||
spawn() explosion(src.loc, 1, rand(1,3), rand(3,8), 10)
|
||||
@@ -90,7 +85,6 @@
|
||||
var/active = 0
|
||||
var/icontype = "beacon"
|
||||
|
||||
|
||||
/obj/machinery/power/singularity_beacon/proc/Activate(mob/user = null)
|
||||
if(surplus() < 1500)
|
||||
if(user) user << "<span class='notice'>The connected wire doesn't have enough current.</span>"
|
||||
@@ -104,7 +98,6 @@
|
||||
if(user)
|
||||
user << "<span class='notice'>You activate the beacon.</span>"
|
||||
|
||||
|
||||
/obj/machinery/power/singularity_beacon/proc/Deactivate(mob/user = null)
|
||||
for(var/obj/singularity/singulo in world)
|
||||
if(singulo.target == src)
|
||||
@@ -114,11 +107,9 @@
|
||||
if(user)
|
||||
user << "<span class='notice'>You deactivate the beacon.</span>"
|
||||
|
||||
|
||||
/obj/machinery/power/singularity_beacon/attack_ai(mob/user as mob)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/singularity_beacon/attack_hand(var/mob/user as mob)
|
||||
if(anchored)
|
||||
return active ? Deactivate(user) : Activate(user)
|
||||
@@ -126,7 +117,6 @@
|
||||
user << "<span class='danger'>You need to screw the beacon to the floor first!</span>"
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/singularity_beacon/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/screwdriver))
|
||||
if(active)
|
||||
@@ -148,7 +138,6 @@
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/singularity_beacon/Destroy()
|
||||
if(active)
|
||||
Deactivate()
|
||||
@@ -162,7 +151,6 @@
|
||||
if(draw_power(1500) < 1500)
|
||||
Deactivate()
|
||||
|
||||
|
||||
/obj/machinery/power/singularity_beacon/syndicate
|
||||
icontype = "beaconsynd"
|
||||
icon_state = "beaconsynd0"
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
var/obj/item/locked = null
|
||||
var/id = null
|
||||
var/one_time_use = 0 //Used for one-time-use teleport cards (such as clown planet coordinates.)
|
||||
//Setting this to 1 will set src.locked to null after a player enters the portal and will not allow hand-teles to open portals to that location.
|
||||
//Setting this to 1 will set locked to null after a player enters the portal and will not allow hand-teles to open portals to that location.
|
||||
|
||||
/obj/machinery/computer/teleporter/New()
|
||||
src.id = "[rand(1000, 9999)]"
|
||||
id = "[rand(1000, 9999)]"
|
||||
..()
|
||||
underlays.Cut()
|
||||
underlays += image('icons/obj/stationobjs.dmi', icon_state = "telecomp-wires")
|
||||
@@ -36,7 +36,7 @@
|
||||
if(istype(I, /obj/item/weapon/card/data/))
|
||||
var/obj/item/weapon/card/data/C = I
|
||||
if(stat & (NOPOWER|BROKEN) & (C.function != "teleporter"))
|
||||
src.attack_hand()
|
||||
attack_hand()
|
||||
|
||||
var/obj/L = null
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
if(!L)
|
||||
L = locate("landmark*[C.data]") // use old stype
|
||||
|
||||
|
||||
if(istype(L, /obj/effect/landmark/) && istype(L.loc, /turf))
|
||||
usr << "You insert the coordinates into the machine."
|
||||
usr << "A message flashes across the screen reminding the traveller that the nuclear authentication disk is to remain on the station at all times."
|
||||
@@ -69,17 +68,17 @@
|
||||
else
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("<span class='notice'>Locked In</span>", 2)
|
||||
src.locked = L
|
||||
locked = L
|
||||
one_time_use = 1
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
add_fingerprint(usr)
|
||||
else
|
||||
..()
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/teleport/station/attack_ai()
|
||||
src.attack_hand()
|
||||
attack_hand()
|
||||
|
||||
/obj/machinery/computer/teleporter/attack_hand(user as mob)
|
||||
if(..()) return
|
||||
@@ -92,7 +91,7 @@
|
||||
|
||||
for(var/obj/item/device/radio/beacon/R in world)
|
||||
var/turf/T = get_turf(R)
|
||||
if (!T)
|
||||
if(!T)
|
||||
continue
|
||||
if(!(T.z in config.player_levels))
|
||||
continue
|
||||
@@ -104,12 +103,12 @@
|
||||
L[tmpname] = R
|
||||
|
||||
for (var/obj/item/weapon/implant/tracking/I in world)
|
||||
if (!I.implanted || !ismob(I.loc))
|
||||
if(!I.implanted || !ismob(I.loc))
|
||||
continue
|
||||
else
|
||||
var/mob/M = I.loc
|
||||
if (M.stat == 2)
|
||||
if (M.timeofdeath + 6000 < world.time)
|
||||
if(M.stat == 2)
|
||||
if(M.timeofdeath + 6000 < world.time)
|
||||
continue
|
||||
var/turf/T = get_turf(M)
|
||||
if(T) continue
|
||||
@@ -127,10 +126,10 @@
|
||||
if(get_dist(src, usr) > 1 && !issilicon(usr))
|
||||
return
|
||||
|
||||
src.locked = L[desc]
|
||||
locked = L[desc]
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("<span class='notice'>Locked In</span>", 2)
|
||||
src.add_fingerprint(usr)
|
||||
add_fingerprint(usr)
|
||||
return
|
||||
|
||||
/obj/machinery/computer/teleporter/verb/set_id(t as text)
|
||||
@@ -141,12 +140,12 @@
|
||||
|
||||
if(stat & (NOPOWER|BROKEN) || !istype(usr,/mob/living))
|
||||
return
|
||||
if (t)
|
||||
src.id = t
|
||||
if(t)
|
||||
id = t
|
||||
return
|
||||
|
||||
/proc/find_loc(obj/R as obj)
|
||||
if (!R) return null
|
||||
if(!R) return null
|
||||
var/turf/T = R.loc
|
||||
while(!istype(T, /turf))
|
||||
T = T.loc
|
||||
@@ -160,7 +159,6 @@
|
||||
anchored = 1.0
|
||||
var/lockeddown = 0
|
||||
|
||||
|
||||
/obj/machinery/teleport/hub
|
||||
name = "teleporter hub"
|
||||
desc = "It's the hub of a teleporting machine."
|
||||
@@ -173,13 +171,11 @@
|
||||
circuit = /obj/item/weapon/circuitboard/teleporter_hub
|
||||
var/obj/machinery/computer/teleporter/com
|
||||
|
||||
|
||||
/obj/machinery/teleport/hub/New()
|
||||
..()
|
||||
underlays.Cut()
|
||||
underlays += image('icons/obj/stationobjs.dmi', icon_state = "tele-wires")
|
||||
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
@@ -194,19 +190,19 @@
|
||||
|
||||
/obj/machinery/teleport/hub/Bumped(M as mob|obj)
|
||||
spawn()
|
||||
if (src.icon_state == "tele1")
|
||||
if(icon_state == "tele1")
|
||||
teleport(M)
|
||||
use_power(5000)
|
||||
return
|
||||
|
||||
/obj/machinery/teleport/hub/proc/teleport(atom/movable/M as mob|obj)
|
||||
if (!com)
|
||||
if(!com)
|
||||
return
|
||||
if (!com.locked)
|
||||
if(!com.locked)
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("<span class='warning'>Failure: Cannot authenticate locked on coordinates. Please reinstate coordinate matrix.</span>")
|
||||
return
|
||||
if (istype(M, /atom/movable))
|
||||
if(istype(M, /atom/movable))
|
||||
if(prob(5) && !accurate) //oh dear a problem, put em in deep space
|
||||
do_teleport(M, locate(rand((2*TRANSITIONEDGE), world.maxx - (2*TRANSITIONEDGE)), rand((2*TRANSITIONEDGE), world.maxy - (2*TRANSITIONEDGE)), 3), 2)
|
||||
else
|
||||
@@ -229,61 +225,60 @@
|
||||
if(istype(M, /obj/effect))
|
||||
qdel(M)
|
||||
return
|
||||
if (istype(M, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks get teleported --NeoFite
|
||||
if(istype(M, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks get teleported --NeoFite
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("<span class='danger'>The [] bounces off of the portal!</span>", M.name), 1)
|
||||
return
|
||||
if (istype(M, /mob/living))
|
||||
if(istype(M, /mob/living))
|
||||
var/mob/living/MM = M
|
||||
if(MM.check_contents_for(/obj/item/weapon/disk/nuclear))
|
||||
MM << "<span class='warning'>Something you are carrying seems to be unable to pass through the portal. Better drop it if you want to go through.</span>"
|
||||
return
|
||||
var/disky = 0
|
||||
for (var/atom/O in M.contents) //I'm pretty sure this accounts for the maximum amount of container in container stacking. --NeoFite
|
||||
if (istype(O, /obj/item/weapon/storage) || istype(O, /obj/item/weapon/gift))
|
||||
if(istype(O, /obj/item/weapon/storage) || istype(O, /obj/item/weapon/gift))
|
||||
for (var/obj/OO in O.contents)
|
||||
if (istype(OO, /obj/item/weapon/storage) || istype(OO, /obj/item/weapon/gift))
|
||||
if(istype(OO, /obj/item/weapon/storage) || istype(OO, /obj/item/weapon/gift))
|
||||
for (var/obj/OOO in OO.contents)
|
||||
if (istype(OOO, /obj/item/weapon/disk/nuclear))
|
||||
if(istype(OOO, /obj/item/weapon/disk/nuclear))
|
||||
disky = 1
|
||||
if (istype(OO, /obj/item/weapon/disk/nuclear))
|
||||
if(istype(OO, /obj/item/weapon/disk/nuclear))
|
||||
disky = 1
|
||||
if (istype(O, /obj/item/weapon/disk/nuclear))
|
||||
if(istype(O, /obj/item/weapon/disk/nuclear))
|
||||
disky = 1
|
||||
if (istype(O, /mob/living))
|
||||
if(istype(O, /mob/living))
|
||||
var/mob/living/MM = O
|
||||
if(MM.check_contents_for(/obj/item/weapon/disk/nuclear))
|
||||
disky = 1
|
||||
if (disky)
|
||||
if(disky)
|
||||
for(var/mob/P in viewers(M, null))
|
||||
P.show_message(text("<span class='danger'>The [] bounces off of the portal!</span>", M.name), 1)
|
||||
return
|
||||
|
||||
//Bags of Holding cause bluespace teleportation to go funky. --NeoFite
|
||||
if (istype(M, /mob/living))
|
||||
if(istype(M, /mob/living))
|
||||
var/mob/living/MM = M
|
||||
if(MM.check_contents_for(/obj/item/weapon/storage/backpack/holding))
|
||||
MM << "<span class='warning'>The Bluespace interface on your Bag of Holding interferes with the teleport!</span>"
|
||||
precision = rand(1,100)
|
||||
if (istype(M, /obj/item/weapon/storage/backpack/holding))
|
||||
if(istype(M, /obj/item/weapon/storage/backpack/holding))
|
||||
precision = rand(1,100)
|
||||
for (var/atom/O in M.contents) //I'm pretty sure this accounts for the maximum amount of container in container stacking. --NeoFite
|
||||
if (istype(O, /obj/item/weapon/storage) || istype(O, /obj/item/weapon/gift))
|
||||
if(istype(O, /obj/item/weapon/storage) || istype(O, /obj/item/weapon/gift))
|
||||
for (var/obj/OO in O.contents)
|
||||
if (istype(OO, /obj/item/weapon/storage) || istype(OO, /obj/item/weapon/gift))
|
||||
if(istype(OO, /obj/item/weapon/storage) || istype(OO, /obj/item/weapon/gift))
|
||||
for (var/obj/OOO in OO.contents)
|
||||
if (istype(OOO, /obj/item/weapon/storage/backpack/holding))
|
||||
if(istype(OOO, /obj/item/weapon/storage/backpack/holding))
|
||||
precision = rand(1,100)
|
||||
if (istype(OO, /obj/item/weapon/storage/backpack/holding))
|
||||
if(istype(OO, /obj/item/weapon/storage/backpack/holding))
|
||||
precision = rand(1,100)
|
||||
if (istype(O, /obj/item/weapon/storage/backpack/holding))
|
||||
if(istype(O, /obj/item/weapon/storage/backpack/holding))
|
||||
precision = rand(1,100)
|
||||
if (istype(O, /mob/living))
|
||||
if(istype(O, /mob/living))
|
||||
var/mob/living/MM = O
|
||||
if(MM.check_contents_for(/obj/item/weapon/storage/backpack/holding))
|
||||
precision = rand(1,100)
|
||||
|
||||
|
||||
var/turf/destturf = get_turf(destination)
|
||||
|
||||
var/tx = destturf.x + rand(precision * -1, precision)
|
||||
@@ -291,7 +286,7 @@
|
||||
|
||||
var/tmploc
|
||||
|
||||
if (ismob(destination.loc)) //If this is an implant.
|
||||
if(ismob(destination.loc)) //If this is an implant.
|
||||
tmploc = locate(tx, ty, destturf.z)
|
||||
else
|
||||
tmploc = locate(tx, ty, destination.z)
|
||||
@@ -329,7 +324,6 @@
|
||||
overlays.Cut()
|
||||
overlays += image('icons/obj/stationobjs.dmi', icon_state = "controller-wires")
|
||||
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
||||
@@ -338,45 +332,45 @@
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/teleport/station/attackby(var/obj/item/weapon/W)
|
||||
src.attack_hand()
|
||||
attack_hand()
|
||||
|
||||
/obj/machinery/teleport/station/attack_ai()
|
||||
src.attack_hand()
|
||||
attack_hand()
|
||||
|
||||
/obj/machinery/teleport/station/attack_hand()
|
||||
if(engaged)
|
||||
src.disengage()
|
||||
disengage()
|
||||
else
|
||||
src.engage()
|
||||
engage()
|
||||
|
||||
/obj/machinery/teleport/station/proc/engage()
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
if (com)
|
||||
if(com)
|
||||
com.icon_state = "tele1"
|
||||
use_power(5000)
|
||||
update_use_power(2)
|
||||
com.update_use_power(2)
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("<span class='notice'>Teleporter engaged!</span>", 2)
|
||||
src.add_fingerprint(usr)
|
||||
src.engaged = 1
|
||||
add_fingerprint(usr)
|
||||
engaged = 1
|
||||
return
|
||||
|
||||
/obj/machinery/teleport/station/proc/disengage()
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
if (com)
|
||||
if(com)
|
||||
com.icon_state = "tele0"
|
||||
com.accurate = 0
|
||||
com.update_use_power(1)
|
||||
update_use_power(1)
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("<span class='notice'>Teleporter disengaged!</span>", 2)
|
||||
src.add_fingerprint(usr)
|
||||
src.engaged = 0
|
||||
add_fingerprint(usr)
|
||||
engaged = 0
|
||||
return
|
||||
|
||||
/obj/machinery/teleport/station/verb/testfire()
|
||||
@@ -387,7 +381,7 @@
|
||||
if(stat & (BROKEN|NOPOWER) || !istype(usr,/mob/living))
|
||||
return
|
||||
|
||||
if (com && !active)
|
||||
if(com && !active)
|
||||
active = 1
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("<span class='notice'>Test firing!</span>", 2)
|
||||
@@ -397,7 +391,7 @@
|
||||
spawn(30)
|
||||
active=0
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
add_fingerprint(usr)
|
||||
return
|
||||
|
||||
/obj/machinery/teleport/station/power_change()
|
||||
@@ -412,11 +406,11 @@
|
||||
|
||||
|
||||
/obj/effect/laser/Bump()
|
||||
src.range--
|
||||
range--
|
||||
return
|
||||
|
||||
/obj/effect/laser/Move()
|
||||
src.range--
|
||||
range--
|
||||
return
|
||||
|
||||
/atom/proc/laserhit(L as obj)
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
|
||||
if(src.allowed(usr))
|
||||
if(allowed(usr))
|
||||
if(emagged)
|
||||
user << "<span class='notice'>The turret control is unresponsive.</span>"
|
||||
else
|
||||
@@ -133,7 +133,7 @@
|
||||
data["settings"] = settings
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "turret_control.tmpl", "Turret Controls", 500, 300)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
@@ -193,8 +193,8 @@
|
||||
if(stat & NOPOWER)
|
||||
icon_state = "control_off"
|
||||
set_light(0)
|
||||
else if (enabled)
|
||||
if (lethal)
|
||||
else if(enabled)
|
||||
if(lethal)
|
||||
icon_state = "control_kill"
|
||||
set_light(1.5, 1,"#990000")
|
||||
else
|
||||
|
||||
+112
-112
@@ -68,18 +68,18 @@
|
||||
..()
|
||||
wires = new(src)
|
||||
spawn(4)
|
||||
if(src.product_slogans)
|
||||
src.slogan_list += splittext(src.product_slogans, ";")
|
||||
if(product_slogans)
|
||||
slogan_list += splittext(product_slogans, ";")
|
||||
|
||||
// So not all machines speak at the exact same time.
|
||||
// The first time this machine says something will be at slogantime + this random value,
|
||||
// so if slogantime is 10 minutes, it will say it at somewhere between 10 and 20 minutes after the machine is crated.
|
||||
src.last_slogan = world.time + rand(0, slogan_delay)
|
||||
last_slogan = world.time + rand(0, slogan_delay)
|
||||
|
||||
if(src.product_ads)
|
||||
src.ads_list += splittext(src.product_ads, ";")
|
||||
if(product_ads)
|
||||
ads_list += splittext(product_ads, ";")
|
||||
|
||||
src.build_inventory()
|
||||
build_inventory()
|
||||
power_change()
|
||||
|
||||
return
|
||||
@@ -87,17 +87,17 @@
|
||||
return
|
||||
|
||||
/**
|
||||
* Build src.produdct_records from the products lists
|
||||
* Build produdct_records from the products lists
|
||||
*
|
||||
* src.products, src.contraband, src.premium, and src.prices allow specifying
|
||||
* products, contraband, premium, and prices allow specifying
|
||||
* products that the vending machine is to carry without manually populating
|
||||
* src.product_records.
|
||||
* product_records.
|
||||
*/
|
||||
/obj/machinery/vending/proc/build_inventory()
|
||||
var/list/all_products = list(
|
||||
list(src.products, CAT_NORMAL),
|
||||
list(src.contraband, CAT_HIDDEN),
|
||||
list(src.premium, CAT_COIN))
|
||||
list(products, CAT_NORMAL),
|
||||
list(contraband, CAT_HIDDEN),
|
||||
list(premium, CAT_COIN))
|
||||
|
||||
for(var/current_list in all_products)
|
||||
var/category = current_list[2]
|
||||
@@ -105,11 +105,11 @@
|
||||
for(var/entry in current_list[1])
|
||||
var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry)
|
||||
|
||||
product.price = (entry in src.prices) ? src.prices[entry] : 0
|
||||
product.price = (entry in prices) ? prices[entry] : 0
|
||||
product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1
|
||||
product.category = category
|
||||
|
||||
src.product_records.Add(product)
|
||||
product_records.Add(product)
|
||||
|
||||
/obj/machinery/vending/Destroy()
|
||||
qdel(wires)
|
||||
@@ -127,21 +127,21 @@
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(50))
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(25))
|
||||
if(prob(25))
|
||||
spawn(0)
|
||||
src.malfunction()
|
||||
malfunction()
|
||||
return
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/machinery/vending/emag_act(var/remaining_charges, var/mob/user)
|
||||
if (!emagged)
|
||||
src.emagged = 1
|
||||
if(!emagged)
|
||||
emagged = 1
|
||||
user << "You short out the product lock on \the [src]"
|
||||
return 1
|
||||
|
||||
@@ -149,43 +149,43 @@
|
||||
|
||||
var/obj/item/weapon/card/id/I = W.GetID()
|
||||
|
||||
if (currently_vending && vendor_account && !vendor_account.suspended)
|
||||
if(currently_vending && vendor_account && !vendor_account.suspended)
|
||||
var/paid = 0
|
||||
var/handled = 0
|
||||
|
||||
if (I) //for IDs and PDAs and wallets with IDs
|
||||
if(I) //for IDs and PDAs and wallets with IDs
|
||||
paid = pay_with_card(I,W)
|
||||
handled = 1
|
||||
else if (istype(W, /obj/item/weapon/spacecash/ewallet))
|
||||
else if(istype(W, /obj/item/weapon/spacecash/ewallet))
|
||||
var/obj/item/weapon/spacecash/ewallet/C = W
|
||||
paid = pay_with_ewallet(C)
|
||||
handled = 1
|
||||
else if (istype(W, /obj/item/weapon/spacecash))
|
||||
else if(istype(W, /obj/item/weapon/spacecash))
|
||||
var/obj/item/weapon/spacecash/C = W
|
||||
paid = pay_with_cash(C, user)
|
||||
handled = 1
|
||||
|
||||
if(paid)
|
||||
src.vend(currently_vending, usr)
|
||||
vend(currently_vending, usr)
|
||||
return
|
||||
else if(handled)
|
||||
nanomanager.update_uis(src)
|
||||
return // don't smack that machine with your 2 thalers
|
||||
|
||||
if (I || istype(W, /obj/item/weapon/spacecash))
|
||||
if(I || istype(W, /obj/item/weapon/spacecash))
|
||||
attack_hand(user)
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||
src.panel_open = !src.panel_open
|
||||
user << "You [src.panel_open ? "open" : "close"] the maintenance panel."
|
||||
src.overlays.Cut()
|
||||
if(src.panel_open)
|
||||
src.overlays += image(src.icon, "[initial(icon_state)]-panel")
|
||||
panel_open = !panel_open
|
||||
user << "You [panel_open ? "open" : "close"] the maintenance panel."
|
||||
overlays.Cut()
|
||||
if(panel_open)
|
||||
overlays += image(icon, "[initial(icon_state)]-panel")
|
||||
|
||||
nanomanager.update_uis(src) // Speaker switch is on the main UI, not wires UI
|
||||
return
|
||||
else if(istype(W, /obj/item/device/multitool)||istype(W, /obj/item/weapon/wirecutters))
|
||||
if(src.panel_open)
|
||||
if(panel_open)
|
||||
attack_hand(user)
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/coin) && premium.len > 0)
|
||||
@@ -197,7 +197,7 @@
|
||||
nanomanager.update_uis(src)
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 100, 1)
|
||||
if(anchored)
|
||||
user.visible_message("[user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
|
||||
else
|
||||
@@ -253,8 +253,8 @@
|
||||
/obj/machinery/vending/proc/pay_with_ewallet(var/obj/item/weapon/spacecash/ewallet/wallet)
|
||||
visible_message("<span class='info'>\The [usr] swipes \the [wallet] through \the [src].</span>")
|
||||
if(currently_vending.price > wallet.worth)
|
||||
src.status_message = "Insufficient funds on chargecard."
|
||||
src.status_error = 1
|
||||
status_message = "Insufficient funds on chargecard."
|
||||
status_error = 1
|
||||
return 0
|
||||
else
|
||||
wallet.worth -= currently_vending.price
|
||||
@@ -273,14 +273,14 @@
|
||||
else
|
||||
visible_message("<span class='info'>\The [usr] swipes \the [ID_container] through \the [src].</span>")
|
||||
var/datum/money_account/customer_account = get_account(I.associated_account_number)
|
||||
if (!customer_account)
|
||||
src.status_message = "Error: Unable to access account. Please contact technical support if problem persists."
|
||||
src.status_error = 1
|
||||
if(!customer_account)
|
||||
status_message = "Error: Unable to access account. Please contact technical support if problem persists."
|
||||
status_error = 1
|
||||
return 0
|
||||
|
||||
if(customer_account.suspended)
|
||||
src.status_message = "Unable to access account: account suspended."
|
||||
src.status_error = 1
|
||||
status_message = "Unable to access account: account suspended."
|
||||
status_error = 1
|
||||
return 0
|
||||
|
||||
// Have the customer punch in the PIN before checking if there's enough money. Prevents people from figuring out acct is
|
||||
@@ -290,13 +290,13 @@
|
||||
customer_account = attempt_account_access(I.associated_account_number, attempt_pin, 2)
|
||||
|
||||
if(!customer_account)
|
||||
src.status_message = "Unable to access account: incorrect credentials."
|
||||
src.status_error = 1
|
||||
status_message = "Unable to access account: incorrect credentials."
|
||||
status_error = 1
|
||||
return 0
|
||||
|
||||
if(currently_vending.price > customer_account.money)
|
||||
src.status_message = "Insufficient funds in account."
|
||||
src.status_error = 1
|
||||
status_message = "Insufficient funds in account."
|
||||
status_error = 1
|
||||
return 0
|
||||
else
|
||||
// Okay to move the money at this point
|
||||
@@ -306,13 +306,13 @@
|
||||
|
||||
// create entry in the purchaser's account log
|
||||
var/datum/transaction/T = new()
|
||||
T.target_name = "[vendor_account.owner_name] (via [src.name])"
|
||||
T.target_name = "[vendor_account.owner_name] (via [name])"
|
||||
T.purpose = "Purchase of [currently_vending.item_name]"
|
||||
if(currently_vending.price > 0)
|
||||
T.amount = "([currently_vending.price])"
|
||||
else
|
||||
T.amount = "[currently_vending.price]"
|
||||
T.source_terminal = src.name
|
||||
T.source_terminal = name
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
customer_account.transaction_log.Add(T)
|
||||
@@ -335,7 +335,7 @@
|
||||
T.target_name = target
|
||||
T.purpose = "Purchase of [currently_vending.item_name]"
|
||||
T.amount = "[currently_vending.price]"
|
||||
T.source_terminal = src.name
|
||||
T.source_terminal = name
|
||||
T.date = current_date_string
|
||||
T.time = worldtime2text()
|
||||
vendor_account.transaction_log.Add(T)
|
||||
@@ -347,8 +347,8 @@
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
if(src.seconds_electrified != 0)
|
||||
if(src.shock(user, 100))
|
||||
if(seconds_electrified != 0)
|
||||
if(shock(user, 100))
|
||||
return
|
||||
|
||||
wires.Interact(user)
|
||||
@@ -368,16 +368,16 @@
|
||||
data["product"] = currently_vending.item_name
|
||||
data["price"] = currently_vending.price
|
||||
data["message_err"] = 0
|
||||
data["message"] = src.status_message
|
||||
data["message_err"] = src.status_error
|
||||
data["message"] = status_message
|
||||
data["message_err"] = status_error
|
||||
else
|
||||
data["mode"] = 0
|
||||
var/list/listed_products = list()
|
||||
|
||||
for(var/key = 1 to src.product_records.len)
|
||||
var/datum/stored_item/vending_product/I = src.product_records[key]
|
||||
for(var/key = 1 to product_records.len)
|
||||
var/datum/stored_item/vending_product/I = product_records[key]
|
||||
|
||||
if(!(I.category & src.categories))
|
||||
if(!(I.category & categories))
|
||||
continue
|
||||
|
||||
listed_products.Add(list(list(
|
||||
@@ -389,18 +389,18 @@
|
||||
|
||||
data["products"] = listed_products
|
||||
|
||||
if(src.coin)
|
||||
data["coin"] = src.coin.name
|
||||
if(coin)
|
||||
data["coin"] = coin.name
|
||||
|
||||
if(src.panel_open)
|
||||
if(panel_open)
|
||||
data["panel"] = 1
|
||||
data["speaker"] = src.shut_up ? 0 : 1
|
||||
data["speaker"] = shut_up ? 0 : 1
|
||||
else
|
||||
data["panel"] = 0
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "vending_machine.tmpl", src.name, 440, 600)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "vending_machine.tmpl", name, 440, 600)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
|
||||
@@ -422,8 +422,8 @@
|
||||
coin = null
|
||||
categories &= ~CAT_COIN
|
||||
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||
if ((href_list["vend"]) && (src.vend_ready) && (!currently_vending))
|
||||
if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||
if((href_list["vend"]) && (vend_ready) && (!currently_vending))
|
||||
if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH
|
||||
usr << "<span class='warning'>Access denied.</span>" //Unless emagged of course
|
||||
flick(icon_deny,src)
|
||||
@@ -433,43 +433,43 @@
|
||||
var/datum/stored_item/vending_product/R = product_records[key]
|
||||
|
||||
// This should not happen unless the request from NanoUI was bad
|
||||
if(!(R.category & src.categories))
|
||||
if(!(R.category & categories))
|
||||
return
|
||||
|
||||
if(R.price <= 0)
|
||||
src.vend(R, usr)
|
||||
vend(R, usr)
|
||||
else if(istype(usr,/mob/living/silicon)) //If the item is not free, provide feedback if a synth is trying to buy something.
|
||||
usr << "<span class='danger'>Artificial unit recognized. Artificial units cannot complete this transaction. Purchase canceled.</span>"
|
||||
return
|
||||
else
|
||||
src.currently_vending = R
|
||||
currently_vending = R
|
||||
if(!vendor_account || vendor_account.suspended)
|
||||
src.status_message = "This machine is currently unable to process payments due to problems with the associated account."
|
||||
src.status_error = 1
|
||||
status_message = "This machine is currently unable to process payments due to problems with the associated account."
|
||||
status_error = 1
|
||||
else
|
||||
src.status_message = "Please swipe a card or insert cash to pay for the item."
|
||||
src.status_error = 0
|
||||
status_message = "Please swipe a card or insert cash to pay for the item."
|
||||
status_error = 0
|
||||
|
||||
else if (href_list["cancelpurchase"])
|
||||
src.currently_vending = null
|
||||
else if(href_list["cancelpurchase"])
|
||||
currently_vending = null
|
||||
|
||||
else if ((href_list["togglevoice"]) && (src.panel_open))
|
||||
src.shut_up = !src.shut_up
|
||||
else if((href_list["togglevoice"]) && (panel_open))
|
||||
shut_up = !shut_up
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
add_fingerprint(usr)
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
/obj/machinery/vending/proc/vend(datum/stored_item/vending_product/R, mob/user)
|
||||
if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH
|
||||
usr << "<span class='warning'>Access denied.</span>" //Unless emagged of course
|
||||
flick(src.icon_deny,src)
|
||||
flick(icon_deny,src)
|
||||
return
|
||||
src.vend_ready = 0 //One thing at a time!!
|
||||
src.status_message = "Vending..."
|
||||
src.status_error = 0
|
||||
vend_ready = 0 //One thing at a time!!
|
||||
status_message = "Vending..."
|
||||
status_error = 0
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
if (R.category & CAT_COIN)
|
||||
if(R.category & CAT_COIN)
|
||||
if(!coin)
|
||||
user << "<span class='notice'>You need to insert a coin to get this item.</span>"
|
||||
return
|
||||
@@ -486,24 +486,24 @@
|
||||
coin = null
|
||||
categories &= ~CAT_COIN
|
||||
|
||||
if(((src.last_reply + (src.vend_delay + 200)) <= world.time) && src.vend_reply)
|
||||
if(((last_reply + (vend_delay + 200)) <= world.time) && vend_reply)
|
||||
spawn(0)
|
||||
src.speak(src.vend_reply)
|
||||
src.last_reply = world.time
|
||||
speak(vend_reply)
|
||||
last_reply = world.time
|
||||
|
||||
use_power(vend_power_usage) //actuators and stuff
|
||||
if (src.icon_vend) //Show the vending animation if needed
|
||||
flick(src.icon_vend,src)
|
||||
spawn(src.vend_delay)
|
||||
if(icon_vend) //Show the vending animation if needed
|
||||
flick(icon_vend,src)
|
||||
spawn(vend_delay)
|
||||
R.get_product(get_turf(src))
|
||||
if(prob(1))
|
||||
sleep(3)
|
||||
if(R.get_product(get_turf(src)))
|
||||
src.visible_message("<span class='notice'>\The [src] clunks as it vends an additional item.</span>")
|
||||
visible_message("<span class='notice'>\The [src] clunks as it vends an additional item.</span>")
|
||||
|
||||
src.status_message = ""
|
||||
src.status_error = 0
|
||||
src.vend_ready = 1
|
||||
status_message = ""
|
||||
status_error = 0
|
||||
vend_ready = 1
|
||||
currently_vending = null
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
@@ -527,20 +527,20 @@
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
if(!src.active)
|
||||
if(!active)
|
||||
return
|
||||
|
||||
if(src.seconds_electrified > 0)
|
||||
src.seconds_electrified--
|
||||
if(seconds_electrified > 0)
|
||||
seconds_electrified--
|
||||
|
||||
//Pitch to the people! Really sell it!
|
||||
if(((src.last_slogan + src.slogan_delay) <= world.time) && (src.slogan_list.len > 0) && (!src.shut_up) && prob(5))
|
||||
var/slogan = pick(src.slogan_list)
|
||||
src.speak(slogan)
|
||||
src.last_slogan = world.time
|
||||
if(((last_slogan + slogan_delay) <= world.time) && (slogan_list.len > 0) && (!shut_up) && prob(5))
|
||||
var/slogan = pick(slogan_list)
|
||||
speak(slogan)
|
||||
last_slogan = world.time
|
||||
|
||||
if(src.shoot_inventory && prob(2))
|
||||
src.throw_item()
|
||||
if(shoot_inventory && prob(2))
|
||||
throw_item()
|
||||
|
||||
return
|
||||
|
||||
@@ -548,7 +548,7 @@
|
||||
if(stat & NOPOWER)
|
||||
return
|
||||
|
||||
if (!message)
|
||||
if(!message)
|
||||
return
|
||||
|
||||
for(var/mob/O in hearers(src, null))
|
||||
@@ -560,21 +560,21 @@
|
||||
if(stat & BROKEN)
|
||||
icon_state = "[initial(icon_state)]-broken"
|
||||
else
|
||||
if( !(stat & NOPOWER) )
|
||||
if(!(stat & NOPOWER))
|
||||
icon_state = initial(icon_state)
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
src.icon_state = "[initial(icon_state)]-off"
|
||||
icon_state = "[initial(icon_state)]-off"
|
||||
|
||||
//Oh no we're malfunctioning! Dump out some product and break.
|
||||
/obj/machinery/vending/proc/malfunction()
|
||||
for(var/datum/stored_item/vending_product/R in src.product_records)
|
||||
for(var/datum/stored_item/vending_product/R in product_records)
|
||||
while(R.get_amount()>0)
|
||||
R.get_product(loc)
|
||||
break
|
||||
|
||||
stat |= BROKEN
|
||||
src.icon_state = "[initial(icon_state)]-broken"
|
||||
icon_state = "[initial(icon_state)]-broken"
|
||||
return
|
||||
|
||||
//Somebody cut an important wire and now we're following a new definition of "pitch."
|
||||
@@ -584,16 +584,16 @@
|
||||
if(!target)
|
||||
return 0
|
||||
|
||||
for(var/datum/stored_item/vending_product/R in src.product_records)
|
||||
for(var/datum/stored_item/vending_product/R in product_records)
|
||||
throw_item = R.get_product(loc)
|
||||
if (!throw_item)
|
||||
if(!throw_item)
|
||||
continue
|
||||
break
|
||||
if (!throw_item)
|
||||
if(!throw_item)
|
||||
return 0
|
||||
spawn(0)
|
||||
throw_item.throw_at(target, 16, 3, src)
|
||||
src.visible_message("<span class='warning'>\The [src] launches \a [throw_item] at \the [target]!</span>")
|
||||
visible_message("<span class='warning'>\The [src] launches \a [throw_item] at \the [target]!</span>")
|
||||
return 1
|
||||
|
||||
/*
|
||||
@@ -885,9 +885,9 @@
|
||||
*/
|
||||
/obj/machinery/vending/hydroseeds/build_inventory()
|
||||
var/list/all_products = list(
|
||||
list(src.products, CAT_NORMAL),
|
||||
list(src.contraband, CAT_HIDDEN),
|
||||
list(src.premium, CAT_COIN))
|
||||
list(products, CAT_NORMAL),
|
||||
list(contraband, CAT_HIDDEN),
|
||||
list(premium, CAT_COIN))
|
||||
|
||||
for(var/current_list in all_products)
|
||||
var/category = current_list[2]
|
||||
@@ -897,11 +897,11 @@
|
||||
var/name = S.name
|
||||
var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry, name)
|
||||
|
||||
product.price = (entry in src.prices) ? src.prices[entry] : 0
|
||||
product.price = (entry in prices) ? prices[entry] : 0
|
||||
product.amount = (current_list[1][entry]) ? current_list[1][entry] : 1
|
||||
product.category = category
|
||||
|
||||
src.product_records.Add(product)
|
||||
product_records.Add(product)
|
||||
|
||||
/obj/machinery/vending/magivend
|
||||
name = "MagiVend"
|
||||
@@ -961,7 +961,7 @@
|
||||
/obj/item/weapon/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/screwdriver = 5,
|
||||
/obj/item/device/flashlight/glowstick = 3, /obj/item/device/flashlight/glowstick/red = 3, /obj/item/device/flashlight/glowstick/blue = 3,
|
||||
/obj/item/device/flashlight/glowstick/orange =3, /obj/item/device/flashlight/glowstick/yellow = 3)
|
||||
contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/fyellow = 2, )
|
||||
contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/fyellow = 2,)
|
||||
premium = list(/obj/item/clothing/gloves/yellow = 1)
|
||||
|
||||
/obj/machinery/vending/engivend
|
||||
|
||||
@@ -4,136 +4,96 @@
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
icon_state = "frame_bitem"
|
||||
flags = CONDUCT
|
||||
var/build_machine_type = /obj/structure/frame
|
||||
var/build_machine_type
|
||||
var/refund_amt = 5
|
||||
var/refund_type = /obj/item/stack/material/steel
|
||||
var/reverse = 0 //if resulting object faces opposite its dir (like light fixtures)
|
||||
var/frame_type = null
|
||||
var/list/frame_types_floor
|
||||
var/list/frame_types_wall
|
||||
|
||||
/obj/item/frame/proc/update_type_list()
|
||||
if(!frame_types_floor)
|
||||
frame_types_floor = construction_frame_floor
|
||||
if(!frame_types_wall)
|
||||
frame_types_wall = construction_frame_wall
|
||||
|
||||
/obj/item/frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/wrench))
|
||||
new refund_type( get_turf(src.loc), refund_amt)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
new refund_type(get_turf(src.loc), refund_amt)
|
||||
qdel(src)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/frame/attack_self(mob/user as mob)
|
||||
..()
|
||||
update_type_list()
|
||||
var/datum/frame/frame_types/frame_type
|
||||
if(!build_machine_type)
|
||||
return
|
||||
|
||||
if(!frame_type)
|
||||
var/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in list("Computer", "Machine", "Holopad", "Conveyor",
|
||||
"Photocopier", "Fax", "Microwave",
|
||||
"Recharger", "Washing Machine", "Grinder",
|
||||
"Medical Console", "Medical Pod", "DNA Analyzer",
|
||||
"Mass Driver",
|
||||
"Cancel")
|
||||
|
||||
if(response == "Cancel")
|
||||
var/datum/frame/frame_types/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in frame_types_floor
|
||||
if(!response || response.name == "Cancel")
|
||||
return
|
||||
frame_type = response
|
||||
|
||||
frame_type = lowertext(response)
|
||||
build_machine_type = /obj/structure/frame
|
||||
|
||||
switch(response)
|
||||
if("Holopad")
|
||||
new /obj/item/stack/material/steel( usr.loc, 1 ) //holopads are smaller, they only need 4 sheets
|
||||
if("Fax")
|
||||
new /obj/item/stack/material/steel( usr.loc, 2 ) //faxes are smaller, they only need 3 sheets
|
||||
if("Microwave")
|
||||
new /obj/item/stack/material/steel( usr.loc, 1 ) //microwaves are smaller, they only need 4 sheets
|
||||
if("Recharger")
|
||||
new /obj/item/stack/material/steel( usr.loc, 2 ) //rechargers are smaller, they only need 3 sheets
|
||||
if("Washing Machine")
|
||||
frame_type = "washing"
|
||||
if("Grinder")
|
||||
new /obj/item/stack/material/steel( usr.loc, 2 ) //grinders are smaller, they only need 3 sheets
|
||||
if("Medical Console")
|
||||
frame_type = "console"
|
||||
if("Medical Pod")
|
||||
frame_type = "medpod"
|
||||
if("DNA Analyzer")
|
||||
frame_type = "dna_analyzer"
|
||||
if("Mass Driver")
|
||||
frame_type = "massdriver"
|
||||
if(frame_type.frame_size != 5)
|
||||
new /obj/item/stack/material/steel(usr.loc, (5 - frame_type.frame_size))
|
||||
|
||||
var/ndir
|
||||
ndir = usr.dir
|
||||
if (!(ndir in cardinal))
|
||||
if(!(ndir in cardinal))
|
||||
return
|
||||
|
||||
var/obj/machinery/M = new build_machine_type(get_turf(src.loc), ndir, 1, frame_type)
|
||||
M.fingerprints = src.fingerprints
|
||||
M.fingerprintshidden = src.fingerprintshidden
|
||||
M.fingerprintslast = src.fingerprintslast
|
||||
M.fingerprints = fingerprints
|
||||
M.fingerprintshidden = fingerprintshidden
|
||||
M.fingerprintslast = fingerprintslast
|
||||
qdel(src)
|
||||
|
||||
/obj/item/frame/proc/try_build(turf/on_wall, mob/user as mob)
|
||||
if(!frame_type)
|
||||
var/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in list("Fire Alarm", "Air Alarm", "Display", "Newscaster",
|
||||
"ATM", "Guest Pass Console", "Intercom", "Keycard Authenticator",
|
||||
"Wall Charger", "Supply Request Console",
|
||||
"Cancel")
|
||||
|
||||
if(response == "Cancel")
|
||||
return
|
||||
|
||||
frame_type = lowertext(response)
|
||||
|
||||
switch(response)
|
||||
if("Fire Alarm")
|
||||
frame_type = "firealarm"
|
||||
new /obj/item/stack/material/steel( usr.loc, 3 ) //fire alarms are smaller, they only need 2 sheets
|
||||
if("Air Alarm")
|
||||
frame_type = "airalarm"
|
||||
new /obj/item/stack/material/steel( usr.loc, 3 ) //air alarms are smaller, they only need 2 sheets
|
||||
if("Intercom")
|
||||
new /obj/item/stack/material/steel( usr.loc, 3 ) //intercoms are smaller, they only need 2 sheets
|
||||
if("Newscaster")
|
||||
new /obj/item/stack/material/steel( usr.loc, 2 ) //newscasters are smaller, they only need 3 sheets
|
||||
if("Guest Pass Console")
|
||||
frame_type = "guestpass"
|
||||
new /obj/item/stack/material/steel( usr.loc, 3 ) //guestpass consoles are smaller, they only need 2 sheets
|
||||
if("Keycard Authenticator")
|
||||
frame_type = "keycard"
|
||||
new /obj/item/stack/material/steel( usr.loc, 4 ) //keycard authenticators are smaller, they only need 1 sheets
|
||||
if("Wall Charger")
|
||||
frame_type = "wrecharger"
|
||||
new /obj/item/stack/material/steel( usr.loc, 2 ) //wall rechargers are smaller, they only need 3 sheets
|
||||
if("Supply Request Console")
|
||||
frame_type = "request"
|
||||
|
||||
update_type_list()
|
||||
var/datum/frame/frame_types/frame_type
|
||||
if(!build_machine_type)
|
||||
return
|
||||
var/datum/frame/frame_types/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in frame_types_wall
|
||||
if(!response || response.name == "Cancel")
|
||||
return
|
||||
frame_type = response
|
||||
|
||||
if (get_dist(on_wall,usr)>1)
|
||||
build_machine_type = /obj/structure/frame
|
||||
|
||||
if(frame_type.frame_size != 5)
|
||||
new /obj/item/stack/material/steel(usr.loc, (5 - frame_type.frame_size))
|
||||
|
||||
if(get_dist(on_wall, usr)>1)
|
||||
return
|
||||
|
||||
var/ndir
|
||||
if(reverse)
|
||||
ndir = get_dir(usr,on_wall)
|
||||
ndir = get_dir(usr, on_wall)
|
||||
else
|
||||
ndir = get_dir(on_wall,usr)
|
||||
ndir = get_dir(on_wall, usr)
|
||||
|
||||
if (!(ndir in cardinal))
|
||||
if(!(ndir in cardinal))
|
||||
return
|
||||
|
||||
var/turf/loc = get_turf(usr)
|
||||
var/area/A = loc.loc
|
||||
if (!istype(loc, /turf/simulated/floor))
|
||||
if(!istype(loc, /turf/simulated/floor))
|
||||
usr << "<span class='danger'>\The frame cannot be placed on this spot.</span>"
|
||||
return
|
||||
if (A.requires_power == 0 || A.name == "Space")
|
||||
|
||||
if(A.requires_power == 0 || A.name == "Space")
|
||||
usr << "<span class='danger'>\The [src] Alarm cannot be placed in this area.</span>"
|
||||
return
|
||||
|
||||
if(gotwallitem(loc, ndir))
|
||||
usr << "<span class='danger'>There's already an item on this wall!</span>"
|
||||
return
|
||||
|
||||
var/obj/machinery/M = new build_machine_type(loc, ndir, 1, frame_type)
|
||||
M.fingerprints = src.fingerprints
|
||||
M.fingerprintshidden = src.fingerprintshidden
|
||||
M.fingerprintslast = src.fingerprintslast
|
||||
M.fingerprints = fingerprints
|
||||
M.fingerprintshidden = fingerprintshidden
|
||||
M.fingerprintslast = fingerprintslast
|
||||
qdel(src)
|
||||
|
||||
/obj/item/frame/light
|
||||
@@ -143,14 +103,12 @@
|
||||
icon_state = "tube-construct-item"
|
||||
build_machine_type = /obj/machinery/light_construct
|
||||
reverse = 1
|
||||
frame_type = 1
|
||||
|
||||
/obj/item/frame/light/small
|
||||
name = "small light fixture frame"
|
||||
icon_state = "bulb-construct-item"
|
||||
refund_amt = 1
|
||||
build_machine_type = /obj/machinery/light_construct/small
|
||||
frame_type = 1
|
||||
|
||||
/obj/item/frame/extinguisher_cabinet
|
||||
name = "extinguisher cabinet frame"
|
||||
@@ -159,7 +117,6 @@
|
||||
icon_state = "extinguisher_empty"
|
||||
refund_amt = 4
|
||||
build_machine_type = /obj/structure/extinguisher_cabinet
|
||||
frame_type = 1
|
||||
|
||||
/obj/item/frame/noticeboard
|
||||
name = "noticeboard frame"
|
||||
@@ -169,7 +126,6 @@
|
||||
refund_amt = 4
|
||||
refund_type = /obj/item/stack/material/wood
|
||||
build_machine_type = /obj/structure/noticeboard
|
||||
frame_type = 1
|
||||
|
||||
/obj/item/frame/mirror
|
||||
name = "mirror frame"
|
||||
@@ -178,7 +134,6 @@
|
||||
icon_state = "mirror_frame"
|
||||
refund_amt = 1
|
||||
build_machine_type = /obj/structure/mirror
|
||||
frame_type = 1
|
||||
|
||||
/obj/item/frame/fireaxe_cabinet
|
||||
name = "fire axe cabinet frame"
|
||||
@@ -186,5 +141,4 @@
|
||||
icon = 'icons/obj/closet.dmi'
|
||||
icon_state = "fireaxe0101"
|
||||
refund_amt = 4
|
||||
build_machine_type = /obj/structure/closet/fireaxecabinet
|
||||
frame_type = 1
|
||||
build_machine_type = /obj/structure/closet/fireaxecabinet
|
||||
@@ -26,7 +26,7 @@
|
||||
)
|
||||
|
||||
/obj/machinery/washing_machine/New()
|
||||
circuit = new circuit(src)
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/motor(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/gear(src)
|
||||
@@ -41,11 +41,11 @@
|
||||
if(!istype(usr, /mob/living)) //ew ew ew usr, but it's the only way to check.
|
||||
return
|
||||
|
||||
if( state != 4 )
|
||||
if(state != 4)
|
||||
usr << "The washing machine cannot run in this state."
|
||||
return
|
||||
|
||||
if( locate(/mob,washing) )
|
||||
if(locate(/mob,washing))
|
||||
state = 8
|
||||
else
|
||||
state = 5
|
||||
@@ -63,7 +63,7 @@
|
||||
WL.amount = HH.amount
|
||||
qdel(HH)
|
||||
|
||||
if( locate(/mob,washing) )
|
||||
if(locate(/mob,washing))
|
||||
state = 7
|
||||
gibs_ready = 1
|
||||
else
|
||||
@@ -76,10 +76,9 @@
|
||||
set src in usr.loc
|
||||
|
||||
sleep(20)
|
||||
if(state in list(1,3,6) )
|
||||
if(state in list(1,3,6))
|
||||
usr.loc = src.loc
|
||||
|
||||
|
||||
/obj/machinery/washing_machine/update_icon()
|
||||
icon_state = "wm_[state][panel_open]"
|
||||
|
||||
@@ -93,7 +92,7 @@
|
||||
panel = !panel
|
||||
user << "<span class='notice'>You [panel ? "open" : "close"] the [src]'s maintenance panel</span>"*/
|
||||
if(istype(W,/obj/item/weapon/pen/crayon) || istype(W,/obj/item/weapon/stamp))
|
||||
if( state in list( 1, 3, 6 ) )
|
||||
if(state in list( 1, 3, 6))
|
||||
if(!crayon)
|
||||
user.drop_item()
|
||||
crayon = W
|
||||
@@ -103,7 +102,7 @@
|
||||
else
|
||||
..()
|
||||
else if(istype(W,/obj/item/weapon/grab))
|
||||
if( (state == 1) && hacked)
|
||||
if((state == 1) && hacked)
|
||||
var/obj/item/weapon/grab/G = W
|
||||
if(ishuman(G.assailant) && iscorgi(G.affecting))
|
||||
G.affecting.loc = src
|
||||
@@ -118,7 +117,7 @@
|
||||
|
||||
else if(istype(W, /obj/item/clothing))
|
||||
if(washing.len < 5)
|
||||
if ( state in list(1, 3) )
|
||||
if(state in list(1, 3))
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
washing += W
|
||||
|
||||
@@ -3,11 +3,9 @@
|
||||
desc = "You're not so sure about this, anymore..."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "syndbeacon"
|
||||
|
||||
use_power = 0
|
||||
anchored = 1
|
||||
density = 1
|
||||
|
||||
var/charges = 1
|
||||
var/insisting = 0
|
||||
|
||||
@@ -25,7 +23,7 @@
|
||||
else if(is_special_character(user))
|
||||
user << "Even to a heart as dark as yours, you know nothing good will come of this. Something instinctual makes you pull away."
|
||||
|
||||
else if (!insisting)
|
||||
else if(!insisting)
|
||||
user << "Your first touch makes the Wish Granter stir, listening to you. Are you really sure you want to do this?"
|
||||
insisting++
|
||||
|
||||
@@ -36,22 +34,22 @@
|
||||
charges--
|
||||
insisting = 0
|
||||
|
||||
if (!(HULK in user.mutations))
|
||||
if(!(HULK in user.mutations))
|
||||
user.mutations.Add(HULK)
|
||||
|
||||
if (!(LASER in user.mutations))
|
||||
if(!(LASER in user.mutations))
|
||||
user.mutations.Add(LASER)
|
||||
|
||||
if (!(XRAY in user.mutations))
|
||||
if(!(XRAY in user.mutations))
|
||||
user.mutations.Add(XRAY)
|
||||
user.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
|
||||
user.see_in_dark = 8
|
||||
user.see_invisible = SEE_INVISIBLE_LEVEL_TWO
|
||||
|
||||
if (!(COLD_RESISTANCE in user.mutations))
|
||||
if(!(COLD_RESISTANCE in user.mutations))
|
||||
user.mutations.Add(COLD_RESISTANCE)
|
||||
|
||||
if (!(TK in user.mutations))
|
||||
if(!(TK in user.mutations))
|
||||
user.mutations.Add(TK)
|
||||
|
||||
if(!(HEAL in user.mutations))
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
icon = 'icons/mecha/mech_bay.dmi'
|
||||
icon_state = "recharge_floor"
|
||||
density = 0
|
||||
anchored = 1
|
||||
layer = TURF_LAYER + 0.1
|
||||
circuit = /obj/item/weapon/circuitboard/mech_recharger
|
||||
|
||||
@@ -14,13 +15,11 @@
|
||||
/obj/machinery/mech_recharger/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/mech_recharger/Crossed(var/obj/mecha/M)
|
||||
@@ -50,7 +49,7 @@
|
||||
..()
|
||||
if(!charging)
|
||||
return
|
||||
if(charging.loc != loc) // Could be qdel or teleport or something
|
||||
if(charging.loc != src.loc) // Could be qdel or teleport or something
|
||||
stop_charging()
|
||||
return
|
||||
var/done = 1
|
||||
@@ -95,4 +94,4 @@
|
||||
if(!charging)
|
||||
|
||||
return
|
||||
charging = null
|
||||
charging = null
|
||||
@@ -27,7 +27,6 @@
|
||||
|
||||
/obj/machinery/mecha_part_fabricator/New()
|
||||
..()
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
|
||||
/obj/machinery/pros_fabricator/New()
|
||||
..()
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
|
||||
var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage
|
||||
var/obj/machinery/clonepod/connecting //same for cryopod linkage
|
||||
var/obj/machinery/connectable //Used to connect machinery, currently only used by Xenobio2.
|
||||
|
||||
var/obj/machinery/connectable //Used to connect machinery.
|
||||
|
||||
/obj/item/device/multitool/attack_self(mob/user)
|
||||
var/clear = alert("Do you want to clear the buffers on the [src]?",, "Yes", "No",)
|
||||
if(clear == "Yes")
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
/obj/item/device/radio/intercom/New()
|
||||
..()
|
||||
processing_objects += src
|
||||
circuit = new circuit(src)
|
||||
|
||||
/obj/item/device/radio/intercom/department/medbay/New()
|
||||
..()
|
||||
@@ -84,7 +85,7 @@
|
||||
attack_self(user)
|
||||
|
||||
/obj/item/device/radio/intercom/attackby(obj/item/W as obj, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
add_fingerprint(user)
|
||||
if(istype(W, /obj/item/weapon/screwdriver)) // Opening the intercom up.
|
||||
wiresexposed = !wiresexposed
|
||||
user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]"
|
||||
@@ -96,22 +97,20 @@
|
||||
else
|
||||
icon_state = "intercom"
|
||||
return
|
||||
if (wiresexposed && istype(W, /obj/item/weapon/wirecutters))
|
||||
if(wiresexposed && istype(W, /obj/item/weapon/wirecutters))
|
||||
user.visible_message("<span class='warning'>[user] has cut the wires inside \the [src]!</span>", "You have cut the wires inside \the [src].")
|
||||
playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1)
|
||||
new/obj/item/stack/cable_coil(get_turf(src), 5)
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.frame_type = "intercom"
|
||||
var/obj/structure/frame/A = new /obj/structure/frame(src.loc)
|
||||
var/obj/item/weapon/circuitboard/M = circuit
|
||||
A.frame_type = M.board_type
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.circuit = M
|
||||
A.set_dir(dir)
|
||||
A.anchored = 1
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
A.state = 2
|
||||
A.icon_state = "intercom_2"
|
||||
A.update_icon()
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
else
|
||||
@@ -175,4 +174,4 @@
|
||||
|
||||
/obj/item/device/radio/intercom/locked/confessional
|
||||
name = "confessional intercom"
|
||||
frequency = 1480
|
||||
frequency = 1480
|
||||
@@ -19,19 +19,19 @@
|
||||
throw_speed = 3
|
||||
throw_range = 15
|
||||
var/build_path = null
|
||||
var/board_type = "computer"
|
||||
var/board_type = new /datum/frame/frame_types/computer
|
||||
var/list/req_components = null
|
||||
var/contain_parts = 1
|
||||
|
||||
//Called when the circuitboard is used to contruct a new machine.
|
||||
/obj/item/weapon/circuitboard/proc/construct(var/obj/machinery/M)
|
||||
if (istype(M, build_path))
|
||||
if(istype(M, build_path))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//Called when a computer is deconstructed to produce a circuitboard.
|
||||
//Only used by computers, as other machines store their circuitboard instance.
|
||||
/obj/item/weapon/circuitboard/proc/deconstruct(var/obj/machinery/M)
|
||||
if (istype(M, build_path))
|
||||
if(istype(M, build_path))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
/obj/item/weapon/circuitboard/security/telescreen/entertainment
|
||||
name = T_BOARD("entertainment camera monitor")
|
||||
build_path = /obj/machinery/computer/security/telescreen/entertainment
|
||||
board_type = "display"
|
||||
board_type = new /datum/frame/frame_types/display
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/circuitboard/security/telescreen/entertainment/New()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#ifndef T_BOARD
|
||||
#error T_BOARD macro is not defined but we need it!
|
||||
#error T_BOARD macro is not defined but we need it!
|
||||
#endif
|
||||
|
||||
/obj/item/weapon/circuitboard/rdconsole
|
||||
@@ -9,12 +9,12 @@
|
||||
/obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I,/obj/item/weapon/screwdriver))
|
||||
user.visible_message("<span class='notice'>\The [user] adjusts the jumper on \the [src]'s access protocol pins.</span>", "<span class='notice'>You adjust the jumper on the access protocol pins.</span>")
|
||||
if(src.build_path == /obj/machinery/computer/rdconsole/core)
|
||||
src.name = T_BOARD("RD Console - Robotics")
|
||||
src.build_path = /obj/machinery/computer/rdconsole/robotics
|
||||
if(build_path == /obj/machinery/computer/rdconsole/core)
|
||||
name = T_BOARD("RD Console - Robotics")
|
||||
build_path = /obj/machinery/computer/rdconsole/robotics
|
||||
user << "<span class='notice'>Access protocols set to robotics.</span>"
|
||||
else
|
||||
src.name = T_BOARD("RD Console")
|
||||
src.build_path = /obj/machinery/computer/rdconsole/core
|
||||
name = T_BOARD("RD Console")
|
||||
build_path = /obj/machinery/computer/rdconsole/core
|
||||
user << "<span class='notice'>Access protocols set to default.</span>"
|
||||
return
|
||||
return
|
||||
@@ -9,37 +9,37 @@
|
||||
/obj/item/weapon/circuitboard/guestpass
|
||||
name = T_BOARD("guestpass console")
|
||||
build_path = /obj/machinery/computer/guestpass
|
||||
board_type = "guestpass"
|
||||
board_type = new /datum/frame/frame_types/guest_pass_console
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/circuitboard/status_display
|
||||
name = T_BOARD("status display")
|
||||
build_path = /obj/machinery/status_display
|
||||
board_type = "display"
|
||||
board_type = new /datum/frame/frame_types/display
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/circuitboard/ai_status_display
|
||||
name = T_BOARD("ai status display")
|
||||
build_path = /obj/machinery/ai_status_display
|
||||
board_type = "display"
|
||||
board_type = new /datum/frame/frame_types/display
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/circuitboard/newscaster
|
||||
name = T_BOARD("newscaster")
|
||||
build_path = /obj/machinery/newscaster
|
||||
board_type = "newscaster"
|
||||
board_type = new /datum/frame/frame_types/newscaster
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/circuitboard/atm
|
||||
name = T_BOARD("atm")
|
||||
build_path = /obj/machinery/atm
|
||||
board_type = "atm"
|
||||
board_type = new /datum/frame/frame_types/atm
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/circuitboard/request
|
||||
name = T_BOARD("reques console")
|
||||
build_path = /obj/machinery/requests_console
|
||||
board_type = "request"
|
||||
board_type = new /datum/frame/frame_types/supply_request_console
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
//Alarm
|
||||
@@ -47,25 +47,25 @@
|
||||
/obj/item/weapon/circuitboard/firealarm
|
||||
name = T_BOARD("fire alarm")
|
||||
build_path = /obj/machinery/firealarm
|
||||
board_type = "firealarm"
|
||||
board_type = new /datum/frame/frame_types/fire_alarm
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/circuitboard/airalarm
|
||||
name = T_BOARD("air alarm")
|
||||
build_path = /obj/machinery/alarm
|
||||
board_type = "airalarm"
|
||||
board_type = new /datum/frame/frame_types/air_alarm
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/circuitboard/intercom
|
||||
name = T_BOARD("intercom")
|
||||
build_path = /obj/item/device/radio/intercom
|
||||
board_type = "intercom"
|
||||
board_type = new /datum/frame/frame_types/intercom
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/circuitboard/keycard_auth
|
||||
name = T_BOARD("keycard authenticator")
|
||||
build_path = /obj/machinery/keycard_auth
|
||||
board_type = "keycard"
|
||||
board_type = new /datum/frame/frame_types/keycard_authenticator
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
//Computer
|
||||
@@ -73,19 +73,19 @@
|
||||
/obj/item/weapon/circuitboard/holopad
|
||||
name = T_BOARD("holopad")
|
||||
build_path = /obj/machinery/hologram/holopad
|
||||
board_type = "holopad"
|
||||
board_type = new /datum/frame/frame_types/holopad
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
|
||||
/obj/item/weapon/circuitboard/scanner_console
|
||||
name = T_BOARD("body scanner console")
|
||||
build_path = /obj/machinery/body_scanconsole
|
||||
board_type = "console"
|
||||
board_type = new /datum/frame/frame_types/medical_console
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/sleeper_console
|
||||
name = T_BOARD("sleeper console")
|
||||
build_path = /obj/machinery/sleep_console
|
||||
board_type = "console"
|
||||
board_type = new /datum/frame/frame_types/medical_console
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
|
||||
|
||||
//Machine
|
||||
@@ -93,7 +93,7 @@
|
||||
/obj/item/weapon/circuitboard/photocopier
|
||||
name = T_BOARD("photocopier")
|
||||
build_path = /obj/machinery/photocopier
|
||||
board_type = "photocopier"
|
||||
board_type = new /datum/frame/frame_types/photocopier
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1,
|
||||
@@ -104,7 +104,7 @@
|
||||
/obj/item/weapon/circuitboard/fax
|
||||
name = T_BOARD("fax")
|
||||
build_path = /obj/machinery/photocopier/faxmachine
|
||||
board_type = "fax"
|
||||
board_type = new /datum/frame/frame_types/fax
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1,
|
||||
@@ -115,7 +115,7 @@
|
||||
/obj/item/weapon/circuitboard/conveyor
|
||||
name = T_BOARD("conveyor")
|
||||
build_path = /obj/machinery/conveyor
|
||||
board_type = "conveyor"
|
||||
board_type = new /datum/frame/frame_types/conveyor
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/gear = 2,
|
||||
/obj/item/weapon/stock_parts/motor = 2,
|
||||
@@ -124,7 +124,7 @@
|
||||
/obj/item/weapon/circuitboard/microwave
|
||||
name = T_BOARD("microwave")
|
||||
build_path = /obj/machinery/microwave
|
||||
board_type = "microwave"
|
||||
board_type = new /datum/frame/frame_types/microwave
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/console_screen = 1,
|
||||
@@ -134,7 +134,7 @@
|
||||
/obj/item/weapon/circuitboard/recharger
|
||||
name = T_BOARD("recharger")
|
||||
build_path = /obj/machinery/recharger
|
||||
board_type = "recharger"
|
||||
board_type = new /datum/frame/frame_types/recharger
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/capacitor = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
@@ -142,12 +142,12 @@
|
||||
/obj/item/weapon/circuitboard/recharger/wrecharger
|
||||
name = T_BOARD("wall recharger")
|
||||
build_path = /obj/machinery/recharger/wallcharger
|
||||
board_type = "wrecharger"
|
||||
board_type = new /datum/frame/frame_types/wall_charger
|
||||
|
||||
/obj/item/weapon/circuitboard/washing
|
||||
name = T_BOARD("washing machine")
|
||||
build_path = /obj/machinery/washing_machine
|
||||
board_type = "washing"
|
||||
board_type = new /datum/frame/frame_types/washing_machine
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/motor = 1,
|
||||
@@ -156,7 +156,7 @@
|
||||
/obj/item/weapon/circuitboard/grinder
|
||||
name = T_BOARD("reagent grinder")
|
||||
build_path = /obj/machinery/reagentgrinder
|
||||
board_type = "grinder"
|
||||
board_type = new /datum/frame/frame_types/grinder
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/motor = 1,
|
||||
/obj/item/weapon/stock_parts/gear = 1,
|
||||
@@ -185,7 +185,7 @@
|
||||
/obj/item/weapon/circuitboard/body_scanner
|
||||
name = T_BOARD("body scanner")
|
||||
build_path = /obj/machinery/bodyscanner
|
||||
board_type = "medpod"
|
||||
board_type = new /datum/frame/frame_types/medical_pod
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/scanning_module = 3,
|
||||
@@ -194,7 +194,7 @@
|
||||
/obj/item/weapon/circuitboard/sleeper
|
||||
name = T_BOARD("sleeper")
|
||||
build_path = /obj/machinery/sleeper
|
||||
board_type = "medpod"
|
||||
board_type = new /datum/frame/frame_types/medical_pod
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1,
|
||||
@@ -205,7 +205,7 @@
|
||||
/obj/item/weapon/circuitboard/dna_analyzer
|
||||
name = T_BOARD("dna analyzer")
|
||||
build_path = /obj/machinery/dnaforensics
|
||||
board_type = "dna_analyzer"
|
||||
board_type = new /datum/frame/frame_types/dna_analyzer
|
||||
origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2, TECH_DATA = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/scanning_module = 2,
|
||||
@@ -215,104 +215,10 @@
|
||||
/obj/item/weapon/circuitboard/mass_driver
|
||||
name = T_BOARD("mass driver")
|
||||
build_path = /obj/machinery/mass_driver
|
||||
board_type = "massdriver"
|
||||
board_type = new /datum/frame/frame_types/mass_driver
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/gear = 2,
|
||||
/obj/item/weapon/stock_parts/motor = 2,
|
||||
/obj/item/weapon/stock_parts/capacitor = 1,
|
||||
/obj/item/weapon/stock_parts/spring = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
|
||||
//for testing - If this is still in when I commit, someone shoot me. --leaving in for now, shouldn't be able to get these on station anyways.
|
||||
/obj/item/weapon/storage/box/frame_parts
|
||||
display_contents_with_number = 1
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/circuitboard/guestpass( src )
|
||||
new /obj/item/weapon/circuitboard/status_display( src )
|
||||
new /obj/item/weapon/circuitboard/ai_status_display( src )
|
||||
new /obj/item/weapon/circuitboard/newscaster( src )
|
||||
new /obj/item/weapon/circuitboard/atm( src )
|
||||
new /obj/item/weapon/circuitboard/firealarm( src )
|
||||
new /obj/item/weapon/circuitboard/airalarm( src )
|
||||
new /obj/item/weapon/circuitboard/intercom( src )
|
||||
new /obj/item/weapon/circuitboard/keycard_auth( src )
|
||||
new /obj/item/weapon/circuitboard/holopad( src )
|
||||
new /obj/item/weapon/circuitboard/photocopier( src )
|
||||
new /obj/item/weapon/circuitboard/fax( src )
|
||||
new /obj/item/weapon/circuitboard/microwave( src )
|
||||
new /obj/item/weapon/circuitboard/washing( src )
|
||||
new /obj/item/weapon/stock_parts/scanning_module( src )
|
||||
new /obj/item/weapon/stock_parts/motor( src )
|
||||
new /obj/item/weapon/stock_parts/micro_laser( src )
|
||||
new /obj/item/weapon/stock_parts/matter_bin( src )
|
||||
new /obj/item/weapon/stock_parts/gear( src )
|
||||
new /obj/item/weapon/stock_parts/console_screen( src )
|
||||
new /obj/item/weapon/stock_parts/capacitor( src )
|
||||
new /obj/item/weapon/stock_parts/spring( src )
|
||||
new /obj/item/weapon/stock_parts/scanning_module( src )
|
||||
new /obj/item/weapon/stock_parts/motor( src )
|
||||
new /obj/item/weapon/stock_parts/micro_laser( src )
|
||||
new /obj/item/weapon/stock_parts/matter_bin( src )
|
||||
new /obj/item/weapon/stock_parts/gear( src )
|
||||
new /obj/item/weapon/stock_parts/console_screen( src )
|
||||
new /obj/item/weapon/stock_parts/capacitor( src )
|
||||
new /obj/item/weapon/stock_parts/spring( src )
|
||||
new /obj/item/weapon/stock_parts/scanning_module( src )
|
||||
new /obj/item/weapon/stock_parts/motor( src )
|
||||
new /obj/item/weapon/stock_parts/micro_laser( src )
|
||||
new /obj/item/weapon/stock_parts/matter_bin( src )
|
||||
new /obj/item/weapon/stock_parts/gear( src )
|
||||
new /obj/item/weapon/stock_parts/console_screen( src )
|
||||
new /obj/item/weapon/stock_parts/capacitor( src )
|
||||
new /obj/item/weapon/stock_parts/spring( src )
|
||||
new /obj/item/weapon/stock_parts/scanning_module( src )
|
||||
new /obj/item/weapon/stock_parts/motor( src )
|
||||
new /obj/item/weapon/stock_parts/micro_laser( src )
|
||||
new /obj/item/weapon/stock_parts/matter_bin( src )
|
||||
new /obj/item/weapon/stock_parts/gear( src )
|
||||
new /obj/item/weapon/stock_parts/console_screen( src )
|
||||
new /obj/item/weapon/stock_parts/capacitor( src )
|
||||
new /obj/item/weapon/stock_parts/spring( src )
|
||||
new /obj/item/weapon/stock_parts/scanning_module( src )
|
||||
new /obj/item/weapon/stock_parts/motor( src )
|
||||
new /obj/item/weapon/stock_parts/micro_laser( src )
|
||||
new /obj/item/weapon/stock_parts/matter_bin( src )
|
||||
new /obj/item/weapon/stock_parts/gear( src )
|
||||
new /obj/item/weapon/stock_parts/console_screen( src )
|
||||
new /obj/item/weapon/stock_parts/capacitor( src )
|
||||
new /obj/item/weapon/stock_parts/spring( src )
|
||||
new /obj/item/weapon/stock_parts/scanning_module( src )
|
||||
new /obj/item/weapon/stock_parts/motor( src )
|
||||
new /obj/item/weapon/stock_parts/micro_laser( src )
|
||||
new /obj/item/weapon/stock_parts/matter_bin( src )
|
||||
new /obj/item/weapon/stock_parts/gear( src )
|
||||
new /obj/item/weapon/stock_parts/console_screen( src )
|
||||
new /obj/item/weapon/stock_parts/capacitor( src )
|
||||
new /obj/item/weapon/stock_parts/spring( src )
|
||||
new /obj/item/weapon/stock_parts/scanning_module( src )
|
||||
new /obj/item/weapon/stock_parts/motor( src )
|
||||
new /obj/item/weapon/stock_parts/micro_laser( src )
|
||||
new /obj/item/weapon/stock_parts/matter_bin( src )
|
||||
new /obj/item/weapon/stock_parts/gear( src )
|
||||
new /obj/item/weapon/stock_parts/console_screen( src )
|
||||
new /obj/item/weapon/stock_parts/capacitor( src )
|
||||
new /obj/item/weapon/stock_parts/spring( src )
|
||||
new /obj/item/weapon/stock_parts/scanning_module( src )
|
||||
new /obj/item/weapon/stock_parts/motor( src )
|
||||
new /obj/item/weapon/stock_parts/micro_laser( src )
|
||||
new /obj/item/weapon/stock_parts/matter_bin( src )
|
||||
new /obj/item/weapon/stock_parts/gear( src )
|
||||
new /obj/item/weapon/stock_parts/console_screen( src )
|
||||
new /obj/item/weapon/stock_parts/capacitor( src )
|
||||
new /obj/item/weapon/stock_parts/spring( src )
|
||||
new /obj/item/weapon/stock_parts/scanning_module( src )
|
||||
new /obj/item/weapon/stock_parts/motor( src )
|
||||
new /obj/item/weapon/stock_parts/micro_laser( src )
|
||||
new /obj/item/weapon/stock_parts/matter_bin( src )
|
||||
new /obj/item/weapon/stock_parts/gear( src )
|
||||
new /obj/item/weapon/stock_parts/console_screen( src )
|
||||
new /obj/item/weapon/stock_parts/capacitor( src )
|
||||
new /obj/item/weapon/stock_parts/spring( src )
|
||||
new /obj/item/stack/cable_coil( src , 5 )
|
||||
new /obj/item/stack/material/glass/reinforced( src , 2 )
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/biogenerator
|
||||
name = T_BOARD("biogenerator")
|
||||
build_path = "/obj/machinery/biogenerator"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/biogenerator
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_DATA = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/matter_bin = 1,
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/clonepod
|
||||
name = T_BOARD("clone pod")
|
||||
build_path = "/obj/machinery/clonepod"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/clonepod
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_DATA = 3, TECH_BIO = 3)
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
@@ -15,8 +15,8 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/clonescanner
|
||||
name = T_BOARD("cloning scanner")
|
||||
build_path = "/obj/machinery/dna_scannernew"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/dna_scannernew
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_DATA = 2, TECH_BIO = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1,
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/jukebox
|
||||
name = T_BOARD("jukebox")
|
||||
build_path = "/obj/machinery/media/jukebox"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/media/jukebox
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_DATA = 1)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/capacitor = 1,
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/mech_recharger
|
||||
name = T_BOARD("mech recharger")
|
||||
build_path = "/obj/machinery/mech_recharger"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/mech_recharger
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_DATA = 2, TECH_POWER = 2, TECH_ENGINEERING = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/capacitor = 2,
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/miningdrill
|
||||
name = T_BOARD("mining drill head")
|
||||
build_path = "/obj/machinery/mining/drill"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/mining/drill
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/capacitor = 1,
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/miningdrillbrace
|
||||
name = T_BOARD("mining drill brace")
|
||||
build_path = "/obj/machinery/mining/brace"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/mining/brace
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
|
||||
req_components = list()
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/pacman
|
||||
name = T_BOARD("PACMAN-type generator")
|
||||
build_path = "/obj/machinery/power/port_gen/pacman"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/power/port_gen/pacman
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_DATA = 3, TECH_POWER = 3, TECH_PHORON = 3, TECH_ENGINEERING = 3)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/matter_bin = 1,
|
||||
@@ -15,10 +15,10 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/pacman/super
|
||||
name = T_BOARD("SUPERPACMAN-type generator")
|
||||
build_path = "/obj/machinery/power/port_gen/pacman/super"
|
||||
build_path = /obj/machinery/power/port_gen/pacman/super
|
||||
origin_tech = list(TECH_DATA = 3, TECH_POWER = 4, TECH_ENGINEERING = 4)
|
||||
|
||||
/obj/item/weapon/circuitboard/pacman/mrs
|
||||
name = T_BOARD("MRSPACMAN-type generator")
|
||||
build_path = "/obj/machinery/power/port_gen/pacman/mrs"
|
||||
build_path = /obj/machinery/power/port_gen/pacman/mrs
|
||||
origin_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINEERING = 5)
|
||||
|
||||
@@ -4,21 +4,21 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/smes
|
||||
name = T_BOARD("superconductive magnetic energy storage")
|
||||
build_path = "/obj/machinery/power/smes/buildable"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/power/smes/buildable
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 4)
|
||||
req_components = list(/obj/item/weapon/smes_coil = 1, /obj/item/stack/cable_coil = 30)
|
||||
|
||||
/obj/item/weapon/circuitboard/batteryrack
|
||||
name = T_BOARD("battery rack PSU")
|
||||
build_path = "/obj/machinery/power/smes/batteryrack"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/power/smes/batteryrack
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 2)
|
||||
req_components = list(/obj/item/weapon/cell = 3)
|
||||
|
||||
/obj/item/weapon/circuitboard/ghettosmes
|
||||
name = T_BOARD("makeshift PSU")
|
||||
desc = "An APC circuit repurposed into some power storage device controller"
|
||||
build_path = "/obj/machinery/power/smes/batteryrack/makeshift"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/power/smes/batteryrack/makeshift
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
req_components = list(/obj/item/weapon/cell = 3)
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/recharge_station
|
||||
name = T_BOARD("cyborg recharging station")
|
||||
build_path = "/obj/machinery/recharge_station"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/recharge_station
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
|
||||
@@ -4,17 +4,30 @@
|
||||
|
||||
obj/item/weapon/circuitboard/rdserver
|
||||
name = T_BOARD("R&D server")
|
||||
build_path = "/obj/machinery/r_n_d/server"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/r_n_d/server/core
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_DATA = 3)
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1)
|
||||
|
||||
obj/item/weapon/circuitboard/rdserver/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I,/obj/item/weapon/screwdriver))
|
||||
user.visible_message("<span class='notice'>\The [user] adjusts the jumper on \the [src]'s access protocol pins.</span>", "<span class='notice'>You adjust the jumper on the access protocol pins.</span>")
|
||||
if(build_path == /obj/machinery/r_n_d/server/core)
|
||||
name = T_BOARD("RD Console - Robotics")
|
||||
build_path = /obj/machinery/r_n_d/server/robotics
|
||||
user << "<span class='notice'>Access protocols set to robotics.</span>"
|
||||
else
|
||||
name = T_BOARD("RD Console")
|
||||
build_path = /obj/machinery/r_n_d/server/core
|
||||
user << "<span class='notice'>Access protocols set to default.</span>"
|
||||
return
|
||||
|
||||
/obj/item/weapon/circuitboard/destructive_analyzer
|
||||
name = T_BOARD("destructive analyzer")
|
||||
build_path = "/obj/machinery/r_n_d/destructive_analyzer"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/r_n_d/destructive_analyzer
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2, TECH_DATA = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1,
|
||||
@@ -23,8 +36,8 @@ obj/item/weapon/circuitboard/rdserver
|
||||
|
||||
/obj/item/weapon/circuitboard/autolathe
|
||||
name = T_BOARD("autolathe")
|
||||
build_path = "/obj/machinery/autolathe"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/autolathe
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/matter_bin = 3,
|
||||
@@ -33,8 +46,8 @@ obj/item/weapon/circuitboard/rdserver
|
||||
|
||||
/obj/item/weapon/circuitboard/protolathe
|
||||
name = T_BOARD("protolathe")
|
||||
build_path = "/obj/machinery/r_n_d/protolathe"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/r_n_d/protolathe
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/matter_bin = 2,
|
||||
@@ -43,8 +56,8 @@ obj/item/weapon/circuitboard/rdserver
|
||||
|
||||
/obj/item/weapon/circuitboard/circuit_imprinter
|
||||
name = T_BOARD("circuit imprinter")
|
||||
build_path = "/obj/machinery/r_n_d/circuit_imprinter"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/r_n_d/circuit_imprinter
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/matter_bin = 1,
|
||||
@@ -53,8 +66,8 @@ obj/item/weapon/circuitboard/rdserver
|
||||
|
||||
/obj/item/weapon/circuitboard/mechfab
|
||||
name = "Circuit board (Exosuit Fabricator)"
|
||||
build_path = "/obj/machinery/mecha_part_fabricator"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/mecha_part_fabricator
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/matter_bin = 2,
|
||||
@@ -64,8 +77,8 @@ obj/item/weapon/circuitboard/rdserver
|
||||
|
||||
/obj/item/weapon/circuitboard/prosthetics
|
||||
name = "Circuit board (Prosthetics Fabricator)"
|
||||
build_path = "/obj/machinery/pros_fabricator"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/pros_fabricator
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/matter_bin = 2,
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/shield_gen_ex
|
||||
name = T_BOARD("hull shield generator")
|
||||
board_type = "machine"
|
||||
build_path = "/obj/machinery/shield_gen/external"
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
build_path = /obj/machinery/shield_gen/external
|
||||
origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/manipulator/pico = 2,
|
||||
@@ -17,8 +17,8 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/shield_gen
|
||||
name = T_BOARD("bubble shield generator")
|
||||
board_type = "machine"
|
||||
build_path = "/obj/machinery/shield_gen"
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
build_path = /obj/machinery/shield_gen
|
||||
origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/manipulator/pico = 2,
|
||||
@@ -30,8 +30,8 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/shield_cap
|
||||
name = T_BOARD("shield capacitor")
|
||||
board_type = "machine"
|
||||
build_path = "/obj/machinery/shield_capacitor"
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
build_path = /obj/machinery/shield_capacitor
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_POWER = 4)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/manipulator/pico = 2,
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
#endif
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms
|
||||
board_type = "machine"
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/receiver
|
||||
name = T_BOARD("subspace receiver")
|
||||
build_path = "/obj/machinery/telecomms/receiver"
|
||||
build_path = /obj/machinery/telecomms/receiver
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_BLUESPACE = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/subspace/ansible = 1,
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/hub
|
||||
name = T_BOARD("hub mainframe")
|
||||
build_path = "/obj/machinery/telecomms/hub"
|
||||
build_path = /obj/machinery/telecomms/hub
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/relay
|
||||
name = T_BOARD("relay mainframe")
|
||||
build_path = "/obj/machinery/telecomms/relay"
|
||||
build_path = /obj/machinery/telecomms/relay
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 4, TECH_BLUESPACE = 3)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/bus
|
||||
name = T_BOARD("bus mainframe")
|
||||
build_path = "/obj/machinery/telecomms/bus"
|
||||
build_path = /obj/machinery/telecomms/bus
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/processor
|
||||
name = T_BOARD("processor unit")
|
||||
build_path = "/obj/machinery/telecomms/processor"
|
||||
build_path = /obj/machinery/telecomms/processor
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/manipulator = 3,
|
||||
@@ -56,7 +56,7 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/server
|
||||
name = T_BOARD("telecommunication server")
|
||||
build_path = "/obj/machinery/telecomms/server"
|
||||
build_path = /obj/machinery/telecomms/server
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/broadcaster
|
||||
name = T_BOARD("subspace broadcaster")
|
||||
build_path = "/obj/machinery/telecomms/broadcaster"
|
||||
build_path = /obj/machinery/telecomms/broadcaster
|
||||
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_BLUESPACE = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
@@ -77,7 +77,7 @@
|
||||
//This isn't a real telecomms board but I don't want to make a whole file to hold only one circuitboard.
|
||||
/obj/item/weapon/circuitboard/telecomms/exonet_node
|
||||
name = T_BOARD("exonet node")
|
||||
build_path = "/obj/machinery/exonet_node"
|
||||
build_path = /obj/machinery/exonet_node
|
||||
origin_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 5, TECH_BLUESPACE = 4)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/subspace/ansible = 1,
|
||||
@@ -90,11 +90,11 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/telecomms/pda_multicaster
|
||||
name = T_BOARD("pda multicaster")
|
||||
build_path = "/obj/machinery/pda_multicaster"
|
||||
build_path = /obj/machinery/pda_multicaster
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2, TECH_BLUESPACE = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/subspace/ansible = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/filter = 1,
|
||||
/obj/item/weapon/stock_parts/manipulator = 1,
|
||||
/obj/item/weapon/stock_parts/subspace/treatment = 1,
|
||||
/obj/item/stack/cable_coil = 2)
|
||||
/obj/item/stack/cable_coil = 2)
|
||||
@@ -3,7 +3,7 @@
|
||||
#endif
|
||||
|
||||
/obj/item/weapon/circuitboard/unary_atmos
|
||||
board_type = "machine"
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
|
||||
/obj/item/weapon/circuitboard/unary_atmos/construct(var/obj/machinery/atmospherics/unary/U)
|
||||
//TODO: Move this stuff into the relevant constructor when pipe/construction.dm is cleaned up.
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/unary_atmos/heater
|
||||
name = T_BOARD("gas heating system")
|
||||
build_path = "/obj/machinery/atmospherics/unary/heater"
|
||||
build_path = /obj/machinery/atmospherics/unary/heater
|
||||
origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1)
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/unary_atmos/cooler
|
||||
name = T_BOARD("gas cooling system")
|
||||
build_path = "/obj/machinery/atmospherics/unary/freezer"
|
||||
build_path = /obj/machinery/atmospherics/unary/freezer
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
item_state = "electronic"
|
||||
board_type = "other"
|
||||
|
||||
|
||||
/obj/item/weapon/circuitboard/mecha/ripley
|
||||
origin_tech = list(TECH_DATA = 3)
|
||||
|
||||
@@ -22,7 +21,6 @@
|
||||
name = T_BOARD_MECHA("Ripley central control")
|
||||
icon_state = "mainboard"
|
||||
|
||||
|
||||
/obj/item/weapon/circuitboard/mecha/gygax
|
||||
origin_tech = list(TECH_DATA = 4)
|
||||
|
||||
@@ -39,7 +37,6 @@
|
||||
name = T_BOARD_MECHA("Gygax central control")
|
||||
icon_state = "mainboard"
|
||||
|
||||
|
||||
/obj/item/weapon/circuitboard/mecha/durand
|
||||
origin_tech = list(TECH_DATA = 4)
|
||||
|
||||
@@ -56,7 +53,6 @@
|
||||
name = T_BOARD_MECHA("Durand central control")
|
||||
icon_state = "mainboard"
|
||||
|
||||
|
||||
/obj/item/weapon/circuitboard/mecha/honker
|
||||
origin_tech = list(TECH_DATA = 4)
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
var/report_num = 0
|
||||
|
||||
/obj/machinery/dnaforensics/New()
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
|
||||
|
||||
@@ -80,24 +80,7 @@ log transactions
|
||||
return 1
|
||||
|
||||
/obj/machinery/atm/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
|
||||
user << "<span class='notice'>You start disconnecting the monitor.</span>"
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.frame_type = "atm"
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
user << "<span class='notice'>You disconnect the monitor.</span>"
|
||||
A.state = 4
|
||||
A.icon_state = "atm_4"
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
if(computer_deconstruction_screwdriver(user, I))
|
||||
return
|
||||
if(istype(I, /obj/item/weapon/card))
|
||||
if(emagged > 0)
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
/obj/machinery/mining/drill/New()
|
||||
|
||||
..()
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
if(istype(I, /obj/item/weapon/paper) || istype(I, /obj/item/weapon/folder) || istype(I, /obj/item/weapon/photo) || istype(I, /obj/item/weapon/paper_bundle))
|
||||
I.loc = src
|
||||
|
||||
|
||||
/obj/structure/filingcabinet/attackby(obj/item/P as obj, mob/user as mob)
|
||||
if(istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/folder) || istype(P, /obj/item/weapon/photo) || istype(P, /obj/item/weapon/paper_bundle))
|
||||
user << "<span class='notice'>You put [P] in [src].</span>"
|
||||
@@ -57,7 +56,6 @@
|
||||
else
|
||||
user << "<span class='notice'>You can't put [P] in [src]!</span>"
|
||||
|
||||
|
||||
/obj/structure/filingcabinet/attack_hand(mob/user as mob)
|
||||
if(contents.len <= 0)
|
||||
user << "<span class='notice'>\The [src] is empty.</span>"
|
||||
@@ -103,7 +101,6 @@
|
||||
sleep(5)
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
|
||||
/*
|
||||
* Security Record Cabinets
|
||||
*/
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
var/maxcopies = 10 //how many copies can be copied at once- idea shamelessly stolen from bs12's copier!
|
||||
|
||||
/obj/machinery/photocopier/New()
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/motor(src)
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
operating = 1
|
||||
setmove()
|
||||
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/gear(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/motor(src)
|
||||
|
||||
@@ -24,7 +24,6 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid).
|
||||
|
||||
/obj/machinery/r_n_d/circuit_imprinter/New()
|
||||
..()
|
||||
circuit = new circuit()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
|
||||
@@ -18,7 +18,6 @@ Note: Must be placed within 3 tiles of the R&D Console
|
||||
|
||||
/obj/machinery/r_n_d/destructive_analyzer/New()
|
||||
..()
|
||||
circuit = new circuit()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
|
||||
/obj/machinery/r_n_d/protolathe/New()
|
||||
..()
|
||||
circuit = new circuit()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
|
||||
/obj/machinery/r_n_d/server/New()
|
||||
..()
|
||||
circuit = new circuit()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/stack/cable_coil(src)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/obj/machinery/radiocarbon_spectrometer
|
||||
name = "radiocarbon spectrometer"
|
||||
desc = "A specialised, complex scanner for gleaning information on all manner of small things."
|
||||
@@ -76,19 +75,20 @@
|
||||
scanner_seal_integrity = round(scanner_seal_integrity + amount_used * 10)
|
||||
return
|
||||
if(istype(I, /obj/item/weapon/reagent_containers/glass))
|
||||
var/obj/item/weapon/reagent_containers/glass/G = I
|
||||
if(!G.is_open_container())
|
||||
return
|
||||
var/choice = alert("What do you want to do with the container?","Radiometric Scanner","Add coolant","Empty coolant","Scan container")
|
||||
if(choice == "Add coolant")
|
||||
var/obj/item/weapon/reagent_containers/glass/G = I
|
||||
var/amount_transferred = min(src.reagents.maximum_volume - src.reagents.total_volume, G.reagents.total_volume)
|
||||
G.reagents.trans_to(src, amount_transferred)
|
||||
user << "<span class='info'>You empty [amount_transferred]u of coolant into [src].</span>"
|
||||
var/trans = G.reagents.trans_to_obj(src, amount_transferred)
|
||||
user << "<span class='info'>You empty [trans ? trans : 0]u of coolant into [src].</span>"
|
||||
update_coolant()
|
||||
return
|
||||
else if(choice == "Empty coolant")
|
||||
var/obj/item/weapon/reagent_containers/glass/G = I
|
||||
var/amount_transferred = min(G.reagents.maximum_volume - G.reagents.total_volume, src.reagents.total_volume)
|
||||
src.reagents.trans_to(G, amount_transferred)
|
||||
user << "<span class='info'>You remove [amount_transferred]u of coolant from [src].</span>"
|
||||
var/trans = src.reagents.trans_to(G, amount_transferred)
|
||||
user << "<span class='info'>You remove [trans ? trans : 0]u of coolant from [src].</span>"
|
||||
update_coolant()
|
||||
return
|
||||
if(scanned_item)
|
||||
@@ -148,15 +148,15 @@
|
||||
data["radiation"] = round(radiation)
|
||||
data["t_left_radspike"] = round(t_left_radspike)
|
||||
data["rad_shield_on"] = rad_shield
|
||||
|
||||
|
||||
// update the ui if it exists, returns null if no ui is passed/found
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
// the ui does not exist, so we'll create a new() one
|
||||
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
|
||||
ui = new(user, src, ui_key, "geoscanner.tmpl", "High Res Radiocarbon Spectrometer", 900, 825)
|
||||
// when the ui is first opened this is the data it will use
|
||||
ui.set_initial_data(data)
|
||||
ui.set_initial_data(data)
|
||||
// open the new ui window
|
||||
ui.open()
|
||||
// auto update every Master Controller tick
|
||||
@@ -361,4 +361,4 @@
|
||||
scanned_item = null
|
||||
|
||||
add_fingerprint(usr)
|
||||
return 1 // update UIs attached to this object
|
||||
return 1 // update UIs attached to this object
|
||||
@@ -42,22 +42,25 @@
|
||||
broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices
|
||||
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
user << "You remove the faceplate from the [src]"
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.frame_type = "keycard"
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.set_dir(dir)
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
A.state = 3
|
||||
A.icon_state = "keycard_3"
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
return
|
||||
user << "You begin removing the faceplate from the [src]"
|
||||
if(do_after(user, 10))
|
||||
user << "You remove the faceplate from the [src]"
|
||||
var/obj/structure/frame/A = new /obj/structure/frame(loc)
|
||||
var/obj/item/weapon/circuitboard/M = new circuit(A)
|
||||
A.frame_type = M.board_type
|
||||
A.need_circuit = 0
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.set_dir(dir)
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
A.state = 3
|
||||
A.update_icon()
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/machinery/keycard_auth/power_change()
|
||||
..()
|
||||
@@ -195,4 +198,4 @@ var/global/maint_all_access = 0
|
||||
/obj/machinery/door/airlock/allowed(mob/M)
|
||||
if(maint_all_access && src.check_access_list(list(access_maint_tunnels)))
|
||||
return 1
|
||||
return ..(M)
|
||||
return ..(M)
|
||||
@@ -16,12 +16,11 @@
|
||||
var/occupiedcolor = "#22FF22"
|
||||
var/emptycolor = "#FF2222"
|
||||
var/operatingcolor = "#FFFF22"
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/machinery/slime/extractor/New()
|
||||
..()
|
||||
update_light_color()
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
@@ -29,14 +28,14 @@
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
|
||||
RefreshParts()
|
||||
|
||||
|
||||
/obj/machinery/slime/extractor/attackby(var/obj/item/W, var/mob/user)
|
||||
|
||||
//Let's try to deconstruct first.
|
||||
if(istype(W, /obj/item/weapon/screwdriver) && !inuse)
|
||||
default_deconstruction_screwdriver(user, W)
|
||||
return
|
||||
|
||||
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
default_deconstruction_crowbar(user, W)
|
||||
return
|
||||
@@ -45,7 +44,7 @@
|
||||
user << "<span class='warning'>Close the panel first!</span>"
|
||||
|
||||
var/obj/item/weapon/grab/G = W
|
||||
|
||||
|
||||
if(!istype(G))
|
||||
return ..()
|
||||
|
||||
@@ -54,12 +53,12 @@
|
||||
return
|
||||
|
||||
move_into_extractor(user,G.affecting)
|
||||
|
||||
|
||||
/obj/machinery/slime/extractor/MouseDrop_T(mob/target, mob/user)
|
||||
if(user.stat || user.restrained())
|
||||
return
|
||||
move_into_extractor(user,target)
|
||||
|
||||
|
||||
/obj/machinery/slime/extractor/proc/move_into_extractor(var/mob/user,var/mob/living/victim)
|
||||
|
||||
if(src.occupant)
|
||||
@@ -73,12 +72,12 @@
|
||||
if(!(istype(victim, /mob/living/simple_animal/xeno/slime)) )
|
||||
user << "<span class='danger'>This is not a suitable subject for the core extractor!</span>"
|
||||
return
|
||||
|
||||
|
||||
var/mob/living/simple_animal/xeno/slime/S = victim
|
||||
if(S.is_child)
|
||||
user << "<span class='danger'>This subject is not developed enough for the core extractor!</span>"
|
||||
return
|
||||
|
||||
|
||||
user.visible_message("<span class='danger'>[user] starts to put [victim] into the core extractor!</span>")
|
||||
src.add_fingerprint(user)
|
||||
if(do_after(user, 30) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant)
|
||||
@@ -89,7 +88,7 @@
|
||||
victim.forceMove(src)
|
||||
src.occupant = victim
|
||||
update_light_color()
|
||||
|
||||
|
||||
/obj/machinery/slime/extractor/proc/update_light_color()
|
||||
if(src.occupant && !(inuse))
|
||||
set_light(2, 2, occupiedcolor)
|
||||
@@ -97,13 +96,13 @@
|
||||
set_light(2, 2, operatingcolor)
|
||||
else
|
||||
set_light(2, 2, emptycolor)
|
||||
|
||||
|
||||
/obj/machinery/slime/extractor/proc/extract_cores()
|
||||
if(!src.occupant)
|
||||
src.visible_message("\icon[src] [src] pings unhappily.")
|
||||
else if(inuse)
|
||||
return
|
||||
|
||||
|
||||
inuse = 1
|
||||
update_light_color()
|
||||
spawn(30)
|
||||
@@ -112,17 +111,17 @@
|
||||
var/obj/item/xenoproduct/slime/core/C = new(src)
|
||||
C.traits = new()
|
||||
occupant.traitdat.copy_traits(C.traits)
|
||||
|
||||
|
||||
C.nameVar = occupant.nameVar
|
||||
|
||||
|
||||
C.create_reagents(C.traits.traits[TRAIT_XENO_CHEMVOL])
|
||||
for(var/reagent in occupant.traitdat.chems)
|
||||
C.reagents.add_reagent(reagent, occupant.traitdat.chems[reagent])
|
||||
|
||||
|
||||
C.color = C.traits.traits[TRAIT_XENO_COLOR]
|
||||
if(occupant.traitdat.get_trait(TRAIT_XENO_BIOLUMESCENT))
|
||||
C.set_light(occupant.traitdat.get_trait(TRAIT_XENO_GLOW_STRENGTH),occupant.traitdat.get_trait(TRAIT_XENO_GLOW_RANGE), occupant.traitdat.get_trait(TRAIT_XENO_BIO_COLOR))
|
||||
|
||||
|
||||
spawn(30)
|
||||
icon_state = "scanner_0old"
|
||||
qdel(occupant)
|
||||
@@ -131,20 +130,20 @@
|
||||
eject_contents()
|
||||
update_light_color()
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/slime/extractor/proc/eject_slime()
|
||||
|
||||
/obj/machinery/slime/extractor/proc/eject_slime()
|
||||
if(occupant)
|
||||
occupant.forceMove(loc)
|
||||
occupant = null
|
||||
|
||||
|
||||
/obj/machinery/slime/extractor/proc/eject_core()
|
||||
for(var/obj/thing in (contents - component_parts - circuit))
|
||||
thing.forceMove(loc)
|
||||
|
||||
|
||||
/obj/machinery/slime/extractor/proc/eject_contents()
|
||||
eject_core()
|
||||
eject_slime()
|
||||
|
||||
|
||||
//Here lies the UI
|
||||
/obj/machinery/slime/extractor/attack_hand(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
@@ -192,4 +191,3 @@
|
||||
/obj/item/weapon/stock_parts/matter_bin = 1,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 2
|
||||
)
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/*
|
||||
This file contains:
|
||||
|
||||
|
||||
Xenobiological disk:
|
||||
Holds traits that can be taken from cores and transplanted into slimes.
|
||||
|
||||
|
||||
Biological Product Destructive Analyzer:
|
||||
Takes certain traits in gene grouping from a core and places them into a disk.
|
||||
|
||||
|
||||
Biological genetic bombarder:
|
||||
Takes traits from a disk and replaces/adds to the genes in a xenobiological creature.
|
||||
*/
|
||||
@@ -16,10 +16,10 @@
|
||||
icon = 'icons/obj/hydroponics_machines.dmi'
|
||||
icon_state = "disk"
|
||||
w_class = 1.0
|
||||
|
||||
|
||||
var/list/genes = list()
|
||||
var/genesource = "unknown"
|
||||
|
||||
|
||||
/obj/item/weapon/disk/xenobio/attack_self(var/mob/user as mob)
|
||||
if(genes.len)
|
||||
var/choice = alert(user, "Are you sure you want to wipe the disk?", "Xenobiological Data", "No", "Yes")
|
||||
@@ -29,7 +29,7 @@
|
||||
desc = initial(name)
|
||||
genes = list()
|
||||
genesource = "unknown"
|
||||
|
||||
|
||||
/obj/item/weapon/storage/box/xenobiodisk
|
||||
name = "biological disk box"
|
||||
desc = "A box of biological data disks, apparently."
|
||||
@@ -53,13 +53,13 @@
|
||||
var/eject_disk = 0
|
||||
var/failed_task = 0
|
||||
var/disk_needs_genes = 0
|
||||
|
||||
|
||||
/obj/machinery/xenobio/attack_ai(mob/user as mob)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/xenobio/attack_hand(mob/user as mob)
|
||||
ui_interact(user)
|
||||
|
||||
|
||||
/obj/machinery/xenobio/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(default_deconstruction_screwdriver(user, W))
|
||||
return
|
||||
@@ -96,7 +96,7 @@
|
||||
|
||||
if(world.time > last_action + action_time)
|
||||
finished_task()
|
||||
|
||||
|
||||
/obj/machinery/xenobio/proc/finished_task()
|
||||
active = 0
|
||||
in_use = 0
|
||||
@@ -112,7 +112,7 @@
|
||||
loaded_disk.forceMove(get_turf(src))
|
||||
visible_message("\icon[src] [src] beeps and spits out [loaded_disk].")
|
||||
loaded_disk = null
|
||||
|
||||
|
||||
/obj/machinery/xenobio/extractor
|
||||
name = "biological product destructive analyzer"
|
||||
icon = 'icons/obj/hydroponics_machines.dmi'
|
||||
@@ -122,10 +122,9 @@
|
||||
var/obj/item/xenoproduct/product
|
||||
var/datum/xeno/traits/genetics // Currently scanned xeno genetic structure.
|
||||
var/degradation = 0 // Increments with each scan, stops allowing gene mods after a certain point.
|
||||
|
||||
|
||||
/obj/machinery/xenobio/extractor/New()
|
||||
..()
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
@@ -134,7 +133,7 @@
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
RefreshParts()
|
||||
|
||||
|
||||
/obj/machinery/xenobio/extractor/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/xenoproduct))
|
||||
if(product)
|
||||
@@ -187,7 +186,7 @@
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
|
||||
/obj/machinery/xenobio/proc/eject_disk()
|
||||
if(!loaded_disk) return
|
||||
loaded_disk.forceMove(loc)
|
||||
@@ -201,7 +200,7 @@
|
||||
|
||||
if(href_list["eject_product"])
|
||||
if(!product) return
|
||||
|
||||
|
||||
product.forceMove(get_turf(src))
|
||||
visible_message("\icon[src] [src] beeps and spits out [product].")
|
||||
product = null
|
||||
@@ -253,22 +252,21 @@
|
||||
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
|
||||
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/xenobio/editor
|
||||
name = "biological genetic bombarder"
|
||||
icon = 'icons/obj/cryogenics.dmi'
|
||||
icon_state = "cellold0"
|
||||
disk_needs_genes = 1
|
||||
circuit = /obj/item/weapon/circuitboard/biobombarder
|
||||
|
||||
|
||||
var/mob/living/simple_animal/xeno/slime/occupant
|
||||
|
||||
|
||||
/obj/machinery/xenobio/editor/New()
|
||||
..()
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
@@ -277,7 +275,7 @@
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
RefreshParts()
|
||||
|
||||
|
||||
/obj/machinery/xenobio/editor/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = W
|
||||
@@ -358,21 +356,21 @@
|
||||
occupant.traitdat.apply_gene(gene)
|
||||
occupant.stability += rand(5,10)
|
||||
occupant.ProcessTraits()
|
||||
|
||||
|
||||
if(href_list["eject_disk"])
|
||||
eject_disk()
|
||||
|
||||
|
||||
if(href_list["eject_xeno"])
|
||||
eject_xeno()
|
||||
|
||||
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
|
||||
|
||||
/obj/machinery/xenobio/editor/MouseDrop_T(mob/target, mob/user)
|
||||
if(user.stat || user.restrained())
|
||||
return
|
||||
move_into_editor(user,target)
|
||||
|
||||
|
||||
/obj/machinery/xenobio/editor/proc/move_into_editor(var/mob/user,var/mob/living/victim)
|
||||
|
||||
if(src.occupant)
|
||||
@@ -396,16 +394,16 @@
|
||||
victim.client.eye = src
|
||||
victim.forceMove(src)
|
||||
occupant = victim
|
||||
|
||||
|
||||
/obj/machinery/xenobio/editor/proc/eject_contents()
|
||||
eject_disk()
|
||||
eject_xeno()
|
||||
|
||||
|
||||
/obj/machinery/xenobio/editor/proc/eject_xeno()
|
||||
if(occupant)
|
||||
occupant.forceMove(loc)
|
||||
occupant = null
|
||||
|
||||
|
||||
/obj/item/weapon/circuitboard/bioproddestanalyzer
|
||||
name = T_BOARD("biological product destructive analyzer")
|
||||
build_path = "/obj/machinery/xenobio/extractor"
|
||||
@@ -416,7 +414,7 @@
|
||||
/obj/item/weapon/stock_parts/matter_bin = 1,
|
||||
/obj/item/weapon/stock_parts/scanning_module = 3
|
||||
)
|
||||
|
||||
|
||||
/obj/item/weapon/circuitboard/biobombarder
|
||||
name = T_BOARD("biological genetic bombarder")
|
||||
build_path = "/obj/machinery/xenobio/editor"
|
||||
@@ -427,4 +425,3 @@
|
||||
/obj/item/weapon/stock_parts/matter_bin = 2,
|
||||
/obj/item/weapon/stock_parts/scanning_module = 2
|
||||
)
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
beaker = new /obj/item/weapon/reagent_containers/glass/beaker(src)
|
||||
circuit = new circuit(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
@@ -75,7 +74,7 @@
|
||||
if(occupant)
|
||||
occupant.forceMove(loc)
|
||||
occupant = null
|
||||
|
||||
|
||||
/obj/machinery/xenobio2/manualinjector/proc/eject_beaker()
|
||||
if(beaker)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B = beaker
|
||||
@@ -140,7 +139,7 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/xenobioinjectormachine
|
||||
name = T_BOARD("biological injector")
|
||||
build_path = "/obj/machinery/xenobio2/manualinjector"
|
||||
board_type = "machine"
|
||||
build_path = /obj/machinery/xenobio2/manualinjector
|
||||
board_type = /datum/frame/frame_types/machine
|
||||
origin_tech = list() //To be filled,
|
||||
req_components = list() //To be filled,
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user