anchor.diff:  	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)
  
positive.code: //do not allow AIs to answer calls or people will use it to meta the AI sattelite
  /obj/machinery/holopad/attack_ai(mob/living/silicon/ai/user)
  	if (!istype(user))
  		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.
  
negative.code: 	if(temp)
  		dat = temp
  	else
  		if(on_network)
  			dat += "<a href='?src=[REF(src)];AIrequest=1'>Request an AI's presence</a><br>"
  			dat += "<a href='?src=[REF(src)];Holocall=1'>Call another holopad</a><br>"
  		if(disk)
  			if(disk.record)
  				//Replay
  