mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-22 16:12:19 +00:00
Remote Mech Revision (#8903)
The AI can now remotely control mechs in its network. It has one mapped in near its core.
Messages received by your old body will now reach your VR body (does not affect Skrell Srom).
Exosuit pilots can now interact with elevator panels without having to get out.
Robotics and RnD can now create remote controlled mechs. The control centre is in the protolathe, while the exosuit upgrade is in the circuit imprinter.
Mechs can no longer be dismantled if it has a pilot in it.
Dismantling a mech now takes a while.
This commit is contained in:
@@ -236,6 +236,9 @@ var/obj/item/card/id/all_access/ghost_all_access
|
||||
/mob/living/bot/GetIdCard()
|
||||
return botcard
|
||||
|
||||
/mob/living/simple_animal/spiderbot/GetIdCard()
|
||||
return internal_id
|
||||
|
||||
/mob/living/carbon/human/GetIdCard()
|
||||
if(wear_id)
|
||||
var/id = wear_id.GetID()
|
||||
|
||||
@@ -341,3 +341,17 @@ for reference:
|
||||
w_class = 3
|
||||
kit_product = /obj/machinery/iv_drip
|
||||
assembly_time = 4 SECONDS
|
||||
|
||||
/obj/item/deployable_kit/remote_mech
|
||||
name = "mech control centre assembly kit"
|
||||
desc = "A quick assembly kit to put together a mech control centre."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "barrier_kit"
|
||||
w_class = ITEMSIZE_LARGE
|
||||
kit_product = /obj/structure/bed/chair/remote/mech/portable
|
||||
assembly_time = 20 SECONDS
|
||||
|
||||
/obj/item/deployable_kit/remote_mech/brig
|
||||
name = "brig mech control centre assembly kit"
|
||||
desc = "A quick assembly kit to put together a brig mech control centre."
|
||||
kit_product = /obj/structure/bed/chair/remote/mech/prison/portable
|
||||
@@ -162,6 +162,13 @@
|
||||
open()
|
||||
return
|
||||
|
||||
if(istype(AM, /mob/living/simple_animal/spiderbot))
|
||||
var/mob/living/simple_animal/spiderbot/bot = AM
|
||||
if(src.check_access(bot.internal_id))
|
||||
if(density)
|
||||
open()
|
||||
return
|
||||
|
||||
if(istype(AM, /obj/structure/bed/chair/wheelchair))
|
||||
var/obj/structure/bed/chair/wheelchair/wheel = AM
|
||||
if(density)
|
||||
|
||||
@@ -58,13 +58,20 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/door/window/CollidedWith(atom/movable/AM as mob|obj)
|
||||
if (istype(AM, /obj))
|
||||
if (istype(AM, /mob/living/bot))
|
||||
var/mob/living/bot/bot = AM
|
||||
if(istype(bot))
|
||||
if(density && src.check_access(bot.botcard))
|
||||
open()
|
||||
addtimer(CALLBACK(src, .proc/close), 50)
|
||||
return
|
||||
if(istype(AM, /mob/living/simple_animal/spiderbot))
|
||||
var/mob/living/simple_animal/spiderbot/bot = AM
|
||||
if(istype(bot))
|
||||
if(density && src.check_access(bot.internal_id))
|
||||
open()
|
||||
addtimer(CALLBACK(src, .proc/close), 50)
|
||||
return
|
||||
if (!( ROUND_IS_STARTED ))
|
||||
return
|
||||
if (src.operating)
|
||||
|
||||
@@ -582,7 +582,9 @@
|
||||
var/mob/living/heavy_vehicle/M = L
|
||||
if(!M.pilots?.len)
|
||||
return TURRET_NOT_TARGET
|
||||
|
||||
for(var/mob/pilot in M.pilots)
|
||||
if(allowed(pilot)) // don't shoot if the mech contains at least one person with access
|
||||
return TURRET_NOT_TARGET
|
||||
return TURRET_PRIORITY_TARGET //if the perp has passed all previous tests, congrats, it is now a "shoot-me!" nominee
|
||||
|
||||
/obj/machinery/porta_turret/proc/assess_perp(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -55,16 +55,19 @@
|
||||
|
||||
/obj/proc/user_buckle_mob(mob/living/M, mob/user)
|
||||
if(!ROUND_IS_STARTED)
|
||||
to_chat(user, "<span class='warning'>You can't buckle anyone in before the game starts.</span>")
|
||||
to_chat(user, SPAN_WARNING("You can't buckle anyone in before the game starts."))
|
||||
if(!user.Adjacent(M) || user.restrained() || user.stat || istype(user, /mob/living/silicon/pai))
|
||||
return
|
||||
if(!M.can_buckle)
|
||||
to_chat(user, SPAN_WARNING("\The [M] can't be buckled!"))
|
||||
return
|
||||
if(M == buckled_mob)
|
||||
return
|
||||
if(istype(M, /mob/living/carbon/slime))
|
||||
to_chat(user, "<span class='warning'>The [M] is too squishy to buckle in.</span>")
|
||||
to_chat(user, SPAN_WARNING("\The [M] is too squishy to buckle in."))
|
||||
return
|
||||
if (buckled_mob)
|
||||
to_chat(user, "<span class='warning'>[buckled_mob.name] is already there, unbuckle them first!.</span>")
|
||||
if(buckled_mob)
|
||||
to_chat(user, SPAN_WARNING("\The [buckled_mob.name] is already there, unbuckle them first!."))
|
||||
return
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
@@ -2,12 +2,34 @@
|
||||
name = "virtual reality centre"
|
||||
desc = "A comfortable chair with full audio-visual transposition centres."
|
||||
icon_state = "shuttlechair_down"
|
||||
var/portable = FALSE // can it be moved around 'n shit
|
||||
var/portable_type
|
||||
can_dismantle = FALSE
|
||||
var/list/remote_network // Which network does this remote control belong to?
|
||||
|
||||
/obj/structure/bed/chair/remote/Initialize()
|
||||
. = ..()
|
||||
if(portable && portable_type)
|
||||
name = "portable [name]"
|
||||
|
||||
/obj/structure/bed/chair/remote/examine(mob/user)
|
||||
..()
|
||||
if(portable && portable_type)
|
||||
to_chat(user, FONT_SMALL(SPAN_NOTICE("Can be packed up by using a wrench on it.")))
|
||||
|
||||
/obj/structure/bed/chair/remote/update_icon()
|
||||
return
|
||||
|
||||
/obj/structure/bed/chair/remote/attackby(obj/item/W, mob/user)
|
||||
if(portable && portable_type && W.iswrench())
|
||||
user.visible_message(SPAN_NOTICE("\The [user] starts dismantling \the [src]..."), SPAN_NOTICE("You start dismantling \the [src]..."))
|
||||
if(do_after(user, 20 SECONDS, TRUE, src))
|
||||
user.visible_message(SPAN_NOTICE("\The [user] dismantles \the [src]."), SPAN_NOTICE("You dismantle \the [src]."))
|
||||
var/obj/kit = new portable_type(get_turf(src))
|
||||
user.put_in_hands(kit)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/structure/bed/chair/remote/user_buckle_mob(mob/user)
|
||||
..()
|
||||
if(ishuman(user))
|
||||
@@ -19,8 +41,9 @@
|
||||
|
||||
// Return to our body in the unfortunate event that we get unbuckled while plugged in
|
||||
/obj/structure/bed/chair/remote/user_unbuckle_mob(mob/user)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.body_return()
|
||||
cut_overlays()
|
||||
if(buckled_mob)
|
||||
var/mob/M = buckled_mob
|
||||
if(istype(M) && M.vr_mob)
|
||||
M.vr_mob.body_return()
|
||||
cut_overlays()
|
||||
..()
|
||||
@@ -9,7 +9,15 @@
|
||||
var/mob/living/carbon/human/H = user
|
||||
SSvirtualreality.mech_selection(H, remote_network)
|
||||
|
||||
/obj/structure/bed/chair/remote/mech/portable
|
||||
portable = TRUE
|
||||
portable_type = /obj/item/deployable_kit/remote_mech
|
||||
|
||||
/obj/structure/bed/chair/remote/mech/prison
|
||||
name = "brig mech control centre"
|
||||
desc = "A comfortable chair with full audio-visual transposition centres. This one gives you access to exosuits attached to the brig network."
|
||||
remote_network = "prisonmechs"
|
||||
remote_network = "prisonmechs"
|
||||
|
||||
/obj/structure/bed/chair/remote/mech/prison/portable
|
||||
portable = TRUE
|
||||
portable_type = /obj/item/deployable_kit/remote_mech/brig
|
||||
Reference in New Issue
Block a user