diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 5f57174074a..d7c037839d8 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -146,22 +146,15 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/holopad/process() for (var/mob/living/silicon/ai/master in masters) - var/active_ai = (master && !master.stat && master.client && master.eyeobj)//If there is an AI attached, it's not incapacitated, it has a client, and the client eye is centered on the projector. + var/active_ai = (master && !master.incapacitated() && master.client && master.eyeobj)//If there is an AI with an eye attached, it's not incapacitated, and it has a client if((stat & NOPOWER) || !active_ai) clear_holo(master) continue - if((HOLOPAD_MODE == RANGE_BASED && (get_dist(master.eyeobj, src) > holo_range))) + if(!(masters[master] in view(src))) clear_holo(master) continue - if(HOLOPAD_MODE == AREA_BASED) - var/area/holo_area = get_area(src) - var/area/eye_area = get_area(master.eyeobj) - if(eye_area != holo_area) - clear_holo(master) - continue - use_power(power_per_hologram) return 1 @@ -169,8 +162,21 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ if(masters[user]) step_to(masters[user], user.eyeobj) // So it turns. var/obj/effect/overlay/H = masters[user] - H.loc = get_turf(user.eyeobj) + H.forceMove(get_turf(user.eyeobj)) masters[user] = H + + if(!(H in view(src))) + clear_holo(user) + return 0 + + if((HOLOPAD_MODE == RANGE_BASED && (get_dist(user.eyeobj, src) > holo_range))) + clear_holo(user) + + if(HOLOPAD_MODE == AREA_BASED) + var/area/holo_area = get_area(src) + var/area/hologram_area = get_area(H) + if(hologram_area != holo_area) + clear_holo(user) return 1 /* diff --git a/code/modules/mob/freelook/ai/eye.dm b/code/modules/mob/freelook/ai/eye.dm index 93fda30055e..461f3451379 100644 --- a/code/modules/mob/freelook/ai/eye.dm +++ b/code/modules/mob/freelook/ai/eye.dm @@ -18,7 +18,7 @@ ai.ai_cancel_tracking() //Holopad - if(ai.holo) + if(ai.holo && ai.hologram_follow) ai.holo.move_hologram(ai) return 1 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 5d3cf1a74c7..72ee2ce2318 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -23,7 +23,8 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/proc/sensor_mode, /mob/living/silicon/ai/proc/show_laws_verb, /mob/living/silicon/ai/proc/toggle_acceleration, - /mob/living/silicon/ai/proc/toggle_camera_light + /mob/living/silicon/ai/proc/toggle_camera_light, + /mob/living/silicon/ai/proc/toggle_hologram_movement ) //Not sure why this is necessary... @@ -61,6 +62,7 @@ var/list/ai_verbs_default = list( var/control_disabled = 0 var/datum/announcement/priority/announcement var/obj/machinery/ai_powersupply/psupply = null // Backwards reference to AI's powersupply object. + var/hologram_follow = 1 //This is used for the AI eye, to determine if a holopad's hologram should follow it or not //NEWMALF VARIABLES var/malfunctioning = 0 // Master var that determines if AI is malfunctioning. @@ -203,6 +205,7 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/Destroy() ai_list -= src qdel(eyeobj) + eyeobj = null ..() /mob/living/silicon/ai/proc/setup_icon() @@ -644,6 +647,14 @@ var/list/ai_verbs_default = list( set desc = "Augment visual feed with internal sensor overlays" toggle_sensor_mode() +/mob/living/silicon/ai/proc/toggle_hologram_movement() + set name = "Toggle Hologram Movement" + set category = "AI Commands" + set desc = "Toggles hologram movement based on moving with your virtual eye." + + hologram_follow = !hologram_follow + usr << "Your hologram will now [hologram_follow ? "follow" : "no longer follow"] you." + /mob/living/silicon/ai/proc/check_unable(var/flags = 0, var/feedback = 1) if(stat == DEAD) if(feedback) src << "You are dead!" diff --git a/html/changelogs/PsiOmegaDelta-HoloMovement.yml b/html/changelogs/PsiOmegaDelta-HoloMovement.yml new file mode 100644 index 00000000000..69d18448c0b --- /dev/null +++ b/html/changelogs/PsiOmegaDelta-HoloMovement.yml @@ -0,0 +1,4 @@ +author: Neerti +delete-after: True +changes: + - rscadd: "The AI can now toggle whether its hologram will move towards the center of its view using the 'Toggle Hologram Movement' verb."