diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 211391a56b..96d68d094d 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -59,10 +59,44 @@ Possible to do for anyone motivated enough:
var/static/list/holopads = list()
var/obj/effect/overlay/holoray/ray
var/offset = FALSE
+ var/on_network = TRUE
+
+/obj/machinery/holopad/tutorial
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
+ flags_1 = NODECONSTRUCT_1
+ on_network = FALSE
+ var/proximity_range = 1
+
+/obj/machinery/holopad/tutorial/Initialize(mapload)
+ . = ..()
+ if(proximity_range)
+ proximity_monitor = new(src, proximity_range)
+ if(mapload)
+ var/obj/item/disk/holodisk/new_disk = locate(/obj/item/disk/holodisk) in src.loc
+ if(new_disk && !disk)
+ new_disk.forceMove(src)
+ disk = new_disk
+
+/obj/machinery/holopad/tutorial/attack_hand(mob/user)
+ if(!istype(user))
+ return
+ if(user.incapacitated() || !is_operational())
+ return
+ if(replay_mode)
+ replay_stop()
+ else if(disk && disk.record)
+ replay_start()
+
+/obj/machinery/holopad/tutorial/HasProximity(atom/movable/AM)
+ if (!isliving(AM))
+ return
+ if(!replay_mode && (disk && disk.record))
+ replay_start()
/obj/machinery/holopad/Initialize()
. = ..()
- holopads += src
+ if(on_network)
+ holopads += src
/obj/machinery/holopad/Destroy()
if(outgoing_call)
@@ -150,8 +184,9 @@ Possible to do for anyone motivated enough:
if(temp)
dat = temp
else
- dat = "Request an AI's presence
"
- dat += "Call another holopad
"
+ if(on_network)
+ dat += "Request an AI's presence
"
+ dat += "Call another holopad
"
if(disk)
if(disk.record)
//Replay
@@ -168,23 +203,24 @@ Possible to do for anyone motivated enough:
if(LAZYLEN(holo_calls))
dat += "=====================================================
"
- var/one_answered_call = FALSE
- var/one_unanswered_call = FALSE
- for(var/I in holo_calls)
- var/datum/holocall/HC = I
- if(HC.connected_holopad != src)
- dat += "Answer call from [get_area(HC.calling_holopad)]
"
- one_unanswered_call = TRUE
- else
- one_answered_call = TRUE
+ if(on_network)
+ var/one_answered_call = FALSE
+ var/one_unanswered_call = FALSE
+ for(var/I in holo_calls)
+ var/datum/holocall/HC = I
+ if(HC.connected_holopad != src)
+ dat += "Answer call from [get_area(HC.calling_holopad)]
"
+ one_unanswered_call = TRUE
+ else
+ one_answered_call = TRUE
- if(one_answered_call && one_unanswered_call)
- dat += "=====================================================
"
- //we loop twice for formatting
- for(var/I in holo_calls)
- var/datum/holocall/HC = I
- if(HC.connected_holopad == src)
- dat += "Disconnect call from [HC.user]
"
+ if(one_answered_call && one_unanswered_call)
+ dat += "=====================================================
"
+ //we loop twice for formatting
+ for(var/I in holo_calls)
+ var/datum/holocall/HC = I
+ if(HC.connected_holopad == src)
+ dat += "Disconnect call from [HC.user]
"
var/datum/browser/popup = new(user, "holopad", name, 300, 175)
@@ -292,6 +328,8 @@ Possible to do for anyone motivated enough:
/obj/machinery/holopad/attack_ai(mob/living/silicon/ai/user)
if (!istype(user))
return
+ if (!on_network)
+ return
/*There are pretty much only three ways to interact here.
I don't need to check for client since they're clicking on an object.
This may change in the future but for now will suffice.*/