Merge branch 'master' into upstream-merge-37486
This commit is contained in:
@@ -421,7 +421,7 @@
|
||||
/*~~~~~~~~~~~~
|
||||
Circutry!
|
||||
~~~~~~~~~~~~~*/
|
||||
/obj/item/device/electronic_assembly/proc/diag_hud_set_circuithealth(hide = FALSE)
|
||||
/obj/item/electronic_assembly/proc/diag_hud_set_circuithealth(hide = FALSE)
|
||||
var/image/holder = hud_list[DIAG_CIRCUIT_HUD]
|
||||
var/icon/I = icon(icon, icon_state, dir)
|
||||
holder.pixel_y = I.Height() - world.icon_size
|
||||
@@ -430,7 +430,7 @@
|
||||
else
|
||||
holder.icon_state = "huddiag[RoundDiagBar(obj_integrity/max_integrity)]"
|
||||
|
||||
/obj/item/device/electronic_assembly/proc/diag_hud_set_circuitcell(hide = FALSE)
|
||||
/obj/item/electronic_assembly/proc/diag_hud_set_circuitcell(hide = FALSE)
|
||||
var/image/holder = hud_list[DIAG_BATT_HUD]
|
||||
var/icon/I = icon(icon, icon_state, dir)
|
||||
holder.pixel_y = I.Height() - world.icon_size
|
||||
@@ -442,7 +442,7 @@
|
||||
else
|
||||
holder.icon_state = "hudnobatt"
|
||||
|
||||
/obj/item/device/electronic_assembly/proc/diag_hud_set_circuitstat(hide = FALSE) //On, On and dangerous, or Off
|
||||
/obj/item/electronic_assembly/proc/diag_hud_set_circuitstat(hide = FALSE) //On, On and dangerous, or Off
|
||||
var/image/holder = hud_list[DIAG_STAT_HUD]
|
||||
var/icon/I = icon(icon, icon_state, dir)
|
||||
holder.pixel_y = I.Height() - world.icon_size
|
||||
@@ -457,7 +457,7 @@
|
||||
else //Bot is on and not dangerous
|
||||
holder.icon_state = prefered_hud_icon
|
||||
|
||||
/obj/item/device/electronic_assembly/proc/diag_hud_set_circuittracking(hide = FALSE)
|
||||
/obj/item/electronic_assembly/proc/diag_hud_set_circuittracking(hide = FALSE)
|
||||
var/image/holder = hud_list[DIAG_TRACK_HUD]
|
||||
var/icon/I = icon(icon, icon_state, dir)
|
||||
holder.pixel_y = I.Height() - world.icon_size
|
||||
|
||||
@@ -258,12 +258,12 @@ Credit where due:
|
||||
uniform = /obj/item/clothing/under/chameleon/ratvar
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
back = /obj/item/storage/backpack
|
||||
ears = /obj/item/device/radio/headset
|
||||
ears = /obj/item/radio/headset
|
||||
gloves = /obj/item/clothing/gloves/color/yellow
|
||||
belt = /obj/item/storage/belt/utility/servant
|
||||
backpack_contents = list(/obj/item/storage/box/engineer = 1, \
|
||||
/obj/item/clockwork/replica_fabricator = 1, /obj/item/stack/tile/brass/fifty = 1, /obj/item/paper/servant_primer = 1)
|
||||
id = /obj/item/device/pda
|
||||
id = /obj/item/pda
|
||||
var/plasmaman //We use this to determine if we should activate internals in post_equip()
|
||||
|
||||
/datum/outfit/servant_of_ratvar/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
@@ -276,7 +276,7 @@ Credit where due:
|
||||
|
||||
/datum/outfit/servant_of_ratvar/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
|
||||
var/obj/item/card/id/W = new(H)
|
||||
var/obj/item/device/pda/PDA = H.wear_id
|
||||
var/obj/item/pda/PDA = H.wear_id
|
||||
W.assignment = "Assistant"
|
||||
W.access += ACCESS_MAINT_TUNNELS
|
||||
W.registered_name = H.real_name
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
mask = /obj/item/clothing/mask/gas/clown_hat
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
back = /obj/item/storage/backpack/clown
|
||||
ears = /obj/item/device/radio/headset/syndicate/alt
|
||||
ears = /obj/item/radio/headset/syndicate/alt
|
||||
l_pocket = /obj/item/pinpointer/nuke/syndicate
|
||||
r_pocket = /obj/item/bikehorn
|
||||
id = /obj/item/card/id/syndicate
|
||||
@@ -48,7 +48,7 @@
|
||||
/obj/item/reagent_containers/spray/waterflower/lube)
|
||||
implants = list(/obj/item/implant/sad_trombone)
|
||||
|
||||
uplink_type = /obj/item/device/radio/uplink/clownop
|
||||
uplink_type = /obj/item/radio/uplink/clownop
|
||||
|
||||
/datum/outfit/syndicate/clownop/no_crystals
|
||||
tc = 0
|
||||
@@ -62,5 +62,5 @@
|
||||
/datum/outfit/syndicate/clownop/leader
|
||||
name = "Clown Operative Leader - Basic"
|
||||
id = /obj/item/card/id/syndicate/nuke_leader
|
||||
r_hand = /obj/item/device/nuclear_challenge/clownops
|
||||
r_hand = /obj/item/nuclear_challenge/clownops
|
||||
command_radio = TRUE
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
back = /obj/item/storage/backpack
|
||||
ears = /obj/item/device/radio/headset/syndicate/alt
|
||||
ears = /obj/item/radio/headset/syndicate/alt
|
||||
l_pocket = /obj/item/pinpointer/nuke/syndicate
|
||||
id = /obj/item/card/id/syndicate
|
||||
belt = /obj/item/gun/ballistic/automatic/pistol
|
||||
@@ -134,27 +134,27 @@
|
||||
|
||||
var/tc = 25
|
||||
var/command_radio = FALSE
|
||||
var/uplink_type = /obj/item/device/radio/uplink/nuclear
|
||||
var/uplink_type = /obj/item/radio/uplink/nuclear
|
||||
|
||||
|
||||
/datum/outfit/syndicate/leader
|
||||
name = "Syndicate Leader - Basic"
|
||||
id = /obj/item/card/id/syndicate/nuke_leader
|
||||
r_hand = /obj/item/device/nuclear_challenge
|
||||
r_hand = /obj/item/nuclear_challenge
|
||||
command_radio = TRUE
|
||||
|
||||
/datum/outfit/syndicate/no_crystals
|
||||
tc = 0
|
||||
|
||||
/datum/outfit/syndicate/post_equip(mob/living/carbon/human/H)
|
||||
var/obj/item/device/radio/R = H.ears
|
||||
var/obj/item/radio/R = H.ears
|
||||
R.set_frequency(FREQ_SYNDICATE)
|
||||
R.freqlock = TRUE
|
||||
if(command_radio)
|
||||
R.command = TRUE
|
||||
|
||||
if(tc)
|
||||
var/obj/item/device/radio/uplink/U = new uplink_type(H, H.key, tc)
|
||||
var/obj/item/radio/uplink/U = new uplink_type(H, H.key, tc)
|
||||
H.equip_to_slot_or_del(U, slot_in_backpack)
|
||||
|
||||
var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(H)
|
||||
|
||||
@@ -687,7 +687,7 @@ GLOBAL_LIST_EMPTY(possible_items_special)
|
||||
|
||||
/datum/objective/steal_five_of_type/summon_magic
|
||||
explanation_text = "Steal at least five magical artefacts!"
|
||||
wanted_items = list(/obj/item/spellbook, /obj/item/gun/magic, /obj/item/clothing/suit/space/hardsuit/wizard, /obj/item/scrying, /obj/item/antag_spawner/contract, /obj/item/device/necromantic_stone)
|
||||
wanted_items = list(/obj/item/spellbook, /obj/item/gun/magic, /obj/item/clothing/suit/space/hardsuit/wizard, /obj/item/scrying, /obj/item/antag_spawner/contract, /obj/item/necromantic_stone)
|
||||
|
||||
/datum/objective/steal_five_of_type/check_completion()
|
||||
var/list/datum/mind/owners = get_owners()
|
||||
|
||||
@@ -130,10 +130,10 @@
|
||||
|
||||
/datum/objective_item/steal/functionalai
|
||||
name = "a functional AI."
|
||||
targetitem = /obj/item/device/aicard
|
||||
targetitem = /obj/item/aicard
|
||||
difficulty = 20 //beyond the impossible
|
||||
|
||||
/datum/objective_item/steal/functionalai/check_special_completion(obj/item/device/aicard/C)
|
||||
/datum/objective_item/steal/functionalai/check_special_completion(obj/item/aicard/C)
|
||||
for(var/mob/living/silicon/ai/A in C)
|
||||
if(isAI(A) && A.stat != DEAD) //See if any AI's are alive inside that card.
|
||||
return 1
|
||||
@@ -216,7 +216,7 @@
|
||||
|
||||
/datum/objective_item/special/laserpointer
|
||||
name = "a laser pointer."
|
||||
targetitem = /obj/item/device/laser_pointer
|
||||
targetitem = /obj/item/laser_pointer
|
||||
difficulty = 5
|
||||
|
||||
/datum/objective_item/special/corgimeat
|
||||
|
||||
@@ -27,7 +27,7 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE)
|
||||
//items that shouldn't spawn on the floor because they would bug or act weird
|
||||
var/global/list/spawn_forbidden = list(
|
||||
/obj/item/tk_grab, /obj/item/implant, // not implanter, the actual thing that is inside you
|
||||
/obj/item/assembly, /obj/item/device/onetankbomb, /obj/item/device/pda/ai,
|
||||
/obj/item/assembly, /obj/item/onetankbomb, /obj/item/pda/ai,
|
||||
/obj/item/smallDelivery, /obj/item/projectile,
|
||||
/obj/item/borg/sight, /obj/item/borg/stun, /obj/item/robot_module)
|
||||
|
||||
@@ -39,9 +39,9 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE)
|
||||
"Spawn Emergency Air Tank" = "hsbspawn&path=[/obj/item/tank/internals/emergency_oxygen/double]",
|
||||
|
||||
"Standard Tools",
|
||||
"Spawn Flashlight" = "hsbspawn&path=[/obj/item/device/flashlight]",
|
||||
"Spawn Flashlight" = "hsbspawn&path=[/obj/item/flashlight]",
|
||||
"Spawn Toolbox" = "hsbspawn&path=[/obj/item/storage/toolbox/mechanical]",
|
||||
"Spawn Light Replacer" = "hsbspawn&path=[/obj/item/device/lightreplacer]",
|
||||
"Spawn Light Replacer" = "hsbspawn&path=[/obj/item/lightreplacer]",
|
||||
"Spawn Medical Kit" = "hsbspawn&path=[/obj/item/storage/firstaid/regular]",
|
||||
"Spawn All-Access ID" = "hsbaaid",
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
anchored = TRUE
|
||||
use_power = IDLE_POWER_USE
|
||||
idle_power_usage = 0
|
||||
var/obj/item/device/beacon/Beacon
|
||||
var/obj/item/beacon/Beacon
|
||||
|
||||
/obj/machinery/bluespace_beacon/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "pdapainter"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
var/obj/item/device/pda/storedpda = null
|
||||
var/obj/item/pda/storedpda = null
|
||||
var/list/colorlist = list()
|
||||
max_integrity = 200
|
||||
|
||||
@@ -30,16 +30,16 @@
|
||||
/obj/machinery/pdapainter/Initialize()
|
||||
. = ..()
|
||||
var/list/blocked = list(
|
||||
/obj/item/device/pda/ai/pai,
|
||||
/obj/item/device/pda/ai,
|
||||
/obj/item/device/pda/heads,
|
||||
/obj/item/device/pda/clear,
|
||||
/obj/item/device/pda/syndicate,
|
||||
/obj/item/device/pda/chameleon,
|
||||
/obj/item/device/pda/chameleon/broken)
|
||||
/obj/item/pda/ai/pai,
|
||||
/obj/item/pda/ai,
|
||||
/obj/item/pda/heads,
|
||||
/obj/item/pda/clear,
|
||||
/obj/item/pda/syndicate,
|
||||
/obj/item/pda/chameleon,
|
||||
/obj/item/pda/chameleon/broken)
|
||||
|
||||
for(var/P in typesof(/obj/item/device/pda) - blocked)
|
||||
var/obj/item/device/pda/D = new P
|
||||
for(var/P in typesof(/obj/item/pda) - blocked)
|
||||
var/obj/item/pda/D = new P
|
||||
|
||||
//D.name = "PDA Style [colorlist.len+1]" //Gotta set the name, otherwise it all comes up as "PDA"
|
||||
D.name = D.icon_state //PDAs don't have unique names, but using the sprite names works.
|
||||
@@ -69,7 +69,7 @@
|
||||
power_change()
|
||||
return
|
||||
|
||||
else if(istype(O, /obj/item/device/pda))
|
||||
else if(istype(O, /obj/item/pda))
|
||||
if(storedpda)
|
||||
to_chat(user, "<span class='warning'>There is already a PDA inside!</span>")
|
||||
return
|
||||
@@ -110,7 +110,7 @@
|
||||
return
|
||||
|
||||
if(storedpda)
|
||||
var/obj/item/device/pda/P
|
||||
var/obj/item/pda/P
|
||||
P = input(user, "Select your color!", "PDA Painting") as null|anything in colorlist
|
||||
if(!P)
|
||||
return
|
||||
|
||||
@@ -93,8 +93,6 @@
|
||||
return
|
||||
if(default_change_direction_wrench(user, I))
|
||||
return
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
if(default_pry_open(I))
|
||||
return
|
||||
if(default_deconstruction_crowbar(I))
|
||||
|
||||
@@ -17,7 +17,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
||||
|
||||
circuit = /obj/item/circuitboard/machine/announcement_system
|
||||
|
||||
var/obj/item/device/radio/headset/radio
|
||||
var/obj/item/radio/headset/radio
|
||||
var/arrival = "%PERSON has signed up as %RANK"
|
||||
var/arrivalToggle = 1
|
||||
var/newhead = "%PERSON, %RANK, is the department head."
|
||||
@@ -30,7 +30,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
||||
/obj/machinery/announcement_system/Initialize()
|
||||
. = ..()
|
||||
GLOB.announcement_systems += src
|
||||
radio = new /obj/item/device/radio/headset/ai(src)
|
||||
radio = new /obj/item/radio/headset/ai(src)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/announcement_system/update_icon()
|
||||
@@ -67,7 +67,7 @@ GLOBAL_LIST_EMPTY(announcement_systems)
|
||||
update_icon()
|
||||
else if(default_deconstruction_crowbar(P))
|
||||
return
|
||||
else if(istype(P, /obj/item/device/multitool) && panel_open && (stat & BROKEN))
|
||||
else if(istype(P, /obj/item/multitool) && panel_open && (stat & BROKEN))
|
||||
to_chat(user, "<span class='notice'>You reset [src]'s firmware.</span>")
|
||||
stat &= ~BROKEN
|
||||
update_icon()
|
||||
|
||||
@@ -93,9 +93,6 @@
|
||||
updateUsrDialog()
|
||||
return TRUE
|
||||
|
||||
if(exchange_parts(user, O))
|
||||
return TRUE
|
||||
|
||||
if(default_deconstruction_crowbar(O))
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
idle_power_usage = 100
|
||||
var/siphoning = FALSE
|
||||
var/next_warning = 0
|
||||
var/obj/item/device/radio/radio
|
||||
var/obj/item/radio/radio
|
||||
var/radio_channel = "Common"
|
||||
var/minimum_time_between_warnings = 400
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "doorctrl"
|
||||
var/skin = "doorctrl"
|
||||
power_channel = ENVIRON
|
||||
var/obj/item/device/assembly/device
|
||||
var/obj/item/assembly/device
|
||||
var/obj/item/electronics/airlock/board
|
||||
var/device_type = null
|
||||
var/id = null
|
||||
@@ -66,7 +66,7 @@
|
||||
return
|
||||
|
||||
if(panel_open)
|
||||
if(!device && istype(W, /obj/item/device/assembly))
|
||||
if(!device && istype(W, /obj/item/assembly))
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
to_chat(user, "<span class='warning'>\The [W] is stuck to you!</span>")
|
||||
return
|
||||
@@ -117,8 +117,8 @@
|
||||
return attack_ai(user)
|
||||
|
||||
/obj/machinery/button/proc/setup_device()
|
||||
if(id && istype(device, /obj/item/device/assembly/control))
|
||||
var/obj/item/device/assembly/control/A = device
|
||||
if(id && istype(device, /obj/item/assembly/control))
|
||||
var/obj/item/assembly/control/A = device
|
||||
A.id = id
|
||||
initialized_button = 1
|
||||
|
||||
@@ -183,11 +183,11 @@
|
||||
/obj/machinery/button/door/setup_device()
|
||||
if(!device)
|
||||
if(normaldoorcontrol)
|
||||
var/obj/item/device/assembly/control/airlock/A = new(src)
|
||||
var/obj/item/assembly/control/airlock/A = new(src)
|
||||
device = A
|
||||
A.specialfunctions = specialfunctions
|
||||
else
|
||||
device = new /obj/item/device/assembly/control(src)
|
||||
device = new /obj/item/assembly/control(src)
|
||||
..()
|
||||
|
||||
/obj/machinery/button/massdriver
|
||||
@@ -195,28 +195,28 @@
|
||||
desc = "A remote control switch for a mass driver."
|
||||
icon_state = "launcher"
|
||||
skin = "launcher"
|
||||
device_type = /obj/item/device/assembly/control/massdriver
|
||||
device_type = /obj/item/assembly/control/massdriver
|
||||
|
||||
/obj/machinery/button/ignition
|
||||
name = "ignition switch"
|
||||
desc = "A remote control switch for a mounted igniter."
|
||||
icon_state = "launcher"
|
||||
skin = "launcher"
|
||||
device_type = /obj/item/device/assembly/control/igniter
|
||||
device_type = /obj/item/assembly/control/igniter
|
||||
|
||||
/obj/machinery/button/flasher
|
||||
name = "flasher button"
|
||||
desc = "A remote control switch for a mounted flasher."
|
||||
icon_state = "launcher"
|
||||
skin = "launcher"
|
||||
device_type = /obj/item/device/assembly/control/flasher
|
||||
device_type = /obj/item/assembly/control/flasher
|
||||
|
||||
/obj/machinery/button/crematorium
|
||||
name = "crematorium igniter"
|
||||
desc = "Burn baby burn!"
|
||||
icon_state = "launcher"
|
||||
skin = "launcher"
|
||||
device_type = /obj/item/device/assembly/control/crematorium
|
||||
device_type = /obj/item/assembly/control/crematorium
|
||||
req_access = list()
|
||||
id = 1
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
anchored = TRUE
|
||||
var/start_active = FALSE //If it ignores the random chance to start broken on round start
|
||||
var/invuln = null
|
||||
var/obj/item/device/camera_bug/bug = null
|
||||
var/obj/item/camera_bug/bug = null
|
||||
var/obj/structure/camera_assembly/assembly = null
|
||||
var/area/myarea = null
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
/obj/machinery/camera/attackby(obj/item/I, mob/living/user, params)
|
||||
// UPGRADES
|
||||
if(panel_open)
|
||||
if(istype(I, /obj/item/device/analyzer))
|
||||
if(istype(I, /obj/item/analyzer))
|
||||
if(!isXRay())
|
||||
if(!user.temporarilyRemoveItemFromInventory(I))
|
||||
return
|
||||
@@ -195,7 +195,7 @@
|
||||
to_chat(user, "<span class='notice'>[src] already has that upgrade!</span>")
|
||||
return
|
||||
|
||||
else if(istype(I, /obj/item/device/assembly/prox_sensor))
|
||||
else if(istype(I, /obj/item/assembly/prox_sensor))
|
||||
if(!isMotion())
|
||||
if(!user.temporarilyRemoveItemFromInventory(I))
|
||||
return
|
||||
@@ -207,10 +207,10 @@
|
||||
return
|
||||
|
||||
// OTHER
|
||||
if((istype(I, /obj/item/paper) || istype(I, /obj/item/device/pda)) && isliving(user))
|
||||
if((istype(I, /obj/item/paper) || istype(I, /obj/item/pda)) && isliving(user))
|
||||
var/mob/living/U = user
|
||||
var/obj/item/paper/X = null
|
||||
var/obj/item/device/pda/P = null
|
||||
var/obj/item/pda/P = null
|
||||
|
||||
var/itemname = ""
|
||||
var/info = ""
|
||||
@@ -239,7 +239,7 @@
|
||||
O << browse(text("<HTML><HEAD><TITLE>[]</TITLE></HEAD><BODY><TT>[]</TT></BODY></HTML>", itemname, info), text("window=[]", itemname))
|
||||
return
|
||||
|
||||
else if(istype(I, /obj/item/device/camera_bug))
|
||||
else if(istype(I, /obj/item/camera_bug))
|
||||
if(!can_use())
|
||||
to_chat(user, "<span class='notice'>Camera non-functional.</span>")
|
||||
return
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
icon_state = "camera1"
|
||||
max_integrity = 150
|
||||
// Motion, EMP-Proof, X-Ray
|
||||
var/static/list/possible_upgrades = typecacheof(list(/obj/item/device/assembly/prox_sensor, /obj/item/stack/sheet/mineral/plasma, /obj/item/device/analyzer))
|
||||
var/static/list/possible_upgrades = typecacheof(list(/obj/item/assembly/prox_sensor, /obj/item/stack/sheet/mineral/plasma, /obj/item/analyzer))
|
||||
var/list/upgrades
|
||||
var/state = 1
|
||||
|
||||
|
||||
@@ -79,10 +79,10 @@
|
||||
upgrades |= CAMERA_UPGRADE_EMP_PROOF
|
||||
|
||||
/obj/machinery/camera/proc/upgradeXRay()
|
||||
assembly.upgrades.Add(new /obj/item/device/analyzer(assembly))
|
||||
assembly.upgrades.Add(new /obj/item/analyzer(assembly))
|
||||
upgrades |= CAMERA_UPGRADE_XRAY
|
||||
|
||||
// If you are upgrading Motion, and it isn't in the camera's Initialize(), add it to the machines list.
|
||||
/obj/machinery/camera/proc/upgradeMotion()
|
||||
assembly.upgrades.Add(new /obj/item/device/assembly/prox_sensor(assembly))
|
||||
assembly.upgrades.Add(new /obj/item/assembly/prox_sensor(assembly))
|
||||
upgrades |= CAMERA_UPGRADE_MOTION
|
||||
|
||||
@@ -30,8 +30,8 @@
|
||||
var/grab_ghost_when = CLONER_MATURE_CLONE
|
||||
|
||||
var/internal_radio = TRUE
|
||||
var/obj/item/device/radio/radio
|
||||
var/radio_key = /obj/item/device/encryptionkey/headset_med
|
||||
var/obj/item/radio/radio
|
||||
var/radio_key = /obj/item/encryptionkey/headset_med
|
||||
var/radio_channel = "Medical"
|
||||
|
||||
var/obj/effect/countdown/clonepod/countdown
|
||||
@@ -134,8 +134,11 @@
|
||||
clonemind = locate(mindref) in SSticker.minds
|
||||
if(!istype(clonemind)) //not a mind
|
||||
return FALSE
|
||||
if( clonemind.current && clonemind.current.stat != DEAD ) //mind is associated with a non-dead body
|
||||
return FALSE
|
||||
if(clonemind.current)
|
||||
if(clonemind.current.stat != DEAD) //mind is associated with a non-dead body
|
||||
return FALSE
|
||||
if(clonemind.current.suiciding) // Mind is associated with a body that is suiciding.
|
||||
return FALSE
|
||||
if(clonemind.active) //somebody is using that mind
|
||||
if( ckey(clonemind.key)!=ckey )
|
||||
return FALSE
|
||||
@@ -144,6 +147,8 @@
|
||||
var/mob/dead/observer/G = clonemind.get_ghost()
|
||||
if(!G)
|
||||
return FALSE
|
||||
if(G.suiciding) // The ghost came from a body that is suiciding.
|
||||
return FALSE
|
||||
if(clonemind.damnation_type) //Can't clone the damned.
|
||||
INVOKE_ASYNC(src, .proc/horrifyingsound)
|
||||
mess = TRUE
|
||||
@@ -282,14 +287,11 @@
|
||||
if(default_deconstruction_screwdriver(user, "[icon_state]_maintenance", "[initial(icon_state)]",W))
|
||||
return
|
||||
|
||||
if(exchange_parts(user, W))
|
||||
return
|
||||
|
||||
if(default_deconstruction_crowbar(W))
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/device/multitool))
|
||||
var/obj/item/device/multitool/P = W
|
||||
if(istype(W, /obj/item/multitool))
|
||||
var/obj/item/multitool/P = W
|
||||
|
||||
if(istype(P.buffer, /obj/machinery/computer/cloning))
|
||||
if(get_area(P.buffer) != get_area(src))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/machinery/computer/operating
|
||||
name = "operating computer"
|
||||
desc = "Used to monitor the vitals of a patient during surgery."
|
||||
desc = "Monitors patient vitals and displays surgery steps. Can be loaded with surgery disks to perform experimental procedures."
|
||||
icon_screen = "crew"
|
||||
icon_keyboard = "med_key"
|
||||
circuit = /obj/item/circuitboard/computer/operating
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
else
|
||||
add_overlay("ai-fixer-empty")
|
||||
|
||||
/obj/machinery/computer/aifixer/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/device/aicard/card)
|
||||
/obj/machinery/computer/aifixer/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card)
|
||||
if(!..())
|
||||
return
|
||||
//Downloading AI from card to terminal.
|
||||
|
||||
@@ -123,8 +123,8 @@
|
||||
to_chat(user, "<span class='notice'>You insert [W].</span>")
|
||||
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
|
||||
src.updateUsrDialog()
|
||||
else if(istype(W, /obj/item/device/multitool))
|
||||
var/obj/item/device/multitool/P = W
|
||||
else if(istype(W, /obj/item/multitool))
|
||||
var/obj/item/multitool/P = W
|
||||
|
||||
if(istype(P.buffer, /obj/machinery/clonepod))
|
||||
if(get_area(P.buffer) != get_area(src))
|
||||
@@ -330,7 +330,7 @@
|
||||
|
||||
else if (src.menu == 4)
|
||||
var/obj/item/card/id/C = usr.get_active_held_item()
|
||||
if (istype(C)||istype(C, /obj/item/device/pda))
|
||||
if (istype(C)||istype(C, /obj/item/pda))
|
||||
if(src.check_access(C))
|
||||
src.temp = "[src.active_record.fields["name"]] => Record deleted."
|
||||
src.records.Remove(active_record)
|
||||
|
||||
@@ -97,8 +97,8 @@
|
||||
if("swipeidseclevel")
|
||||
var/mob/M = usr
|
||||
var/obj/item/card/id/I = M.get_active_held_item()
|
||||
if (istype(I, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/pda = I
|
||||
if (istype(I, /obj/item/pda))
|
||||
var/obj/item/pda/pda = I
|
||||
I = pda.id
|
||||
if (I && istype(I))
|
||||
if(ACCESS_CAPTAIN in I.access)
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
return
|
||||
|
||||
/obj/machinery/computer/launchpad/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/device/multitool))
|
||||
var/obj/item/device/multitool/M = W
|
||||
if(istype(W, /obj/item/multitool))
|
||||
var/obj/item/multitool/M = W
|
||||
if(M.buffer && istype(M.buffer, /obj/machinery/launchpad))
|
||||
if(LAZYLEN(launchpads) < maximum_pads)
|
||||
launchpads |= M.buffer
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_keyboard = "teleport_key"
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
circuit = /obj/item/circuitboard/computer/teleporter
|
||||
var/obj/item/device/gps/locked
|
||||
var/obj/item/gps/locked
|
||||
var/regime_set = "Teleporter"
|
||||
var/id
|
||||
var/obj/machinery/teleport/station/power_station
|
||||
@@ -34,8 +34,8 @@
|
||||
return power_station
|
||||
|
||||
/obj/machinery/computer/teleporter/attackby(obj/I, mob/living/user, params)
|
||||
if(istype(I, /obj/item/device/gps))
|
||||
var/obj/item/device/gps/L = I
|
||||
if(istype(I, /obj/item/gps))
|
||||
var/obj/item/gps/L = I
|
||||
if(L.locked_location && !(stat & (NOPOWER|BROKEN)))
|
||||
if(!user.transferItemToLoc(L, src))
|
||||
to_chat(user, "<span class='warning'>\the [I] is stuck to your hand, you cannot put it in \the [src]!</span>")
|
||||
@@ -153,7 +153,7 @@
|
||||
var/list/L = list()
|
||||
var/list/areaindex = list()
|
||||
if(regime_set == "Teleporter")
|
||||
for(var/obj/item/device/beacon/R in GLOB.teleportbeacons)
|
||||
for(var/obj/item/beacon/R in GLOB.teleportbeacons)
|
||||
if(is_eligible(R))
|
||||
var/area/A = get_area(R)
|
||||
L[avoid_assoc_duplicate_keys(A.name, areaindex)] = R
|
||||
|
||||
@@ -156,56 +156,56 @@
|
||||
var/turf/cen = get_turf(src)
|
||||
FOR_DVIEW(var/turf/t, 3, get_turf(src),INVISIBILITY_LIGHTING)
|
||||
if(t.x == cen.x && t.y > cen.y)
|
||||
var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t)
|
||||
var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t)
|
||||
L.light_color = LIGHT_COLOR_RED
|
||||
L.light_power = 30-(get_dist(src,L)*8)
|
||||
L.range = 1+get_dist(src, L)
|
||||
spotlights+=L
|
||||
continue
|
||||
if(t.x == cen.x && t.y < cen.y)
|
||||
var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t)
|
||||
var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t)
|
||||
L.light_color = LIGHT_COLOR_PURPLE
|
||||
L.light_power = 30-(get_dist(src,L)*8)
|
||||
L.range = 1+get_dist(src, L)
|
||||
spotlights+=L
|
||||
continue
|
||||
if(t.x > cen.x && t.y == cen.y)
|
||||
var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t)
|
||||
var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t)
|
||||
L.light_color = LIGHT_COLOR_YELLOW
|
||||
L.light_power = 30-(get_dist(src,L)*8)
|
||||
L.range = 1+get_dist(src, L)
|
||||
spotlights+=L
|
||||
continue
|
||||
if(t.x < cen.x && t.y == cen.y)
|
||||
var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t)
|
||||
var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t)
|
||||
L.light_color = LIGHT_COLOR_GREEN
|
||||
L.light_power = 30-(get_dist(src,L)*8)
|
||||
L.range = 1+get_dist(src, L)
|
||||
spotlights+=L
|
||||
continue
|
||||
if((t.x+1 == cen.x && t.y+1 == cen.y) || (t.x+2==cen.x && t.y+2 == cen.y))
|
||||
var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t)
|
||||
var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t)
|
||||
L.light_color = LIGHT_COLOR_ORANGE
|
||||
L.light_power = 30-(get_dist(src,L)*8)
|
||||
L.range = 1.4+get_dist(src, L)
|
||||
spotlights+=L
|
||||
continue
|
||||
if((t.x-1 == cen.x && t.y-1 == cen.y) || (t.x-2==cen.x && t.y-2 == cen.y))
|
||||
var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t)
|
||||
var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t)
|
||||
L.light_color = LIGHT_COLOR_CYAN
|
||||
L.light_power = 30-(get_dist(src,L)*8)
|
||||
L.range = 1.4+get_dist(src, L)
|
||||
spotlights+=L
|
||||
continue
|
||||
if((t.x-1 == cen.x && t.y+1 == cen.y) || (t.x-2==cen.x && t.y+2 == cen.y))
|
||||
var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t)
|
||||
var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t)
|
||||
L.light_color = LIGHT_COLOR_BLUEGREEN
|
||||
L.light_power = 30-(get_dist(src,L)*8)
|
||||
L.range = 1.4+get_dist(src, L)
|
||||
spotlights+=L
|
||||
continue
|
||||
if((t.x+1 == cen.x && t.y-1 == cen.y) || (t.x+2==cen.x && t.y-2 == cen.y))
|
||||
var/obj/item/device/flashlight/spotlight/L = new /obj/item/device/flashlight/spotlight(t)
|
||||
var/obj/item/flashlight/spotlight/L = new /obj/item/flashlight/spotlight(t)
|
||||
L.light_color = LIGHT_COLOR_BLUE
|
||||
L.light_power = 30-(get_dist(src,L)*8)
|
||||
L.range = 1.4+get_dist(src, L)
|
||||
@@ -244,7 +244,7 @@
|
||||
for(var/obj/reveal in sparkles)
|
||||
reveal.alpha = 255
|
||||
while(active)
|
||||
for(var/obj/item/device/flashlight/spotlight/glow in spotlights) // The multiples reflects custom adjustments to each colors after dozens of tests
|
||||
for(var/obj/item/flashlight/spotlight/glow in spotlights) // The multiples reflects custom adjustments to each colors after dozens of tests
|
||||
if(QDELETED(src) || !active || QDELETED(glow))
|
||||
return
|
||||
if(glow.light_color == LIGHT_COLOR_RED)
|
||||
|
||||
@@ -133,9 +133,6 @@
|
||||
update_icon()//..since we're updating the icon here, since the scanner can be unpowered when opened/closed
|
||||
return
|
||||
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
|
||||
if(default_pry_open(I))
|
||||
return
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
var/justzap = FALSE
|
||||
var/obj/item/electronics/airlock/electronics
|
||||
var/shockCooldown = FALSE //Prevents multiple shocks from happening
|
||||
var/obj/item/device/doorCharge/charge //If applied, causes an explosion upon opening the door
|
||||
var/obj/item/doorCharge/charge //If applied, causes an explosion upon opening the door
|
||||
var/obj/item/note //Any papers pinned to the airlock
|
||||
var/detonated = FALSE
|
||||
var/abandoned = FALSE
|
||||
@@ -202,8 +202,8 @@
|
||||
return
|
||||
|
||||
// Handle recieved packet.
|
||||
var/command = lowertext(data.plaintext_data)
|
||||
var/command_value = lowertext(data.plaintext_data_secondary)
|
||||
var/command = lowertext(data.data["data"])
|
||||
var/command_value = lowertext(data.data["data_secondary"])
|
||||
switch(command)
|
||||
if("open")
|
||||
if(command_value == "on" && !density)
|
||||
@@ -939,7 +939,7 @@
|
||||
cable.plugin(src, user)
|
||||
else if(istype(C, /obj/item/airlock_painter))
|
||||
change_paintjob(C, user)
|
||||
else if(istype(C, /obj/item/device/doorCharge))
|
||||
else if(istype(C, /obj/item/doorCharge))
|
||||
if(!panel_open || security_level)
|
||||
to_chat(user, "<span class='warning'>The maintenance panel must be open to apply [C]!</span>")
|
||||
return
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
var/timing = FALSE // boolean, true/1 timer is on, false/0 means it's not timing
|
||||
var/list/obj/machinery/targets = list()
|
||||
var/obj/item/device/radio/Radio //needed to send messages to sec radio
|
||||
var/obj/item/radio/Radio //needed to send messages to sec radio
|
||||
|
||||
maptext_height = 26
|
||||
maptext_width = 32
|
||||
@@ -41,7 +41,7 @@
|
||||
/obj/machinery/door_timer/Initialize()
|
||||
. = ..()
|
||||
|
||||
Radio = new/obj/item/device/radio(src)
|
||||
Radio = new/obj/item/radio(src)
|
||||
Radio.listening = 0
|
||||
|
||||
/obj/machinery/door_timer/Initialize()
|
||||
|
||||
@@ -439,8 +439,8 @@
|
||||
constructionStep = CONSTRUCTION_GUTTED
|
||||
update_icon()
|
||||
return
|
||||
if(istype(C, /obj/item/device/electroadaptive_pseudocircuit))
|
||||
var/obj/item/device/electroadaptive_pseudocircuit/P = C
|
||||
if(istype(C, /obj/item/electroadaptive_pseudocircuit))
|
||||
var/obj/item/electroadaptive_pseudocircuit/P = C
|
||||
if(!P.adapt_circuit(user, 30))
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] fabricates a circuit and places it into [src].</span>", \
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/machinery/door/poddoor/shutters
|
||||
gender = PLURAL
|
||||
name = "shutters"
|
||||
desc = "Heavy duty metal shutters that opens mechanically."
|
||||
desc = "Heavy duty metal shutters that open mechanically."
|
||||
icon = 'icons/obj/doors/shutters.dmi'
|
||||
layer = SHUTTER_LAYER
|
||||
closingLayer = SHUTTER_LAYER
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
/obj/machinery/droneDispenser/Initialize()
|
||||
. = ..()
|
||||
var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE)
|
||||
var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE, list(/obj/item/stack))
|
||||
materials.insert_amount(starting_amount)
|
||||
materials.precise_insertion = TRUE
|
||||
using_materials = list(MAT_METAL=metal_cost, MAT_GLASS=glass_cost)
|
||||
|
||||
@@ -141,8 +141,8 @@
|
||||
LAZYREMOVE(pods, pod)
|
||||
|
||||
/obj/machinery/computer/prototype_cloning/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/device/multitool))
|
||||
var/obj/item/device/multitool/P = W
|
||||
if(istype(W, /obj/item/multitool))
|
||||
var/obj/item/multitool/P = W
|
||||
|
||||
if(istype(P.buffer, /obj/machinery/clonepod/experimental))
|
||||
if(get_area(P.buffer) != get_area(src))
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
switch(buildstage)
|
||||
if(2)
|
||||
if(istype(W, /obj/item/device/multitool))
|
||||
if(istype(W, /obj/item/multitool))
|
||||
detecting = !detecting
|
||||
if (src.detecting)
|
||||
user.visible_message("[user] has reconnected [src]'s detecting unit!", "<span class='notice'>You reconnect [src]'s detecting unit.</span>")
|
||||
@@ -221,8 +221,8 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/device/electroadaptive_pseudocircuit))
|
||||
var/obj/item/device/electroadaptive_pseudocircuit/P = W
|
||||
else if(istype(W, /obj/item/electroadaptive_pseudocircuit))
|
||||
var/obj/item/electroadaptive_pseudocircuit/P = W
|
||||
if(!P.adapt_circuit(user, 15))
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] fabricates a circuit and places it into [src].</span>", \
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
max_integrity = 250
|
||||
integrity_failure = 100
|
||||
anchored = TRUE
|
||||
var/obj/item/device/assembly/flash/handheld/bulb
|
||||
var/obj/item/assembly/flash/handheld/bulb
|
||||
var/id = null
|
||||
var/range = 2 //this is roughly the size of brig cell
|
||||
var/last_flash = 0 //Don't want it getting spammed like regular flashes
|
||||
@@ -60,7 +60,7 @@
|
||||
bulb = null
|
||||
power_change()
|
||||
|
||||
else if (istype(W, /obj/item/device/assembly/flash/handheld))
|
||||
else if (istype(W, /obj/item/assembly/flash/handheld))
|
||||
if (!bulb)
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
return
|
||||
|
||||
@@ -146,9 +146,6 @@ Possible to do for anyone motivated enough:
|
||||
if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", P))
|
||||
return
|
||||
|
||||
if(exchange_parts(user, P))
|
||||
return
|
||||
|
||||
if(default_pry_open(P))
|
||||
return
|
||||
|
||||
|
||||
@@ -31,15 +31,12 @@
|
||||
return
|
||||
|
||||
if(panel_open)
|
||||
if(istype(I, /obj/item/device/multitool))
|
||||
var/obj/item/device/multitool/M = I
|
||||
if(istype(I, /obj/item/multitool))
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = src
|
||||
to_chat(user, "<span class='notice'>You save the data in the [I.name]'s buffer.</span>")
|
||||
return 1
|
||||
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
|
||||
if(default_deconstruction_crowbar(I))
|
||||
return
|
||||
|
||||
@@ -185,8 +182,8 @@
|
||||
closed = TRUE
|
||||
|
||||
/obj/machinery/launchpad/briefcase/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/device/launchpad_remote))
|
||||
var/obj/item/device/launchpad_remote/L = I
|
||||
if(istype(I, /obj/item/launchpad_remote))
|
||||
var/obj/item/launchpad_remote/L = I
|
||||
L.pad = src
|
||||
to_chat(user, "<span class='notice'>You link [src] to [L].</span>")
|
||||
else
|
||||
@@ -232,14 +229,14 @@
|
||||
user.transferItemToLoc(src, pad, TRUE)
|
||||
|
||||
/obj/item/briefcase_launchpad/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/device/launchpad_remote))
|
||||
var/obj/item/device/launchpad_remote/L = I
|
||||
if(istype(I, /obj/item/launchpad_remote))
|
||||
var/obj/item/launchpad_remote/L = I
|
||||
L.pad = src.pad
|
||||
to_chat(user, "<span class='notice'>You link [pad] to [L].</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/device/launchpad_remote
|
||||
/obj/item/launchpad_remote
|
||||
name = "\improper Launchpad Control Remote"
|
||||
desc = "Used to teleport objects to and from a portable launchpad."
|
||||
icon = 'icons/obj/telescience.dmi'
|
||||
@@ -249,7 +246,7 @@
|
||||
var/sending = TRUE
|
||||
var/obj/machinery/launchpad/briefcase/pad
|
||||
|
||||
/obj/item/device/launchpad_remote/ui_interact(mob/user, ui_key = "launchpad_remote", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
/obj/item/launchpad_remote/ui_interact(mob/user, ui_key = "launchpad_remote", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "launchpad_remote", "Briefcase Launchpad Remote", 550, 400, master_ui, state) //width, height
|
||||
@@ -258,7 +255,7 @@
|
||||
|
||||
ui.set_autoupdate(TRUE)
|
||||
|
||||
/obj/item/device/launchpad_remote/ui_data(mob/user)
|
||||
/obj/item/launchpad_remote/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["has_pad"] = pad ? TRUE : FALSE
|
||||
if(pad)
|
||||
@@ -273,7 +270,7 @@
|
||||
data["east_west"] = pad.x_offset > 0 ? "E":"W"
|
||||
return data
|
||||
|
||||
/obj/item/device/launchpad_remote/proc/teleport(mob/user, obj/machinery/launchpad/pad)
|
||||
/obj/item/launchpad_remote/proc/teleport(mob/user, obj/machinery/launchpad/pad)
|
||||
if(QDELETED(pad))
|
||||
to_chat(user, "<span class='warning'>ERROR: Launchpad not responding. Check launchpad integrity.</span>")
|
||||
return
|
||||
@@ -282,7 +279,7 @@
|
||||
return
|
||||
pad.doteleport(user, sending)
|
||||
|
||||
/obj/item/device/launchpad_remote/ui_act(action, params)
|
||||
/obj/item/launchpad_remote/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
switch(action)
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
var/list/categories = list(
|
||||
"human",
|
||||
"lizard",
|
||||
"fly",
|
||||
"moth",
|
||||
"plasmaman",
|
||||
"other"
|
||||
)
|
||||
@@ -70,9 +72,6 @@
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
if(exchange_parts(user, O))
|
||||
return
|
||||
|
||||
if(panel_open && default_deconstruction_crowbar(O))
|
||||
return
|
||||
|
||||
@@ -137,16 +136,16 @@
|
||||
//i need to create a body part manually using a set icon (otherwise it doesnt appear)
|
||||
var/obj/item/bodypart/limb
|
||||
limb = new buildpath(loc)
|
||||
if(selected_category=="human" || selected_category=="lizard") // Doing this because plasmamen have their limbs in a different icon file
|
||||
if(selected_category=="human" || selected_category=="lizard") //Species with greyscale parts should be included here
|
||||
limb.icon = 'icons/mob/human_parts_greyscale.dmi'
|
||||
limb.should_draw_greyscale = TRUE
|
||||
else
|
||||
limb.icon = 'icons/mob/human_parts.dmi'
|
||||
// Set this limb up using the specias name and body zone
|
||||
limb.icon_state = "[selected_category]_[limb.body_zone]"
|
||||
limb.name = "Synthetic [selected_category] [parse_zone(limb.body_zone)]"
|
||||
limb.name = "\improper synthetic [selected_category] [parse_zone(limb.body_zone)]"
|
||||
limb.desc = "A synthetic [selected_category] limb that will morph on its first use in surgery. This one is for the [parse_zone(limb.body_zone)]"
|
||||
limb.species_id = selected_category
|
||||
limb.should_draw_greyscale = TRUE
|
||||
limb.update_icon_dropped()
|
||||
|
||||
/obj/machinery/limbgrower/RefreshParts()
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
|
||||
updateicon()
|
||||
|
||||
else if (istype(I, /obj/item/card/id)||istype(I, /obj/item/device/pda))
|
||||
else if (istype(I, /obj/item/card/id)||istype(I, /obj/item/pda))
|
||||
if(open)
|
||||
if (src.allowed(user))
|
||||
src.locked = !src.locked
|
||||
|
||||
@@ -798,7 +798,7 @@ GLOBAL_LIST_EMPTY(allCasters)
|
||||
var/list/nametemp = list()
|
||||
var/find
|
||||
var/datum/picture/selection
|
||||
var/obj/item/device/camera/siliconcam/targetcam = null
|
||||
var/obj/item/camera/siliconcam/targetcam = null
|
||||
if(isAI(user))
|
||||
var/mob/living/silicon/ai/R = user
|
||||
targetcam = R.aicamera
|
||||
@@ -830,8 +830,8 @@ GLOBAL_LIST_EMPTY(allCasters)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/human_user = user
|
||||
if(human_user.wear_id)
|
||||
if(istype(human_user.wear_id, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/P = human_user.wear_id
|
||||
if(istype(human_user.wear_id, /obj/item/pda))
|
||||
var/obj/item/pda/P = human_user.wear_id
|
||||
if(P.id)
|
||||
scanned_user = "[P.id.registered_name] ([P.id.assignment])"
|
||||
else
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
var/base_icon_state = "standard"
|
||||
|
||||
var/emp_vunerable = 1 // Can be empd
|
||||
var/emp_vunerable = TRUE // Can be empd
|
||||
|
||||
var/scan_range = 7
|
||||
var/atom/base = null //for turrets inside other objects
|
||||
@@ -34,7 +34,7 @@
|
||||
armor = list("melee" = 50, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
|
||||
|
||||
var/locked = TRUE //if the turret's behaviour control access is locked
|
||||
var/controllock = 0 //if the turret responds to control panels
|
||||
var/controllock = FALSE //if the turret responds to control panels
|
||||
|
||||
var/installation = /obj/item/gun/energy/e_gun/turret //the type of weapon installed by default
|
||||
var/obj/item/gun/stored_gun = null
|
||||
@@ -224,9 +224,11 @@
|
||||
/obj/machinery/porta_turret/power_change()
|
||||
if(!anchored)
|
||||
update_icon()
|
||||
remove_control()
|
||||
return
|
||||
if(stat & BROKEN)
|
||||
update_icon()
|
||||
remove_control()
|
||||
else
|
||||
if( powered() )
|
||||
stat &= ~NOPOWER
|
||||
@@ -234,6 +236,7 @@
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
stat |= NOPOWER
|
||||
remove_control()
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -251,7 +254,7 @@
|
||||
if(prob(50))
|
||||
new /obj/item/stack/sheet/metal(loc, rand(1,4))
|
||||
if(prob(50))
|
||||
new /obj/item/device/assembly/prox_sensor(loc)
|
||||
new /obj/item/assembly/prox_sensor(loc)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You remove the turret but did not manage to salvage anything.</span>")
|
||||
qdel(src)
|
||||
@@ -272,7 +275,7 @@
|
||||
else if(anchored)
|
||||
anchored = FALSE
|
||||
to_chat(user, "<span class='notice'>You unsecure the exterior bolts on the turret.</span>")
|
||||
update_icon()
|
||||
power_change()
|
||||
invisibility = 0
|
||||
qdel(cover) //deletes the cover, and the turret instance itself becomes its own cover.
|
||||
|
||||
@@ -283,8 +286,8 @@
|
||||
to_chat(user, "<span class='notice'>Controls are now [locked ? "locked" : "unlocked"].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Access denied.</span>")
|
||||
else if(istype(I, /obj/item/device/multitool) && !locked)
|
||||
var/obj/item/device/multitool/M = I
|
||||
else if(istype(I, /obj/item/multitool) && !locked)
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = src
|
||||
to_chat(user, "<span class='notice'>You add [src] to multitool buffer.</span>")
|
||||
else
|
||||
@@ -296,7 +299,7 @@
|
||||
to_chat(user, "<span class='warning'>You short out [src]'s threat assessment circuits.</span>")
|
||||
visible_message("[src] hums oddly...")
|
||||
obj_flags |= EMAGGED
|
||||
controllock = 1
|
||||
controllock = TRUE
|
||||
on = FALSE //turns off the turret temporarily
|
||||
update_icon()
|
||||
sleep(60) //6 seconds for the traitor to gtfo of the area before the turret decides to ruin his shit
|
||||
@@ -312,10 +315,12 @@
|
||||
auth_weapons = pick(0, 1)
|
||||
stun_all = pick(0, 0, 0, 0, 1) //stun_all is a pretty big deal, so it's least likely to get turned on
|
||||
|
||||
on=0
|
||||
on = FALSE
|
||||
remove_control()
|
||||
|
||||
spawn(rand(60,600))
|
||||
if(!on)
|
||||
on=1
|
||||
on = TRUE
|
||||
|
||||
..()
|
||||
|
||||
@@ -337,7 +342,7 @@
|
||||
/obj/machinery/porta_turret/obj_break(damage_flag)
|
||||
if(!(flags_1 & NODECONSTRUCT_1) && !(stat & BROKEN))
|
||||
stat |= BROKEN //enables the BROKEN bit
|
||||
update_icon()
|
||||
power_change()
|
||||
invisibility = 0
|
||||
spark_system.start() //creates some sparks because they look cool
|
||||
qdel(cover) //deletes the cover - no need on keeping it there!
|
||||
@@ -583,10 +588,10 @@
|
||||
var/obj/machinery/porta_turret/P = target
|
||||
if(!istype(P))
|
||||
return
|
||||
P.remove_control(owner)
|
||||
P.remove_control(FALSE)
|
||||
|
||||
/obj/machinery/porta_turret/proc/give_control(mob/A)
|
||||
if(manual_control)
|
||||
if(manual_control || !can_interact(A))
|
||||
return FALSE
|
||||
remote_controller = A
|
||||
if(!quit_action)
|
||||
@@ -602,10 +607,12 @@
|
||||
popUp()
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/porta_turret/proc/remove_control()
|
||||
/obj/machinery/porta_turret/proc/remove_control(warning_message = TRUE)
|
||||
if(!manual_control)
|
||||
return FALSE
|
||||
if(remote_controller)
|
||||
if(warning_message)
|
||||
to_chat(remote_controller, "<span class='warning'>Your uplink to [src] has been severed!</span>")
|
||||
quit_action.Remove(remote_controller)
|
||||
toggle_action.Remove(remote_controller)
|
||||
remote_controller.click_intercept = null
|
||||
@@ -618,6 +625,9 @@
|
||||
/obj/machinery/porta_turret/proc/InterceptClickOn(mob/living/caller, params, atom/A)
|
||||
if(!manual_control)
|
||||
return FALSE
|
||||
if(!can_interact(caller))
|
||||
remove_control()
|
||||
return FALSE
|
||||
add_logs(caller,A,"fired with manual turret control at")
|
||||
target(A)
|
||||
return TRUE
|
||||
@@ -785,8 +795,8 @@
|
||||
if(stat & BROKEN)
|
||||
return
|
||||
|
||||
if (istype(I, /obj/item/device/multitool))
|
||||
var/obj/item/device/multitool/M = I
|
||||
if (istype(I, /obj/item/multitool))
|
||||
var/obj/item/multitool/M = I
|
||||
if(M.buffer && istype(M.buffer, /obj/machinery/porta_turret))
|
||||
turrets |= M.buffer
|
||||
to_chat(user, "You link \the [M.buffer] with \the [src]")
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
|
||||
if(PTURRET_SENSORS_ON)
|
||||
to_chat(user, "<span class='notice'>You remove the prox sensor from the turret frame.</span>")
|
||||
new /obj/item/device/assembly/prox_sensor(loc)
|
||||
new /obj/item/assembly/prox_sensor(loc)
|
||||
build_step = PTURRET_GUN_EQUIPPED
|
||||
|
||||
/obj/machinery/porta_turret_construct/attack_ai()
|
||||
|
||||
@@ -64,8 +64,8 @@
|
||||
updateUsrDialog()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Access denied.</span>")
|
||||
else if(istype(I, /obj/item/device/multitool) && !parent_turret.locked)
|
||||
var/obj/item/device/multitool/M = I
|
||||
else if(istype(I, /obj/item/multitool) && !parent_turret.locked)
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = parent_turret
|
||||
to_chat(user, "<span class='notice'>You add [parent_turret] to multitool buffer.</span>")
|
||||
else
|
||||
|
||||
@@ -48,34 +48,24 @@
|
||||
return
|
||||
|
||||
if(panel_open)
|
||||
if(istype(I, /obj/item/device/multitool))
|
||||
var/obj/item/device/multitool/M = I
|
||||
if(istype(I, /obj/item/multitool))
|
||||
var/obj/item/multitool/M = I
|
||||
M.buffer = src
|
||||
to_chat(user, "<span class='notice'>You save the data in [I]'s buffer.</span>")
|
||||
return 1
|
||||
else if(istype(I, /obj/item/device/multitool))
|
||||
var/obj/item/device/multitool/M = I
|
||||
else if(istype(I, /obj/item/multitool))
|
||||
var/obj/item/multitool/M = I
|
||||
if(istype(M.buffer, /obj/machinery/quantumpad))
|
||||
linked_pad = M.buffer
|
||||
to_chat(user, "<span class='notice'>You link [src] to the one in [I]'s buffer.</span>")
|
||||
return 1
|
||||
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
|
||||
if(default_deconstruction_crowbar(I))
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/quantumpad/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='warning'>The panel must be closed before operating this machine!</span>")
|
||||
return
|
||||
|
||||
/obj/machinery/quantumpad/interact(mob/user)
|
||||
if(!linked_pad || QDELETED(linked_pad))
|
||||
if(!map_pad_link_id || !initMappedLink())
|
||||
to_chat(user, "<span class='warning'>There is no linked pad!</span>")
|
||||
@@ -96,7 +86,7 @@
|
||||
if(linked_pad.stat & NOPOWER)
|
||||
to_chat(user, "<span class='warning'>Linked pad is not responding to ping.</span>")
|
||||
return
|
||||
src.add_fingerprint(user)
|
||||
add_fingerprint(user)
|
||||
doteleport(user)
|
||||
|
||||
/obj/machinery/quantumpad/proc/sparks()
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
/obj/item/gun/energy,
|
||||
/obj/item/melee/baton,
|
||||
/obj/item/ammo_box/magazine/recharge,
|
||||
/obj/item/device/modular_computer))
|
||||
/obj/item/modular_computer))
|
||||
|
||||
/obj/machinery/recharger/RefreshParts()
|
||||
for(var/obj/item/stock_parts/capacitor/C in component_parts)
|
||||
@@ -68,8 +68,6 @@
|
||||
default_deconstruction_crowbar(G)
|
||||
return
|
||||
|
||||
if(exchange_parts(user, G))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/recharger/attack_hand(mob/user)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/machinery/recharge_station
|
||||
name = "cyborg recharging station"
|
||||
desc = "This device recharges cyborgs and resupplies them with materials."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "borgcharger0"
|
||||
density = FALSE
|
||||
@@ -53,9 +54,6 @@
|
||||
if(default_deconstruction_screwdriver(user, "borgdecon2", "borgcharger0", P))
|
||||
return
|
||||
|
||||
if(exchange_parts(user, P))
|
||||
return
|
||||
|
||||
if(default_pry_open(P))
|
||||
return
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
var/item_recycle_sound = 'sound/items/welder.ogg'
|
||||
|
||||
/obj/machinery/recycler/Initialize()
|
||||
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM))
|
||||
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC), INFINITY, FALSE, null, null, null, TRUE)
|
||||
AddComponent(/datum/component/butchering, 1, amount_produced,amount_produced/5)
|
||||
. = ..()
|
||||
update_icon()
|
||||
@@ -55,9 +55,6 @@
|
||||
if(default_deconstruction_screwdriver(user, "grinder-oOpen", "grinder-o0", I))
|
||||
return
|
||||
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
|
||||
if(default_pry_open(I))
|
||||
return
|
||||
|
||||
@@ -110,7 +107,7 @@
|
||||
for(var/i in to_eat)
|
||||
var/atom/movable/AM = i
|
||||
var/obj/item/bodypart/head/as_head = AM
|
||||
var/obj/item/device/mmi/as_mmi = AM
|
||||
var/obj/item/mmi/as_mmi = AM
|
||||
var/brain_holder = istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /mob/living/brain)
|
||||
if(brain_holder)
|
||||
emergency_stop(AM)
|
||||
|
||||
@@ -51,7 +51,7 @@ GLOBAL_LIST_EMPTY(allConsoles)
|
||||
var/message = "";
|
||||
var/dpt = ""; //the department which will be receiving the message
|
||||
var/priority = -1 ; //Priority of the message being sent
|
||||
var/obj/item/device/radio/Radio
|
||||
var/obj/item/radio/Radio
|
||||
var/emergency //If an emergency has been called by this device. Acts as both a cooldown and lets the responder know where it the emergency was triggered from
|
||||
var/receive_ore_updates = FALSE //If ore redemption machines will send an update when it receives new ores.
|
||||
max_integrity = 300
|
||||
@@ -121,7 +121,7 @@ GLOBAL_LIST_EMPTY(allConsoles)
|
||||
if(!("[department]" in GLOB.req_console_information))
|
||||
GLOB.req_console_information += department
|
||||
|
||||
Radio = new /obj/item/device/radio(src)
|
||||
Radio = new /obj/item/radio(src)
|
||||
Radio.listening = 0
|
||||
|
||||
/obj/machinery/requests_console/Destroy()
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
update_icon()
|
||||
if(panel_open)
|
||||
interact(user)
|
||||
else if(exchange_parts(user, I) || default_deconstruction_crowbar(I))
|
||||
else if(default_deconstruction_crowbar(I))
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
name = "radiation suit storage unit"
|
||||
suit_type = /obj/item/clothing/suit/radiation
|
||||
helmet_type = /obj/item/clothing/head/radiation
|
||||
storage_type = /obj/item/device/geiger_counter
|
||||
storage_type = /obj/item/geiger_counter
|
||||
|
||||
/obj/machinery/suit_storage_unit/open
|
||||
state_open = TRUE
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
icon_state = "beaconsynd0"
|
||||
|
||||
// SINGULO BEACON SPAWNER
|
||||
/obj/item/device/sbeacondrop
|
||||
/obj/item/sbeacondrop
|
||||
name = "suspicious beacon"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "beacon"
|
||||
@@ -114,7 +114,7 @@
|
||||
var/droptype = /obj/machinery/power/singularity_beacon/syndicate
|
||||
|
||||
|
||||
/obj/item/device/sbeacondrop/attack_self(mob/user)
|
||||
/obj/item/sbeacondrop/attack_self(mob/user)
|
||||
if(user)
|
||||
to_chat(user, "<span class='notice'>Locked In.</span>")
|
||||
new droptype( user.loc )
|
||||
@@ -122,14 +122,14 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/device/sbeacondrop/bomb
|
||||
/obj/item/sbeacondrop/bomb
|
||||
desc = "A label on it reads: <i>Warning: Activating this device will send a high-ordinance explosive to your location</i>."
|
||||
droptype = /obj/machinery/syndicatebomb
|
||||
|
||||
/obj/item/device/sbeacondrop/powersink
|
||||
/obj/item/sbeacondrop/powersink
|
||||
desc = "A label on it reads: <i>Warning: Activating this device will send a power draining device to your location</i>."
|
||||
droptype = /obj/item/device/powersink
|
||||
droptype = /obj/item/powersink
|
||||
|
||||
/obj/item/device/sbeacondrop/clownbomb
|
||||
/obj/item/sbeacondrop/clownbomb
|
||||
desc = "A label on it reads: <i>Warning: Activating this device will send a silly explosive to your location</i>."
|
||||
droptype = /obj/machinery/syndicatebomb/badmin/clown
|
||||
|
||||
@@ -499,7 +499,7 @@
|
||||
|
||||
///Syndicate Detonator (aka the big red button)///
|
||||
|
||||
/obj/item/device/syndicatedetonator
|
||||
/obj/item/syndicatedetonator
|
||||
name = "big red button"
|
||||
desc = "Your standard issue bomb synchronizing button. Five second safety delay to prevent 'accidents'."
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
@@ -512,7 +512,7 @@
|
||||
var/detonated = 0
|
||||
var/existant = 0
|
||||
|
||||
/obj/item/device/syndicatedetonator/attack_self(mob/user)
|
||||
/obj/item/syndicatedetonator/attack_self(mob/user)
|
||||
if(timer < world.time)
|
||||
for(var/obj/machinery/syndicatebomb/B in GLOB.machines)
|
||||
if(B.active)
|
||||
|
||||
@@ -144,25 +144,25 @@
|
||||
switch (transmission_method)
|
||||
if (TRANSMISSION_SUBSPACE)
|
||||
// Reaches any radios on the levels
|
||||
for(var/obj/item/device/radio/R in GLOB.all_radios["[frequency]"])
|
||||
for(var/obj/item/radio/R in GLOB.all_radios["[frequency]"])
|
||||
if(R.can_receive(frequency, levels))
|
||||
radios += R
|
||||
|
||||
// Syndicate radios can hear all well-known radio channels
|
||||
if (num2text(frequency) in GLOB.reverseradiochannels)
|
||||
for(var/obj/item/device/radio/R in GLOB.all_radios["[FREQ_SYNDICATE]"])
|
||||
for(var/obj/item/radio/R in GLOB.all_radios["[FREQ_SYNDICATE]"])
|
||||
if(R.can_receive(FREQ_SYNDICATE, list(R.z)))
|
||||
radios |= R
|
||||
|
||||
if (TRANSMISSION_RADIO)
|
||||
// Only radios not currently in subspace mode
|
||||
for(var/obj/item/device/radio/R in GLOB.all_radios["[frequency]"])
|
||||
for(var/obj/item/radio/R in GLOB.all_radios["[frequency]"])
|
||||
if(!R.subspace_transmission && R.can_receive(frequency, levels))
|
||||
radios += R
|
||||
|
||||
if (TRANSMISSION_SUPERSPACE)
|
||||
// Only radios which are independent
|
||||
for(var/obj/item/device/radio/R in GLOB.all_radios["[frequency]"])
|
||||
for(var/obj/item/radio/R in GLOB.all_radios["[frequency]"])
|
||||
if(R.independent && R.can_receive(frequency, levels))
|
||||
radios += R
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
var/optioncount = 7
|
||||
// Custom Message Properties
|
||||
var/customsender = "System Administrator"
|
||||
var/obj/item/device/pda/customrecepient = null
|
||||
var/obj/item/pda/customrecepient = null
|
||||
var/customjob = "Admin"
|
||||
var/custommessage = "This is a test, please ignore."
|
||||
|
||||
@@ -388,7 +388,7 @@
|
||||
//Select Receiver
|
||||
if("Recepient")
|
||||
//Get out list of viable PDAs
|
||||
var/list/obj/item/device/pda/sendPDAs = get_viewable_pdas()
|
||||
var/list/obj/item/pda/sendPDAs = get_viewable_pdas()
|
||||
if(GLOB.PDAs && GLOB.PDAs.len > 0)
|
||||
customrecepient = input(usr, "Select a PDA from the list.") as null|anything in sortNames(sendPDAs)
|
||||
else
|
||||
|
||||
@@ -18,12 +18,8 @@
|
||||
|
||||
if(default_deconstruction_screwdriver(user, icon_open, icon_closed, P))
|
||||
return
|
||||
|
||||
else if(exchange_parts(user, P))
|
||||
return
|
||||
|
||||
// Using a multitool lets you access the receiver's interface
|
||||
else if(istype(P, /obj/item/device/multitool))
|
||||
else if(istype(P, /obj/item/multitool))
|
||||
attack_hand(user)
|
||||
|
||||
else if(default_deconstruction_crowbar(P))
|
||||
@@ -36,9 +32,9 @@
|
||||
// You need a multitool to use this, or be silicon
|
||||
if(!issilicon(user))
|
||||
// istype returns false if the value is null
|
||||
if(!istype(user.get_active_held_item(), /obj/item/device/multitool))
|
||||
if(!istype(user.get_active_held_item(), /obj/item/multitool))
|
||||
return
|
||||
var/obj/item/device/multitool/P = get_multitool(user)
|
||||
var/obj/item/multitool/P = get_multitool(user)
|
||||
var/dat
|
||||
dat = "<font face = \"Courier\"><HEAD><TITLE>[name]</TITLE></HEAD><center><H3>[name] Access</H3></center>"
|
||||
dat += "<br>[temp]<br>"
|
||||
@@ -99,15 +95,15 @@
|
||||
|
||||
/obj/machinery/telecomms/proc/get_multitool(mob/user)
|
||||
|
||||
var/obj/item/device/multitool/P = null
|
||||
var/obj/item/multitool/P = null
|
||||
// Let's double check
|
||||
if(!issilicon(user) && istype(user.get_active_held_item(), /obj/item/device/multitool))
|
||||
if(!issilicon(user) && istype(user.get_active_held_item(), /obj/item/multitool))
|
||||
P = user.get_active_held_item()
|
||||
else if(isAI(user))
|
||||
var/mob/living/silicon/ai/U = user
|
||||
P = U.aiMulti
|
||||
else if(iscyborg(user) && in_range(user, src))
|
||||
if(istype(user.get_active_held_item(), /obj/item/device/multitool))
|
||||
if(istype(user.get_active_held_item(), /obj/item/multitool))
|
||||
P = user.get_active_held_item()
|
||||
return P
|
||||
|
||||
@@ -167,10 +163,10 @@
|
||||
return
|
||||
|
||||
if(!issilicon(usr))
|
||||
if(!istype(usr.get_active_held_item(), /obj/item/device/multitool))
|
||||
if(!istype(usr.get_active_held_item(), /obj/item/multitool))
|
||||
return
|
||||
|
||||
var/obj/item/device/multitool/P = get_multitool(usr)
|
||||
var/obj/item/multitool/P = get_multitool(usr)
|
||||
|
||||
if(href_list["input"])
|
||||
switch(href_list["input"])
|
||||
|
||||
@@ -37,5 +37,5 @@
|
||||
signal.broadcast()
|
||||
|
||||
/obj/machinery/telecomms/allinone/attackby(obj/item/P, mob/user, params)
|
||||
if(istype(P, /obj/item/device/multitool))
|
||||
if(istype(P, /obj/item/multitool))
|
||||
return attack_hand(user)
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
/datum/signal/subspace/pda/broadcast()
|
||||
if (!logged) // Can only go through if a message server logs it
|
||||
return
|
||||
for (var/obj/item/device/pda/P in GLOB.PDAs)
|
||||
for (var/obj/item/pda/P in GLOB.PDAs)
|
||||
if ("[P.owner] ([P.ownjob])" in data["targets"])
|
||||
P.receive_message(src)
|
||||
|
||||
|
||||
@@ -55,8 +55,6 @@
|
||||
power_station.engaged = 0 //hub with panel open is off, so the station must be informed.
|
||||
update_icon()
|
||||
return
|
||||
if(exchange_parts(user, W))
|
||||
return
|
||||
if(default_deconstruction_crowbar(W))
|
||||
return
|
||||
return ..()
|
||||
@@ -151,8 +149,8 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/teleport/station/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/device/multitool))
|
||||
var/obj/item/device/multitool/M = W
|
||||
if(istype(W, /obj/item/multitool))
|
||||
var/obj/item/multitool/M = W
|
||||
if(panel_open)
|
||||
M.buffer = src
|
||||
to_chat(user, "<span class='caution'>You download the data to the [W.name]'s buffer.</span>")
|
||||
@@ -169,9 +167,6 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
else if(exchange_parts(user, W))
|
||||
return
|
||||
|
||||
else if(default_deconstruction_crowbar(W))
|
||||
return
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/mecha/combat/mmi_moved_inside(obj/item/device/mmi/mmi_as_oc,mob/user)
|
||||
/obj/mecha/combat/mmi_moved_inside(obj/item/mmi/mmi_as_oc,mob/user)
|
||||
if(..())
|
||||
if(occupant.client && occupant.client.mouse_pointer_icon == initial(occupant.client.mouse_pointer_icon))
|
||||
occupant.client.mouse_pointer_icon = 'icons/mecha/mecha_mouse.dmi'
|
||||
|
||||
@@ -369,7 +369,7 @@
|
||||
name = "mousetrap mortar"
|
||||
desc = "Equipment for clown exosuits. Launches armed mousetraps."
|
||||
icon_state = "mecha_mousetrapmrtr"
|
||||
projectile = /obj/item/device/assembly/mousetrap/armed
|
||||
projectile = /obj/item/assembly/mousetrap/armed
|
||||
fire_sound = 'sound/items/bikehorn.ogg'
|
||||
projectiles = 15
|
||||
missile_speed = 1.5
|
||||
@@ -382,7 +382,7 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/proj_init(var/obj/item/device/assembly/mousetrap/armed/M)
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/proj_init(var/obj/item/assembly/mousetrap/armed/M)
|
||||
M.secured = 1
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/turf/open/floor/mech_bay_recharge_floor // Whos idea it was
|
||||
name = "mech bay recharge station" // Recharging turfs
|
||||
desc = "Parking a mech on this station will recharge its internal power cell."
|
||||
icon = 'icons/turf/floors.dmi' // That are set in stone to check the west turf for recharge port
|
||||
icon_state = "recharge_floor" // Some people just want to watch the world burn i guess
|
||||
|
||||
@@ -12,6 +13,7 @@
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port
|
||||
name = "mech bay power port"
|
||||
desc = "This port recharges a mech's internal power cell."
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
dir = EAST
|
||||
@@ -62,16 +64,13 @@
|
||||
recharging_turf = get_step(loc, dir)
|
||||
return
|
||||
|
||||
if(exchange_parts(user, I))
|
||||
return
|
||||
|
||||
if(default_deconstruction_crowbar(I))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console
|
||||
name = "mech bay power control console"
|
||||
desc = "Used to control mechbay power ports."
|
||||
desc = "Displays the status of mechs connected to the recharge station."
|
||||
icon_screen = "recharge_comp"
|
||||
icon_keyboard = "rd_key"
|
||||
circuit = /obj/item/circuitboard/computer/mech_bay_power_console
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
/obj/machinery/mecha_part_fabricator/Initialize()
|
||||
var/datum/component/material_container/materials = AddComponent(/datum/component/material_container,
|
||||
list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0,
|
||||
FALSE, list(/obj/item/stack, /obj/item/stack/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
|
||||
FALSE, list(/obj/item/stack), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
|
||||
materials.precise_insertion = TRUE
|
||||
stored_research = new
|
||||
return ..()
|
||||
@@ -401,9 +401,6 @@
|
||||
if(default_deconstruction_screwdriver(user, "fab-o", "fab-idle", W))
|
||||
return TRUE
|
||||
|
||||
if(exchange_parts(user, W))
|
||||
return TRUE
|
||||
|
||||
if(default_deconstruction_crowbar(W))
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
var/datum/gas_mixture/cabin_air
|
||||
var/obj/machinery/atmospherics/components/unary/portables_connector/connected_port = null
|
||||
|
||||
var/obj/item/device/radio/mech/radio
|
||||
var/obj/item/radio/mech/radio
|
||||
var/list/trackers = list()
|
||||
|
||||
var/max_temperature = 25000
|
||||
@@ -118,7 +118,7 @@
|
||||
|
||||
hud_possible = list (DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_TRACK_HUD)
|
||||
|
||||
/obj/item/device/radio/mech //this has to go somewhere
|
||||
/obj/item/radio/mech //this has to go somewhere
|
||||
|
||||
/obj/mecha/Initialize()
|
||||
. = ..()
|
||||
@@ -672,7 +672,7 @@
|
||||
return
|
||||
to_chat(user, "<a href='?src=[REF(user)];ai_take_control=[REF(src)]'><span class='boldnotice'>Take control of exosuit?</span></a><br>")
|
||||
|
||||
/obj/mecha/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/device/aicard/card)
|
||||
/obj/mecha/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card)
|
||||
if(!..())
|
||||
return
|
||||
|
||||
@@ -866,7 +866,7 @@
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/mecha/proc/mmi_move_inside(obj/item/device/mmi/mmi_as_oc, mob/user)
|
||||
/obj/mecha/proc/mmi_move_inside(obj/item/mmi/mmi_as_oc, mob/user)
|
||||
if(!mmi_as_oc.brainmob || !mmi_as_oc.brainmob.client)
|
||||
to_chat(user, "<span class='warning'>Consciousness matrix not detected!</span>")
|
||||
return FALSE
|
||||
@@ -891,7 +891,7 @@
|
||||
to_chat(user, "<span class='notice'>You stop inserting the MMI.</span>")
|
||||
return FALSE
|
||||
|
||||
/obj/mecha/proc/mmi_moved_inside(obj/item/device/mmi/mmi_as_oc, mob/user)
|
||||
/obj/mecha/proc/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user)
|
||||
if(!(Adjacent(mmi_as_oc) && Adjacent(user)))
|
||||
return FALSE
|
||||
if(!mmi_as_oc.brainmob || !mmi_as_oc.brainmob.client)
|
||||
@@ -967,8 +967,8 @@
|
||||
log_message("[mob_container] moved out.")
|
||||
L << browse(null, "window=exosuit")
|
||||
|
||||
if(istype(mob_container, /obj/item/device/mmi))
|
||||
var/obj/item/device/mmi/mmi = mob_container
|
||||
if(istype(mob_container, /obj/item/mmi))
|
||||
var/obj/item/mmi/mmi = mob_container
|
||||
if(mmi.brainmob)
|
||||
L.forceMove(mmi)
|
||||
L.reset_perspective()
|
||||
|
||||
@@ -1409,7 +1409,7 @@
|
||||
|
||||
//26
|
||||
list(
|
||||
"key" = /obj/item/device/assembly/signaler/anomaly,
|
||||
"key" = /obj/item/assembly/signaler/anomaly,
|
||||
"action" = ITEM_DELETE,
|
||||
"back_key" = TOOL_WELDER,
|
||||
"desc" = "Anomaly core socket is open.",
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
|
||||
/obj/mecha/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
|
||||
if(istype(W, /obj/item/device/mmi))
|
||||
if(istype(W, /obj/item/mmi))
|
||||
if(mmi_move_inside(W,user))
|
||||
to_chat(user, "[src]-[W] interface initialized successfully.")
|
||||
else
|
||||
@@ -180,7 +180,7 @@
|
||||
if(istype(W, /obj/item/card/id))
|
||||
id_card = W
|
||||
else
|
||||
var/obj/item/device/pda/pda = W
|
||||
var/obj/item/pda/pda = W
|
||||
id_card = pda.id
|
||||
output_maintenance_dialog(id_card, user)
|
||||
return
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
</head>
|
||||
<body>
|
||||
[add_req_access?"<a href='?src=[REF(src)];req_access=1;id_card=[REF(id_card)];user=[REF(user)]'>Edit operation keycodes</a>":null]
|
||||
[maint_access?"<a href='?src=[REF(src)];maint_access=1;id_card=[REF(id_card)];user=[REF(user)]'>Initiate maintenance protocol</a>":null]
|
||||
[maint_access?"<a href='?src=[REF(src)];maint_access=1;id_card=[REF(id_card)];user=[REF(user)]'>[(state>0) ? "Terminate" : "Initiate"] maintenance protocol</a>":null]
|
||||
[(state>0) ?"<a href='?src=[REF(src)];set_internal_tank_valve=1;user=[REF(user)]'>Set Cabin Air Pressure</a>":null]
|
||||
</body>
|
||||
</html>"}
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
to_chat(user, "<span class='warning'>You don't see anything that can be pried with [I]!</span>")
|
||||
|
||||
|
||||
/obj/structure/mecha_wreckage/transfer_ai(interaction, mob/user, null, obj/item/device/aicard/card)
|
||||
/obj/structure/mecha_wreckage/transfer_ai(interaction, mob/user, null, obj/item/aicard/card)
|
||||
if(!..())
|
||||
return
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
anchored = TRUE
|
||||
light_range = 3
|
||||
var/movechance = 70
|
||||
var/obj/item/device/assembly/signaler/anomaly/aSignal = null
|
||||
var/obj/item/assembly/signaler/anomaly/aSignal = null
|
||||
var/area/impact_area
|
||||
|
||||
var/lifespan = 990
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
|
||||
/obj/effect/anomaly/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/device/analyzer))
|
||||
if(istype(I, /obj/item/analyzer))
|
||||
to_chat(user, "<span class='notice'>Analyzing... [src]'s unstable field is fluctuating along frequency [format_frequency(aSignal.frequency)], code [aSignal.code].</span>")
|
||||
|
||||
///////////////////////
|
||||
@@ -193,9 +193,9 @@
|
||||
var/turf/T = safepick(get_area_turfs(impact_area))
|
||||
if(T)
|
||||
// Calculate new position (searches through beacons in world)
|
||||
var/obj/item/device/beacon/chosen
|
||||
var/obj/item/beacon/chosen
|
||||
var/list/possible = list()
|
||||
for(var/obj/item/device/beacon/W in GLOB.teleportbeacons)
|
||||
for(var/obj/item/beacon/W in GLOB.teleportbeacons)
|
||||
possible += W
|
||||
|
||||
if(possible.len > 0)
|
||||
@@ -218,7 +218,7 @@
|
||||
var/y_distance = TO.y - FROM.y
|
||||
var/x_distance = TO.x - FROM.x
|
||||
for (var/atom/movable/A in urange(12, FROM )) // iterate thru list of mobs in the area
|
||||
if(istype(A, /obj/item/device/beacon))
|
||||
if(istype(A, /obj/item/beacon))
|
||||
continue // don't teleport beacons because that's just insanely stupid
|
||||
if(A.anchored)
|
||||
continue
|
||||
|
||||
@@ -224,3 +224,11 @@
|
||||
icon_state = "flour"
|
||||
color = "#C8A5DC"
|
||||
beauty = -200
|
||||
|
||||
/obj/effect/decal/cleanable/insectguts
|
||||
name = "insect guts"
|
||||
desc = "One bug squashed. Four more will rise in its place."
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "xfloor1"
|
||||
random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
|
||||
beauty = -300
|
||||
|
||||
@@ -88,8 +88,8 @@
|
||||
auto_process = FALSE
|
||||
|
||||
/datum/effect_system/trail_follow/ion/flight/set_dir(obj/effect/particle_effect/ion_trails/I)
|
||||
if(istype(holder, /obj/item/device/flightpack))
|
||||
var/obj/item/device/flightpack/F = holder
|
||||
if(istype(holder, /obj/item/flightpack))
|
||||
var/obj/item/flightpack/F = holder
|
||||
if(istype(F.wearer))
|
||||
I.setDir(F.wearer.dir)
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
/obj/effect/spawner/newbomb/Initialize()
|
||||
. = ..()
|
||||
var/obj/item/device/transfer_valve/V = new(src.loc)
|
||||
var/obj/item/transfer_valve/V = new(src.loc)
|
||||
var/obj/item/tank/internals/plasma/full/PT = new(V)
|
||||
var/obj/item/tank/internals/oxygen/OT = new(V)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
OT.master = V
|
||||
|
||||
if(assembly_type)
|
||||
var/obj/item/device/assembly/A = new assembly_type(V)
|
||||
var/obj/item/assembly/A = new assembly_type(V)
|
||||
V.attached_device = A
|
||||
A.holder = V
|
||||
A.toggle_secure()
|
||||
@@ -31,16 +31,16 @@
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/effect/spawner/newbomb/timer
|
||||
assembly_type = /obj/item/device/assembly/timer
|
||||
assembly_type = /obj/item/assembly/timer
|
||||
|
||||
/obj/effect/spawner/newbomb/timer/syndicate
|
||||
btemp1 = 150
|
||||
btemp2 = 20
|
||||
|
||||
/obj/effect/spawner/newbomb/proximity
|
||||
assembly_type = /obj/item/device/assembly/prox_sensor
|
||||
assembly_type = /obj/item/assembly/prox_sensor
|
||||
|
||||
/obj/effect/spawner/newbomb/radio
|
||||
assembly_type = /obj/item/device/assembly/signaler
|
||||
assembly_type = /obj/item/assembly/signaler
|
||||
|
||||
|
||||
|
||||
@@ -193,7 +193,8 @@
|
||||
/obj/item/aiModule/core/full/peacekeeper,
|
||||
/obj/item/aiModule/core/full/reporter,
|
||||
/obj/item/aiModule/core/full/robocop,
|
||||
/obj/item/aiModule/core/full/liveandletlive
|
||||
/obj/item/aiModule/core/full/liveandletlive,
|
||||
/obj/item/aiModule/core/full/hulkamania
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/aimodule_harmful // These will get the shuttle called
|
||||
|
||||
@@ -100,7 +100,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
var/force_string //string form of an item's force. Edit this var only to set a custom force string
|
||||
var/last_force_string_check = 0
|
||||
var/tip_timer
|
||||
|
||||
|
||||
var/icon_override //CIT CHANGE - adds icon_override var. Will be removed with #4322
|
||||
|
||||
var/trigger_guard = TRIGGER_GUARD_NONE
|
||||
@@ -146,9 +146,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
QDEL_NULL(rpg_loot)
|
||||
return ..()
|
||||
|
||||
/obj/item/device
|
||||
icon = 'icons/obj/device.dmi'
|
||||
|
||||
/obj/item/proc/check_allowed_items(atom/target, not_inside, target_self)
|
||||
if(((src in target) && !target_self) || (!isturf(target.loc) && !isturf(target) && not_inside))
|
||||
return 0
|
||||
@@ -352,7 +349,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
return ITALICS | REDUCE_RANGE
|
||||
|
||||
/obj/item/proc/dropped(mob/user)
|
||||
SendSignal(COMSIG_ITEM_DROPPED, user)
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.Remove(user)
|
||||
@@ -449,17 +445,17 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
if(isbrain(M))
|
||||
to_chat(user, "<span class='danger'>You cannot locate any organic eyes on this brain!</span>")
|
||||
return
|
||||
|
||||
|
||||
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)//CIT CHANGE - makes eyestabbing impossible if you're in stamina softcrit
|
||||
to_chat(user, "<span class='danger'>You're too exhausted for that.</span>")//CIT CHANGE - ditto
|
||||
return //CIT CHANGE - ditto
|
||||
|
||||
|
||||
src.add_fingerprint(user)
|
||||
|
||||
playsound(loc, src.hitsound, 30, 1, -1)
|
||||
|
||||
user.do_attack_animation(M)
|
||||
|
||||
|
||||
user.adjustStaminaLossBuffered(10)//CIT CHANGE - makes eyestabbing cost stamina
|
||||
|
||||
if(M != user)
|
||||
|
||||
@@ -568,3 +568,9 @@ AI MODULES
|
||||
laws += generate_ion_law()
|
||||
..()
|
||||
laws = list()
|
||||
|
||||
/******************H.O.G.A.N.***************/
|
||||
|
||||
/obj/item/aiModule/core/full/hulkamania
|
||||
name = "'H.O.G.A.N.' Core AI Module"
|
||||
law_id = "hulkamania"
|
||||
|
||||
@@ -636,7 +636,7 @@ RLD
|
||||
if(useResource(launchcost, user))
|
||||
activate()
|
||||
to_chat(user, "<span class='notice'>You fire a glowstick!</span>")
|
||||
var/obj/item/device/flashlight/glowstick/G = new /obj/item/device/flashlight/glowstick(start)
|
||||
var/obj/item/flashlight/glowstick/G = new /obj/item/flashlight/glowstick(start)
|
||||
G.color = color_choice
|
||||
G.light_color = G.color
|
||||
G.throw_at(A, 9, 3, user)
|
||||
|
||||
@@ -13,11 +13,11 @@
|
||||
slot_flags = SLOT_BELT
|
||||
usesound = 'sound/effects/spray2.ogg'
|
||||
|
||||
var/obj/item/device/toner/ink = null
|
||||
var/obj/item/toner/ink = null
|
||||
|
||||
/obj/item/airlock_painter/New()
|
||||
..()
|
||||
ink = new /obj/item/device/toner(src)
|
||||
ink = new /obj/item/toner(src)
|
||||
|
||||
//This proc doesn't just check if the painter can be used, but also uses it.
|
||||
//Only call this if you are certain that the painter will be used right after this check!
|
||||
@@ -105,7 +105,7 @@
|
||||
|
||||
|
||||
/obj/item/airlock_painter/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/device/toner))
|
||||
if(istype(W, /obj/item/toner))
|
||||
if(ink)
|
||||
to_chat(user, "<span class='notice'>[src] already contains \a [ink].</span>")
|
||||
return
|
||||
|
||||
@@ -314,6 +314,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
src.pixel_x = rand(-5, 5)
|
||||
src.pixel_y = rand(-5, 5)
|
||||
|
||||
/obj/item/clothing/mask/cigarette/rollie/nicotine
|
||||
list_reagents = list("nicotine" = 15)
|
||||
|
||||
/obj/item/clothing/mask/cigarette/rollie/trippy
|
||||
list_reagents = list("nicotine" = 15, "mushroomhallucinogen" = 35)
|
||||
starts_lit = TRUE
|
||||
@@ -706,7 +709,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
to_chat(user, "<span class='notice'>You close the cap on [src].</span>")
|
||||
cut_overlays()
|
||||
|
||||
if(istype(O, /obj/item/device/multitool))
|
||||
if(istype(O, /obj/item/multitool))
|
||||
if(screw && !(obj_flags & EMAGGED))//also kinky
|
||||
if(!super)
|
||||
cut_overlays()
|
||||
|
||||
@@ -224,10 +224,6 @@
|
||||
name = "Supply Request Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/cargo/request
|
||||
|
||||
/obj/item/circuitboard/computer/stockexchange
|
||||
name = "circuit board (Stock Exchange Console)"
|
||||
build_path = /obj/machinery/computer/stockexchange
|
||||
|
||||
/obj/item/circuitboard/computer/operating
|
||||
name = "Operating Computer (Computer Board)"
|
||||
build_path = /obj/machinery/computer/operating
|
||||
|
||||
@@ -204,6 +204,7 @@
|
||||
|
||||
/obj/item/circuitboard/machine/vendor
|
||||
name = "Booze-O-Mat Vendor (Machine Board)"
|
||||
desc = "You could turn the \"brand selection\" dial using a screwdriver."
|
||||
build_path = /obj/machinery/vending/boozeomat
|
||||
req_components = list(
|
||||
/obj/item/vending_refill/boozeomat = 3)
|
||||
@@ -449,7 +450,7 @@
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/device/assembly/igniter = 1)
|
||||
/obj/item/assembly/igniter = 1)
|
||||
needs_anchored = FALSE
|
||||
|
||||
/obj/item/circuitboard/machine/mining_equipment_vendor
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
. = ..()
|
||||
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50)
|
||||
|
||||
/obj/item/weapon/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
/obj/item/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
M.SendSignal(COMSIG_ADD_MOOD_EVENT, "honk", /datum/mood_event/honk)
|
||||
|
||||
/obj/item/bikehorn/suicide_act(mob/user)
|
||||
|
||||
@@ -43,13 +43,13 @@
|
||||
|
||||
switch(mode)
|
||||
if(WAND_OPEN)
|
||||
data.plaintext_data = "open"
|
||||
data.data["data"] = "open"
|
||||
if(WAND_BOLT)
|
||||
data.plaintext_data = "bolt"
|
||||
data.data["data"] = "bolt"
|
||||
if(WAND_EMERGENCY)
|
||||
data.plaintext_data = "emergency"
|
||||
data.data["data"] = "emergency"
|
||||
|
||||
data.plaintext_data_secondary = "toggle"
|
||||
data.data["data_secondary"] = "toggle"
|
||||
data.passkey = access_list
|
||||
|
||||
ntnet_send(data)
|
||||
|
||||
@@ -247,6 +247,8 @@
|
||||
var/cost = 1
|
||||
if(paint_mode == PAINT_LARGE_HORIZONTAL)
|
||||
cost = 5
|
||||
if(istype(target, /obj/item/canvas))
|
||||
cost = 0
|
||||
var/charges_used = use_charges(user, cost)
|
||||
if(!charges_used)
|
||||
return
|
||||
|
||||
@@ -9,8 +9,9 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
#define PDA_SCANNER_REAGENT 3
|
||||
#define PDA_SCANNER_HALOGEN 4
|
||||
#define PDA_SCANNER_GAS 5
|
||||
#define PDA_SPAM_DELAY 2 MINUTES
|
||||
|
||||
/obj/item/device/pda
|
||||
/obj/item/pda
|
||||
name = "\improper PDA"
|
||||
desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge."
|
||||
icon = 'icons/obj/pda.dmi'
|
||||
@@ -52,6 +53,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
var/toff = FALSE //If TRUE, messenger disabled
|
||||
var/tnote = null //Current Texts
|
||||
var/last_text //No text spamming
|
||||
var/last_everyone //No text for everyone spamming
|
||||
var/last_noise //Also no honk spamming that's bad too
|
||||
var/ttone = "beep" //The ringtone!
|
||||
var/lock_code = "" // Lockcode to unlock uplink
|
||||
@@ -68,17 +70,17 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
var/obj/item/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both.
|
||||
var/ownjob = null //related to above
|
||||
|
||||
var/obj/item/device/paicard/pai = null // A slot for a personal AI device
|
||||
var/obj/item/paicard/pai = null // A slot for a personal AI device
|
||||
|
||||
var/icon/photo //Scanned photo
|
||||
|
||||
var/list/contained_item = list(/obj/item/pen, /obj/item/toy/crayon, /obj/item/lipstick, /obj/item/device/flashlight/pen, /obj/item/clothing/mask/cigarette)
|
||||
var/list/contained_item = list(/obj/item/pen, /obj/item/toy/crayon, /obj/item/lipstick, /obj/item/flashlight/pen, /obj/item/clothing/mask/cigarette)
|
||||
var/obj/item/inserted_item //Used for pen, crayon, and lipstick insertion or removal. Same as above.
|
||||
var/overlays_x_offset = 0 //x offset to use for certain overlays
|
||||
|
||||
var/underline_flag = TRUE //flag for underline
|
||||
|
||||
/obj/item/device/pda/suicide_act(mob/living/carbon/user)
|
||||
/obj/item/pda/suicide_act(mob/living/carbon/user)
|
||||
var/deathMessage = msg_input(user)
|
||||
if (!deathMessage)
|
||||
deathMessage = "i ded"
|
||||
@@ -86,14 +88,14 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
tnote += "<i><b>→ To The Grim Reaper:</b></i><br>[deathMessage]<br>"//records a message in their PDA as being sent to the grim reaper
|
||||
return BRUTELOSS
|
||||
|
||||
/obj/item/device/pda/examine(mob/user)
|
||||
/obj/item/pda/examine(mob/user)
|
||||
..()
|
||||
if(!id && !inserted_item)
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Alt-click to remove contents.</span>")
|
||||
|
||||
/obj/item/device/pda/Initialize()
|
||||
/obj/item/pda/Initialize()
|
||||
. = ..()
|
||||
if(fon)
|
||||
set_light(f_lum)
|
||||
@@ -107,7 +109,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
inserted_item = new /obj/item/pen(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/pda/equipped(mob/user, slot)
|
||||
/obj/item/pda/equipped(mob/user, slot)
|
||||
. = ..()
|
||||
if(!equipped)
|
||||
if(user.client)
|
||||
@@ -130,19 +132,19 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
font_mode = FONT_MONO
|
||||
equipped = TRUE
|
||||
|
||||
/obj/item/device/pda/proc/update_label()
|
||||
/obj/item/pda/proc/update_label()
|
||||
name = "PDA-[owner] ([ownjob])" //Name generalisation
|
||||
|
||||
/obj/item/device/pda/GetAccess()
|
||||
/obj/item/pda/GetAccess()
|
||||
if(id)
|
||||
return id.GetAccess()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/device/pda/GetID()
|
||||
/obj/item/pda/GetID()
|
||||
return id
|
||||
|
||||
/obj/item/device/pda/update_icon()
|
||||
/obj/item/pda/update_icon()
|
||||
cut_overlays()
|
||||
var/mutable_appearance/overlay = new()
|
||||
overlay.pixel_x = overlays_x_offset
|
||||
@@ -163,13 +165,13 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
overlay.icon_state = "pai_off_overlay"
|
||||
add_overlay(new /mutable_appearance(overlay))
|
||||
|
||||
/obj/item/device/pda/MouseDrop(obj/over_object, src_location, over_location)
|
||||
/obj/item/pda/MouseDrop(obj/over_object, src_location, over_location)
|
||||
var/mob/M = usr
|
||||
if((!istype(over_object, /obj/screen)) && usr.canUseTopic(src))
|
||||
return attack_self(M)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/pda/attack_self(mob/user)
|
||||
/obj/item/pda/attack_self(mob/user)
|
||||
if(!user.IsAdvancedToolUser())
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
@@ -309,7 +311,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
var/count = 0
|
||||
|
||||
if (!toff)
|
||||
for (var/obj/item/device/pda/P in sortNames(get_viewable_pdas()))
|
||||
for (var/obj/item/pda/P in sortNames(get_viewable_pdas()))
|
||||
if (P == src)
|
||||
continue
|
||||
dat += "<li><a href='byond://?src=[REF(src)];choice=Message;target=[REF(P)]'>[P]</a>"
|
||||
@@ -368,7 +370,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
user << browse(dat, "window=pda;size=400x450;border=1;can_resize=1;can_minimize=0")
|
||||
onclose(user, "pda", src)
|
||||
|
||||
/obj/item/device/pda/Topic(href, href_list)
|
||||
/obj/item/pda/Topic(href, href_list)
|
||||
..()
|
||||
var/mob/living/U = usr
|
||||
//Looking for master was kind of pointless since PDAs don't appear to have one.
|
||||
@@ -586,7 +588,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
U << browse(null, "window=pda")
|
||||
return
|
||||
|
||||
/obj/item/device/pda/proc/remove_id()
|
||||
/obj/item/pda/proc/remove_id()
|
||||
if (id)
|
||||
if (ismob(loc))
|
||||
var/mob/M = loc
|
||||
@@ -597,7 +599,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
id = null
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/pda/proc/msg_input(mob/living/U = usr)
|
||||
/obj/item/pda/proc/msg_input(mob/living/U = usr)
|
||||
var/t = stripped_input(U, "Please enter message", name)
|
||||
if (!t || toff)
|
||||
return
|
||||
@@ -609,16 +611,16 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
t = Gibberish(t, 100)
|
||||
return t
|
||||
|
||||
/obj/item/device/pda/proc/send_message(mob/living/user, list/obj/item/device/pda/targets)
|
||||
/obj/item/pda/proc/send_message(mob/living/user, list/obj/item/pda/targets, everyone)
|
||||
var/message = msg_input(user)
|
||||
if(!message || !targets.len)
|
||||
return
|
||||
if(last_text && world.time < last_text + 5)
|
||||
if((last_text && world.time < last_text + 10) || (everyone && last_everyone && world.time < last_everyone + PDA_SPAM_DELAY))
|
||||
return
|
||||
|
||||
// Send the signal
|
||||
var/list/string_targets = list()
|
||||
for (var/obj/item/device/pda/P in targets)
|
||||
for (var/obj/item/pda/P in targets)
|
||||
if (P.owner && P.ownjob) // != src is checked by the UI
|
||||
string_targets += "[P.owner] ([P.ownjob])"
|
||||
for (var/obj/machinery/computer/message_monitor/M in targets)
|
||||
@@ -658,8 +660,11 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
to_chat(user, "<span class='info'>Message sent to [target_text]: \"[message]\"</span>")
|
||||
// Reset the photo
|
||||
photo = null
|
||||
last_text = world.time
|
||||
if (everyone)
|
||||
last_everyone = world.time
|
||||
|
||||
/obj/item/device/pda/proc/receive_message(datum/signal/subspace/pda/signal)
|
||||
/obj/item/pda/proc/receive_message(datum/signal/subspace/pda/signal)
|
||||
tnote += "<i><b>← From <a href='byond://?src=[REF(src)];choice=Message;target=[REF(signal.source)]'>[signal.data["name"]]</a> ([signal.data["job"]]):</b></i><br>[signal.format_message()]<br>"
|
||||
|
||||
if (!silent)
|
||||
@@ -685,13 +690,16 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
update_icon()
|
||||
add_overlay(icon_alert)
|
||||
|
||||
/obj/item/device/pda/proc/send_to_all(mob/living/U)
|
||||
send_message(U,get_viewable_pdas())
|
||||
/obj/item/pda/proc/send_to_all(mob/living/U)
|
||||
if (last_everyone && world.time < last_everyone + PDA_SPAM_DELAY)
|
||||
to_chat(U,"<span class='warning'>Send To All function is still on cooldown.")
|
||||
return
|
||||
send_message(U,get_viewable_pdas(), TRUE)
|
||||
|
||||
/obj/item/device/pda/proc/create_message(mob/living/U, obj/item/device/pda/P)
|
||||
/obj/item/pda/proc/create_message(mob/living/U, obj/item/pda/P)
|
||||
send_message(U,list(P))
|
||||
|
||||
/obj/item/device/pda/AltClick()
|
||||
/obj/item/pda/AltClick()
|
||||
..()
|
||||
|
||||
if(issilicon(usr))
|
||||
@@ -703,7 +711,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
else
|
||||
remove_pen()
|
||||
|
||||
/obj/item/device/pda/verb/verb_remove_id()
|
||||
/obj/item/pda/verb/verb_remove_id()
|
||||
set category = "Object"
|
||||
set name = "Eject ID"
|
||||
set src in usr
|
||||
@@ -717,7 +725,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>This PDA does not have an ID in it!</span>")
|
||||
|
||||
/obj/item/device/pda/verb/verb_remove_pen()
|
||||
/obj/item/pda/verb/verb_remove_pen()
|
||||
set category = "Object"
|
||||
set name = "Remove Pen"
|
||||
set src in usr
|
||||
@@ -728,7 +736,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
if (usr.canUseTopic(src))
|
||||
remove_pen()
|
||||
|
||||
/obj/item/device/pda/proc/remove_pen()
|
||||
/obj/item/pda/proc/remove_pen()
|
||||
if(inserted_item)
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
@@ -742,7 +750,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
to_chat(usr, "<span class='warning'>This PDA does not have a pen in it!</span>")
|
||||
|
||||
//trying to insert or remove an id
|
||||
/obj/item/device/pda/proc/id_check(mob/user, obj/item/card/id/I)
|
||||
/obj/item/pda/proc/id_check(mob/user, obj/item/card/id/I)
|
||||
if(!I)
|
||||
if(id)
|
||||
remove_id()
|
||||
@@ -763,7 +771,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
return 1
|
||||
|
||||
// access to status display signals
|
||||
/obj/item/device/pda/attackby(obj/item/C, mob/user, params)
|
||||
/obj/item/pda/attackby(obj/item/C, mob/user, params)
|
||||
if(istype(C, /obj/item/cartridge) && !cartridge)
|
||||
if(!user.transferItemToLoc(C, src))
|
||||
return
|
||||
@@ -791,7 +799,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
updateSelfDialog()//Update self dialog on success.
|
||||
return //Return in case of failed check or when successful.
|
||||
updateSelfDialog()//For the non-input related code.
|
||||
else if(istype(C, /obj/item/device/paicard) && !src.pai)
|
||||
else if(istype(C, /obj/item/paicard) && !src.pai)
|
||||
if(!user.transferItemToLoc(C, src))
|
||||
return
|
||||
pai = C
|
||||
@@ -814,7 +822,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/device/pda/attack(mob/living/carbon/C, mob/living/user)
|
||||
/obj/item/pda/attack(mob/living/carbon/C, mob/living/user)
|
||||
if(istype(C))
|
||||
switch(scanmode)
|
||||
|
||||
@@ -832,7 +840,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
else
|
||||
user.show_message("<span class='notice'>No radiation detected.</span>")
|
||||
|
||||
/obj/item/device/pda/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity)
|
||||
/obj/item/pda/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
switch(scanmode)
|
||||
@@ -886,7 +894,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
to_chat(user, "<span class='notice'>Paper scanned. Saved to PDA's notekeeper.</span>" )
|
||||
|
||||
|
||||
/obj/item/device/pda/proc/explode() //This needs tuning.
|
||||
/obj/item/pda/proc/explode() //This needs tuning.
|
||||
if(!detonatable)
|
||||
return
|
||||
var/turf/T = get_turf(src)
|
||||
@@ -906,7 +914,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/device/pda/Destroy()
|
||||
/obj/item/pda/Destroy()
|
||||
GLOB.PDAs -= src
|
||||
if(istype(id))
|
||||
QDEL_NULL(id)
|
||||
@@ -928,7 +936,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
to_chat(user, "Turn on your receiver in order to send messages.")
|
||||
return
|
||||
|
||||
for (var/obj/item/device/pda/P in get_viewable_pdas())
|
||||
for (var/obj/item/pda/P in get_viewable_pdas())
|
||||
if (P == src)
|
||||
continue
|
||||
else if (P == src.aiPDA)
|
||||
@@ -989,7 +997,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
|
||||
|
||||
// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP
|
||||
/obj/item/device/pda/emp_act(severity)
|
||||
/obj/item/pda/emp_act(severity)
|
||||
for(var/atom/A in src)
|
||||
A.emp_act(severity)
|
||||
emped += 1
|
||||
@@ -999,7 +1007,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
/proc/get_viewable_pdas()
|
||||
. = list()
|
||||
// Returns a list of PDAs which can be viewed from another PDA/message monitor.
|
||||
for(var/obj/item/device/pda/P in GLOB.PDAs)
|
||||
for(var/obj/item/pda/P in GLOB.PDAs)
|
||||
if(!P.owner || P.toff || P.hidden)
|
||||
continue
|
||||
. += P
|
||||
@@ -1009,3 +1017,4 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
#undef PDA_SCANNER_REAGENT
|
||||
#undef PDA_SCANNER_HALOGEN
|
||||
#undef PDA_SCANNER_GAS
|
||||
#undef PDA_SPAM_DELAY
|
||||
@@ -1,5 +1,5 @@
|
||||
//Clown PDA is slippery.
|
||||
/obj/item/device/pda/clown
|
||||
/obj/item/pda/clown
|
||||
name = "clown PDA"
|
||||
default_cartridge = /obj/item/cartridge/virus/clown
|
||||
inserted_item = /obj/item/toy/crayon/rainbow
|
||||
@@ -8,11 +8,11 @@
|
||||
ttone = "honk"
|
||||
var/slipvictims = list() //CIT CHANGE - makes clown PDAs track unique people slipped
|
||||
|
||||
/obj/item/device/pda/clown/Initialize()
|
||||
/obj/item/pda/clown/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/slippery, 120, NO_SLIP_WHEN_WALKING, CALLBACK(src, .proc/AfterSlip))
|
||||
|
||||
/obj/item/device/pda/clown/proc/AfterSlip(mob/living/carbon/human/M)
|
||||
/obj/item/pda/clown/proc/AfterSlip(mob/living/carbon/human/M)
|
||||
if (istype(M) && (M.real_name != owner))
|
||||
slipvictims |= M //CIT CHANGE - makes clown PDAs track unique people slipped
|
||||
var/obj/item/cartridge/virus/clown/cart = cartridge
|
||||
@@ -20,66 +20,66 @@
|
||||
cart.charges++
|
||||
|
||||
// Special AI/pAI PDAs that cannot explode.
|
||||
/obj/item/device/pda/ai
|
||||
/obj/item/pda/ai
|
||||
icon_state = "NONE"
|
||||
ttone = "data"
|
||||
fon = FALSE
|
||||
detonatable = FALSE
|
||||
|
||||
/obj/item/device/pda/ai/attack_self(mob/user)
|
||||
/obj/item/pda/ai/attack_self(mob/user)
|
||||
if ((honkamt > 0) && (prob(60)))//For clown virus.
|
||||
honkamt--
|
||||
playsound(loc, 'sound/items/bikehorn.ogg', 30, 1)
|
||||
return
|
||||
|
||||
/obj/item/device/pda/ai/pai
|
||||
/obj/item/pda/ai/pai
|
||||
ttone = "assist"
|
||||
|
||||
|
||||
|
||||
/obj/item/device/pda/medical
|
||||
/obj/item/pda/medical
|
||||
name = "medical PDA"
|
||||
default_cartridge = /obj/item/cartridge/medical
|
||||
icon_state = "pda-medical"
|
||||
|
||||
/obj/item/device/pda/viro
|
||||
/obj/item/pda/viro
|
||||
name = "virology PDA"
|
||||
default_cartridge = /obj/item/cartridge/medical
|
||||
icon_state = "pda-virology"
|
||||
|
||||
/obj/item/device/pda/engineering
|
||||
/obj/item/pda/engineering
|
||||
name = "engineering PDA"
|
||||
default_cartridge = /obj/item/cartridge/engineering
|
||||
icon_state = "pda-engineer"
|
||||
|
||||
/obj/item/device/pda/security
|
||||
/obj/item/pda/security
|
||||
name = "security PDA"
|
||||
default_cartridge = /obj/item/cartridge/security
|
||||
icon_state = "pda-security"
|
||||
|
||||
/obj/item/device/pda/detective
|
||||
/obj/item/pda/detective
|
||||
name = "detective PDA"
|
||||
default_cartridge = /obj/item/cartridge/detective
|
||||
icon_state = "pda-detective"
|
||||
|
||||
/obj/item/device/pda/warden
|
||||
/obj/item/pda/warden
|
||||
name = "warden PDA"
|
||||
default_cartridge = /obj/item/cartridge/security
|
||||
icon_state = "pda-warden"
|
||||
|
||||
/obj/item/device/pda/janitor
|
||||
/obj/item/pda/janitor
|
||||
name = "janitor PDA"
|
||||
default_cartridge = /obj/item/cartridge/janitor
|
||||
icon_state = "pda-janitor"
|
||||
ttone = "slip"
|
||||
|
||||
/obj/item/device/pda/toxins
|
||||
/obj/item/pda/toxins
|
||||
name = "scientist PDA"
|
||||
default_cartridge = /obj/item/cartridge/signal/toxins
|
||||
icon_state = "pda-science"
|
||||
ttone = "boom"
|
||||
|
||||
/obj/item/device/pda/mime
|
||||
/obj/item/pda/mime
|
||||
name = "mime PDA"
|
||||
default_cartridge = /obj/item/cartridge/virus/mime
|
||||
inserted_item = /obj/item/toy/crayon/mime
|
||||
@@ -87,88 +87,88 @@
|
||||
silent = TRUE
|
||||
ttone = "silence"
|
||||
|
||||
/obj/item/device/pda/heads
|
||||
/obj/item/pda/heads
|
||||
default_cartridge = /obj/item/cartridge/head
|
||||
icon_state = "pda-hop"
|
||||
|
||||
/obj/item/device/pda/heads/hop
|
||||
/obj/item/pda/heads/hop
|
||||
name = "head of personnel PDA"
|
||||
default_cartridge = /obj/item/cartridge/hop
|
||||
icon_state = "pda-hop"
|
||||
|
||||
/obj/item/device/pda/heads/hos
|
||||
/obj/item/pda/heads/hos
|
||||
name = "head of security PDA"
|
||||
default_cartridge = /obj/item/cartridge/hos
|
||||
icon_state = "pda-hos"
|
||||
|
||||
/obj/item/device/pda/heads/ce
|
||||
/obj/item/pda/heads/ce
|
||||
name = "chief engineer PDA"
|
||||
default_cartridge = /obj/item/cartridge/ce
|
||||
icon_state = "pda-ce"
|
||||
|
||||
/obj/item/device/pda/heads/cmo
|
||||
/obj/item/pda/heads/cmo
|
||||
name = "chief medical officer PDA"
|
||||
default_cartridge = /obj/item/cartridge/cmo
|
||||
icon_state = "pda-cmo"
|
||||
|
||||
/obj/item/device/pda/heads/rd
|
||||
/obj/item/pda/heads/rd
|
||||
name = "research director PDA"
|
||||
default_cartridge = /obj/item/cartridge/rd
|
||||
inserted_item = /obj/item/pen/fountain
|
||||
icon_state = "pda-rd"
|
||||
|
||||
/obj/item/device/pda/captain
|
||||
/obj/item/pda/captain
|
||||
name = "captain PDA"
|
||||
default_cartridge = /obj/item/cartridge/captain
|
||||
inserted_item = /obj/item/pen/fountain/captain
|
||||
icon_state = "pda-captain"
|
||||
detonatable = FALSE
|
||||
|
||||
/obj/item/device/pda/cargo
|
||||
/obj/item/pda/cargo
|
||||
name = "cargo technician PDA"
|
||||
default_cartridge = /obj/item/cartridge/quartermaster
|
||||
icon_state = "pda-cargo"
|
||||
|
||||
/obj/item/device/pda/quartermaster
|
||||
/obj/item/pda/quartermaster
|
||||
name = "quartermaster PDA"
|
||||
default_cartridge = /obj/item/cartridge/quartermaster
|
||||
inserted_item = /obj/item/pen/fountain
|
||||
icon_state = "pda-qm"
|
||||
|
||||
/obj/item/device/pda/shaftminer
|
||||
/obj/item/pda/shaftminer
|
||||
name = "shaft miner PDA"
|
||||
icon_state = "pda-miner"
|
||||
|
||||
/obj/item/device/pda/syndicate
|
||||
/obj/item/pda/syndicate
|
||||
default_cartridge = /obj/item/cartridge/virus/syndicate
|
||||
icon_state = "pda-syndi"
|
||||
name = "military PDA"
|
||||
owner = "John Doe"
|
||||
hidden = 1
|
||||
|
||||
/obj/item/device/pda/chaplain
|
||||
/obj/item/pda/chaplain
|
||||
name = "chaplain PDA"
|
||||
icon_state = "pda-chaplain"
|
||||
ttone = "holy"
|
||||
|
||||
/obj/item/device/pda/lawyer
|
||||
/obj/item/pda/lawyer
|
||||
name = "lawyer PDA"
|
||||
default_cartridge = /obj/item/cartridge/lawyer
|
||||
inserted_item = /obj/item/pen/fountain
|
||||
icon_state = "pda-lawyer"
|
||||
ttone = "objection"
|
||||
|
||||
/obj/item/device/pda/botanist
|
||||
/obj/item/pda/botanist
|
||||
name = "botanist PDA"
|
||||
//default_cartridge = /obj/item/cartridge/botanist
|
||||
icon_state = "pda-hydro"
|
||||
|
||||
/obj/item/device/pda/roboticist
|
||||
/obj/item/pda/roboticist
|
||||
name = "roboticist PDA"
|
||||
icon_state = "pda-roboticist"
|
||||
default_cartridge = /obj/item/cartridge/roboticist
|
||||
|
||||
/obj/item/device/pda/curator
|
||||
/obj/item/pda/curator
|
||||
name = "curator PDA"
|
||||
icon_state = "pda-library"
|
||||
icon_alert = "pda-r-library"
|
||||
@@ -179,32 +179,32 @@
|
||||
silent = TRUE //Quiet in the library!
|
||||
overlays_x_offset = -3
|
||||
|
||||
/obj/item/device/pda/clear
|
||||
/obj/item/pda/clear
|
||||
name = "clear PDA"
|
||||
icon_state = "pda-clear"
|
||||
desc = "A portable microcomputer by Thinktronic Systems, LTD. This model is a special edition with a transparent case."
|
||||
note = "Congratulations, you have chosen the Thinktronic 5230 Personal Data Assistant Deluxe Special Max Turbo Limited Edition!"
|
||||
|
||||
/obj/item/device/pda/cook
|
||||
/obj/item/pda/cook
|
||||
name = "cook PDA"
|
||||
icon_state = "pda-cook"
|
||||
|
||||
/obj/item/device/pda/bar
|
||||
/obj/item/pda/bar
|
||||
name = "bartender PDA"
|
||||
icon_state = "pda-bartender"
|
||||
inserted_item = /obj/item/pen/fountain
|
||||
|
||||
/obj/item/device/pda/atmos
|
||||
/obj/item/pda/atmos
|
||||
name = "atmospherics PDA"
|
||||
default_cartridge = /obj/item/cartridge/atmos
|
||||
icon_state = "pda-atmos"
|
||||
|
||||
/obj/item/device/pda/chemist
|
||||
/obj/item/pda/chemist
|
||||
name = "chemist PDA"
|
||||
default_cartridge = /obj/item/cartridge/chemistry
|
||||
icon_state = "pda-chemistry"
|
||||
|
||||
/obj/item/device/pda/geneticist
|
||||
/obj/item/pda/geneticist
|
||||
name = "geneticist PDA"
|
||||
default_cartridge = /obj/item/cartridge/medical
|
||||
icon_state = "pda-genetics"
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
var/bot_access_flags = 0 //Bit flags. Selection: SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT
|
||||
var/spam_enabled = 0 //Enables "Send to All" Option
|
||||
|
||||
var/obj/item/device/pda/host_pda = null
|
||||
var/obj/item/pda/host_pda = null
|
||||
var/menu
|
||||
var/datum/data/record/active1 = null //General
|
||||
var/datum/data/record/active2 = null //Medical
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
/obj/item/cartridge/Initialize()
|
||||
. = ..()
|
||||
var/obj/item/device/pda/pda = loc
|
||||
var/obj/item/pda/pda = loc
|
||||
if(istype(pda))
|
||||
host_pda = pda
|
||||
|
||||
@@ -710,7 +710,7 @@ Code:
|
||||
return ""
|
||||
|
||||
//If the cartridge adds something to each potetial messaging target
|
||||
/obj/item/cartridge/proc/message_special(obj/item/device/pda/target)
|
||||
/obj/item/cartridge/proc/message_special(obj/item/pda/target)
|
||||
return ""
|
||||
|
||||
//This is called for special abilities of cartridges
|
||||
|
||||
@@ -2,19 +2,19 @@
|
||||
name = "Generic Virus PDA cart"
|
||||
var/charges = 5
|
||||
|
||||
/obj/item/cartridge/virus/proc/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
/obj/item/cartridge/virus/proc/send_virus(obj/item/pda/target, mob/living/U)
|
||||
return
|
||||
|
||||
/obj/item/cartridge/virus/message_header()
|
||||
return "<b>[charges] viral files left.</b><HR>"
|
||||
|
||||
/obj/item/cartridge/virus/message_special(obj/item/device/pda/target)
|
||||
if (!istype(loc, /obj/item/device/pda))
|
||||
/obj/item/cartridge/virus/message_special(obj/item/pda/target)
|
||||
if (!istype(loc, /obj/item/pda))
|
||||
return "" //Sanity check, this shouldn't be possible.
|
||||
return " (<a href='byond://?src=[REF(loc)];choice=cart;special=virus;target=[REF(target)]'>*Send Virus*</a>)"
|
||||
|
||||
/obj/item/cartridge/virus/special(mob/living/user, list/params)
|
||||
var/obj/item/device/pda/P = locate(params["target"])//Leaving it alone in case it may do something useful, I guess.
|
||||
var/obj/item/pda/P = locate(params["target"])//Leaving it alone in case it may do something useful, I guess.
|
||||
send_virus(P,user)
|
||||
|
||||
/obj/item/cartridge/virus/clown
|
||||
@@ -23,7 +23,7 @@
|
||||
desc = "A data cartridge for portable microcomputers. It smells vaguely of bananas."
|
||||
access = CART_CLOWN
|
||||
|
||||
/obj/item/cartridge/virus/clown/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
/obj/item/cartridge/virus/clown/send_virus(obj/item/pda/target, mob/living/U)
|
||||
if(charges <= 0)
|
||||
to_chat(U, "<span class='notice'>Out of charges.</span>")
|
||||
return
|
||||
@@ -39,7 +39,7 @@
|
||||
icon_state = "cart-mi"
|
||||
access = CART_MIME
|
||||
|
||||
/obj/item/cartridge/virus/mime/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
/obj/item/cartridge/virus/mime/send_virus(obj/item/pda/target, mob/living/U)
|
||||
if(charges <= 0)
|
||||
to_chat(U, "<span class='notice'>Out of charges.</span>")
|
||||
return
|
||||
@@ -58,7 +58,7 @@
|
||||
remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing.
|
||||
charges = 4
|
||||
|
||||
/obj/item/cartridge/virus/syndicate/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
/obj/item/cartridge/virus/syndicate/send_virus(obj/item/pda/target, mob/living/U)
|
||||
if(charges <= 0)
|
||||
to_chat(U, "<span class='notice'>Out of charges.</span>")
|
||||
return
|
||||
@@ -75,6 +75,13 @@
|
||||
if(!target.detonatable || prob(difficulty * 15) || (hidden_uplink))
|
||||
U.show_message("<span class='danger'>An error flashes on your [src].</span>", 1)
|
||||
else
|
||||
var/turf/T = get_turf(target)
|
||||
var/area/A = get_area(T)
|
||||
message_admins("[!is_special_character(U) ? "Non-antag " : ""][key_name_admin(U)][ADMIN_FLW(U)] triggered a PDA explosion on [target.name] at [A] [ADMIN_COORDJMP(T)].")
|
||||
var/message_log = "triggered a PDA explosion on [target.name] at at [A] [COORD(T)]."
|
||||
U.log_message(message_log, INDIVIDUAL_ATTACK_LOG)
|
||||
log_game("[key_name(U)] [message_log]")
|
||||
log_attack("[key_name(U)] [message_log]")
|
||||
U.show_message("<span class='notice'>Success!</span>", 1)
|
||||
target.explode()
|
||||
else
|
||||
@@ -85,7 +92,7 @@
|
||||
icon_state = "cart"
|
||||
var/telecrystals = 0
|
||||
|
||||
/obj/item/cartridge/virus/frame/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
/obj/item/cartridge/virus/frame/send_virus(obj/item/pda/target, mob/living/U)
|
||||
if(charges <= 0)
|
||||
to_chat(U, "<span class='notice'>Out of charges.</span>")
|
||||
return
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/aicard
|
||||
/obj/item/aicard
|
||||
name = "intelliCard"
|
||||
desc = "A storage device for AIs. Patent pending."
|
||||
icon = 'icons/obj/aicards.dmi'
|
||||
@@ -12,11 +12,11 @@
|
||||
var/flush = FALSE
|
||||
var/mob/living/silicon/ai/AI
|
||||
|
||||
/obj/item/device/aicard/suicide_act(mob/living/user)
|
||||
/obj/item/aicard/suicide_act(mob/living/user)
|
||||
user.visible_message("<span class='suicide'>[user] is trying to upload themselves into [src]! That's not going to work out well!</span>")
|
||||
return BRUTELOSS
|
||||
|
||||
/obj/item/device/aicard/afterattack(atom/target, mob/user, proximity)
|
||||
/obj/item/aicard/afterattack(atom/target, mob/user, proximity)
|
||||
..()
|
||||
if(!proximity || !target)
|
||||
return
|
||||
@@ -27,7 +27,7 @@
|
||||
target.transfer_ai(AI_TRANS_TO_CARD, user, null, src)
|
||||
update_icon() //Whatever happened, update the card's state (icon, name) to match.
|
||||
|
||||
/obj/item/device/aicard/update_icon()
|
||||
/obj/item/aicard/update_icon()
|
||||
cut_overlays()
|
||||
if(AI)
|
||||
name = "[initial(name)]- [AI.name]"
|
||||
@@ -42,14 +42,14 @@
|
||||
name = initial(name)
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
/obj/item/device/aicard/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
/obj/item/aicard/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "intellicard", name, 500, 500, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/device/aicard/ui_data()
|
||||
/obj/item/aicard/ui_data()
|
||||
var/list/data = list()
|
||||
if(AI)
|
||||
data["name"] = AI.name
|
||||
@@ -62,7 +62,7 @@
|
||||
data["wiping"] = flush
|
||||
return data
|
||||
|
||||
/obj/item/device/aicard/ui_act(action,params)
|
||||
/obj/item/aicard/ui_act(action,params)
|
||||
if(..())
|
||||
return
|
||||
switch(action)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/beacon
|
||||
/obj/item/beacon
|
||||
name = "\improper tracking beacon"
|
||||
desc = "A beacon used by a teleporter."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
@@ -9,18 +9,18 @@
|
||||
var/enabled = TRUE
|
||||
var/renamed = FALSE
|
||||
|
||||
/obj/item/device/beacon/Initialize()
|
||||
/obj/item/beacon/Initialize()
|
||||
. = ..()
|
||||
if (enabled)
|
||||
GLOB.teleportbeacons += src
|
||||
else
|
||||
icon_state = "beacon-off"
|
||||
|
||||
/obj/item/device/beacon/Destroy()
|
||||
/obj/item/beacon/Destroy()
|
||||
GLOB.teleportbeacons.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/beacon/attack_self(mob/user)
|
||||
/obj/item/beacon/attack_self(mob/user)
|
||||
enabled = !enabled
|
||||
if (enabled)
|
||||
icon_state = "beacon"
|
||||
@@ -31,7 +31,7 @@
|
||||
to_chat(user, "<span class='notice'>You [enabled ? "enable" : "disable"] the beacon.</span>")
|
||||
return
|
||||
|
||||
/obj/item/device/beacon/attackby(obj/item/W, mob/user)
|
||||
/obj/item/beacon/attackby(obj/item/W, mob/user)
|
||||
if(istype(W, /obj/item/pen)) // needed for things that use custom names like the locator
|
||||
var/new_name = stripped_input(user, "What would you like the name to be?")
|
||||
if(!user.canUseTopic(src, BE_CLOSE))
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
|
||||
|
||||
/obj/item/device/camera_bug
|
||||
/obj/item/camera_bug
|
||||
name = "camera bug"
|
||||
desc = "For illicit snooping through the camera network."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
@@ -31,11 +31,11 @@
|
||||
var/last_found = null
|
||||
var/last_seen = null
|
||||
|
||||
/obj/item/device/camera_bug/New()
|
||||
/obj/item/camera_bug/New()
|
||||
..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/device/camera_bug/Destroy()
|
||||
/obj/item/camera_bug/Destroy()
|
||||
get_cameras()
|
||||
for(var/cam_tag in bugged_cameras)
|
||||
var/obj/machinery/camera/camera = bugged_cameras[cam_tag]
|
||||
@@ -46,20 +46,20 @@
|
||||
tracking = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/camera_bug/interact(mob/user)
|
||||
/obj/item/camera_bug/interact(mob/user)
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/device/camera_bug/ui_interact(mob/user = usr)
|
||||
/obj/item/camera_bug/ui_interact(mob/user = usr)
|
||||
. = ..()
|
||||
var/datum/browser/popup = new(user, "camerabug","Camera Bug",nref=src)
|
||||
popup.set_content(menu(get_cameras()))
|
||||
popup.open()
|
||||
|
||||
/obj/item/device/camera_bug/attack_self(mob/user)
|
||||
/obj/item/camera_bug/attack_self(mob/user)
|
||||
user.set_machine(src)
|
||||
interact(user)
|
||||
|
||||
/obj/item/device/camera_bug/check_eye(mob/user)
|
||||
/obj/item/camera_bug/check_eye(mob/user)
|
||||
if ( loc != user || user.incapacitated() || user.eye_blind || !current )
|
||||
user.unset_machine()
|
||||
return 0
|
||||
@@ -70,10 +70,10 @@
|
||||
user.unset_machine()
|
||||
return 0
|
||||
return 1
|
||||
/obj/item/device/camera_bug/on_unset_machine(mob/user)
|
||||
/obj/item/camera_bug/on_unset_machine(mob/user)
|
||||
user.reset_perspective(null)
|
||||
|
||||
/obj/item/device/camera_bug/proc/get_cameras()
|
||||
/obj/item/camera_bug/proc/get_cameras()
|
||||
if( world.time > (last_net_update + 100))
|
||||
bugged_cameras = list()
|
||||
for(var/obj/machinery/camera/camera in GLOB.cameranet.cameras)
|
||||
@@ -85,7 +85,7 @@
|
||||
return bugged_cameras
|
||||
|
||||
|
||||
/obj/item/device/camera_bug/proc/menu(list/cameras)
|
||||
/obj/item/camera_bug/proc/menu(list/cameras)
|
||||
if(!cameras || !cameras.len)
|
||||
return "No bugged cameras found."
|
||||
|
||||
@@ -139,12 +139,12 @@
|
||||
return .(cameras)
|
||||
return html
|
||||
|
||||
/obj/item/device/camera_bug/proc/get_seens()
|
||||
/obj/item/camera_bug/proc/get_seens()
|
||||
if(current && current.can_use())
|
||||
var/list/seen = current.can_see()
|
||||
return seen
|
||||
|
||||
/obj/item/device/camera_bug/proc/camera_report()
|
||||
/obj/item/camera_bug/proc/camera_report()
|
||||
// this should only be called if current exists
|
||||
var/dat = ""
|
||||
var/list/seen = get_seens()
|
||||
@@ -189,7 +189,7 @@
|
||||
else
|
||||
return "Camera Offline<br>"
|
||||
|
||||
/obj/item/device/camera_bug/Topic(href,list/href_list)
|
||||
/obj/item/camera_bug/Topic(href,list/href_list)
|
||||
if(usr != loc)
|
||||
usr.unset_machine()
|
||||
usr << browse(null, "window=camerabug")
|
||||
@@ -256,7 +256,7 @@
|
||||
|
||||
interact()
|
||||
|
||||
/obj/item/device/camera_bug/process()
|
||||
/obj/item/camera_bug/process()
|
||||
if(track_mode == BUGMODE_LIST || (world.time < (last_tracked + refresh_interval)))
|
||||
return
|
||||
last_tracked = world.time
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/item/device/chameleon
|
||||
/obj/item/chameleon
|
||||
name = "chameleon-projector"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "shield0"
|
||||
flags_1 = CONDUCT_1 | NOBLUDGEON_1
|
||||
slot_flags = SLOT_BELT
|
||||
@@ -14,26 +15,26 @@
|
||||
var/obj/effect/dummy/chameleon/active_dummy = null
|
||||
var/saved_appearance = null
|
||||
|
||||
/obj/item/device/chameleon/New()
|
||||
/obj/item/chameleon/New()
|
||||
..()
|
||||
var/obj/item/cigbutt/butt = /obj/item/cigbutt
|
||||
saved_appearance = initial(butt.appearance)
|
||||
|
||||
/obj/item/device/chameleon/dropped()
|
||||
/obj/item/chameleon/dropped()
|
||||
..()
|
||||
disrupt()
|
||||
|
||||
/obj/item/device/chameleon/equipped()
|
||||
/obj/item/chameleon/equipped()
|
||||
..()
|
||||
disrupt()
|
||||
|
||||
/obj/item/device/chameleon/attack_self(mob/user)
|
||||
/obj/item/chameleon/attack_self(mob/user)
|
||||
if (isturf(user.loc) || istype(user.loc, /obj/structure) || active_dummy)
|
||||
toggle(user)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You can't use [src] while inside something!</span>")
|
||||
|
||||
/obj/item/device/chameleon/afterattack(atom/target, mob/user , proximity)
|
||||
/obj/item/chameleon/afterattack(atom/target, mob/user , proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(!check_sprite(target))
|
||||
@@ -48,12 +49,12 @@
|
||||
temp.plane = initial(target.plane)
|
||||
saved_appearance = temp.appearance
|
||||
|
||||
/obj/item/device/chameleon/proc/check_sprite(atom/target)
|
||||
/obj/item/chameleon/proc/check_sprite(atom/target)
|
||||
if(target.icon_state in icon_states(target.icon))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/device/chameleon/proc/toggle(mob/user)
|
||||
/obj/item/chameleon/proc/toggle(mob/user)
|
||||
if(!can_use || !saved_appearance)
|
||||
return
|
||||
if(active_dummy)
|
||||
@@ -71,7 +72,7 @@
|
||||
new /obj/effect/temp_visual/emp/pulse(get_turf(src))
|
||||
user.cancel_camera()
|
||||
|
||||
/obj/item/device/chameleon/proc/disrupt(delete_dummy = 1)
|
||||
/obj/item/chameleon/proc/disrupt(delete_dummy = 1)
|
||||
if(active_dummy)
|
||||
for(var/mob/M in active_dummy)
|
||||
to_chat(M, "<span class='danger'>Your chameleon-projector deactivates.</span>")
|
||||
@@ -86,7 +87,7 @@
|
||||
can_use = 0
|
||||
spawn(50) can_use = 1
|
||||
|
||||
/obj/item/device/chameleon/proc/eject_all()
|
||||
/obj/item/chameleon/proc/eject_all()
|
||||
for(var/atom/movable/A in active_dummy)
|
||||
A.forceMove(active_dummy.loc)
|
||||
if(ismob(A))
|
||||
@@ -98,9 +99,9 @@
|
||||
desc = ""
|
||||
density = FALSE
|
||||
var/can_move = 0
|
||||
var/obj/item/device/chameleon/master = null
|
||||
var/obj/item/chameleon/master = null
|
||||
|
||||
/obj/effect/dummy/chameleon/proc/activate(mob/M, saved_appearance, obj/item/device/chameleon/C)
|
||||
/obj/effect/dummy/chameleon/proc/activate(mob/M, saved_appearance, obj/item/chameleon/C)
|
||||
appearance = saved_appearance
|
||||
if(istype(M.buckled, /obj/vehicle))
|
||||
var/obj/vehicle/V = M.buckled
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Dogborg Sleeper units
|
||||
|
||||
/obj/item/device/dogborg/sleeper
|
||||
/obj/item/dogborg/sleeper
|
||||
name = "hound sleeper"
|
||||
desc = "nothing should see this."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
@@ -22,7 +22,7 @@
|
||||
var/static/list/important_items = typecacheof(list(
|
||||
/obj/item/hand_tele,
|
||||
/obj/item/card/id,
|
||||
/obj/item/device/aicard,
|
||||
/obj/item/aicard,
|
||||
/obj/item/gun,
|
||||
/obj/item/pinpointer,
|
||||
/obj/item/clothing/shoes/magboots,
|
||||
@@ -45,15 +45,15 @@
|
||||
|
||||
// Bags are prohibited from this due to the potential explotation of objects, same with brought
|
||||
|
||||
/obj/item/device/dogborg/sleeper/New()
|
||||
/obj/item/dogborg/sleeper/New()
|
||||
..()
|
||||
update_icon()
|
||||
flags_1 |= NOBLUDGEON_1 //No more attack messages
|
||||
|
||||
/obj/item/device/dogborg/sleeper/Exit(atom/movable/O)
|
||||
/obj/item/dogborg/sleeper/Exit(atom/movable/O)
|
||||
return 0
|
||||
|
||||
/obj/item/device/dogborg/sleeper/afterattack(mob/living/carbon/target, mob/living/silicon/user, proximity)
|
||||
/obj/item/dogborg/sleeper/afterattack(mob/living/carbon/target, mob/living/silicon/user, proximity)
|
||||
hound = loc
|
||||
if(!proximity)
|
||||
return
|
||||
@@ -91,7 +91,7 @@
|
||||
message_admins("[key_name(hound)] has sleeper'd [key_name(patient)] as a dogborg. [ADMIN_JMP(src)]")
|
||||
playsound(hound, 'sound/effects/bin_close.ogg', 100, 1)
|
||||
|
||||
/obj/item/device/dogborg/sleeper/container_resist(mob/living/user)
|
||||
/obj/item/dogborg/sleeper/container_resist(mob/living/user)
|
||||
hound = loc
|
||||
user.changeNext_move(CLICK_CD_BREAKOUT)
|
||||
user.last_special = world.time + CLICK_CD_BREAKOUT
|
||||
@@ -107,7 +107,7 @@
|
||||
"<span class='notice'>You successfully break out of [hound.name]!</span>")
|
||||
go_out()
|
||||
|
||||
/obj/item/device/dogborg/sleeper/proc/go_out(var/target)
|
||||
/obj/item/dogborg/sleeper/proc/go_out(var/target)
|
||||
hound = loc
|
||||
hound.setClickCooldown(50)
|
||||
if(length(contents) > 0)
|
||||
@@ -139,12 +139,12 @@
|
||||
cleaning = FALSE
|
||||
update_gut()
|
||||
|
||||
/obj/item/device/dogborg/sleeper/attack_self(mob/user)
|
||||
/obj/item/dogborg/sleeper/attack_self(mob/user)
|
||||
if(..())
|
||||
return
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/device/dogborg/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
/obj/item/dogborg/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
@@ -152,7 +152,7 @@
|
||||
ui = new(user, src, ui_key, "dogborg_sleeper", name, 375, 550, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/device/dogborg/sleeper/ui_data()
|
||||
/obj/item/dogborg/sleeper/ui_data()
|
||||
var/list/data = list()
|
||||
data["occupied"] = patient ? 1 : 0
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
data["occupant"]["reagents"] += list(list("name" = R.name, "volume" = R.volume))
|
||||
return data
|
||||
|
||||
/obj/item/device/dogborg/sleeper/ui_act(action, params)
|
||||
/obj/item/dogborg/sleeper/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
|
||||
@@ -221,7 +221,7 @@
|
||||
clean_cycle()
|
||||
. = TRUE
|
||||
|
||||
/obj/item/device/dogborg/sleeper/proc/update_gut()
|
||||
/obj/item/dogborg/sleeper/proc/update_gut()
|
||||
//Well, we HAD one, what happened to them?
|
||||
if(patient in contents)
|
||||
if(patient_laststat != patient.stat)
|
||||
@@ -268,7 +268,7 @@
|
||||
return
|
||||
|
||||
//Gurgleborg process
|
||||
/obj/item/device/dogborg/sleeper/proc/clean_cycle()
|
||||
/obj/item/dogborg/sleeper/proc/clean_cycle()
|
||||
//Sanity
|
||||
for(var/I in items_preserved)
|
||||
if(!(I in contents))
|
||||
@@ -341,10 +341,10 @@
|
||||
if(cleaning)
|
||||
addtimer(CALLBACK(src, .proc/clean_cycle), 50)
|
||||
|
||||
/obj/item/device/dogborg/sleeper/proc/CheckAccepted(obj/item/I)
|
||||
/obj/item/dogborg/sleeper/proc/CheckAccepted(obj/item/I)
|
||||
return is_type_in_typecache(I, important_items)
|
||||
|
||||
/obj/item/device/dogborg/sleeper/proc/inject_chem(chem)
|
||||
/obj/item/dogborg/sleeper/proc/inject_chem(chem)
|
||||
if(hound.cell.charge <= 800) //This is so borgs don't kill themselves with it. Remember, 750 charge used every injection.
|
||||
to_chat(hound, "<span class='notice'>You don't have enough power to synthesize fluids.</span>")
|
||||
return
|
||||
@@ -356,13 +356,13 @@
|
||||
var/units = round(patient.reagents.get_reagent_amount(chem))
|
||||
to_chat(hound, "<span class='notice'>Injecting [units] unit\s of [chem] into occupant.</span>") //If they were immersed, the reagents wouldn't leave with them.
|
||||
|
||||
/obj/item/device/dogborg/sleeper/medihound //Medihound sleeper
|
||||
/obj/item/dogborg/sleeper/medihound //Medihound sleeper
|
||||
name = "Mobile Sleeper"
|
||||
desc = "Equipment for medical hound. A mounted sleeper that stabilizes patients and can inject reagents in the borg's reserves."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "sleeper"
|
||||
|
||||
/obj/item/device/dogborg/sleeper/K9 //The K9 portabrig
|
||||
/obj/item/dogborg/sleeper/K9 //The K9 portabrig
|
||||
name = "Mobile Brig"
|
||||
desc = "Equipment for a K9 unit. A mounted portable-brig that holds criminals."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
@@ -371,13 +371,13 @@
|
||||
min_health = -100
|
||||
injection_chems = null //So they don't have all the same chems as the medihound!
|
||||
|
||||
/obj/item/storage/attackby(obj/item/device/dogborg/sleeper/K9, mob/user, proximity)
|
||||
/obj/item/storage/attackby(obj/item/dogborg/sleeper/K9, mob/user, proximity)
|
||||
if(istype(K9))
|
||||
K9.afterattack(src, user ,1)
|
||||
else
|
||||
. = ..()
|
||||
|
||||
/obj/item/device/dogborg/sleeper/K9/afterattack(var/atom/movable/target, mob/living/silicon/user, proximity)
|
||||
/obj/item/dogborg/sleeper/K9/afterattack(var/atom/movable/target, mob/living/silicon/user, proximity)
|
||||
hound = loc
|
||||
|
||||
if(!istype(target))
|
||||
@@ -413,7 +413,7 @@
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/device/dogborg/sleeper/compactor //Janihound gut.
|
||||
/obj/item/dogborg/sleeper/compactor //Janihound gut.
|
||||
name = "garbage processor"
|
||||
desc = "A mounted garbage compactor unit with fuel processor."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
@@ -423,13 +423,13 @@
|
||||
injection_chems = null //So they don't have all the same chems as the medihound!
|
||||
var/max_item_count = 30
|
||||
|
||||
/obj/item/storage/attackby(obj/item/device/dogborg/sleeper/compactor, mob/user, proximity) //GIT CIRCUMVENTED YO!
|
||||
/obj/item/storage/attackby(obj/item/dogborg/sleeper/compactor, mob/user, proximity) //GIT CIRCUMVENTED YO!
|
||||
if(istype(compactor))
|
||||
compactor.afterattack(src, user ,1)
|
||||
else
|
||||
. = ..()
|
||||
|
||||
/obj/item/device/dogborg/sleeper/compactor/afterattack(var/atom/movable/target, mob/living/silicon/user, proximity)//GARBO NOMS
|
||||
/obj/item/dogborg/sleeper/compactor/afterattack(var/atom/movable/target, mob/living/silicon/user, proximity)//GARBO NOMS
|
||||
hound = loc
|
||||
var/obj/item/target_obj = target
|
||||
if(!istype(target))
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/device/doorCharge
|
||||
/obj/item/doorCharge
|
||||
name = "airlock charge"
|
||||
desc = null //Different examine for traitors
|
||||
icon = 'icons/obj/device.dmi'
|
||||
item_state = "electronic"
|
||||
icon_state = "doorCharge"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
@@ -13,7 +14,7 @@
|
||||
attack_verb = list("blown up", "exploded", "detonated")
|
||||
materials = list(MAT_METAL=50, MAT_GLASS=30)
|
||||
|
||||
/obj/item/device/doorCharge/ex_act(severity, target)
|
||||
/obj/item/doorCharge/ex_act(severity, target)
|
||||
switch(severity)
|
||||
if(1)
|
||||
visible_message("<span class='warning'>[src] detonates!</span>")
|
||||
@@ -26,14 +27,14 @@
|
||||
if(prob(25))
|
||||
ex_act(EXPLODE_DEVASTATE)
|
||||
|
||||
/obj/item/device/doorCharge/Destroy()
|
||||
/obj/item/doorCharge/Destroy()
|
||||
if(istype(loc, /obj/machinery/door/airlock))
|
||||
var/obj/machinery/door/airlock/A = loc
|
||||
if(A.charge == src)
|
||||
A.charge = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/doorCharge/examine(mob/user)
|
||||
/obj/item/doorCharge/examine(mob/user)
|
||||
..()
|
||||
if(user.mind && user.mind.has_antag_datum(/datum/antagonist/traitor)) //No nuke ops because the device is excluded from nuclear
|
||||
to_chat(user, "A small explosive device that can be used to sabotage airlocks to cause an explosion upon opening. To apply, remove the airlock's maintenance panel and place it within.")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//Used by engineering cyborgs in place of generic circuits.
|
||||
/obj/item/device/electroadaptive_pseudocircuit
|
||||
/obj/item/electroadaptive_pseudocircuit
|
||||
name = "electroadaptive pseudocircuit"
|
||||
desc = "An all-in-one circuit imprinter, designer, synthesizer, outfitter, creator, and chef. It can be used in place of any generic circuit board during construction."
|
||||
icon = 'icons/obj/module.dmi'
|
||||
@@ -11,18 +11,18 @@
|
||||
var/static/recycleable_circuits = typecacheof(list(/obj/item/electronics/firelock, /obj/item/electronics/airalarm, /obj/item/electronics/firealarm, \
|
||||
/obj/item/electronics/apc))//A typecache of circuits consumable for material
|
||||
|
||||
/obj/item/device/electroadaptive_pseudocircuit/Initialize()
|
||||
/obj/item/electroadaptive_pseudocircuit/Initialize()
|
||||
. = ..()
|
||||
maptext = "[circuits]"
|
||||
|
||||
/obj/item/device/electroadaptive_pseudocircuit/examine(mob/user)
|
||||
/obj/item/electroadaptive_pseudocircuit/examine(mob/user)
|
||||
..()
|
||||
if(iscyborg(user))
|
||||
to_chat(user, "<span class='notice'>It has material for <b>[circuits]</b> circuit[circuits == 1 ? "" : "s"]. Use the pseudocircuit on existing circuits to gain material.</span>")
|
||||
to_chat(user, "<span class='notice'>Serves as a substitute for <b>fire/air alarm</b>, <b>firelock</b>, and <b>APC</b> electronics.</span>")
|
||||
to_chat(user, "<span class='notice'>It can also be used on an APC with no power cell to <b>fabricate a low-capacity cell</b> at a high power cost.</span>")
|
||||
|
||||
/obj/item/device/electroadaptive_pseudocircuit/proc/adapt_circuit(mob/living/silicon/robot/R, circuit_cost = 0)
|
||||
/obj/item/electroadaptive_pseudocircuit/proc/adapt_circuit(mob/living/silicon/robot/R, circuit_cost = 0)
|
||||
if(QDELETED(R) || !istype(R))
|
||||
return
|
||||
if(!R.cell)
|
||||
@@ -46,7 +46,7 @@
|
||||
addtimer(CALLBACK(src, .proc/recharge), recharge_time)
|
||||
return TRUE //The actual circuit magic itself is done on a per-object basis
|
||||
|
||||
/obj/item/device/electroadaptive_pseudocircuit/afterattack(atom/target, mob/living/user, proximity)
|
||||
/obj/item/electroadaptive_pseudocircuit/afterattack(atom/target, mob/living/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(!is_type_in_typecache(target, recycleable_circuits))
|
||||
@@ -58,7 +58,7 @@
|
||||
playsound(user, 'sound/items/deconstruct.ogg', 50, TRUE)
|
||||
qdel(target)
|
||||
|
||||
/obj/item/device/electroadaptive_pseudocircuit/proc/recharge()
|
||||
/obj/item/electroadaptive_pseudocircuit/proc/recharge()
|
||||
playsound(src, 'sound/machines/chime.ogg', 25, TRUE)
|
||||
recharging = FALSE
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/flashlight
|
||||
/obj/item/flashlight
|
||||
name = "flashlight"
|
||||
desc = "A hand-held emergency light."
|
||||
icon = 'icons/obj/lighting.dmi'
|
||||
@@ -15,11 +15,11 @@
|
||||
var/brightness_on = 4 //range of light when on
|
||||
var/flashlight_power = 1 //strength of the light when on
|
||||
|
||||
/obj/item/device/flashlight/Initialize()
|
||||
/obj/item/flashlight/Initialize()
|
||||
. = ..()
|
||||
update_brightness()
|
||||
|
||||
/obj/item/device/flashlight/proc/update_brightness(mob/user = null)
|
||||
/obj/item/flashlight/proc/update_brightness(mob/user = null)
|
||||
if(on)
|
||||
icon_state = "[initial(icon_state)]-on"
|
||||
if(flashlight_power)
|
||||
@@ -30,7 +30,7 @@
|
||||
icon_state = initial(icon_state)
|
||||
set_light(0)
|
||||
|
||||
/obj/item/device/flashlight/attack_self(mob/user)
|
||||
/obj/item/flashlight/attack_self(mob/user)
|
||||
on = !on
|
||||
update_brightness(user)
|
||||
for(var/X in actions)
|
||||
@@ -38,14 +38,14 @@
|
||||
A.UpdateButtonIcon()
|
||||
return 1
|
||||
|
||||
/obj/item/device/flashlight/suicide_act(mob/living/carbon/human/user)
|
||||
/obj/item/flashlight/suicide_act(mob/living/carbon/human/user)
|
||||
if (user.eye_blind)
|
||||
user.visible_message("<span class='suicide'>[user] is putting [src] close to [user.p_their()] eyes and turning it on ... but [user.p_theyre()] blind!</span>")
|
||||
return SHAME
|
||||
user.visible_message("<span class='suicide'>[user] is putting [src] close to [user.p_their()] eyes and turning it on! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (FIRELOSS)
|
||||
|
||||
/obj/item/device/flashlight/attack(mob/living/carbon/M, mob/living/carbon/human/user)
|
||||
/obj/item/flashlight/attack(mob/living/carbon/M, mob/living/carbon/human/user)
|
||||
add_fingerprint(user)
|
||||
if(istype(M) && on && user.zone_selected in list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH))
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/device/flashlight/pen
|
||||
/obj/item/flashlight/pen
|
||||
name = "penlight"
|
||||
desc = "A pen-sized light, used by medical staff. It can also be used to create a hologram to alert people of incoming medical assistance."
|
||||
icon_state = "penlight"
|
||||
@@ -167,7 +167,7 @@
|
||||
brightness_on = 2
|
||||
var/holo_cooldown = 0
|
||||
|
||||
/obj/item/device/flashlight/pen/afterattack(atom/target, mob/user, proximity_flag)
|
||||
/obj/item/flashlight/pen/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(!proximity_flag)
|
||||
if(holo_cooldown > world.time)
|
||||
to_chat(user, "<span class='warning'>[src] is not ready yet!</span>")
|
||||
@@ -192,7 +192,7 @@
|
||||
visible_message("<span class='danger'>[creator] created a medical hologram!</span>")
|
||||
|
||||
|
||||
/obj/item/device/flashlight/seclite
|
||||
/obj/item/flashlight/seclite
|
||||
name = "seclite"
|
||||
desc = "A robust flashlight used by security."
|
||||
icon_state = "seclite"
|
||||
@@ -204,7 +204,7 @@
|
||||
hitsound = 'sound/weapons/genhit1.ogg'
|
||||
|
||||
// the desk lamps are a bit special
|
||||
/obj/item/device/flashlight/lamp
|
||||
/obj/item/flashlight/lamp
|
||||
name = "desk lamp"
|
||||
desc = "A desk lamp with an adjustable mount."
|
||||
icon_state = "lamp"
|
||||
@@ -220,14 +220,14 @@
|
||||
|
||||
|
||||
// green-shaded desk lamp
|
||||
/obj/item/device/flashlight/lamp/green
|
||||
/obj/item/flashlight/lamp/green
|
||||
desc = "A classic green-shaded desk lamp."
|
||||
icon_state = "lampgreen"
|
||||
item_state = "lampgreen"
|
||||
|
||||
|
||||
|
||||
/obj/item/device/flashlight/lamp/verb/toggle_light()
|
||||
/obj/item/flashlight/lamp/verb/toggle_light()
|
||||
set name = "Toggle light"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
@@ -236,7 +236,7 @@
|
||||
attack_self(usr)
|
||||
|
||||
//Bananalamp
|
||||
/obj/item/device/flashlight/lamp/bananalamp
|
||||
/obj/item/flashlight/lamp/bananalamp
|
||||
name = "banana lamp"
|
||||
desc = "Only a clown would think to make a ghetto banana-shaped lamp. Even has a goofy pullstring."
|
||||
icon_state = "bananalamp"
|
||||
@@ -244,7 +244,7 @@
|
||||
|
||||
// FLARES
|
||||
|
||||
/obj/item/device/flashlight/flare
|
||||
/obj/item/flashlight/flare
|
||||
name = "flare"
|
||||
desc = "A red Nanotrasen issued flare. There are instructions on the side, it reads 'pull cord, make light'."
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -259,11 +259,11 @@
|
||||
light_color = LIGHT_COLOR_FLARE
|
||||
grind_results = list("sulfur" = 15)
|
||||
|
||||
/obj/item/device/flashlight/flare/New()
|
||||
/obj/item/flashlight/flare/New()
|
||||
fuel = rand(800, 1000) // Sorry for changing this so much but I keep under-estimating how long X number of ticks last in seconds.
|
||||
..()
|
||||
|
||||
/obj/item/device/flashlight/flare/process()
|
||||
/obj/item/flashlight/flare/process()
|
||||
open_flame(heat)
|
||||
fuel = max(fuel - 1, 0)
|
||||
if(!fuel || !on)
|
||||
@@ -272,14 +272,14 @@
|
||||
icon_state = "[initial(icon_state)]-empty"
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/device/flashlight/flare/ignition_effect(atom/A, mob/user)
|
||||
/obj/item/flashlight/flare/ignition_effect(atom/A, mob/user)
|
||||
if(fuel && on)
|
||||
. = "<span class='notice'>[user] lights [A] with [src] like a real \
|
||||
badass.</span>"
|
||||
else
|
||||
. = ""
|
||||
|
||||
/obj/item/device/flashlight/flare/proc/turn_off()
|
||||
/obj/item/flashlight/flare/proc/turn_off()
|
||||
on = FALSE
|
||||
force = initial(src.force)
|
||||
damtype = initial(src.damtype)
|
||||
@@ -289,14 +289,14 @@
|
||||
else
|
||||
update_brightness(null)
|
||||
|
||||
/obj/item/device/flashlight/flare/update_brightness(mob/user = null)
|
||||
/obj/item/flashlight/flare/update_brightness(mob/user = null)
|
||||
..()
|
||||
if(on)
|
||||
item_state = "[initial(item_state)]-on"
|
||||
else
|
||||
item_state = "[initial(item_state)]"
|
||||
|
||||
/obj/item/device/flashlight/flare/attack_self(mob/user)
|
||||
/obj/item/flashlight/flare/attack_self(mob/user)
|
||||
|
||||
// Usual checks
|
||||
if(!fuel)
|
||||
@@ -314,10 +314,10 @@
|
||||
damtype = "fire"
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/device/flashlight/flare/is_hot()
|
||||
/obj/item/flashlight/flare/is_hot()
|
||||
return on * heat
|
||||
|
||||
/obj/item/device/flashlight/flare/torch
|
||||
/obj/item/flashlight/flare/torch
|
||||
name = "torch"
|
||||
desc = "A torch fashioned from some leaves and a log."
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
@@ -330,7 +330,7 @@
|
||||
on_damage = 10
|
||||
slot_flags = null
|
||||
|
||||
/obj/item/device/flashlight/lantern
|
||||
/obj/item/flashlight/lantern
|
||||
name = "lantern"
|
||||
icon_state = "lantern"
|
||||
item_state = "lantern"
|
||||
@@ -340,7 +340,7 @@
|
||||
brightness_on = 6 // luminosity when on
|
||||
|
||||
|
||||
/obj/item/device/flashlight/slime
|
||||
/obj/item/flashlight/slime
|
||||
gender = PLURAL
|
||||
name = "glowing slime extract"
|
||||
desc = "Extract from a yellow slime. It emits a strong light when squeezed."
|
||||
@@ -352,21 +352,21 @@
|
||||
materials = list()
|
||||
brightness_on = 6 //luminosity when on
|
||||
|
||||
/obj/item/device/flashlight/emp
|
||||
/obj/item/flashlight/emp
|
||||
var/emp_max_charges = 4
|
||||
var/emp_cur_charges = 4
|
||||
var/charge_tick = 0
|
||||
|
||||
|
||||
/obj/item/device/flashlight/emp/New()
|
||||
/obj/item/flashlight/emp/New()
|
||||
..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/device/flashlight/emp/Destroy()
|
||||
/obj/item/flashlight/emp/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
. = ..()
|
||||
|
||||
/obj/item/device/flashlight/emp/process()
|
||||
/obj/item/flashlight/emp/process()
|
||||
charge_tick++
|
||||
if(charge_tick < 10)
|
||||
return FALSE
|
||||
@@ -374,12 +374,12 @@
|
||||
emp_cur_charges = min(emp_cur_charges+1, emp_max_charges)
|
||||
return TRUE
|
||||
|
||||
/obj/item/device/flashlight/emp/attack(mob/living/M, mob/living/user)
|
||||
/obj/item/flashlight/emp/attack(mob/living/M, mob/living/user)
|
||||
if(on && user.zone_selected in list(BODY_ZONE_PRECISE_EYES, BODY_ZONE_PRECISE_MOUTH)) // call original attack when examining organs
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/device/flashlight/emp/afterattack(atom/movable/A, mob/user, proximity)
|
||||
/obj/item/flashlight/emp/afterattack(atom/movable/A, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
@@ -401,7 +401,7 @@
|
||||
|
||||
// Glowsticks, in the uncomfortable range of similar to flares,
|
||||
// but not similar enough to make it worth a refactor
|
||||
/obj/item/device/flashlight/glowstick
|
||||
/obj/item/flashlight/glowstick
|
||||
name = "glowstick"
|
||||
desc = "A military-grade glowstick."
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -412,27 +412,27 @@
|
||||
grind_results = list("phenol" = 15, "hydrogen" = 10, "oxygen" = 5) //Meth-in-a-stick
|
||||
var/fuel = 0
|
||||
|
||||
/obj/item/device/flashlight/glowstick/Initialize()
|
||||
/obj/item/flashlight/glowstick/Initialize()
|
||||
fuel = rand(1600, 2000)
|
||||
light_color = color
|
||||
. = ..()
|
||||
|
||||
/obj/item/device/flashlight/glowstick/Destroy()
|
||||
/obj/item/flashlight/glowstick/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
. = ..()
|
||||
|
||||
/obj/item/device/flashlight/glowstick/process()
|
||||
/obj/item/flashlight/glowstick/process()
|
||||
fuel = max(fuel - 1, 0)
|
||||
if(!fuel)
|
||||
turn_off()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/flashlight/glowstick/proc/turn_off()
|
||||
/obj/item/flashlight/glowstick/proc/turn_off()
|
||||
on = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/flashlight/glowstick/update_icon()
|
||||
/obj/item/flashlight/glowstick/update_icon()
|
||||
item_state = "glowstick"
|
||||
cut_overlays()
|
||||
if(!fuel)
|
||||
@@ -449,7 +449,7 @@
|
||||
icon_state = "glowstick"
|
||||
cut_overlays()
|
||||
|
||||
/obj/item/device/flashlight/glowstick/attack_self(mob/user)
|
||||
/obj/item/flashlight/glowstick/attack_self(mob/user)
|
||||
if(!fuel)
|
||||
to_chat(user, "<span class='notice'>[src] is spent.</span>")
|
||||
return
|
||||
@@ -462,47 +462,47 @@
|
||||
user.visible_message("<span class='notice'>[user] cracks and shakes [src].</span>", "<span class='notice'>You crack and shake [src], turning it on!</span>")
|
||||
activate()
|
||||
|
||||
/obj/item/device/flashlight/glowstick/proc/activate()
|
||||
/obj/item/flashlight/glowstick/proc/activate()
|
||||
if(!on)
|
||||
on = TRUE
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/device/flashlight/glowstick/red
|
||||
/obj/item/flashlight/glowstick/red
|
||||
name = "red glowstick"
|
||||
color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/item/device/flashlight/glowstick/blue
|
||||
/obj/item/flashlight/glowstick/blue
|
||||
name = "blue glowstick"
|
||||
color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/item/device/flashlight/glowstick/cyan
|
||||
/obj/item/flashlight/glowstick/cyan
|
||||
name = "cyan glowstick"
|
||||
color = LIGHT_COLOR_CYAN
|
||||
|
||||
/obj/item/device/flashlight/glowstick/orange
|
||||
/obj/item/flashlight/glowstick/orange
|
||||
name = "orange glowstick"
|
||||
color = LIGHT_COLOR_ORANGE
|
||||
|
||||
/obj/item/device/flashlight/glowstick/yellow
|
||||
/obj/item/flashlight/glowstick/yellow
|
||||
name = "yellow glowstick"
|
||||
color = LIGHT_COLOR_YELLOW
|
||||
|
||||
/obj/item/device/flashlight/glowstick/pink
|
||||
/obj/item/flashlight/glowstick/pink
|
||||
name = "pink glowstick"
|
||||
color = LIGHT_COLOR_PINK
|
||||
|
||||
/obj/item/device/flashlight/glowstick/random
|
||||
/obj/item/flashlight/glowstick/random
|
||||
name = "random colored glowstick"
|
||||
icon_state = "random_glowstick"
|
||||
color = null
|
||||
|
||||
/obj/item/device/flashlight/glowstick/random/Initialize()
|
||||
/obj/item/flashlight/glowstick/random/Initialize()
|
||||
..()
|
||||
var/T = pick(typesof(/obj/item/device/flashlight/glowstick) - /obj/item/device/flashlight/glowstick/random)
|
||||
var/T = pick(typesof(/obj/item/flashlight/glowstick) - /obj/item/flashlight/glowstick/random)
|
||||
new T(loc)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/item/device/flashlight/spotlight //invisible lighting source
|
||||
/obj/item/flashlight/spotlight //invisible lighting source
|
||||
name = "disco light"
|
||||
desc = "Groovy..."
|
||||
icon_state = null
|
||||
@@ -517,7 +517,7 @@
|
||||
var/range = null
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
|
||||
/obj/item/device/flashlight/flashdark
|
||||
/obj/item/flashlight/flashdark
|
||||
name = "flashdark"
|
||||
desc = "A strange device manufactured with mysterious elements that somehow emits darkness. Or maybe it just sucks in light? Nobody knows for sure."
|
||||
icon_state = "flashdark"
|
||||
@@ -525,7 +525,7 @@
|
||||
brightness_on = 2.5
|
||||
flashlight_power = -3
|
||||
|
||||
/obj/item/device/flashlight/eyelight
|
||||
/obj/item/flashlight/eyelight
|
||||
name = "eyelight"
|
||||
desc = "This shouldn't exist outside of someone's head, how are you seeing this?"
|
||||
brightness_on = 15
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/device/forcefield
|
||||
/obj/item/forcefield
|
||||
name = "forcefield projector"
|
||||
desc = "An experimental device that can create several forcefields at a distance."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "signmaker_engi"
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -15,7 +16,7 @@
|
||||
var/list/current_fields
|
||||
var/field_distance_limit = 7
|
||||
|
||||
/obj/item/device/forcefield/afterattack(atom/target, mob/user, proximity_flag)
|
||||
/obj/item/forcefield/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(!check_allowed_items(target, 1))
|
||||
return
|
||||
if(istype(target, /obj/structure/projected_forcefield))
|
||||
@@ -39,27 +40,27 @@
|
||||
current_fields += F
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
|
||||
/obj/item/device/forcefield/attack_self(mob/user)
|
||||
/obj/item/forcefield/attack_self(mob/user)
|
||||
if(LAZYLEN(current_fields))
|
||||
to_chat(user, "<span class='notice'>You deactivate [src], disabling all active forcefields.</span>")
|
||||
for(var/obj/structure/projected_forcefield/F in current_fields)
|
||||
qdel(F)
|
||||
|
||||
/obj/item/device/forcefield/examine(mob/user)
|
||||
/obj/item/forcefield/examine(mob/user)
|
||||
..()
|
||||
var/percent_charge = round((shield_integrity/max_shield_integrity)*100)
|
||||
to_chat(user, "<span class='notice'>It is currently sustaining [LAZYLEN(current_fields)]/[max_fields] fields, and it's [percent_charge]% charged.</span>")
|
||||
|
||||
/obj/item/device/forcefield/Initialize(mapload)
|
||||
/obj/item/forcefield/Initialize(mapload)
|
||||
..()
|
||||
current_fields = list()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/device/forcefield/Destroy()
|
||||
/obj/item/forcefield/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/forcefield/process()
|
||||
/obj/item/forcefield/process()
|
||||
if(!LAZYLEN(current_fields))
|
||||
shield_integrity = min(shield_integrity + 4, max_shield_integrity)
|
||||
else
|
||||
@@ -80,9 +81,9 @@
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
CanAtmosPass = ATMOS_PASS_DENSITY
|
||||
armor = list("melee" = 0, "bullet" = 25, "laser" = 50, "energy" = 50, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
|
||||
var/obj/item/device/forcefield/generator
|
||||
var/obj/item/forcefield/generator
|
||||
|
||||
/obj/structure/projected_forcefield/Initialize(mapload, obj/item/device/forcefield/origin)
|
||||
/obj/structure/projected_forcefield/Initialize(mapload, obj/item/forcefield/origin)
|
||||
. = ..()
|
||||
generator = origin
|
||||
|
||||
|
||||
@@ -8,9 +8,10 @@
|
||||
|
||||
#define RAD_GRACE_PERIOD 2
|
||||
|
||||
/obj/item/device/geiger_counter //DISCLAIMER: I know nothing about how real-life Geiger counters work. This will not be realistic. ~Xhuis
|
||||
/obj/item/geiger_counter //DISCLAIMER: I know nothing about how real-life Geiger counters work. This will not be realistic. ~Xhuis
|
||||
name = "geiger counter"
|
||||
desc = "A handheld device used for detecting and measuring radiation pulses."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "geiger_off"
|
||||
item_state = "multitool"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
@@ -29,17 +30,17 @@
|
||||
var/fail_to_receive = 0
|
||||
var/current_warning = 1
|
||||
|
||||
/obj/item/device/geiger_counter/Initialize()
|
||||
/obj/item/geiger_counter/Initialize()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
soundloop = new(list(src), FALSE)
|
||||
|
||||
/obj/item/device/geiger_counter/Destroy()
|
||||
/obj/item/geiger_counter/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/item/device/geiger_counter/process()
|
||||
/obj/item/geiger_counter/process()
|
||||
update_icon()
|
||||
update_sound()
|
||||
|
||||
@@ -61,7 +62,7 @@
|
||||
|
||||
current_tick_amount = 0
|
||||
|
||||
/obj/item/device/geiger_counter/examine(mob/user)
|
||||
/obj/item/geiger_counter/examine(mob/user)
|
||||
..()
|
||||
if(!scanning)
|
||||
return 1
|
||||
@@ -85,7 +86,7 @@
|
||||
|
||||
to_chat(user, "<span class='notice'>The last radiation amount detected was [last_tick_amount]</span>")
|
||||
|
||||
/obj/item/device/geiger_counter/update_icon()
|
||||
/obj/item/geiger_counter/update_icon()
|
||||
if(!scanning)
|
||||
icon_state = "geiger_off"
|
||||
return 1
|
||||
@@ -107,7 +108,7 @@
|
||||
icon_state = "geiger_on_5"
|
||||
..()
|
||||
|
||||
/obj/item/device/geiger_counter/proc/update_sound()
|
||||
/obj/item/geiger_counter/proc/update_sound()
|
||||
var/datum/looping_sound/geiger/loop = soundloop
|
||||
if(!scanning)
|
||||
loop.stop()
|
||||
@@ -118,19 +119,19 @@
|
||||
loop.last_radiation = radiation_count
|
||||
loop.start()
|
||||
|
||||
/obj/item/device/geiger_counter/rad_act(amount)
|
||||
/obj/item/geiger_counter/rad_act(amount)
|
||||
. = ..()
|
||||
if(amount <= RAD_BACKGROUND_RADIATION || !scanning)
|
||||
return
|
||||
current_tick_amount += amount
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/geiger_counter/attack_self(mob/user)
|
||||
/obj/item/geiger_counter/attack_self(mob/user)
|
||||
scanning = !scanning
|
||||
update_icon()
|
||||
to_chat(user, "<span class='notice'>[icon2html(src, user)] You switch [scanning ? "on" : "off"] [src].</span>")
|
||||
|
||||
/obj/item/device/geiger_counter/attack(mob/living/M, mob/user)
|
||||
/obj/item/geiger_counter/attack(mob/living/M, mob/user)
|
||||
if(user.a_intent == INTENT_HELP)
|
||||
if(!(obj_flags & EMAGGED))
|
||||
user.visible_message("<span class='notice'>[user] scans [M] with [src].</span>", "<span class='notice'>You scan [M]'s radiation levels with [src]...</span>")
|
||||
@@ -142,7 +143,7 @@
|
||||
return 1
|
||||
..()
|
||||
|
||||
/obj/item/device/geiger_counter/proc/scan(atom/A, mob/user)
|
||||
/obj/item/geiger_counter/proc/scan(atom/A, mob/user)
|
||||
var/rad_strength = 0
|
||||
for(var/i in get_rad_contents(A)) // Yes it's intentional that you can't detect radioactive things under rad protection. Gives traitors a way to hide their glowing green rocks.
|
||||
var/atom/thing = i
|
||||
@@ -164,7 +165,7 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[icon2html(src, user)] Subject is free of radioactive contamination.</span>")
|
||||
|
||||
/obj/item/device/geiger_counter/attackby(obj/item/I, mob/user, params)
|
||||
/obj/item/geiger_counter/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/screwdriver) && (obj_flags & EMAGGED))
|
||||
if(scanning)
|
||||
to_chat(user, "<span class='warning'>Turn off [src] before you perform this action!</span>")
|
||||
@@ -180,7 +181,7 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/device/geiger_counter/AltClick(mob/living/user)
|
||||
/obj/item/geiger_counter/AltClick(mob/living/user)
|
||||
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
|
||||
return ..()
|
||||
if(!scanning)
|
||||
@@ -190,7 +191,7 @@
|
||||
to_chat(usr, "<span class='notice'>You flush [src]'s radiation counts, resetting it to normal.</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/geiger_counter/emag_act(mob/user)
|
||||
/obj/item/geiger_counter/emag_act(mob/user)
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
if(scanning)
|
||||
@@ -199,17 +200,17 @@
|
||||
to_chat(user, "<span class='warning'>You override [src]'s radiation storing protocols. It will now generate small doses of radiation, and stored rads are now projected into creatures you scan.</span>")
|
||||
obj_flags |= EMAGGED
|
||||
|
||||
/obj/item/device/geiger_counter/cyborg
|
||||
/obj/item/geiger_counter/cyborg
|
||||
var/datum/component/mobhook
|
||||
|
||||
/obj/item/device/geiger_counter/cyborg/equipped(mob/user)
|
||||
/obj/item/geiger_counter/cyborg/equipped(mob/user)
|
||||
. = ..()
|
||||
if (mobhook && mobhook.parent != user)
|
||||
QDEL_NULL(mobhook)
|
||||
if (!mobhook)
|
||||
mobhook = user.AddComponent(/datum/component/redirect, list(COMSIG_ATOM_RAD_ACT), CALLBACK(src, /atom.proc/rad_act))
|
||||
|
||||
/obj/item/device/geiger_counter/cyborg/dropped()
|
||||
/obj/item/geiger_counter/cyborg/dropped()
|
||||
. = ..()
|
||||
QDEL_NULL(mobhook)
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
GLOBAL_LIST_EMPTY(GPS_list)
|
||||
/obj/item/device/gps
|
||||
/obj/item/gps
|
||||
name = "global positioning system"
|
||||
desc = "Helping lost spacemen find their way through the planets since 2016."
|
||||
icon = 'icons/obj/telescience.dmi'
|
||||
@@ -14,38 +14,38 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
var/updating = TRUE //Automatic updating of GPS list. Can be set to manual by user.
|
||||
var/global_mode = TRUE //If disabled, only GPS signals of the same Z level are shown
|
||||
|
||||
/obj/item/device/gps/examine(mob/user)
|
||||
/obj/item/gps/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to switch it [tracking ? "off":"on"].</span>")
|
||||
|
||||
/obj/item/device/gps/Initialize()
|
||||
/obj/item/gps/Initialize()
|
||||
. = ..()
|
||||
GLOB.GPS_list += src
|
||||
name = "global positioning system ([gpstag])"
|
||||
add_overlay("working")
|
||||
|
||||
/obj/item/device/gps/Destroy()
|
||||
/obj/item/gps/Destroy()
|
||||
GLOB.GPS_list -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/device/gps/emp_act(severity)
|
||||
/obj/item/gps/emp_act(severity)
|
||||
emped = TRUE
|
||||
cut_overlay("working")
|
||||
add_overlay("emp")
|
||||
addtimer(CALLBACK(src, .proc/reboot), 300, TIMER_OVERRIDE) //if a new EMP happens, remove the old timer so it doesn't reactivate early
|
||||
SStgui.close_uis(src) //Close the UI control if it is open.
|
||||
|
||||
/obj/item/device/gps/proc/reboot()
|
||||
/obj/item/gps/proc/reboot()
|
||||
emped = FALSE
|
||||
cut_overlay("emp")
|
||||
add_overlay("working")
|
||||
|
||||
/obj/item/device/gps/AltClick(mob/user)
|
||||
/obj/item/gps/AltClick(mob/user)
|
||||
if(!user.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
toggletracking(user)
|
||||
|
||||
/obj/item/device/gps/proc/toggletracking(mob/user)
|
||||
/obj/item/gps/proc/toggletracking(mob/user)
|
||||
if(!user.canUseTopic(src, BE_CLOSE))
|
||||
return //user not valid to use gps
|
||||
if(emped)
|
||||
@@ -61,7 +61,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
tracking = TRUE
|
||||
|
||||
|
||||
/obj/item/device/gps/ui_interact(mob/user, ui_key = "gps", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state.
|
||||
/obj/item/gps/ui_interact(mob/user, ui_key = "gps", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state.
|
||||
if(emped)
|
||||
to_chat(user, "[src] fizzles weakly.")
|
||||
return
|
||||
@@ -74,7 +74,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
ui.set_autoupdate(state = updating)
|
||||
|
||||
|
||||
/obj/item/device/gps/ui_data(mob/user)
|
||||
/obj/item/gps/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["power"] = tracking
|
||||
data["tag"] = gpstag
|
||||
@@ -90,7 +90,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
data["signals"] = list()
|
||||
|
||||
for(var/gps in GLOB.GPS_list)
|
||||
var/obj/item/device/gps/G = gps
|
||||
var/obj/item/gps/G = gps
|
||||
if(G.emped || !G.tracking || G == src)
|
||||
continue
|
||||
var/turf/pos = get_turf(G)
|
||||
@@ -115,7 +115,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
|
||||
|
||||
|
||||
/obj/item/device/gps/ui_act(action, params)
|
||||
/obj/item/gps/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
switch(action)
|
||||
@@ -137,42 +137,42 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
. = TRUE
|
||||
|
||||
|
||||
/obj/item/device/gps/science
|
||||
/obj/item/gps/science
|
||||
icon_state = "gps-s"
|
||||
gpstag = "SCI0"
|
||||
|
||||
/obj/item/device/gps/engineering
|
||||
/obj/item/gps/engineering
|
||||
icon_state = "gps-e"
|
||||
gpstag = "ENG0"
|
||||
|
||||
/obj/item/device/gps/mining
|
||||
/obj/item/gps/mining
|
||||
icon_state = "gps-m"
|
||||
gpstag = "MINE0"
|
||||
desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life."
|
||||
|
||||
/obj/item/device/gps/cyborg
|
||||
/obj/item/gps/cyborg
|
||||
icon_state = "gps-b"
|
||||
gpstag = "BORG0"
|
||||
desc = "A mining cyborg internal positioning system. Used as a recovery beacon for damaged cyborg assets, or a collaboration tool for mining teams."
|
||||
flags_1 = NODROP_1
|
||||
|
||||
/obj/item/device/gps/internal
|
||||
/obj/item/gps/internal
|
||||
icon_state = null
|
||||
flags_1 = ABSTRACT_1
|
||||
gpstag = "Eerie Signal"
|
||||
desc = "Report to a coder immediately."
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
|
||||
/obj/item/device/gps/mining/internal
|
||||
/obj/item/gps/mining/internal
|
||||
icon_state = "gps-m"
|
||||
gpstag = "MINER"
|
||||
desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life."
|
||||
|
||||
/obj/item/device/gps/internal/base
|
||||
/obj/item/gps/internal/base
|
||||
gpstag = "NT_AUX"
|
||||
desc = "A homing signal from Nanotrasen's mining base."
|
||||
|
||||
/obj/item/device/gps/visible_debug
|
||||
/obj/item/gps/visible_debug
|
||||
name = "visible GPS"
|
||||
gpstag = "ADMIN"
|
||||
desc = "This admin-spawn GPS unit leaves the coordinates visible \
|
||||
@@ -180,12 +180,12 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
for marking the area around the transition edges."
|
||||
var/list/turf/tagged
|
||||
|
||||
/obj/item/device/gps/visible_debug/Initialize()
|
||||
/obj/item/gps/visible_debug/Initialize()
|
||||
. = ..()
|
||||
tagged = list()
|
||||
START_PROCESSING(SSfastprocess, src)
|
||||
|
||||
/obj/item/device/gps/visible_debug/process()
|
||||
/obj/item/gps/visible_debug/process()
|
||||
var/turf/T = get_turf(src)
|
||||
if(T)
|
||||
// I assume it's faster to color,tag and OR the turf in, rather
|
||||
@@ -194,13 +194,13 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
T.maptext = "[T.x],[T.y],[T.z]"
|
||||
tagged |= T
|
||||
|
||||
/obj/item/device/gps/visible_debug/proc/clear()
|
||||
/obj/item/gps/visible_debug/proc/clear()
|
||||
while(tagged.len)
|
||||
var/turf/T = pop(tagged)
|
||||
T.color = initial(T.color)
|
||||
T.maptext = initial(T.maptext)
|
||||
|
||||
/obj/item/device/gps/visible_debug/Destroy()
|
||||
/obj/item/gps/visible_debug/Destroy()
|
||||
if(tagged)
|
||||
clear()
|
||||
tagged = null
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//copy pasta of the space piano, don't hurt me -Pete
|
||||
/obj/item/device/instrument
|
||||
/obj/item/instrument
|
||||
name = "generic instrument"
|
||||
resistance_flags = FLAMMABLE
|
||||
force = 10
|
||||
@@ -11,34 +11,34 @@
|
||||
var/instrumentId = "generic"
|
||||
var/instrumentExt = "mid"
|
||||
|
||||
/obj/item/device/instrument/Initialize()
|
||||
/obj/item/instrument/Initialize()
|
||||
. = ..()
|
||||
song = new(instrumentId, src, instrumentExt)
|
||||
|
||||
/obj/item/device/instrument/Destroy()
|
||||
/obj/item/instrument/Destroy()
|
||||
qdel(song)
|
||||
song = null
|
||||
return ..()
|
||||
|
||||
/obj/item/device/instrument/suicide_act(mob/user)
|
||||
/obj/item/instrument/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins to play 'Gloomy Sunday'! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/device/instrument/Initialize(mapload)
|
||||
/obj/item/instrument/Initialize(mapload)
|
||||
. = ..()
|
||||
if(mapload)
|
||||
song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded
|
||||
|
||||
/obj/item/device/instrument/attack_self(mob/user)
|
||||
/obj/item/instrument/attack_self(mob/user)
|
||||
if(!user.IsAdvancedToolUser())
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return 1
|
||||
interact(user)
|
||||
|
||||
/obj/item/device/instrument/interact(mob/user)
|
||||
/obj/item/instrument/interact(mob/user)
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/device/instrument/ui_interact(mob/user)
|
||||
/obj/item/instrument/ui_interact(mob/user)
|
||||
if(!user)
|
||||
return
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
user.set_machine(src)
|
||||
song.interact(user)
|
||||
|
||||
/obj/item/device/instrument/violin
|
||||
/obj/item/instrument/violin
|
||||
name = "space violin"
|
||||
desc = "A wooden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\""
|
||||
icon_state = "violin"
|
||||
@@ -56,14 +56,14 @@
|
||||
hitsound = "swing_hit"
|
||||
instrumentId = "violin"
|
||||
|
||||
/obj/item/device/instrument/violin/golden
|
||||
/obj/item/instrument/violin/golden
|
||||
name = "golden violin"
|
||||
desc = "A golden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\""
|
||||
icon_state = "golden_violin"
|
||||
item_state = "golden_violin"
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
|
||||
/obj/item/device/instrument/piano_synth
|
||||
/obj/item/instrument/piano_synth
|
||||
name = "synthesizer"
|
||||
desc = "An advanced electronic synthesizer that can be used as various instruments."
|
||||
icon_state = "synth"
|
||||
@@ -73,11 +73,11 @@
|
||||
var/static/list/insTypes = list("accordion" = "mid", "bikehorn" = "ogg", "glockenspiel" = "mid", "guitar" = "ogg", "harmonica" = "mid", "piano" = "ogg", "recorder" = "mid", "saxophone" = "mid", "trombone" = "mid", "violin" = "mid", "xylophone" = "mid") //No eguitar you ear-rapey fuckers.
|
||||
actions_types = list(/datum/action/item_action/synthswitch)
|
||||
|
||||
/obj/item/device/instrument/piano_synth/proc/changeInstrument(name = "piano")
|
||||
/obj/item/instrument/piano_synth/proc/changeInstrument(name = "piano")
|
||||
song.instrumentDir = name
|
||||
song.instrumentExt = insTypes[name]
|
||||
|
||||
/obj/item/device/instrument/guitar
|
||||
/obj/item/instrument/guitar
|
||||
name = "guitar"
|
||||
desc = "It's made of wood and has bronze strings."
|
||||
icon_state = "guitar"
|
||||
@@ -87,7 +87,7 @@
|
||||
hitsound = 'sound/weapons/stringsmash.ogg'
|
||||
instrumentId = "guitar"
|
||||
|
||||
/obj/item/device/instrument/eguitar
|
||||
/obj/item/instrument/eguitar
|
||||
name = "electric guitar"
|
||||
desc = "Makes all your shredding needs possible."
|
||||
icon_state = "eguitar"
|
||||
@@ -98,28 +98,28 @@
|
||||
instrumentId = "eguitar"
|
||||
instrumentExt = "ogg"
|
||||
|
||||
/obj/item/device/instrument/glockenspiel
|
||||
/obj/item/instrument/glockenspiel
|
||||
name = "glockenspiel"
|
||||
desc = "Smooth metal bars perfect for any marching band."
|
||||
icon_state = "glockenspiel"
|
||||
item_state = "glockenspiel"
|
||||
instrumentId = "glockenspiel"
|
||||
|
||||
/obj/item/device/instrument/accordion
|
||||
/obj/item/instrument/accordion
|
||||
name = "accordion"
|
||||
desc = "Pun-Pun not included."
|
||||
icon_state = "accordion"
|
||||
item_state = "accordion"
|
||||
instrumentId = "accordion"
|
||||
|
||||
/obj/item/device/instrument/trumpet
|
||||
/obj/item/instrument/trumpet
|
||||
name = "trumpet"
|
||||
desc = "To announce the arrival of the king!"
|
||||
icon_state = "trumpet"
|
||||
item_state = "trombone"
|
||||
instrumentId = "trombone"
|
||||
|
||||
/obj/item/device/instrument/trumpet/spectral
|
||||
/obj/item/instrument/trumpet/spectral
|
||||
name = "spectral trumpet"
|
||||
desc = "Things are about to get spooky!"
|
||||
icon_state = "trumpet"
|
||||
@@ -128,22 +128,22 @@
|
||||
instrumentId = "trombone"
|
||||
attack_verb = list("played","jazzed","trumpeted","mourned","dooted","spooked")
|
||||
|
||||
/obj/item/device/instrument/trumpet/spectral/Initialize()
|
||||
/obj/item/instrument/trumpet/spectral/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/spooky)
|
||||
|
||||
/obj/item/device/instrument/trumpet/spectral/attack(mob/living/carbon/C, mob/user)
|
||||
/obj/item/instrument/trumpet/spectral/attack(mob/living/carbon/C, mob/user)
|
||||
playsound (loc, 'sound/instruments/trombone/En4.mid', 100,1,-1)
|
||||
..()
|
||||
|
||||
/obj/item/device/instrument/saxophone
|
||||
/obj/item/instrument/saxophone
|
||||
name = "saxophone"
|
||||
desc = "This soothing sound will be sure to leave your audience in tears."
|
||||
icon_state = "saxophone"
|
||||
item_state = "saxophone"
|
||||
instrumentId = "saxophone"
|
||||
|
||||
/obj/item/device/instrument/saxophone/spectral
|
||||
/obj/item/instrument/saxophone/spectral
|
||||
name = "spectral saxophone"
|
||||
desc = "This spooky sound will be sure to leave mortals in bones."
|
||||
icon_state = "saxophone"
|
||||
@@ -152,22 +152,22 @@
|
||||
force = 0
|
||||
attack_verb = list("played","jazzed","saxxed","mourned","dooted","spooked")
|
||||
|
||||
/obj/item/device/instrument/saxophone/spectral/Initialize()
|
||||
/obj/item/instrument/saxophone/spectral/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/spooky)
|
||||
|
||||
/obj/item/device/instrument/saxophone/spectral/attack(mob/living/carbon/C, mob/user)
|
||||
/obj/item/instrument/saxophone/spectral/attack(mob/living/carbon/C, mob/user)
|
||||
playsound (loc, 'sound/instruments/saxophone/En4.mid', 100,1,-1)
|
||||
..()
|
||||
|
||||
/obj/item/device/instrument/trombone
|
||||
/obj/item/instrument/trombone
|
||||
name = "trombone"
|
||||
desc = "How can any pool table ever hope to compete?"
|
||||
icon_state = "trombone"
|
||||
item_state = "trombone"
|
||||
instrumentId = "trombone"
|
||||
|
||||
/obj/item/device/instrument/trombone/spectral
|
||||
/obj/item/instrument/trombone/spectral
|
||||
name = "spectral trombone"
|
||||
desc = "A skeleton's favorite instrument. Apply directly on the mortals."
|
||||
instrumentId = "trombone"
|
||||
@@ -176,15 +176,15 @@
|
||||
force = 0
|
||||
attack_verb = list("played","jazzed","tromboned","mourned","dooted","spooked")
|
||||
|
||||
/obj/item/device/instrument/trombone/spectral/Initialize()
|
||||
/obj/item/instrument/trombone/spectral/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/spooky)
|
||||
|
||||
/obj/item/device/instrument/trombone/spectral/attack(mob/living/carbon/C, mob/user)
|
||||
/obj/item/instrument/trombone/spectral/attack(mob/living/carbon/C, mob/user)
|
||||
playsound (loc, 'sound/instruments/trombone/Cn4.mid', 100,1,-1)
|
||||
..()
|
||||
|
||||
/obj/item/device/instrument/recorder
|
||||
/obj/item/instrument/recorder
|
||||
name = "recorder"
|
||||
desc = "Just like in school, playing ability and all."
|
||||
force = 5
|
||||
@@ -192,7 +192,7 @@
|
||||
item_state = "recorder"
|
||||
instrumentId = "recorder"
|
||||
|
||||
/obj/item/device/instrument/harmonica
|
||||
/obj/item/instrument/harmonica
|
||||
name = "harmonica"
|
||||
desc = "For when you get a bad case of the space blues."
|
||||
icon_state = "harmonica"
|
||||
@@ -203,13 +203,13 @@
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
actions_types = list(/datum/action/item_action/instrument)
|
||||
|
||||
/obj/item/device/instrument/harmonica/speechModification(message)
|
||||
/obj/item/instrument/harmonica/speechModification(message)
|
||||
if(song.playing && ismob(loc))
|
||||
to_chat(loc, "<span class='warning'>You stop playing the harmonica to talk...</span>")
|
||||
song.playing = FALSE
|
||||
return message
|
||||
|
||||
/obj/item/device/instrument/bikehorn
|
||||
/obj/item/instrument/bikehorn
|
||||
name = "gilded bike horn"
|
||||
desc = "An exquisitely decorated bike horn, capable of honking in a variety of notes."
|
||||
icon_state = "bike_horn"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/laser_pointer
|
||||
/obj/item/laser_pointer
|
||||
name = "laser pointer"
|
||||
desc = "Don't shine it in your eyes!"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
@@ -18,26 +18,26 @@
|
||||
var/obj/item/stock_parts/micro_laser/diode //used for upgrading!
|
||||
|
||||
|
||||
/obj/item/device/laser_pointer/red
|
||||
/obj/item/laser_pointer/red
|
||||
pointer_icon_state = "red_laser"
|
||||
/obj/item/device/laser_pointer/green
|
||||
/obj/item/laser_pointer/green
|
||||
pointer_icon_state = "green_laser"
|
||||
/obj/item/device/laser_pointer/blue
|
||||
/obj/item/laser_pointer/blue
|
||||
pointer_icon_state = "blue_laser"
|
||||
/obj/item/device/laser_pointer/purple
|
||||
/obj/item/laser_pointer/purple
|
||||
pointer_icon_state = "purple_laser"
|
||||
|
||||
/obj/item/device/laser_pointer/New()
|
||||
/obj/item/laser_pointer/New()
|
||||
..()
|
||||
diode = new(src)
|
||||
if(!pointer_icon_state)
|
||||
pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser")
|
||||
|
||||
/obj/item/device/laser_pointer/upgraded/New()
|
||||
/obj/item/laser_pointer/upgraded/New()
|
||||
..()
|
||||
diode = new /obj/item/stock_parts/micro_laser/ultra
|
||||
|
||||
/obj/item/device/laser_pointer/attackby(obj/item/W, mob/user, params)
|
||||
/obj/item/laser_pointer/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/stock_parts/micro_laser))
|
||||
if(!diode)
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
@@ -55,10 +55,10 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/device/laser_pointer/afterattack(atom/target, mob/living/user, flag, params)
|
||||
/obj/item/laser_pointer/afterattack(atom/target, mob/living/user, flag, params)
|
||||
laser_act(target, user, params)
|
||||
|
||||
/obj/item/device/laser_pointer/proc/laser_act(atom/target, mob/living/user, params)
|
||||
/obj/item/laser_pointer/proc/laser_act(atom/target, mob/living/user, params)
|
||||
if( !(user in (viewers(7,target))) )
|
||||
return
|
||||
if (!diode)
|
||||
@@ -182,7 +182,7 @@
|
||||
flick_overlay_view(I, targloc, 10)
|
||||
icon_state = "pointer"
|
||||
|
||||
/obj/item/device/laser_pointer/process()
|
||||
/obj/item/laser_pointer/process()
|
||||
if(prob(20 - recharge_locked*5))
|
||||
energy += 1
|
||||
if(energy >= max_energy)
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
#define LIGHT_BURNED 3
|
||||
|
||||
|
||||
/obj/item/device/lightreplacer
|
||||
/obj/item/lightreplacer
|
||||
|
||||
name = "light replacer"
|
||||
desc = "A device to automatically replace lights. Refill with broken or working lightbulbs, or sheets of glass."
|
||||
@@ -67,16 +67,16 @@
|
||||
// when we get this many shards, we get a free bulb.
|
||||
var/shards_required = 4
|
||||
|
||||
/obj/item/device/lightreplacer/New()
|
||||
/obj/item/lightreplacer/New()
|
||||
uses = max_uses / 2
|
||||
failmsg = "The [name]'s refill light blinks red."
|
||||
..()
|
||||
|
||||
/obj/item/device/lightreplacer/examine(mob/user)
|
||||
/obj/item/lightreplacer/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, status_string())
|
||||
|
||||
/obj/item/device/lightreplacer/attackby(obj/item/W, mob/user, params)
|
||||
/obj/item/lightreplacer/attackby(obj/item/W, mob/user, params)
|
||||
|
||||
if(istype(W, /obj/item/stack/sheet/glass))
|
||||
var/obj/item/stack/sheet/glass/G = W
|
||||
@@ -148,30 +148,30 @@
|
||||
|
||||
to_chat(user, "<span class='notice'>You fill \the [src] with lights from \the [S]. " + status_string() + "</span>")
|
||||
|
||||
/obj/item/device/lightreplacer/emag_act()
|
||||
/obj/item/lightreplacer/emag_act()
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
Emag()
|
||||
|
||||
/obj/item/device/lightreplacer/attack_self(mob/user)
|
||||
/obj/item/lightreplacer/attack_self(mob/user)
|
||||
to_chat(user, status_string())
|
||||
|
||||
/obj/item/device/lightreplacer/update_icon()
|
||||
/obj/item/lightreplacer/update_icon()
|
||||
icon_state = "lightreplacer[(obj_flags & EMAGGED ? 1 : 0)]"
|
||||
|
||||
/obj/item/device/lightreplacer/proc/status_string()
|
||||
/obj/item/lightreplacer/proc/status_string()
|
||||
return "It has [uses] light\s remaining (plus [bulb_shards] fragment\s)."
|
||||
|
||||
/obj/item/device/lightreplacer/proc/Use(mob/user)
|
||||
/obj/item/lightreplacer/proc/Use(mob/user)
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
AddUses(-1)
|
||||
return 1
|
||||
|
||||
// Negative numbers will subtract
|
||||
/obj/item/device/lightreplacer/proc/AddUses(amount = 1)
|
||||
/obj/item/lightreplacer/proc/AddUses(amount = 1)
|
||||
uses = CLAMP(uses + amount, 0, max_uses)
|
||||
|
||||
/obj/item/device/lightreplacer/proc/AddShards(amount = 1, user)
|
||||
/obj/item/lightreplacer/proc/AddShards(amount = 1, user)
|
||||
bulb_shards += amount
|
||||
var/new_bulbs = round(bulb_shards / shards_required)
|
||||
if(new_bulbs > 0)
|
||||
@@ -182,13 +182,13 @@
|
||||
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
|
||||
return new_bulbs
|
||||
|
||||
/obj/item/device/lightreplacer/proc/Charge(var/mob/user)
|
||||
/obj/item/lightreplacer/proc/Charge(var/mob/user)
|
||||
charge += 1
|
||||
if(charge > 3)
|
||||
AddUses(1)
|
||||
charge = 1
|
||||
|
||||
/obj/item/device/lightreplacer/proc/ReplaceLight(obj/machinery/light/target, mob/living/U)
|
||||
/obj/item/lightreplacer/proc/ReplaceLight(obj/machinery/light/target, mob/living/U)
|
||||
|
||||
if(target.status != LIGHT_OK)
|
||||
if(CanUse(U))
|
||||
@@ -222,7 +222,7 @@
|
||||
to_chat(U, "<span class='warning'>There is a working [target.fitting] already inserted!</span>")
|
||||
return
|
||||
|
||||
/obj/item/device/lightreplacer/proc/Emag()
|
||||
/obj/item/lightreplacer/proc/Emag()
|
||||
obj_flags ^= EMAGGED
|
||||
playsound(src.loc, "sparks", 100, 1)
|
||||
if(obj_flags & EMAGGED)
|
||||
@@ -231,14 +231,14 @@
|
||||
name = initial(name)
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/lightreplacer/proc/CanUse(mob/living/user)
|
||||
/obj/item/lightreplacer/proc/CanUse(mob/living/user)
|
||||
src.add_fingerprint(user)
|
||||
if(uses > 0)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/item/device/lightreplacer/afterattack(atom/T, mob/U, proximity)
|
||||
/obj/item/lightreplacer/afterattack(atom/T, mob/U, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(!isturf(T))
|
||||
@@ -255,12 +255,12 @@
|
||||
if(!used)
|
||||
to_chat(U, failmsg)
|
||||
|
||||
/obj/item/device/lightreplacer/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
|
||||
/obj/item/lightreplacer/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J)
|
||||
J.put_in_cart(src, user)
|
||||
J.myreplacer = src
|
||||
J.update_icon()
|
||||
|
||||
/obj/item/device/lightreplacer/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J)
|
||||
/obj/item/lightreplacer/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J)
|
||||
return
|
||||
|
||||
#undef LIGHT_OK
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/device/megaphone
|
||||
/obj/item/megaphone
|
||||
name = "megaphone"
|
||||
desc = "A device used to project your voice. Loudly."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "megaphone"
|
||||
item_state = "radio"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
@@ -10,13 +11,13 @@
|
||||
var/spamcheck = 0
|
||||
var/list/voicespan = list(SPAN_COMMAND)
|
||||
|
||||
/obj/item/device/megaphone/suicide_act(mob/living/carbon/user)
|
||||
/obj/item/megaphone/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] is uttering [user.p_their()] last words into \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
spamcheck = 0//so they dont have to worry about recharging
|
||||
user.say("AAAAAAAAAAAARGHHHHH")//he must have died while coding this
|
||||
return OXYLOSS
|
||||
|
||||
/obj/item/device/megaphone/get_held_item_speechspans(mob/living/carbon/user)
|
||||
/obj/item/megaphone/get_held_item_speechspans(mob/living/carbon/user)
|
||||
if(spamcheck > world.time)
|
||||
to_chat(user, "<span class='warning'>\The [src] needs to recharge!</span>")
|
||||
else
|
||||
@@ -24,26 +25,26 @@
|
||||
spamcheck = world.time + 50
|
||||
return voicespan
|
||||
|
||||
/obj/item/device/megaphone/emag_act(mob/user)
|
||||
/obj/item/megaphone/emag_act(mob/user)
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
to_chat(user, "<span class='warning'>You overload \the [src]'s voice synthesizer.</span>")
|
||||
obj_flags |= EMAGGED
|
||||
voicespan = list(SPAN_REALLYBIG, "userdanger")
|
||||
|
||||
/obj/item/device/megaphone/sec
|
||||
/obj/item/megaphone/sec
|
||||
name = "security megaphone"
|
||||
icon_state = "megaphone-sec"
|
||||
|
||||
/obj/item/device/megaphone/command
|
||||
/obj/item/megaphone/command
|
||||
name = "command megaphone"
|
||||
icon_state = "megaphone-command"
|
||||
|
||||
/obj/item/device/megaphone/cargo
|
||||
/obj/item/megaphone/cargo
|
||||
name = "supply megaphone"
|
||||
icon_state = "megaphone-cargo"
|
||||
|
||||
/obj/item/device/megaphone/clown
|
||||
/obj/item/megaphone/clown
|
||||
name = "clown's megaphone"
|
||||
desc = "Something that should not exist."
|
||||
icon_state = "megaphone-clown"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user