diff --git a/code/_helpers/icons.dm b/code/_helpers/icons.dm
index cabf7c04b3..5f10ad623b 100644
--- a/code/_helpers/icons.dm
+++ b/code/_helpers/icons.dm
@@ -811,8 +811,8 @@ proc // Creates a single icon from a given /atom or /image. Only the first argu
/proc/getHologramIcon(icon/A, safety=1)//If safety is on, a new icon is not created.
var/icon/flat_icon = safety ? A : new(A)//Has to be a new icon to not constantly change the same icon.
- flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish.
- flat_icon.ChangeOpacity(0.5)//Make it half transparent.
+ //flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. //VOREStation Removal for AI Vore effects
+ //flat_icon.ChangeOpacity(0.5)//Make it half transparent. //VOREStation Removal for AI Vore effects
var/icon/alpha_mask = new('icons/effects/effects.dmi', "scanline")//Scanline effect.
flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect.
return flat_icon
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 158b718e83..ccdd4db155 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -124,9 +124,9 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
return
/obj/machinery/hologram/holopad/proc/create_holo(mob/living/silicon/ai/A, turf/T = loc)
- var/obj/effect/overlay/hologram = new(T)//Spawn a blank effect at the location.
+ var/obj/effect/overlay/aiholo/hologram = new(T)//Spawn a blank effect at the location. //VOREStation Edit to specific type for adding vars
hologram.icon = A.holo_icon
- hologram.mouse_opacity = 0//So you can't click on it.
+ //hologram.mouse_opacity = 0//So you can't click on it. //VOREStation Removal
hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them.
hologram.anchored = 1//So space wind cannot drag it.
hologram.name = "[A.name] (Hologram)"//If someone decides to right click.
@@ -160,10 +160,22 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
/obj/machinery/hologram/holopad/proc/move_hologram(mob/living/silicon/ai/user)
if(masters[user])
+ /*VOREStation Removal, using our own code
step_to(masters[user], user.eyeobj) // So it turns.
var/obj/effect/overlay/H = masters[user]
H.loc = get_turf(user.eyeobj)
masters[user] = H
+ */
+ //VOREStation Add - Solid mass holovore tracking stuff
+ var/obj/effect/overlay/aiholo/H = masters[user]
+ if(H.bellied)
+ walk_to(H, user.eyeobj) //Walk-to respects obstacles
+ else
+ walk_towards(H, user.eyeobj) //Walk-towards does not
+ //Hologram left the screen (got stuck on a wall or something)
+ if(get_dist(H, user.eyeobj) > world.view)
+ clear_holo(user)
+ //VOREStation Add End
if((HOLOPAD_MODE == RANGE_BASED && (get_dist(H, src) > holo_range)))
clear_holo(user)
diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm
index e2810ad641..4b8cf3263c 100644
--- a/code/modules/mob/living/silicon/say.dm
+++ b/code/modules/mob/living/silicon/say.dm
@@ -70,7 +70,7 @@
var/obj/machinery/hologram/holopad/T = src.holo
if(T && T.masters[src])//If there is a hologram and its master is the user.
-
+ var/obj/effect/overlay/aiholo/hologram = T.masters[src] //VOREStation Add for people in the hologram to hear the messages
//Human-like, sorta, heard by those who understand humans.
var/rendered_a
//Speach distorted, heard by those who do not understand AIs.
@@ -85,7 +85,7 @@
rendered_a = "[name] [verb], \"[message]\""
rendered_b = "[voice_name] [verb], \"[message_stars]\""
src << "Holopad transmitted, [real_name] [verb], \"[message]\""//The AI can "hear" its own message.
-
+ if(hologram.bellied) hologram.bellied.show_message(rendered_a, 2) //VOREStation Add so holobellied people can hear
for(var/mob/M in hearers(T.loc))//The location is the object, default distance.
if(M.say_understands(src))//If they understand AI speak. Humans and the like will be able to.
M.show_message(rendered_a, 2)
@@ -111,7 +111,8 @@
if(T && T.masters[src])
var/rendered = "[name] [message]"
src << "Holopad action relayed, [real_name] [message]"
-
+ var/obj/effect/overlay/aiholo/hologram = T.masters[src] //VOREStation Add for people in the hologram to hear the messages
+ if(hologram.bellied) hologram.bellied.show_message(rendered, 2) //VOREStation Add so holobellied people can hear
for(var/mob/M in viewers(T.loc))
M.show_message(rendered, 2)
else //This shouldn't occur, but better safe then sorry.
diff --git a/code/modules/vore/eating/silicon_vr.dm b/code/modules/vore/eating/silicon_vr.dm
new file mode 100644
index 0000000000..17c418fdea
--- /dev/null
+++ b/code/modules/vore/eating/silicon_vr.dm
@@ -0,0 +1,93 @@
+//Dat AI vore yo
+#define HOLO_ORIGINAL_COLOR null //This seems to work for some reason? And look better?
+#define HOLO_HARDLIGHT_COLOR "#d97de0"
+#define HOLO_ORIGINAL_ALPHA 128
+#define HOLO_HARDLIGHT_ALPHA 210
+
+/obj/effect/overlay/aiholo
+ var/mob/living/bellied //Only belly one person at a time. No huge vore-organs setup for AIs.
+ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
+ alpha = HOLO_ORIGINAL_ALPHA //Half alpha here rather than in the icon so we can toggle it easily.
+ color = HOLO_ORIGINAL_COLOR //This is the blue from icons.dm that it was before.
+ desc = "A hologram representing an AI persona."
+
+/obj/effect/overlay/aiholo/proc/get_prey(var/mob/living/prey)
+ if(bellied) return
+ playsound('sound/effects/stealthoff.ogg',50,0)
+ bellied = prey
+ prey.forceMove(src)
+ visible_message("[src] entirely engulfs [prey] in hardlight holograms!")
+ usr << "You completely engulf [prey] in hardlight holograms!" //Can't be part of the above, because the above is from the hologram.
+
+ desc = "[initial(desc)] It seems to have hardlight mode enabled and someone inside."
+ pass_flags = 0
+ color = HOLO_HARDLIGHT_COLOR
+ alpha = HOLO_HARDLIGHT_ALPHA
+
+/obj/effect/overlay/aiholo/proc/drop_prey()
+ if(!bellied) return
+ playsound('sound/effects/stealthoff.ogg',50,0)
+ bellied.forceMove(get_turf(src))
+ bellied.Weaken(2)
+ bellied.visible_message("[bellied] flops out of \the [src].","You flop out of \the [src].","You hear a thud.")
+ bellied = null
+
+ desc = "[initial(desc)]"
+ pass_flags = initial(pass_flags)
+ color = initial(color)
+ alpha = initial(alpha)
+
+/obj/effect/overlay/aiholo/Destroy()
+ drop_prey()
+ ..()
+
+/mob/living/silicon/ai/verb/holo_nom()
+ set name = "Hardlight Nom"
+ set category = "Vore"
+ set desc = "Wrap up a person in hardlight holograms."
+
+ // Wrong state
+ if (!eyeobj || !holo)
+ usr << "You can only use this when holo-projecting!"
+ return
+
+ //Holopads have this 'masters' list where the keys are AI names and the values are the hologram effects
+ var/obj/effect/overlay/aiholo/hologram = holo.masters[src]
+
+ //Something wrong on holopad
+ if(!hologram)
+ return
+
+ //Already full
+ if (hologram.bellied)
+ var/choice = alert("You can only contain one person. [hologram.bellied] is in you.","Already Full","Drop Mob","Cancel")
+ if(choice == "Drop Mob")
+ hologram.drop_prey()
+ return
+
+ var/mob/living/prey = input(src,"Select a mob to eat","Holonoms") as mob in oview(0,eyeobj)|null
+ if(!prey)
+ return //Probably cancelled
+
+ if(!istype(prey))
+ usr << "Invalid mob choice!"
+ return
+
+ hologram.visible_message("[hologram] starts engulfing [prey] in hardlight holograms!")
+ src << "You begin engulfing [prey] in hardlight holograms." //Can't be part of the above, because the above is from the hologram.
+ if(do_after(user=eyeobj,delay=50,target=prey,needhand=0) && holo && hologram && !hologram.bellied) //Didn't move and still projecting and effect exists and no other bellied people
+ hologram.get_prey(prey)
+
+/* Can't, lets them examine things in camera blackout areas
+//I basically have to do this, you know?
+/mob/living/silicon/ai/examinate(atom/A as mob|obj|turf in view(eyeobj))
+ set name = "Examine"
+ set category = "IC"
+
+ A.examine(src)
+*/
+
+/mob/living/AIShiftClick(var/mob/user) //Shift-click as AI overridden on mobs to examine.
+ if(user.client)
+ src.examine(user)
+ return
diff --git a/vorestation.dme b/vorestation.dme
index 03465c44fb..9a068d9fb7 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -2247,6 +2247,7 @@
#include "code\modules\vore\eating\belly_vr.dm"
#include "code\modules\vore\eating\bellymodes_vr.dm"
#include "code\modules\vore\eating\living_vr.dm"
+#include "code\modules\vore\eating\silicon_vr.dm"
#include "code\modules\vore\eating\simple_animal_vr.dm"
#include "code\modules\vore\eating\vore_vr.dm"
#include "code\modules\vore\eating\vorehooks_vr.dm"