Adds AI Vore Capability

Also just general AI QOL things.

AIs have a "Hardlight Noms" verb in the Vore tab. When their hologram is on top of a person, they can pick this, and will homf them. Takes 5 seconds, neither of you can move or it cancels. Holograms with someone inside become almost opaque and purple. They also have different examine text.

A hologram with someone inside cannot move through glass/tables/etc. Pressing "Hardlight Noms" again will give the option of dumping the prey out. Derezzing the hologram will also do this. Also because the hologram can be 'blocked' by things now when full, moving the hologram off the screen will derez it and dump the prey too.

AIs can examine mobs now to get flavortext and OOC notes. Shift-click only. This is for annoying technical reasons. Sorry to those that like to right-click and click examine.
This commit is contained in:
Arokha Sieyes
2017-03-02 21:54:19 -05:00
parent 520812ffb7
commit c5c0af4f2f
5 changed files with 114 additions and 7 deletions

View File

@@ -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)