mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Merge pull request #1060 from VOREStation/aro-aivore
Adds AI Vore Capability
This commit is contained in:
@@ -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 = "<span class='game say'><span class='name'>[name]</span> [verb], <span class='message'>\"[message]\"</span></span>"
|
||||
rendered_b = "<span class='game say'><span class='name'>[voice_name]</span> [verb], <span class='message'>\"[message_stars]\"</span></span>"
|
||||
src << "<i><span class='game say'>Holopad transmitted, <span class='name'>[real_name]</span> [verb], <span class='message'><span class='body'>\"[message]\"</span></span></span></i>"//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 = "<span class='game say'><span class='name'>[name]</span> <span class='message'>[message]</span></span>"
|
||||
src << "<i><span class='game say'>Holopad action relayed, <span class='name'>[real_name]</span> <span class='message'>[message]</span></span></i>"
|
||||
|
||||
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.
|
||||
|
||||
93
code/modules/vore/eating/silicon_vr.dm
Normal file
93
code/modules/vore/eating/silicon_vr.dm
Normal file
@@ -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 << "<span class='notice'>You completely engulf [prey] in hardlight holograms!</span>" //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 << "<span class='warning'>You can only use this when holo-projecting!</span>"
|
||||
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 << "<span class='warning'>Invalid mob choice!</span>"
|
||||
return
|
||||
|
||||
hologram.visible_message("[hologram] starts engulfing [prey] in hardlight holograms!")
|
||||
src << "<span class='notice'>You begin engulfing [prey] in hardlight holograms.</span>" //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
|
||||
Reference in New Issue
Block a user