diff --git a/code/_onclick/observer_vr.dm b/code/_onclick/observer_vr.dm new file mode 100644 index 0000000000..b81ea955a4 --- /dev/null +++ b/code/_onclick/observer_vr.dm @@ -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) \ No newline at end of file diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index c88fb4f31b..8c2c97f5a8 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -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. diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm index 9f7cd6e54d..36e8d6b0a4 100644 --- a/code/game/objects/structures/railing.dm +++ b/code/game/objects/structures/railing.dm @@ -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" diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm index 2fd208cfd7..d407963d2d 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm @@ -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 \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_head_vr.dm b/code/modules/client/preference_setup/loadout/loadout_head_vr.dm index e1a01568e2..6ed8f3f59c 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head_vr.dm @@ -1,3 +1,11 @@ /*/datum/gear/head/cap/sol display_name = "cap, sol" - path = /obj/item/clothing/head/soft/sol*/ \ No newline at end of file + 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) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 95a27a31b5..30979d3217 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -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 << "These laws may be changed by other players, or by you being the traitor." @@ -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 diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm index 920a3a1658..01650cc4b2 100644 --- a/code/modules/mob/living/silicon/pai/death.dm +++ b/code/modules/mob/living/silicon/pai/death.dm @@ -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) \ No newline at end of file + qdel(src) diff --git a/code/modules/mob/living/silicon/pai/examine.dm b/code/modules/mob/living/silicon/pai/examine.dm index d527a25e42..0d4d73bbe7 100644 --- a/code/modules/mob/living/silicon/pai/examine.dm +++ b/code/modules/mob/living/silicon/pai/examine.dm @@ -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 += "\nIt doesn't seem to be responding." - if(DEAD) msg += "\nIt looks completely unsalvageable." + if(!src.client) msg += "\nIt appears to be in stand-by mode.\n" //afk + if(UNCONSCIOUS) msg += "\nIt doesn't seem to be responding.\n" + if(DEAD) msg += "\nIt looks completely unsalvageable.\n" msg += attempt_vr(src,"examine_bellies_pai",args) //VOREStation Edit + + // VOREStation Edit: Start + if(ooc_notes) + msg += "OOC Notes: \[View\]\n" + // VOREStation Edit: End + msg += "\n*---------*" if(print_flavor_text()) msg += "\n[print_flavor_text()]\n" diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 59e4137ee5..267d47984c 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -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) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 6607319438..71bc0f9574 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -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"]) diff --git a/code/modules/mob/living/silicon/silicon_vr.dm b/code/modules/mob/living/silicon/silicon_vr.dm new file mode 100644 index 0000000000..624406bd8b --- /dev/null +++ b/code/modules/mob/living/silicon/silicon_vr.dm @@ -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 ..() diff --git a/code/modules/vore/eating/silicon_vr.dm b/code/modules/vore/eating/silicon_vr.dm index 3cbb1c0e66..a19cdaf05b 100644 --- a/code/modules/vore/eating/silicon_vr.dm +++ b/code/modules/vore/eating/silicon_vr.dm @@ -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 += "OOC Notes: \[View\]\n" + + user << msg diff --git a/code/modules/vore/fluffstuff/custom_boxes_vr.dm b/code/modules/vore/fluffstuff/custom_boxes_vr.dm index 9cc9199061..b405811b66 100644 --- a/code/modules/vore/fluffstuff/custom_boxes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_boxes_vr.dm @@ -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) /* diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm index 9257ee8e6d..137e66dcb1 100644 --- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm @@ -1468,4 +1468,15 @@ Departamental Swimsuits, for general use icon_state = "sfjacket" icon_override = 'icons/vore/custom_clothes_vr.dmi' - item_state = "sfjacket_mob" \ No newline at end of file + 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" \ No newline at end of file diff --git a/code/modules/vore/fluffstuff/custom_guns_vr.dm b/code/modules/vore/fluffstuff/custom_guns_vr.dm index 9d74af65f6..aad0527bda 100644 --- a/code/modules/vore/fluffstuff/custom_guns_vr.dm +++ b/code/modules/vore/fluffstuff/custom_guns_vr.dm @@ -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 diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 48d892c2b8..306bad2094 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -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" diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index d2462e792d..fc6139f209 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -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 diff --git a/config/custom_items.txt b/config/custom_items.txt index c5c7492f82..90e934f639 100644 --- a/config/custom_items.txt +++ b/config/custom_items.txt @@ -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 diff --git a/icons/vore/custom_clothes_vr.dmi b/icons/vore/custom_clothes_vr.dmi index 9123ebb0fa..eeb4ecbc3b 100644 Binary files a/icons/vore/custom_clothes_vr.dmi and b/icons/vore/custom_clothes_vr.dmi differ diff --git a/icons/vore/custom_guns_vr.dmi b/icons/vore/custom_guns_vr.dmi index c869884958..da52d84838 100644 Binary files a/icons/vore/custom_guns_vr.dmi and b/icons/vore/custom_guns_vr.dmi differ diff --git a/icons/vore/custom_guns_vr2.dmi b/icons/vore/custom_guns_vr2.dmi new file mode 100644 index 0000000000..da52d84838 Binary files /dev/null and b/icons/vore/custom_guns_vr2.dmi differ diff --git a/icons/vore/custom_items_vr.dmi b/icons/vore/custom_items_vr.dmi index 591caa8916..ad81f857d9 100644 Binary files a/icons/vore/custom_items_vr.dmi and b/icons/vore/custom_items_vr.dmi differ diff --git a/sound/weapons/45pistol_vr.ogg b/sound/weapons/45pistol_vr.ogg new file mode 100644 index 0000000000..faa55fb1b9 Binary files /dev/null and b/sound/weapons/45pistol_vr.ogg differ diff --git a/vorestation.dme b/vorestation.dme index 309d506309..f5838a9928 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -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"