/obj/item/assembly/control name = "blast door controller" desc = "A small electronic device able to control a blast door remotely." icon_state = "control" attachable = TRUE /// Our ID. Make the first character ! if you want to obfuscate it as a mapper via randomization. var/id /// Can the ID be changed if used in hand? var/can_change_id = FALSE /// Show ID? var/show_id = TRUE var/cooldown = FALSE //Door cooldowns /obj/item/assembly/control/Initialize(mapload) if(mapload && id) if(copytext(id, 1, 2) == "!") id = SSmapping.get_obfuscated_id(id) return ..() /obj/item/assembly/control/examine(mob/user) . = ..() if(id && show_id) . += "Its channel ID is '[id]'." if(can_change_id) . += "Use in hand to change ID." /obj/item/assembly/control/attack_self(mob/living/user) . = ..() if(!can_change_id) return var/new_id new_id = input(user, "Set ID", "Set ID", show_id? id : null) as text|null if(!isnull(new_id)) //0/"" is considered !, so check null instead of just !. id = new_id /obj/item/assembly/control/activate() cooldown = TRUE var/openclose for(var/obj/machinery/door/poddoor/M in GLOB.machines) if(M.id == src.id) if(openclose == null) openclose = M.density INVOKE_ASYNC(M, openclose ? /obj/machinery/door/poddoor.proc/open : /obj/machinery/door/poddoor.proc/close) addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 10) /obj/item/assembly/control/airlock name = "airlock controller" desc = "A small electronic device able to control an airlock remotely." id = "badmin" // Set it to null for MEGAFUN. var/specialfunctions = OPEN /* Bitflag, 1= open (OPEN) 2= idscan (IDSCAN) 4= bolts (BOLTS) 8= shock (SHOCK) 16= door safties (SAFE) */ /obj/item/assembly/control/airlock/activate() cooldown = TRUE var/doors_need_closing = FALSE var/list/obj/machinery/door/airlock/open_or_close = list() for(var/obj/machinery/door/airlock/D in GLOB.airlocks) if(D.id_tag == src.id) if(specialfunctions & OPEN) open_or_close += D if(!D.density) doors_need_closing = TRUE if(specialfunctions & IDSCAN) D.aiDisabledIdScanner = !D.aiDisabledIdScanner if(specialfunctions & BOLTS) if(!D.wires.is_cut(WIRE_BOLTS) && D.hasPower()) D.locked = !D.locked D.update_icon() if(specialfunctions & SHOCK) if(D.secondsElectrified) D.secondsElectrified = -1 LAZYADD(D.shockedby, "\[[TIME_STAMP("hh:mm:ss", FALSE)]\] [key_name(usr)]") log_combat(usr, D, "electrified") else D.secondsElectrified = 0 if(specialfunctions & SAFE) D.safe = !D.safe for(var/D in open_or_close) INVOKE_ASYNC(D, doors_need_closing ? /obj/machinery/door/airlock.proc/close : /obj/machinery/door/airlock.proc/open) addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 10) /obj/item/assembly/control/massdriver name = "mass driver controller" desc = "A small electronic device able to control a mass driver." /obj/item/assembly/control/massdriver/activate() cooldown = TRUE for(var/obj/machinery/door/poddoor/M in GLOB.machines) if (M.id == src.id) INVOKE_ASYNC(M, /obj/machinery/door/poddoor.proc/open) sleep(10) for(var/obj/machinery/mass_driver/M in GLOB.machines) if(M.id == src.id) M.drive() sleep(60) for(var/obj/machinery/door/poddoor/M in GLOB.machines) if (M.id == src.id) INVOKE_ASYNC(M, /obj/machinery/door/poddoor.proc/close) addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 10) /obj/item/assembly/control/igniter name = "ignition controller" desc = "A remote controller for a mounted igniter." /obj/item/assembly/control/igniter/activate() cooldown = TRUE for(var/obj/machinery/sparker/M in GLOB.machines) if (M.id == src.id) INVOKE_ASYNC(M, /obj/machinery/sparker.proc/ignite) for(var/obj/machinery/igniter/M in GLOB.machines) if(M.id == src.id) M.use_power(50) M.on = !M.on M.icon_state = "igniter[M.on]" addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 30) /obj/item/assembly/control/flasher name = "flasher controller" desc = "A remote controller for a mounted flasher." /obj/item/assembly/control/flasher/activate() cooldown = TRUE for(var/obj/machinery/flasher/M in GLOB.machines) if(M.id == src.id) INVOKE_ASYNC(M, /obj/machinery/flasher.proc/flash) addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 50) /obj/item/assembly/control/crematorium name = "crematorium controller" desc = "An evil-looking remote controller for a crematorium." /obj/item/assembly/control/crematorium/activate() cooldown = TRUE for (var/obj/structure/bodycontainer/crematorium/C in GLOB.crematoriums) if (C.id == id) C.cremate(usr) addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 50) /obj/item/assembly/control/electrochromatic name = "electrochromatic window controller" desc = "Toggles linked electrochromatic windows." can_change_id = TRUE /// Stores our status to prevent windows from desyncing. var/on = FALSE /obj/item/assembly/control/electrochromatic/activate() on = !on do_electrochromatic_toggle(on, id)