Merge remote-tracking branch 'refs/remotes/VOREStation/master'
@@ -0,0 +1,21 @@
|
||||
/obj/item/device/paicard/attack_ghost(mob/user as mob)
|
||||
if(src.pai != null) //Have a person in them already?
|
||||
user.examinate(src)
|
||||
return
|
||||
var/choice = input(user, "You sure you want to inhabit this PAI?") in list("Yes", "No")
|
||||
var/pai_name = input(user, "Choose your character's name", "Character Name") as text
|
||||
var/actual_pai_name = sanitize_name(pai_name)
|
||||
var/pai_key
|
||||
if (isnull(pai_name))
|
||||
return
|
||||
if(choice == "Yes")
|
||||
pai_key = user.key
|
||||
else
|
||||
return
|
||||
var/turf/location = get_turf(src)
|
||||
var/obj/item/device/paicard/card = new(location)
|
||||
var/mob/living/silicon/pai/pai = new(card)
|
||||
qdel(src)
|
||||
pai.key = pai_key
|
||||
card.setPersonality(pai)
|
||||
pai.SetName(actual_pai_name)
|
||||
@@ -125,6 +125,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
|
||||
|
||||
/obj/machinery/hologram/holopad/proc/create_holo(mob/living/silicon/ai/A, turf/T = loc)
|
||||
var/obj/effect/overlay/aiholo/hologram = new(T)//Spawn a blank effect at the location. //VOREStation Edit to specific type for adding vars
|
||||
hologram.master = A //VOREStation Edit: So you can reference the master AI from in the hologram procs
|
||||
hologram.icon = A.holo_icon
|
||||
//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.
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
density = 1
|
||||
throwpass = 1
|
||||
climbable = 1
|
||||
layer = 3.2 //Just above doors
|
||||
// layer = 3.2 //Just above doors // Vorestation Edit
|
||||
anchored = 1
|
||||
flags = ON_BORDER
|
||||
icon_state = "railing0"
|
||||
|
||||
@@ -51,3 +51,8 @@
|
||||
display_name = "KH Life Crystal"
|
||||
path = /obj/item/weapon/storage/box/khcrystal
|
||||
description = "A small necklace device that will notify an offsite cloning facility should you expire after activating it."
|
||||
|
||||
/datum/gear/accessory/tronket
|
||||
display_name = "Metal necklace"
|
||||
description = "A shiny steel chain with a vague metallic object dangling off it."
|
||||
path = /obj/item/clothing/accessory/tronket
|
||||
@@ -1,3 +1,11 @@
|
||||
/*/datum/gear/head/cap/sol
|
||||
display_name = "cap, sol"
|
||||
path = /obj/item/clothing/head/soft/sol*/
|
||||
path = /obj/item/clothing/head/soft/sol*/
|
||||
|
||||
/datum/gear/head/headbando
|
||||
display_name = "Basic Headband"
|
||||
path = /obj/item/clothing/head/fluff/headbando
|
||||
|
||||
/datum/gear/head/headbando/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
@@ -207,6 +207,12 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c
|
||||
|
||||
src << radio_text
|
||||
|
||||
// Vorestation Edit: Meta Info for AI's. Mostly used for Holograms
|
||||
if (client)
|
||||
var/meta_info = client.prefs.metadata
|
||||
if (meta_info)
|
||||
ooc_notes = meta_info
|
||||
|
||||
if (malf && !(mind in malf.current_antagonists))
|
||||
show_laws()
|
||||
src << "<b>These laws may be changed by other players, or by you being the traitor.</b>"
|
||||
@@ -418,10 +424,12 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c
|
||||
..()
|
||||
|
||||
/mob/living/silicon/ai/Topic(href, href_list)
|
||||
if(..()) //VOREstation edit: So the AI can actually can actually get its OOC prefs read
|
||||
return
|
||||
if(usr != src)
|
||||
return
|
||||
if(..())
|
||||
return
|
||||
/*if(..()) // <------ MOVED FROM HERE
|
||||
return*/
|
||||
if (href_list["mach_close"])
|
||||
if (href_list["mach_close"] == "aialerts")
|
||||
viewalerts = 0
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
/mob/living/silicon/pai/death(gibbed)
|
||||
if(card)
|
||||
card.removePersonality()
|
||||
if(gibbed)
|
||||
src.loc = get_turf(card)
|
||||
qdel(card)
|
||||
else
|
||||
//if(gibbed) //VOREStation Edit Start. This prevents pAIs from joining back into their card after the card's killed
|
||||
src.loc = get_turf(card)
|
||||
qdel(card)
|
||||
/*else
|
||||
close_up()
|
||||
qdel(card)*/ //VOREStation Edit End.
|
||||
if(mind)
|
||||
qdel(mind)
|
||||
..(gibbed)
|
||||
ghostize()
|
||||
qdel(src)
|
||||
qdel(src)
|
||||
|
||||
@@ -4,10 +4,16 @@
|
||||
var/msg = ""
|
||||
switch(src.stat)
|
||||
if(CONSCIOUS)
|
||||
if(!src.client) msg += "\nIt appears to be in stand-by mode." //afk
|
||||
if(UNCONSCIOUS) msg += "\n<span class='warning'>It doesn't seem to be responding.</span>"
|
||||
if(DEAD) msg += "\n<span class='deadsay'>It looks completely unsalvageable.</span>"
|
||||
if(!src.client) msg += "\nIt appears to be in stand-by mode.\n" //afk
|
||||
if(UNCONSCIOUS) msg += "\n<span class='warning'>It doesn't seem to be responding.</span>\n"
|
||||
if(DEAD) msg += "\n<span class='deadsay'>It looks completely unsalvageable.</span>\n"
|
||||
msg += attempt_vr(src,"examine_bellies_pai",args) //VOREStation Edit
|
||||
|
||||
// VOREStation Edit: Start
|
||||
if(ooc_notes)
|
||||
msg += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[src];ooc_notes=1'>\[View\]</a>\n"
|
||||
// VOREStation Edit: End
|
||||
|
||||
msg += "\n*---------*"
|
||||
|
||||
if(print_flavor_text()) msg += "\n[print_flavor_text()]\n"
|
||||
|
||||
@@ -103,6 +103,12 @@
|
||||
verbs += /mob/living/silicon/pai/proc/choose_chassis
|
||||
verbs += /mob/living/silicon/pai/proc/choose_verbs
|
||||
|
||||
// Vorestation Edit: Meta Info for pAI's
|
||||
if (client)
|
||||
var/meta_info = client.prefs.metadata
|
||||
if (meta_info)
|
||||
ooc_notes = meta_info
|
||||
|
||||
//PDA
|
||||
pda = new(src)
|
||||
spawn(5)
|
||||
|
||||
@@ -763,17 +763,14 @@
|
||||
/mob/living/silicon/robot/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
//All Topic Calls that are only for the Cyborg go here
|
||||
if(usr != src)
|
||||
return 1
|
||||
|
||||
if (href_list["showalerts"])
|
||||
subsystem_alarm_monitor()
|
||||
return 1
|
||||
// VOREStation Edit: Start
|
||||
if(href_list["ooc_notes"])
|
||||
src.Examine_OOC()
|
||||
return
|
||||
// VOREStation Edit: End
|
||||
|
||||
if (href_list["mod"])
|
||||
var/obj/item/O = locate(href_list["mod"])
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
/mob/living/silicon/Topic(href, href_list) //For Robots and pAI's. And possibly AI's too.
|
||||
if(href_list["ooc_notes"])
|
||||
src.Examine_OOC()
|
||||
return 1
|
||||
return ..()
|
||||
@@ -6,12 +6,14 @@
|
||||
|
||||
/obj/effect/overlay/aiholo
|
||||
var/mob/living/bellied //Only belly one person at a time. No huge vore-organs setup for AIs.
|
||||
var/mob/living/silicon/ai/master //This will receive the AI controlling the Hologram. For referencing purposes.
|
||||
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/Destroy()
|
||||
drop_prey()
|
||||
walk(src, 0) // Because we might have called walk_to, we must stop the walk loop or BYOND keeps an internal reference to us forever.
|
||||
return ..()
|
||||
|
||||
@@ -41,10 +43,6 @@
|
||||
color = HOLO_ORIGINAL_COLOR
|
||||
alpha = HOLO_ORIGINAL_ALPHA
|
||||
|
||||
/obj/effect/overlay/aiholo/Destroy()
|
||||
drop_prey()
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/ai/verb/holo_nom()
|
||||
set name = "Hardlight Nom"
|
||||
set category = "AI Commands"
|
||||
@@ -95,3 +93,16 @@
|
||||
if(user.client)
|
||||
src.examine(user)
|
||||
return
|
||||
|
||||
//This can go here with all the references.
|
||||
/obj/effect/overlay/aiholo/examine(mob/user)
|
||||
. = ..(user)
|
||||
|
||||
var/msg = "\n"
|
||||
|
||||
//If you need an ooc_notes copy paste, this is NOT the one to use.
|
||||
var/ooc_notes = master.ooc_notes
|
||||
if(ooc_notes)
|
||||
msg += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[master];ooc_notes=1'>\[View\]</a>\n"
|
||||
|
||||
user << msg
|
||||
|
||||
@@ -191,7 +191,7 @@
|
||||
name = "Serdy's Weapon Box"
|
||||
has_items = list(
|
||||
/obj/item/weapon/permit/gun/fluff/silencedmp5a5,
|
||||
/obj/item/weapon/gun/projectile/revolver/detective/fluff/serdy)
|
||||
/obj/item/weapon/gun/projectile/colt/fluff/serdy)
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -1468,4 +1468,15 @@ Departamental Swimsuits, for general use
|
||||
icon_state = "sfjacket"
|
||||
|
||||
icon_override = 'icons/vore/custom_clothes_vr.dmi'
|
||||
item_state = "sfjacket_mob"
|
||||
item_state = "sfjacket_mob"
|
||||
|
||||
//General use
|
||||
/obj/item/clothing/head/fluff/headbando
|
||||
name = "basic headband"
|
||||
desc = "Perfect for martial artists, sweaty rogue operators, and tunnel gangsters."
|
||||
|
||||
icon = 'icons/vore/custom_items_vr.dmi'
|
||||
icon_state = "headbando"
|
||||
|
||||
icon_override = 'icons/vore/custom_clothes_vr.dmi'
|
||||
item_state = "headbando"
|
||||
@@ -189,6 +189,16 @@
|
||||
ammo_type = /obj/item/ammo_casing/a357/stun
|
||||
|
||||
// SilencedMP5A5 : Serdykov Antoz
|
||||
/obj/item/weapon/gun/projectile/colt/fluff/serdy
|
||||
name = "Raikov PPS/45"
|
||||
desc = "An expertly crafted and reliable .45 sidearm with a 7 round single-stack magazine, originally built and in 2369 for frontier men and peacekeepers. The frame and slide are nickel plated, and it has a synthetic black ivory grip. The words 'Krasnaya Raketa' are engraved on the slide near the muzzle. It's relatively thin, but heavy. It also has an ambidextrous mag release and safety lever, making it grippable in either hand comfortably."
|
||||
icon = 'icons/vore/custom_guns_vr.dmi'
|
||||
item_state = "raikov"
|
||||
icon_state = "raikov"
|
||||
fire_sound = 'sound/weapons/45pistol_vr.ogg'
|
||||
magazine_type = /obj/item/ammo_magazine/m45/rubber
|
||||
|
||||
/* //Commented out due to weapon change.
|
||||
/obj/item/weapon/gun/projectile/revolver/detective/fluff/serdy //This forces it to be .38 bullets only
|
||||
name = "Vintage S&W Model 10"
|
||||
desc = "It's a classic S&W Model 10 revolver. This one in particular is beautifully restored with a chromed black frame and cylinder, and a nice redwood grip. The name 'Serdykov A.' is engraved into the base of the grip."
|
||||
@@ -198,6 +208,7 @@
|
||||
fire_sound = 'sound/weapons/deagle.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
ammo_type = /obj/item/ammo_casing/a38r //Rubber rounds.
|
||||
*/
|
||||
|
||||
// LuminescentRing : Briana Moore
|
||||
/obj/item/weapon/gun/projectile/derringer/fluff/briana
|
||||
|
||||
@@ -996,6 +996,30 @@ obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shie
|
||||
item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses")
|
||||
item_flags = AIRTIGHT
|
||||
|
||||
//verkister: Opie Eggbert - Spiffy fluff goggles
|
||||
/obj/item/clothing/glasses/spiffygogs
|
||||
name = "Chad Goggles"
|
||||
desc = "You can almost feel the raw power radiating off these strange specs."
|
||||
icon = 'icons/vore/custom_items_vr.dmi'
|
||||
icon_override = 'icons/vore/custom_clothes_vr.dmi'
|
||||
icon_state = "spiffygogs"
|
||||
item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses")
|
||||
toggleable = 1
|
||||
off_state = "spiffygogsup"
|
||||
|
||||
//General use
|
||||
/obj/item/clothing/accessory/tronket
|
||||
name = "metal necklace"
|
||||
desc = "A shiny steel chain with a vague metallic object dangling off it."
|
||||
w_class = ITEMSIZE_SMALL
|
||||
icon = 'icons/vore/custom_items_vr.dmi'
|
||||
icon_override = 'icons/vore/custom_clothes_vr.dmi'
|
||||
icon_state = "tronket"
|
||||
item_state = "tronket"
|
||||
overlay_state = "tronket"
|
||||
slot_flags = SLOT_TIE
|
||||
slot = "over"
|
||||
|
||||
//The perfect adminboos device?
|
||||
/obj/item/device/perfect_tele
|
||||
name = "personal translocator"
|
||||
|
||||
@@ -263,7 +263,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
return 1
|
||||
|
||||
if(src.a_intent == I_GRAB && src.canmove && !src.buckled)
|
||||
if((src.get_effective_size() - tmob.get_effective_size()) >= 0.75)
|
||||
if((src.get_effective_size() - tmob.get_effective_size()) >= 0.50)
|
||||
now_pushing = 0
|
||||
src.forceMove(tmob.loc)
|
||||
|
||||
@@ -272,15 +272,17 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
// User is a human (capable of scooping) and not wearing shoes! Scoop into foot slot!
|
||||
equip_to_slot_if_possible(tmob.get_scooped(H), slot_shoes, 0, 1)
|
||||
if(istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
src << "You wrap up [tmob] with your powerful tail!"
|
||||
tmob << "[src] binds you with their powerful tail!"
|
||||
src << "You slither over [tmob] with your large, thick tail, smushing them against the ground before coiling up around them, trapping them within the tight confines of your tail!"
|
||||
tmob << "[src] slithers over you with their large, thick tail, smushing you against the ground before coiling up around you, trapping you within the tight confines of their tail!"
|
||||
else
|
||||
src << "You clench your toes around [tmob]'s body!"
|
||||
tmob << "[src] grabs your body with their toes!"
|
||||
src << "You pin [tmob] down onto the floor with your foot and curl your toes up around their body, trapping them inbetween them!"
|
||||
tmob << "[src] pins you down to the floor with their foot and curls their toes up around your body, trapping you inbetween them!"
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
src << "You carefully squish [tmob] under your tail!"
|
||||
tmob << "[src] pins you under their tail!"
|
||||
src << "You squish [tmob] under your large, thick tail, forcing them onto the ground!"
|
||||
tmob << "[src] pins you under their large, thick tail, forcing you onto the ground!!"
|
||||
tmob.resting = 1
|
||||
else
|
||||
src << "You pin [tmob] beneath your foot!"
|
||||
tmob << "[src] pins you beneath their foot!"
|
||||
src << "You step down onto [tmob], squishing them and forcing them down to the ground!"
|
||||
tmob << "[src] steps down and squishes you with their foot, forcing you down to the ground!"
|
||||
tmob.resting = 1
|
||||
return 1
|
||||
|
||||
@@ -622,6 +622,11 @@ character_name: Cameron Eggbert
|
||||
item_path: /obj/item/weapon/disk/limb/eggnerdltd
|
||||
}
|
||||
{
|
||||
ckey: verkister
|
||||
character_name: Opie Eggbert
|
||||
item_path: /obj/item/clothing/glasses/spiffygogs
|
||||
}
|
||||
{
|
||||
ckey: virgo113
|
||||
character_name: Verin Raharra
|
||||
item_path: /obj/item/clothing/suit/storage/hazardvest/fluff/verin
|
||||
|
||||
|
Before Width: | Height: | Size: 173 KiB After Width: | Height: | Size: 171 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 45 KiB |
@@ -97,6 +97,7 @@
|
||||
#include "code\_onclick\drag_drop.dm"
|
||||
#include "code\_onclick\item_attack.dm"
|
||||
#include "code\_onclick\observer.dm"
|
||||
#include "code\_onclick\observer_vr.dm"
|
||||
#include "code\_onclick\other_mobs.dm"
|
||||
#include "code\_onclick\rig.dm"
|
||||
#include "code\_onclick\telekinesis.dm"
|
||||
@@ -1857,6 +1858,7 @@
|
||||
#include "code\modules\mob\living\silicon\login.dm"
|
||||
#include "code\modules\mob\living\silicon\say.dm"
|
||||
#include "code\modules\mob\living\silicon\silicon.dm"
|
||||
#include "code\modules\mob\living\silicon\silicon_vr.dm"
|
||||
#include "code\modules\mob\living\silicon\subystems.dm"
|
||||
#include "code\modules\mob\living\silicon\ai\ai.dm"
|
||||
#include "code\modules\mob\living\silicon\ai\ai_movement.dm"
|
||||
|
||||