Files
Yogstation/code/game/objects/items/control_wand.dm
John Willard 4212a5c805 Ports SSnetworks killings (#22104)
* Ports SSnetworks killings

* Update names.dm

* Removes my debug message and fixes instances it caught
2024-05-31 00:22:12 -05:00

129 lines
3.4 KiB
Plaintext

#define WAND_OPEN "Open Door"
#define WAND_BOLT "Toggle Bolts"
#define WAND_EMERGENCY "Toggle Emergency Access"
/obj/item/door_remote
icon_state = "gangtool-white"
item_state = "electronic"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
icon = 'icons/obj/device.dmi'
name = "control wand"
desc = "Remotely controls airlocks."
w_class = WEIGHT_CLASS_TINY
var/mode = WAND_OPEN
var/list/region_access = list(1) //See access.dm
var/list/access_list
/obj/item/door_remote/Initialize(mapload)
. = ..()
for(var/i in region_access)
access_list += get_region_accesses(i)
/obj/item/door_remote/attack_self(mob/user)
switch(mode)
if(WAND_OPEN)
mode = WAND_BOLT
if(WAND_BOLT)
mode = WAND_EMERGENCY
if(WAND_EMERGENCY)
mode = WAND_OPEN
to_chat(user, "Now in mode: [mode].")
// Airlock remote works by sending NTNet packets to whatever it's pointed at.
/obj/item/door_remote/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
var/obj/machinery/door/door
if(istype(target, /obj/machinery/door))
door = target
if(!door.opens_with_door_remote)
return
else
for (var/obj/machinery/door/door_on_turf in get_turf(target))
if(door_on_turf.opens_with_door_remote)
door = door_on_turf
break
if(isnull(door))
return
if(!door.check_access_list(access_list) || !door.requiresID())
target.balloon_alert(user, "can't access!")
return
var/obj/machinery/door/airlock/airlock = door
if(!door.hasPower() || (istype(airlock) && !airlock.canAIControl()))
target.balloon_alert(user, mode == WAND_OPEN ? "it won't budge!" : "nothing happens!")
return
switch(mode)
if(WAND_OPEN)
if(door.density)
door.open()
else
door.close()
if(WAND_BOLT)
if(!istype(airlock))
target.balloon_alert(user, "only airlocks!")
return
if(airlock.locked)
airlock.unbolt()
log_combat(user, airlock, "unbolted", src)
else
airlock.bolt()
log_combat(user, airlock, "bolted", src)
if(WAND_EMERGENCY)
if(!istype(airlock))
target.balloon_alert(user, "only airlocks!")
return
airlock.emergency = !airlock.emergency
airlock.update_appearance(UPDATE_ICON)
/obj/item/door_remote/omni
name = "omni door remote"
desc = "This control wand can access any door on the station."
icon_state = "gangtool-yellow"
region_access = list(0)
/obj/item/door_remote/captain
name = "command door remote"
icon_state = "gangtool-yellow"
region_access = list(7)
/obj/item/door_remote/chief_engineer
name = "engineering door remote"
icon_state = "gangtool-orange"
region_access = list(5)
/obj/item/door_remote/research_director
name = "research door remote"
icon_state = "gangtool-purple"
region_access = list(4)
/obj/item/door_remote/head_of_security
name = "security door remote"
icon_state = "gangtool-red"
region_access = list(2)
/obj/item/door_remote/quartermaster
name = "supply door remote"
desc = "Remotely controls airlocks. This remote has additional Vault access."
icon_state = "gangtool-green"
region_access = list(6)
/obj/item/door_remote/chief_medical_officer
name = "medical door remote"
icon_state = "gangtool-blue"
region_access = list(3)
/obj/item/door_remote/civillian
name = "civilian door remote"
icon_state = "gangtool-white"
region_access = list(1, 6)
#undef WAND_OPEN
#undef WAND_BOLT
#undef WAND_EMERGENCY