diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index 8d99276354a..9e16d3f3b29 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -179,7 +179,7 @@
return
- else if (istype(user, /mob/living/silicon) && src.aidisabled)
+ else if (user.has_unlimited_silicon_privilege && src.aidisabled)
user << "AI control for this Air Alarm interface has been disabled."
user << browse(null, "window=air_alarm")
return
@@ -248,11 +248,10 @@
/obj/machinery/alarm/proc/return_text()
var/dat = ""
- if(!(istype(usr, /mob/living/silicon)) && locked)
- dat += "
Swipe ID card to unlock interface
"
+ dat += "Swipe ID card to [locked ? "unlock" : "lock"] interface.
"
+ if(!usr.has_unlimited_silicon_privilege && locked)
dat += "[return_status()]"
else
- dat += "Swipe ID card to lock interface
"
dat += "[return_status()]
[return_controls()]"
return dat
@@ -564,7 +563,7 @@ table tr:first-child th:first-child { border: none;}
var/datum/tlv/tlv = TLV[env]
var/newval = input("Enter [varname] for env", "Alarm triggers", tlv.vars[varname]) as num|null
- if (isnull(newval) || ..() || (locked && !issilicon(usr)))
+ if (isnull(newval) || ..() || (locked && !(usr.has_unlimited_silicon_privilege)))
return
if (newval<0)
tlv.vars[varname] = -1.0
@@ -1108,7 +1107,7 @@ FIRE ALARM
var/d1
var/d2
var/dat = ""
- if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon))
+ if (istype(user, /mob/living/carbon/human) || user.has_unlimited_silicon_privilege)
A = A.loc
if (A.fire)
@@ -1281,7 +1280,7 @@ Code shamelessly copied from apc_frame
var/area/A = src.loc
var/d1
var/dat
- if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai))
+ if (istype(user, /mob/living/carbon/human) || user.has_unlimited_silicon_privilege)
A = A.loc
if (A.party)
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index f95e9b011dd..9830904022d 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -7,34 +7,6 @@
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
-
-/obj/item/weapon/storage/belt/proc/can_use()
- if(!ismob(loc)) return 0
- var/mob/M = loc
- if(src in M.get_equipped_items())
- return 1
- else
- return 0
-
-
-/obj/item/weapon/storage/belt/MouseDrop(obj/over_object as obj, src_location, over_location)
- var/mob/M = usr
- if(!istype(over_object, /obj/screen))
- return ..()
- playsound(src.loc, "rustle", 50, 1, -5)
- if (!M.restrained() && !M.stat && can_use())
- switch(over_object.name)
- if("r_hand")
- M.unEquip(src)
- M.put_in_r_hand(src)
- if("l_hand")
- M.unEquip(src)
- M.put_in_l_hand(src)
- src.add_fingerprint(usr)
- return
-
-
-
/obj/item/weapon/storage/belt/utility
name = "toolbelt" //Carn: utility belt is nicer, but it bamboozles the text parsing.
desc = "Holds tools."
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index e34c3d3620a..9c33619bfbf 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -2,6 +2,7 @@
gender = NEUTER
voice_name = "synthesized voice"
languages = ROBOT | HUMAN
+ has_unlimited_silicon_privilege = 1
var/syndicate = 0
var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS
var/list/alarms_to_show = list()
diff --git a/code/modules/mob/living/simple_animal/friendly/drone.dm b/code/modules/mob/living/simple_animal/friendly/drone.dm
index 118b1b7de46..48912230a76 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone.dm
@@ -30,6 +30,7 @@
voice_name = "synthesized chirp"
languages = DRONE
mob_size = 0
+ has_unlimited_silicon_privilege = 1
var/picked = FALSE
var/list/drone_overlays[TOTAL_LAYERS]
var/laws = \
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 6543d5e223b..9e60f9b85ab 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -155,6 +155,8 @@
var/digitalcamo = 0 // Can they be tracked by the AI?
+ var/has_unlimited_silicon_privilege = 0 // Can they interact with station electronics
+
var/list/radar_blips = list() // list of screen objects, radar blips
var/radar_open = 0 // nonzero is radar is open
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index daf29f7888f..35ddd5458c7 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -690,7 +690,7 @@
"chargingStatus" = charging,
"totalLoad" = lastused_equip + lastused_light + lastused_environ,
"coverLocked" = coverlocked,
- "siliconUser" = istype(user, /mob/living/silicon),
+ "siliconUser" = user.has_unlimited_silicon_privilege,
"malfStatus" = get_malf_status(user),
"powerChannels" = list(
@@ -778,7 +778,7 @@
if(user.lying)
user << "You must stand to use [src]!"
return 0
- if (istype(user, /mob/living/silicon))
+ if(user.has_unlimited_silicon_privilege)
var/mob/living/silicon/ai/AI = user
var/mob/living/silicon/robot/robot = user
if ( \
@@ -844,7 +844,7 @@
update()
else if (href_list["overload"])
- if(istype(usr, /mob/living/silicon))
+ if(usr.has_unlimited_silicon_privilege)
src.overload_lighting()
else if (href_list["malfhack"])
@@ -881,7 +881,7 @@
malfvacate()
else if (href_list["toggleaccess"])
- if(istype(usr, /mob/living/silicon))
+ if(usr.has_unlimited_silicon_privilege)
if(emagged || (stat & (BROKEN|MAINT)))
usr << "The APC does not respond to the command."
else