mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
1401 lines
56 KiB
Plaintext
1401 lines
56 KiB
Plaintext
/* TUTORIAL
|
|
"icon" is the file with the HUD/ground icon for the item
|
|
"icon_state" is the iconstate in this file for the item
|
|
"icon_override" is the file with the on-mob icons, can be the same file (Except for glasses, shoes, and masks.)
|
|
"item_state" is the iconstate for the on-mob icons:
|
|
item_state_s is used for worn uniforms on mobs
|
|
item_state_r and item_state_l are for being held in each hand
|
|
|
|
"item_state_slots" can replace "item_state", it is a list:
|
|
item_state_slots["slotname1"] = "item state for that slot"
|
|
item_state_slots["slotname2"] = "item state for that slot"
|
|
*/
|
|
|
|
/* TEMPLATE
|
|
//ckey:Character Name
|
|
/obj/item/weapon/fluff/charactername
|
|
name = ""
|
|
desc = ""
|
|
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "myicon"
|
|
|
|
icon_override = 'icons/vore/custom_items_vr.dmi'
|
|
item_state = "myicon"
|
|
|
|
*/
|
|
|
|
//For general use
|
|
/obj/item/device/modkit_conversion
|
|
name = "modification kit"
|
|
desc = "A kit containing all the needed tools and parts to modify a suit and helmet."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "modkit"
|
|
var/parts = 3
|
|
var/from_helmet = /obj/item/clothing/head/helmet/space/void
|
|
var/from_suit = /obj/item/clothing/suit/space/void
|
|
var/to_helmet = /obj/item/clothing/head/cardborg
|
|
var/to_suit = /obj/item/clothing/suit/cardborg
|
|
|
|
//Conversion proc
|
|
afterattack(obj/O, mob/user as mob)
|
|
var/flag
|
|
var/to_type
|
|
if(istype(O,from_helmet))
|
|
flag = 1
|
|
to_type = to_helmet
|
|
else if(istype(O,from_suit))
|
|
flag = 2
|
|
to_type = to_suit
|
|
else
|
|
return
|
|
if(!(parts & flag))
|
|
user << "<span class='warning'>This kit has no parts for this modification left.</span>"
|
|
return
|
|
if(istype(O,to_type))
|
|
user << "<span class='notice'>[O] is already modified.</span>"
|
|
return
|
|
if(!isturf(O.loc))
|
|
user << "<span class='warning'>[O] must be safely placed on the ground for modification.</span>"
|
|
return
|
|
playsound(user.loc, 'sound/items/Screwdriver.ogg', 100, 1)
|
|
var/N = new to_type(O.loc)
|
|
user.visible_message("<span class='warning'>[user] opens \the [src] and modifies \the [O] into \the [N].</span>","<span class='warning'>You open \the [src] and modify \the [O] into \the [N].</span>")
|
|
qdel(O)
|
|
parts &= ~flag
|
|
if(!parts)
|
|
qdel(src)
|
|
|
|
//JoanRisu:Joan Risu
|
|
/obj/item/weapon/flame/lighter/zippo/fluff/joan
|
|
name = "Federation Zippo Lighter"
|
|
desc = "A red zippo lighter with the United Federation Logo on it."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "joanzip"
|
|
|
|
//JoanRisu:Joan Risu
|
|
/obj/item/weapon/sword/fluff/joanaria
|
|
name = "Aria"
|
|
desc = "A beautifully crafted rapier owned by Joan Risu. It has a thin blade and is used for quick attacks."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "joanaria"
|
|
icon_override = 'icons/vore/custom_items_vr.dmi'
|
|
item_state = "joanariamob"
|
|
origin_tech = "materials=7"
|
|
force = 15
|
|
sharp = 1
|
|
edge = 1
|
|
hitsound = 'sound/weapons/bladeslice.ogg'
|
|
|
|
|
|
/obj/item/weapon/sword/fluff/joanaria/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
|
|
|
|
if(default_parry_check(user, attacker, damage_source) && prob(75))
|
|
user.visible_message("<span class='danger'>\The [user] parries [attack_text] with \the [src]!</span>")
|
|
playsound(user.loc, 'sound/weapons/punchmiss.ogg', 50, 1)
|
|
return 1
|
|
return 0
|
|
|
|
//joanrisu:Katarina Eine
|
|
/obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina
|
|
name = "tactical Knife"
|
|
desc = "A tactical knife with a small butterly engraved on the blade."
|
|
|
|
obj/item/weapon/material/hatchet/tacknife/combatknife/fluff/katarina/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
|
|
|
|
if(default_parry_check(user, attacker, damage_source) && prob(75))
|
|
user.visible_message("<span class='danger'>\The [user] parries [attack_text] with \the [src]!</span>")
|
|
playsound(user.loc, 'sound/weapons/punchmiss.ogg', 50, 1)
|
|
return 1
|
|
return 0
|
|
|
|
//For General use
|
|
/obj/item/weapon/sword/fluff/joanaria/scisword
|
|
name = "Scissor Blade"
|
|
desc = "A sword that can not only cut down your enemies, it can also cut fabric really neatly"
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "scisword"
|
|
origin_tech = "materials=7"
|
|
|
|
|
|
//john.wayne9392:Harmony Prechtl
|
|
/obj/item/weapon/twohanded/fireaxe/fluff/mjollnir
|
|
name = "Mjollnir"
|
|
desc = "Large hammer that looks like it can do a great deal of damage if properly used."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "harmonymjollnir"
|
|
origin_tech = "materials=7"
|
|
attack_verb = list("attacked", "hammered", "smashed", "slammed", "crushed")
|
|
|
|
//JoanRisu:Joan Risu
|
|
/obj/item/weapon/card/id/centcom/fluff/joanbadge
|
|
name = "Faded Badge"
|
|
desc = "A faded badge, backed with leather, that reads 'NT Security Force' across the front."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "joanbadge"
|
|
registered_name = "Joan Risu"
|
|
assignment = "Centcom Officer"
|
|
|
|
|
|
attack_self(mob/user as mob)
|
|
if(isliving(user))
|
|
user.visible_message("<span class='warning'>[user] flashes their golden security badge.\nIt reads:NT Security.</span>","<span class='warning'>You display the faded badge.\nIt reads: NT Security.</span>")
|
|
|
|
attack(mob/living/carbon/human/M, mob/living/user)
|
|
if(isliving(user))
|
|
user.visible_message("<span class='warning'>[user] invades [M]'s personal space, thrusting [src] into their face insistently.</span>","<span class='warning'>You invade [M]'s personal space, thrusting [src] into their face insistently.</span>")
|
|
|
|
//JoanRisu:Joan Risu
|
|
/obj/item/device/pda/heads/hos/joanpda
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "pda-joan"
|
|
|
|
//Vorrarkul:Lucina Dakarim
|
|
/obj/item/device/pda/heads/cmo/lucinapda
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "pda-lucina"
|
|
|
|
//john.wayne9392:Harmony Prechtl
|
|
/obj/item/device/modkit_conversion/fluff/harmonyspace
|
|
name = "Harmony's captain space suit modkit"
|
|
desc = "A kit containing all the needed tools and parts to modify a Captain's hardsuit. It has green and yellow parts inside."
|
|
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "harmony_kit"
|
|
|
|
from_helmet = /obj/item/clothing/head/helmet/space/capspace
|
|
from_suit = /obj/item/clothing/suit/armor/captain
|
|
to_helmet = /obj/item/clothing/head/helmet/space/capspace/fluff/harmhelm
|
|
to_suit = /obj/item/clothing/suit/armor/captain/fluff/harmsuit
|
|
|
|
//john.wayne9392:Harmony Prechtl
|
|
/obj/item/device/modkit_conversion/fluff/harmonysuit
|
|
name = "Harmony's captain suit modkit"
|
|
desc = "A sewing kit containing all the needed tools and fabric to modify a Captain's suit and hat. It has green and yellow fabrics inside."
|
|
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "harmony_kit"
|
|
|
|
from_helmet = /obj/item/clothing/head/caphat
|
|
from_suit = /obj/item/clothing/under/rank/captain
|
|
to_helmet = /obj/item/clothing/head/centhat/fluff/harmhat
|
|
to_suit = /obj/item/clothing/under/rank/captain/fluff/harmuniform
|
|
|
|
//scree:Scree
|
|
/obj/item/device/modkit_conversion/fluff/screekit
|
|
name = "Scree's hardsuit modification kit"
|
|
desc = "A kit containing all the needed tools and parts to modify a hardsuit for a specific user. This one looks like it's fitted for a winged creature."
|
|
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "modkit"
|
|
|
|
from_helmet = /obj/item/clothing/head/helmet/space/void
|
|
from_suit = /obj/item/clothing/suit/space/void
|
|
to_helmet = /obj/item/clothing/head/helmet/space/void/engineering/hazmat/fluff/screehelm
|
|
to_suit = /obj/item/clothing/suit/space/void/engineering/hazmat/fluff/screespess
|
|
|
|
/obj/item/clothing/glasses/omnihud/eng/meson/fluff/scree
|
|
name = "OCR headset"
|
|
desc = "A meson-scanning headset with retinal projector and ultrasonic earpiece. This one is set up to read text to the wearer."
|
|
description_info = "The device appears to be configured as an aid to reading, with an OCR system that highlights text for the wearer and \
|
|
reads it out through the earpiece, while rendering the meson scan data as high-frequency sound. It's like a HUD for bats."
|
|
|
|
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
|
if(..())
|
|
if(H.ckey != "scree")
|
|
H << "<span class='warning'>This thing isn't set up for your visual spectrum OR your audio range.</span>"
|
|
return 0
|
|
else
|
|
return 1
|
|
|
|
//General Use
|
|
/obj/item/weapon/flag
|
|
name = "Nanotrasen Banner"
|
|
desc = "I pledge allegiance to the flag of a megacorporation in space."
|
|
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "Flag_Nanotrasen"
|
|
|
|
icon_override = 'icons/vore/custom_items_vr.dmi'
|
|
item_state = "Flag_Nanotrasen_mob"
|
|
|
|
attack_self(mob/user as mob)
|
|
if(isliving(user))
|
|
user.visible_message("<span class='warning'>[user] waves their Banner around!</span>","<span class='warning'>You wave your Banner around.</span>")
|
|
|
|
attack(mob/living/carbon/human/M, mob/living/user)
|
|
if(isliving(user))
|
|
user.visible_message("<span class='warning'>[user] invades [M]'s personal space, thrusting [src] into their face insistently.</span>","<span class='warning'>You invade [M]'s personal space, thrusting [src] into their face insistently.</span>")
|
|
|
|
|
|
federation
|
|
name = "Federation Banner"
|
|
desc = "Space, The Final Frontier. Sorta. Just go with it and say the damn oath."
|
|
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "flag_federation"
|
|
|
|
icon_override = 'icons/vore/custom_items_vr.dmi'
|
|
item_state = "flag_federation_mob"
|
|
|
|
xcom
|
|
name = "Alien Combat Command Banner"
|
|
desc = "A banner bearing the symbol of a task force fighting an unknown alien power."
|
|
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "flag_xcom"
|
|
|
|
icon_override = 'icons/vore/custom_items_vr.dmi'
|
|
item_state = "flag_xcom_mob"
|
|
|
|
advent
|
|
name = "ALIEN Coalition Banner"
|
|
desc = "A banner belonging to traitors who work for an unknown alien power."
|
|
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "flag_advent"
|
|
|
|
icon_override = 'icons/vore/custom_items_vr.dmi'
|
|
item_state = "flag_advent_mob"
|
|
|
|
|
|
//Vorrakul: Kaitlyn Fiasco
|
|
/obj/item/toy/plushie/mouse/fluff
|
|
name = "Mouse Plushie"
|
|
desc = "A plushie of a delightful mouse! What was once considered a vile rodent is now your very best friend."
|
|
slot_flags = SLOT_HEAD
|
|
icon_state = "mouse_brown"
|
|
item_state = "mouse_brown_head"
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_override = 'icons/vore/custom_items_vr.dmi'
|
|
|
|
//zodiacshadow: ?
|
|
/obj/item/device/radio/headset/fluff/zodiacshadow
|
|
name = "Nehi's 'phones"
|
|
desc = "A pair of old-fashioned purple headphones for listening to music that also double as an NT-approved headset; they connect nicely to any standard PDA. One side is engraved with the letters NEHI, the other having an elaborate inscription of the words \"My voice is my weapon of choice\" in a fancy font. A modern polymer allows switching between modes to either allow one to hear one's surroundings or to completely block them out."
|
|
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "headphones"
|
|
|
|
icon_override = 'icons/vore/custom_items_vr.dmi'
|
|
item_state = "headphones_mob"
|
|
|
|
|
|
// OrbisA: Richard D'angelo
|
|
/obj/item/weapon/melee/fluff/holochain
|
|
name = "Holographic Chain"
|
|
desc = "A High Tech solution to simple perversions. It has a red leather handle and the initials R.D. on the silver base."
|
|
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "holochain"
|
|
|
|
icon_override = 'icons/vore/custom_items_vr.dmi'
|
|
item_state = "holochain_mob"
|
|
|
|
flags = CONDUCT | NOBLOODY
|
|
slot_flags = SLOT_BELT
|
|
force = 10
|
|
throwforce = 3
|
|
w_class = ITEMSIZE_NORMAL
|
|
damtype = HALLOSS
|
|
attack_verb = list("flogged", "whipped", "lashed", "disciplined", "chastised", "flayed")
|
|
|
|
//General use
|
|
/obj/item/weapon/melee/fluff/holochain/mass
|
|
desc = "A mass produced version of the original. It has faux leather and an aluminium base, but still stings like the original."
|
|
force = 8
|
|
attack_verb = list("flogged", "whipped", "lashed", "flayed")
|
|
|
|
|
|
// joey4298:Emoticon
|
|
/obj/item/device/fluff/id_kit_mime
|
|
name = "Mime ID reprinter"
|
|
desc = "Stick your ID in one end and it'll print a new ID out the other!"
|
|
icon = 'icons/obj/bureaucracy.dmi'
|
|
icon_state = "labeler1"
|
|
|
|
afterattack(obj/O, mob/user as mob)
|
|
var/new_icon = "mime"
|
|
if(istype(O,/obj/item/weapon/card/id) && O.icon_state != new_icon)
|
|
//O.icon = src.icon // just in case we're using custom sprite paths with fluff items.
|
|
O.icon_state = new_icon // Changes the icon without changing the access.
|
|
playsound(user.loc, 'sound/items/polaroid2.ogg', 100, 1)
|
|
user.visible_message("<span class='warning'> [user] reprints their ID.</span>")
|
|
qdel(src)
|
|
else if(O.icon_state == new_icon)
|
|
user << "<span class='notice'>[O] already has been reprinted.</span>"
|
|
return
|
|
else
|
|
user << "<span class='warning'>This isn't even an ID card you idiot.</span>"
|
|
return
|
|
|
|
//arokha:Aronai Kadigan - Centcom ID (Medical dept)
|
|
/obj/item/weapon/card/id/centcom/fluff/aronai
|
|
registered_name = "CONFIGURE ME"
|
|
assignment = "CC Medical"
|
|
var/configured = 0
|
|
|
|
attack_self(mob/user as mob)
|
|
if(configured)
|
|
return ..()
|
|
|
|
user.set_id_info(src)
|
|
if(user.mind && user.mind.initial_account)
|
|
associated_account_number = user.mind.initial_account.account_number
|
|
configured = 1
|
|
user << "<span class='notice'>Card settings set.</span>"
|
|
|
|
//arokha:Aronai Kadigan - Bloo glasses
|
|
/obj/item/clothing/glasses/omnihud/med/fluff/aronai
|
|
name = "AR-K glasses"
|
|
desc = "The KHI-63-K AR glasses are KHI's normal AR shades for people who don't want implanted AR. \
|
|
These seem pretty fully featured in terms of medical software."
|
|
mode = "med"
|
|
flash_prot = 2
|
|
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_override = 'icons/vore/custom_clothes_vr.dmi'
|
|
icon_state = "arohud"
|
|
|
|
/obj/item/clothing/glasses/omnihud/med/fluff/aronai/verb/toggle_on()
|
|
set name = "Toggle AR-K HUD"
|
|
set category = "Object"
|
|
set desc = "Toggle on/off the AR-K HUD projection."
|
|
set src in usr
|
|
|
|
if(!ishuman(usr)) return
|
|
|
|
var/mob/living/carbon/human/H = usr
|
|
|
|
if(icon_state == initial(icon_state))
|
|
icon_state = "[initial(icon_state)]_on"
|
|
H << "<span class='notice'>You ENABLE the AR-K HUD.</span>"
|
|
else
|
|
icon_state = initial(icon_state)
|
|
H << "<span class='notice'>You DISABLE the AR-K HUD.</span>"
|
|
|
|
H.update_inv_glasses()
|
|
|
|
//arokha:Aronai Kadigan - Fluff hypospray
|
|
/obj/item/weapon/reagent_containers/hypospray/vr/fluff/aronai
|
|
name = "worn hypospray"
|
|
desc = "This hypospray seems a bit well-used. The blue band indicates it's from the CentCom medical division. There's an 'A' scratched into the bottom."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "aro_hypo"
|
|
|
|
New()
|
|
..()
|
|
loaded_vial.name = "[initial(loaded_vial.name)] (tricord)"
|
|
loaded_vial.desc = "30 Tricordrazine"
|
|
reagents.add_reagent("tricordrazine", 30)
|
|
|
|
//arokha:Aronai Kadigan - Vials to go with mk2 hypo
|
|
/obj/item/weapon/reagent_containers/glass/beaker/vial/vr/fluff
|
|
aro_st
|
|
name = "vial (stabilize)"
|
|
desc = "10 Tricordrazine, 10 Dexalin Plus, 5 Tramadol, 5 Inaprovaline"
|
|
comes_with = list("tricordrazine"=10,"dexalinp"=10,"tramadol"=5,"inaprovaline"=5)
|
|
aro_bt
|
|
name = "vial (brute)"
|
|
desc = "25 Bicaridine, 5 Tricordrazine"
|
|
comes_with = list("bicaridine"=25,"tricordrazine"=5)
|
|
aro_bu
|
|
name = "vial (burn)"
|
|
desc = "10 Kelotane, 15 Dermaline, 5 Tricordrazine"
|
|
comes_with = list("kelotane"=10,"dermaline"=15,"tricordrazine"=5)
|
|
aro_tx
|
|
name = "vial (toxins)"
|
|
desc = "25 Dylovene, 2 Hyronalin, 3 Tricordrazine"
|
|
comes_with = list("anti_toxin"=25,"hyronalin"=2,"tricordrazine"=3)
|
|
|
|
//Swat43:Fortune Bloise
|
|
/obj/item/weapon/storage/backpack/satchel/fluff/swat43bag
|
|
name = "Coloured Satchel"
|
|
desc = "That's a coloured satchel with red stripes, with a heart and ripley logo on each side."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "swat43-bag"
|
|
|
|
icon_override = 'icons/vore/custom_items_vr.dmi'
|
|
item_state = "swat43-bag_mob"
|
|
|
|
//Dhaeleena:Dhaeleena M'iar
|
|
/obj/item/clothing/accessory/medal/silver/security/fluff/dhael
|
|
desc = "An award for distinguished combat and sacrifice in defence of corporate commercial interests. Often awarded to security staff. It's engraved with the letters S.W.A.T."
|
|
|
|
//Vorrarkul:Lucina Dakarim
|
|
/obj/item/clothing/accessory/medal/gold/fluff/lucina
|
|
name = "Medal of Medical Excellence"
|
|
desc = "A medal awarded to Lucina Darkarim for excellence in medical service."
|
|
|
|
//SilencedMP5A5:Serdykov Antoz
|
|
/obj/item/clothing/suit/armor/vest/wolftaur/serdy //SilencedMP5A5's specialty armor suit.
|
|
name = "KSS-8 security armor"
|
|
desc = "A set of armor made from pieces of many other armors. There are two orange holobadges on it, one on the chestplate, one on the steel flank plates. The holobadges appear to be russian in origin. 'Kosmicheskaya Stantsiya-8' is printed in faded white letters on one side, along the spine. It smells strongly of dog."
|
|
species_restricted = null //Species restricted since all it cares about is a taur half
|
|
icon_override = 'icons/mob/taursuits_vr.dmi' //Needs to be this since it's 64*32
|
|
icon_state = "serdy_armor"
|
|
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //It's a full body suit, minus hands and feet. Arms and legs should be protected, not just the torso. Retains normal security armor values still.
|
|
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
|
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
|
icon_override = 'icons/mob/taursuits_vr.dmi' //Just in case
|
|
icon_state = "serdy_armor" //Just in case
|
|
pixel_x = -16
|
|
return ..()
|
|
else
|
|
H << "<span class='warning'>You need to have a wolf-taur half to wear this.</span>"
|
|
return 0
|
|
|
|
/obj/item/clothing/head/helmet/serdy //SilencedMP5A5's specialty helmet. Uncomment if/when they make their custom item app and are accepted.
|
|
name = "KSS-8 security helmet"
|
|
desc = "desc = An old production model steel-ceramic lined helmet with a white stripe and a custom orange holographic visor. It has ear holes, and smells of dog. It's been heavily modified, and fitted with a metal mask to protect the jaw."
|
|
icon = 'icons/vore/custom_clothes_vr.dmi'
|
|
icon_state = "serdyhelm"
|
|
|
|
icon_override = 'icons/vore/custom_clothes_vr.dmi'
|
|
item_state = "serdyhelm_mob"
|
|
|
|
/*
|
|
//SilencedMP5A5:Serdykov Antoz
|
|
/obj/item/device/modkit_conversion/fluff/serdykit
|
|
name = "Serdykov's armor modification kit"
|
|
desc = "A kit containing all the needed tools and parts to modify a armor vest and helmet for a specific user. This one looks like it's fitted for a wolf-taur."
|
|
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "modkit"
|
|
|
|
from_helmet = /obj/item/clothing/head/helmet
|
|
from_suit = /obj/item/clothing/suit/armor/vest/wolftaur
|
|
to_helmet = /obj/item/clothing/head/helmet/serdy
|
|
to_suit = /obj/item/clothing/suit/armor/vest/wolftaur/serdy
|
|
*/
|
|
|
|
//Lots of people are using this now.
|
|
/obj/item/clothing/accessory/collar/khcrystal
|
|
name = "life crystal"
|
|
desc = "A small crystal with four little dots in it. It feels slightly warm to the touch. \
|
|
Read manual before use! Can be worn, held, or attached to uniform. NOTE: Device contains antimatter."
|
|
w_class = ITEMSIZE_SMALL
|
|
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_override = 'icons/vore/custom_items_vr.dmi'
|
|
|
|
icon_state = "khlife"
|
|
item_state = "khlife_overlay"
|
|
overlay_state = "khlife_overlay"
|
|
|
|
slot_flags = SLOT_TIE
|
|
|
|
var/mob/owner = null
|
|
var/client/owner_c = null //They'll be dead when we message them probably.
|
|
var/state = 0 //0 - New, 1 - Paired, 2 - Breaking, 3 - Broken (same as iconstates)
|
|
|
|
New()
|
|
..()
|
|
update_state(0)
|
|
|
|
Destroy() //Waitwaitwait
|
|
if(state == 1)
|
|
process() //Nownownow
|
|
return ..() //Okfine
|
|
|
|
process()
|
|
check_owner()
|
|
if((state > 1) || !owner)
|
|
processing_objects.Remove(src)
|
|
|
|
attack_self(mob/user as mob)
|
|
if(state > 0) //Can't re-pair, one time only, for security reasons.
|
|
user << "<span class='notice'>The [name] doesn't do anything.</span>"
|
|
return 0
|
|
|
|
owner = user //We're paired to this guy
|
|
owner_c = user.client //This is his client
|
|
update_state(1)
|
|
user << "<span class='notice'>The [name] glows pleasantly blue.</span>"
|
|
processing_objects.Add(src)
|
|
|
|
proc/check_owner()
|
|
//He's dead, jim
|
|
if((state == 1) && owner && (owner.stat == DEAD))
|
|
update_state(2)
|
|
audible_message("<span class='warning'>The [name] begins flashing red.</span>")
|
|
sleep(30)
|
|
visible_message("<span class='warning'>The [name] shatters into dust!</span>")
|
|
if(owner_c)
|
|
owner_c << "<span class='notice'>The HAVENS system is notified of your demise via \the [name].</span>"
|
|
update_state(3)
|
|
name = "broken [initial(name)]"
|
|
desc = "This seems like a necklace, but the actual pendant is missing."
|
|
|
|
proc/update_state(var/tostate)
|
|
state = tostate
|
|
icon_state = "[initial(icon_state)][tostate]"
|
|
update_icon()
|
|
|
|
/obj/item/weapon/paper/khcrystal_manual
|
|
name = "KH-LC91-1 manual"
|
|
info = {"<h4>KH-LC91-1 Life Crystal</h4>
|
|
<h5>Usage</h5>
|
|
<ol>
|
|
<li>Hold new crystal in hand.</li>
|
|
<li>Make fist with that hand.</li>
|
|
<li>Wait 1 second.</li>
|
|
</ol>
|
|
<br />
|
|
<h5>Purpose</h5>
|
|
<p>The Kitsuhana Life Crystal is a small device typically worn around the neck for the purpose of reporting your status to the HAVENS (Kitsuhana's High-AVailability ENgram Storage) system, so that appropriate measures can be taken in the case of your body's demise. The whole device is housed inside a pleasing-to-the-eye elongated diamond.</p>
|
|
<p>Upon your body's desmise, the crystal will send a transmission to HAVENS. Depending on your membership level, the appropriate actions can be taken to ensure that you are back up and enjoying existence as soon as possible.</p>
|
|
|
|
<p>Nanotrasen has negotiated a <i>FREE</i> Star membership for you in the HAVENS system, though an upgrade can be obtained depending on your citizenship and reputation level.</p>
|
|
|
|
As a reminder, the membership levels in HAVENS are:
|
|
<ul>
|
|
<li><b>HAVENS Star:</b> Upon reciving a signal from a transmitter indicating body demise, HAVENS will attempt to contact the owner for 48 hours, before starting the process of resleeving the owner into a new body they selected when registering their HAVENS membership.</li>
|
|
<li><b>HAVENS Nebula:</b> After the contact period from the Star service has expired, an agent will be alotted a HAVENS spacecraft, and will attempt to locate your remains, and any belongings you had, for up to one week. If possible, any more recent memory recordings or mindstates will be recovered before your resleeving. (Great for explorers! Don't miss out on anything you discovered!)</li>
|
|
<li><b>HAVENS Galaxy:</b> Upon reciving the signal from the Star service, a HAVENS High-Threat Response Team will be alotted a HAVENS FTL-capable Interdictor-class spacecraft and dispatched to your last known position to locate and recover your remains, plus any belongings. You will be resleeved on-site to continue where you left off.</li>
|
|
</ul>
|
|
<br />
|
|
<h5>Technical</h5>
|
|
<p>The Life Crystal is a small 5cm long diamond containing four main components which are visible inside the translucent gem.</p>
|
|
|
|
From tip to top, they are:
|
|
<ol>
|
|
<li><b>Qubit Bucket:</b> This small cube contains 200 bits worth of quantum-entangled bits for transmitting to HAVENS. QE transmission technologies cannot be jammed or interfered with, and are effectively instant over any distance.
|
|
<li><b>Antimatter Bottle:</b> This tiny antimatter vessel is required to power the transmitter for the time it takes to transmit the signal to HAVENS. The inside of the crystal is thick enough to block any alpha or beta particles emitted when this antimatter contacts matter, however the crystal will be destroyed when activated.
|
|
<li><b>Decay Reactor:</b> This long-term microreactor will last for around one month and provide sufficient power to power all but the transmitter. This power is required for containing the antimatter bottle.
|
|
<li><b>Sensor Suite:</b> The sensor that tracks the owner's life-state, such that it can be transmitted back to HAVENS when necessary.
|
|
</ol>
|
|
<p>The diamond itself is coated in a layer of graphene, to give it a pleasant rainbow finish. This also serves as a conductor that, if broken, will discharge the antimatter bottle immediately as it is unsafe to do so any point after the crystal is broken via physical means.</p>
|
|
<br />
|
|
<h5>Special Notes</h5>
|
|
<i>\[AM WARNING\]</i>
|
|
<p>This device contains antimatter. Please consult all local regulations when travelling to ensure compliance with local laws.</p>"}
|
|
|
|
/obj/item/weapon/storage/box/khcrystal
|
|
name = "life crystal case"
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "khlifebox"
|
|
desc = "This case can only hold the KH-LC91-1 and a manual."
|
|
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
|
|
storage_slots = 2
|
|
can_hold = list(/obj/item/weapon/paper/khcrystal_manual, /obj/item/clothing/accessory/collar/khcrystal)
|
|
max_storage_space = ITEMSIZE_COST_SMALL * 2
|
|
w_class = ITEMSIZE_SMALL
|
|
|
|
/obj/item/weapon/storage/box/khcrystal/New()
|
|
..()
|
|
new /obj/item/weapon/paper/khcrystal_manual(src)
|
|
new /obj/item/clothing/accessory/collar/khcrystal(src)
|
|
|
|
/obj/item/weapon/cane/fluff
|
|
name = "cane"
|
|
desc = "A cane used by a true gentlemen. Or a clown."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "browncane"
|
|
item_icons = list (slot_r_hand_str = 'icons/vore/custom_items_vr.dmi', slot_l_hand_str = 'icons/vore/custom_items_vr.dmi')
|
|
item_state_slots = list(slot_r_hand_str = "browncanemob_r", slot_l_hand_str = "browncanemob_l")
|
|
flags = CONDUCT
|
|
force = 5.0
|
|
throwforce = 7.0
|
|
w_class = ITEMSIZE_SMALL
|
|
matter = list(DEFAULT_WALL_MATERIAL = 50)
|
|
attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed")
|
|
|
|
tasald
|
|
name = "Ornate Walking Cane"
|
|
desc = "An elaborately made custom walking stick with a dark wooding core, a crimson red gemstone on its head and a steel cover around the bottom. you'd probably hear someone using this down the hall."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
|
|
|
|
|
|
/obj/item/device/fluff/id_kit_ivy
|
|
name = "Holo-ID reprinter"
|
|
desc = "Stick your ID in one end and it'll print a new ID out the other!"
|
|
icon = 'icons/obj/bureaucracy.dmi'
|
|
icon_state = "labeler1"
|
|
|
|
afterattack(obj/O, mob/user as mob)
|
|
var/new_icon = "ivyholoid"
|
|
var/new_desc = "Its a thin screen showing ID information, but it seems to be flickering."
|
|
if(istype(O,/obj/item/weapon/card/id) && O.icon_state != new_icon)
|
|
//O.icon = src.icon // just in case we're using custom sprite paths with fluff items.
|
|
O.icon_state = new_icon // Changes the icon without changing the access.
|
|
O.desc = new_desc
|
|
playsound(user.loc, 'sound/items/polaroid2.ogg', 100, 1)
|
|
user.visible_message("<span class='warning'> [user] reprints their ID.</span>")
|
|
qdel(src)
|
|
else if(O.icon_state == new_icon)
|
|
user << "<span class='notice'>[O] already has been reprinted.</span>"
|
|
return
|
|
else
|
|
user << "<span class='warning'>This isn't even an ID card you idiot.</span>"
|
|
return
|
|
|
|
//WickedTempest: Chakat Tempest
|
|
/obj/item/weapon/reagent_containers/hypospray/vr/tempest
|
|
name = "Tempest's Hypospray"
|
|
desc = "A custom-made MKII hypospray belonging to Chakat Tempest. There's small print engraved on the handle: A medicine-cat has no time for doubt. Act now, act swiftly."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
item_state = "temphypo"
|
|
icon_state = "temphypo"
|
|
|
|
//WickedTempest: Chakat Tempest
|
|
/obj/item/weapon/storage/backpack/saddlebag/tempest
|
|
name = "Tempest's Saddlebags"
|
|
desc = "A custom-made set of saddlebags, tailored to Chakat Tempest's exact dimensions, and taste in color! One one side, there's small print stitched in: ...to carry the weight of any responsibility, burden or task."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_override = 'icons/vore/custom_items_vr.dmi'
|
|
item_state = "tempestsaddlebag"
|
|
icon_state = "tempestbag"
|
|
max_storage_space = INVENTORY_DUFFLEBAG_SPACE //Since they play a macro character, no reason to put custom slowdown code on here.
|
|
slowdown = 0
|
|
taurtype = /datum/sprite_accessory/tail/taur/feline/tempest
|
|
no_message = "These saddlebags seem to be fitted for someone else, and keep slipping off!"
|
|
|
|
//WickedTempest: Chakat Tempest
|
|
/obj/item/weapon/implant/reagent_generator/tempest
|
|
generated_reagent = "milk"
|
|
usable_volume = 1000
|
|
|
|
empty_message = list("Your breasts are almost completely drained!")
|
|
full_message = list("Your teats feel heavy and swollen!")
|
|
emote_descriptor = list("squeezes milk", "tugs on Tempest's breasts, milking them")
|
|
self_emote_descriptor = list("squeeze")
|
|
random_emote = list("moos quietly")
|
|
verb_name = "Milk"
|
|
verb_desc = "Grab Tempest's nipples and milk them into a container! May cause blushing and groaning."
|
|
|
|
/obj/item/weapon/implanter/reagent_generator/tempest
|
|
implant_type = /obj/item/weapon/implant/reagent_generator/tempest
|
|
|
|
|
|
//Hottokeeki: Belle Day
|
|
/obj/item/weapon/implant/reagent_generator/belle
|
|
generated_reagent = "milk"
|
|
usable_volume = 5000
|
|
|
|
empty_message = list("Your breasts and or udder feel almost completely drained!", "You're feeling a liittle on the empty side...")
|
|
full_message = list("You're due for a milking; your breasts and or udder feel heavy and swollen!", "Looks like you've got some full tanks!")
|
|
emote_descriptor = list("squeezes milk", "tugs on Belle's breasts/udders, milking them", "extracts milk")
|
|
self_emote_descriptor = list("squeeze", "extract")
|
|
random_emote = list("moos", "mrours", "groans softly")
|
|
verb_name = "Milk"
|
|
verb_desc = "Obtain Belle's milk and put it into a container! May cause blushing and groaning, or arousal."
|
|
|
|
/obj/item/weapon/implanter/reagent_generator/belle
|
|
implant_type = /obj/item/weapon/implant/reagent_generator/belle
|
|
|
|
//Vorrarkul: Theodora Lindt
|
|
/obj/item/weapon/implant/reagent_generator/vorrarkul
|
|
generated_reagent = "chocolate_milk"
|
|
usable_volume = 1000
|
|
|
|
empty_message = list("Your nipples are sore from being milked!")
|
|
full_message = list("Your breasts are full, their sweet scent emanating from your chest!")
|
|
emote_descriptor = list("squeezes chocolate milk from Theodora", "tugs on Theodora's nipples, milking them", "kneads Theodora's breasts, milking them")
|
|
self_emote_descriptor = list("squeeze", "knead")
|
|
random_emote = list("moans softly", "gives an involuntary squeal")
|
|
verb_name = "Milk"
|
|
verb_desc = "Grab Theodora's breasts and extract delicious chocolate milk from them!"
|
|
|
|
/obj/item/weapon/implanter/reagent_generator/vorrarkul
|
|
implant_type = /obj/item/weapon/implant/reagent_generator/vorrarkul
|
|
|
|
//SpoopyLizz: Roiz Lizden
|
|
//I made this! Woo!
|
|
//implant
|
|
//--------------------
|
|
/obj/item/weapon/implant/reagent_generator/roiz
|
|
name = "egg laying implant"
|
|
desc = "This is an implant that allows the user to lay eggs."
|
|
generated_reagent = "egg"
|
|
usable_volume = 500
|
|
transfer_amount = 50
|
|
|
|
empty_message = list("Your lower belly feels smooth and empty. Sorry, we're out of eggs!", "The reduced pressure in your lower belly tells you there are no more eggs.")
|
|
full_message = list("Your lower belly looks swollen with irregular bumps, and it feels heavy.", "Your lower abdomen feels really heavy, making it a bit hard to walk.")
|
|
emote_descriptor = list("an egg right out of Roiz's lower belly!", "into Roiz' belly firmly, forcing him to lay an egg!", "Roiz really tight, who promptly lays an egg!")
|
|
var/verb_descriptor = list("squeezes", "pushes", "hugs")
|
|
var/self_verb_descriptor = list("squeeze", "push", "hug")
|
|
var/short_emote_descriptor = list("lays", "forces out", "pushes out")
|
|
self_emote_descriptor = list("lay", "force out", "push out")
|
|
random_emote = list("hisses softly with a blush on his face", "yelps in embarrassment", "grunts a little")
|
|
assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_roiz
|
|
|
|
/obj/item/weapon/implant/reagent_generator/roiz/implanted(mob/living/carbon/source)
|
|
processing_objects += src
|
|
to_chat(source, "<span class='notice'>You implant [source] with \the [src].</span>")
|
|
source.verbs |= assigned_proc
|
|
return 1
|
|
|
|
/obj/item/weapon/implanter/reagent_generator/roiz
|
|
implant_type = /obj/item/weapon/implant/reagent_generator/roiz
|
|
|
|
/mob/living/carbon/human/proc/use_reagent_implant_roiz()
|
|
set name = "Lay Egg"
|
|
set desc = "Force Roiz to lay an egg by squeezing into his lower body! This makes the lizard extremely embarrassed, and it looks funny."
|
|
set category = "Object"
|
|
set src in view(1)
|
|
|
|
//do_reagent_implant(usr)
|
|
if(!isliving(usr) || !usr.canClick())
|
|
return
|
|
|
|
if(usr.incapacitated() || usr.stat > CONSCIOUS)
|
|
return
|
|
|
|
var/obj/item/weapon/implant/reagent_generator/roiz/rimplant
|
|
for(var/I in src.contents)
|
|
if(istype(I, /obj/item/weapon/implant/reagent_generator))
|
|
rimplant = I
|
|
break
|
|
if (rimplant)
|
|
if(rimplant.reagents.total_volume <= rimplant.transfer_amount)
|
|
to_chat(src, "<span class='notice'>[pick(rimplant.empty_message)]</span>")
|
|
return
|
|
|
|
new /obj/item/weapon/reagent_containers/food/snacks/egg/roiz(get_turf(src))
|
|
|
|
var/index = rand(0,3)
|
|
|
|
if (usr != src)
|
|
var/emote = rimplant.emote_descriptor[index]
|
|
var/verb_desc = rimplant.verb_descriptor[index]
|
|
var/self_verb_desc = rimplant.self_verb_descriptor[index]
|
|
usr.visible_message("<span class='notice'>[usr] [verb_desc] [emote]</span>",
|
|
"<span class='notice'>You [self_verb_desc] [emote]</span>")
|
|
else
|
|
src.visible_message("<span class='notice'>[src] [pick(rimplant.short_emote_descriptor)] an egg.</span>",
|
|
"<span class='notice'>You [pick(rimplant.self_emote_descriptor)] an egg.</span>")
|
|
if(prob(15))
|
|
src.visible_message("<span class='notice'>[src] [pick(rimplant.random_emote)].</span>") // M-mlem.
|
|
|
|
rimplant.reagents.remove_reagent(rimplant.generated_reagent, rimplant.transfer_amount)
|
|
|
|
/obj/item/weapon/implant/reagent_generator/pumila_apple
|
|
name = "apple laying implant"
|
|
desc = "This is an implant that allows the user to grow apples."
|
|
generated_reagent = "sugar" //This actually allows them to.
|
|
usable_volume = 250 //Five apples. Let's not get /too/ crazy here.
|
|
transfer_amount = 50
|
|
|
|
empty_message = list("Your have no apples on you.", "You have a distinct lack of apples..")
|
|
full_message = list("You have multiple apples on you, ready for harvest!", "There are a multitude of apples awaiting harvest on you!")
|
|
emote_descriptor = list("an apple right off of Pumila!", "a large apple off Pumila!")
|
|
var/verb_descriptor = list("grabs", "snatches", "picks")
|
|
var/self_verb_descriptor = list("grab", "snatch", "pick")
|
|
var/short_emote_descriptor = list("picks", "grabs")
|
|
self_emote_descriptor = list("grab", "pick", "snatch")
|
|
assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant_pumila_apple
|
|
|
|
/obj/item/weapon/implant/reagent_generator/pumila_apple/implanted(mob/living/carbon/source)
|
|
processing_objects += src
|
|
to_chat(source, "<span class='notice'>You implant [source] with \the [src].</span>")
|
|
source.verbs |= assigned_proc
|
|
return 1
|
|
|
|
/obj/item/weapon/implanter/reagent_generator/pumila_apple
|
|
implant_type = /obj/item/weapon/implant/reagent_generator/pumila_apple
|
|
|
|
/mob/living/carbon/human/proc/use_reagent_implant_pumila_apple()
|
|
set name = "Grab Apple"
|
|
set desc = "Grab an apple off of Pumila."
|
|
set category = "Object"
|
|
set src in view(1)
|
|
|
|
//do_reagent_implant(usr)
|
|
if(!isliving(usr) || !usr.canClick())
|
|
return
|
|
|
|
if(usr.incapacitated() || usr.stat > CONSCIOUS)
|
|
return
|
|
|
|
var/obj/item/weapon/implant/reagent_generator/roiz/rimplant
|
|
for(var/I in src.contents)
|
|
if(istype(I, /obj/item/weapon/implant/reagent_generator))
|
|
rimplant = I
|
|
break
|
|
if (rimplant)
|
|
if(rimplant.reagents.total_volume <= rimplant.transfer_amount)
|
|
to_chat(src, "<span class='notice'>[pick(rimplant.empty_message)]</span>")
|
|
return
|
|
|
|
var/datum/seed/S = plant_controller.seeds["apple"] //crosses fingers.
|
|
S.harvest(usr,0,0,1)
|
|
|
|
var/index = rand(0,2)
|
|
|
|
if (usr != src)
|
|
var/emote = rimplant.emote_descriptor[index]
|
|
var/verb_desc = rimplant.verb_descriptor[index]
|
|
var/self_verb_desc = rimplant.self_verb_descriptor[index]
|
|
usr.visible_message("<span class='notice'>[usr] [verb_desc] [emote]</span>",
|
|
"<span class='notice'>You [self_verb_desc] [emote]</span>")
|
|
else
|
|
src.visible_message("<span class='notice'>[src] [pick(rimplant.short_emote_descriptor)] an apple.</span>",
|
|
"<span class='notice'>You [pick(rimplant.self_emote_descriptor)] an apple.</span>")
|
|
|
|
rimplant.reagents.remove_reagent(rimplant.generated_reagent, rimplant.transfer_amount)
|
|
/*
|
|
/obj/item/weapon/implant/reagent_generator/pumila_nectar //Bugged. Two implants at once messes things up.
|
|
generated_reagent = "honey"
|
|
usable_volume = 5000
|
|
|
|
empty_message = list("You appear to be all out of nectar", "You feel as though you are lacking a majority of your nectar.")
|
|
full_message = list("You appear to be full of nectar.", "You feel as though you are full of nectar!")
|
|
emote_descriptor = list("squeezes nectar", "extracts nectar")
|
|
self_emote_descriptor = list("squeeze", "extract")
|
|
verb_name = "Extract Honey"
|
|
verb_desc = "Obtain pumila's nectar and put it into a container!"
|
|
|
|
/obj/item/weapon/implanter/reagent_generator/pumila_nectar
|
|
implant_type = /obj/item/weapon/implant/reagent_generator/pumila_nectar
|
|
*/
|
|
//Egg item
|
|
//-------------
|
|
/obj/item/weapon/reagent_containers/food/snacks/egg/roiz
|
|
name = "lizard egg"
|
|
desc = "It's a large lizard egg."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "egg_roiz"
|
|
filling_color = "#FDFFD1"
|
|
volume = 12
|
|
|
|
/obj/item/weapon/reagent_containers/food/snacks/egg/roiz/New()
|
|
..()
|
|
reagents.add_reagent("egg", 9)
|
|
bitesize = 2
|
|
|
|
/obj/item/weapon/reagent_containers/food/snacks/egg/roiz/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
|
if(istype( W, /obj/item/weapon/pen/crayon ))
|
|
var/obj/item/weapon/pen/crayon/C = W
|
|
var/clr = C.colourName
|
|
|
|
if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow")))
|
|
to_chat(user,"<span class='warning'>The egg refuses to take on this color!</span>")
|
|
return
|
|
|
|
to_chat(user,"<span class='notice'>You color \the [src] [clr]</span>")
|
|
icon_state = "egg_roiz_[clr]"
|
|
desc = "It's a large lizard egg. It has been colored [clr]!"
|
|
if (clr == "rainbow")
|
|
var/number = rand(1,4)
|
|
icon_state = icon_state + num2text(number, 0)
|
|
else
|
|
..()
|
|
|
|
/obj/item/weapon/reagent_containers/food/snacks/friedegg/roiz
|
|
name = "fried lizard egg"
|
|
desc = "A large, fried lizard egg, with a touch of salt and pepper. It looks rather chewy."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "friedegg"
|
|
volume = 12
|
|
|
|
/obj/item/weapon/reagent_containers/food/snacks/friedegg/roiz/New()
|
|
..()
|
|
reagents.add_reagent("protein", 9)
|
|
bitesize = 2
|
|
|
|
/obj/item/weapon/reagent_containers/food/snacks/boiledegg/roiz
|
|
name = "boiled lizard egg"
|
|
desc = "A hard boiled lizard egg. Be careful, a lizard detective may hatch!"
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "egg_roiz"
|
|
volume = 12
|
|
|
|
/obj/item/weapon/reagent_containers/food/snacks/boiledegg/roiz/New()
|
|
..()
|
|
reagents.add_reagent("protein", 6)
|
|
bitesize = 2
|
|
|
|
/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/roiz
|
|
name = "chocolate lizard egg"
|
|
desc = "Such huge, sweet, fattening food. You feel gluttonous just looking at it."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "chocolateegg_roiz"
|
|
filling_color = "#7D5F46"
|
|
nutriment_amt = 3
|
|
nutriment_desc = list("chocolate" = 5)
|
|
volume = 18
|
|
|
|
/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/roiz/New()
|
|
..()
|
|
reagents.add_reagent("sugar", 6)
|
|
reagents.add_reagent("coco", 6)
|
|
reagents.add_reagent("milk", 2)
|
|
bitesize = 2
|
|
|
|
//PontifexMinimus: Lucius/Lucia Null
|
|
/obj/item/weapon/fluff/dragor_dot
|
|
name = "supplemental battery"
|
|
desc = "A tiny supplemental battery for powering something or someone synthetic."
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "dragor_dot"
|
|
w_class = ITEMSIZE_SMALL
|
|
|
|
attack_self(mob/user as mob)
|
|
if(user.ckey == "pontifexminimus")
|
|
user.verbs |= /mob/living/carbon/human/proc/shapeshifter_select_gender
|
|
else
|
|
return
|
|
//LuminescentRing: Briana Moore
|
|
/obj/item/weapon/storage/backpack/messenger/black/fluff/briana
|
|
name = "2561 graduation bag"
|
|
desc = "A black leather bag with names scattered around in red embroidery, it says 'Pride State Academy' on the top. "
|
|
|
|
//DeepIndigo: Amina Dae-Kouri
|
|
/obj/item/weapon/storage/bible/fluff/amina
|
|
name = "New Space Pioneer's Bible"
|
|
desc = "A New Space Pioneer's Bible. This one says it was printed in 2492. The name 'Eric Hayvers' is written on the inside of the cover, crossed out. \
|
|
Under it is written 'Kouri, Amina, Marine Unit 14, Fifth Echelon. Service number NTN-5528928522372'"
|
|
|
|
//arokha:Amaya Rahl - Custom ID (Medical dept)
|
|
/obj/item/weapon/card/id/fluff/amaya
|
|
registered_name = "CONFIGURE ME"
|
|
assignment = "CONFIGURE ME"
|
|
var/configured = 0
|
|
var/accessset = 0
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "amayarahlwahID"
|
|
desc = "A primarily blue ID with a holographic 'WAH' etched onto its back. The letters do not obscure anything important on the card. It is shiny and it feels very bumpy."
|
|
var/title_strings = list("Amaya Rahl's Wah-identification card", "Amaya Rahl's Wah-ID card")
|
|
|
|
/obj/item/weapon/card/id/fluff/amaya/attack_self(mob/user as mob)
|
|
if(configured == 1)
|
|
return ..()
|
|
|
|
var/title
|
|
if(user.client.prefs.player_alt_titles[user.job])
|
|
title = user.client.prefs.player_alt_titles[user.job]
|
|
else
|
|
title = user.job
|
|
assignment = title
|
|
user.set_id_info(src)
|
|
if(user.mind && user.mind.initial_account)
|
|
associated_account_number = user.mind.initial_account.account_number
|
|
var/tempname = pick(title_strings)
|
|
name = tempname + " ([title])"
|
|
configured = 1
|
|
user << "<span class='notice'>Card settings set.</span>"
|
|
|
|
/obj/item/weapon/card/id/fluff/amaya/attackby(obj/item/I as obj, mob/user as mob)
|
|
if(istype(I, /obj/item/weapon/card/id) && !accessset)
|
|
var/obj/item/weapon/card/id/O = I
|
|
src.access |= O.access
|
|
to_chat(user, "<span class='notice'>You copy the access from \the [I] to \the [src].</span>")
|
|
user.drop_from_inventory(I)
|
|
qdel(I)
|
|
accessset = 1
|
|
..()
|
|
|
|
//verkister: Cameron Eggbert - Science goggles that ACTUALLY do nothing.
|
|
/obj/item/clothing/glasses/fluff/science_proper
|
|
name = "Aesthetic Science Goggles"
|
|
desc = "The goggles really do nothing this time!"
|
|
icon_state = "purple"
|
|
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/fluff/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"
|
|
slot_flags = SLOT_EYES | SLOT_EARS
|
|
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"
|
|
desc = "Seems absurd, doesn't it? Yet, here we are. Generally considered dangerous contraband unless the user has permission from Central Command."
|
|
icon = 'icons/obj/device_alt.dmi'
|
|
icon_state = "hand_tele"
|
|
w_class = ITEMSIZE_SMALL
|
|
origin_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5, TECH_ILLEGAL = 7)
|
|
|
|
var/obj/item/weapon/cell/device/weapon/power_source
|
|
var/charge_cost = 800 // cell/device/weapon has 2400
|
|
|
|
var/list/beacons = list()
|
|
var/ready = 1
|
|
var/beacons_left = 3
|
|
var/failure_chance = 5 //Percent
|
|
var/obj/item/device/perfect_tele_beacon/destination
|
|
var/datum/effect/effect/system/spark_spread/spk
|
|
var/list/warned_users = list()
|
|
var/list/logged_events = list()
|
|
|
|
/obj/item/device/perfect_tele/New()
|
|
..()
|
|
flags |= NOBLUDGEON
|
|
power_source = new (src)
|
|
spk = new(src)
|
|
spk.set_up(5, 0, src)
|
|
spk.attach(src)
|
|
|
|
/obj/item/device/perfect_tele/Destroy()
|
|
// Must clear the beacon's backpointer or we won't GC. Someday maybe do something nicer even.
|
|
for(var/obj/item/device/perfect_tele_beacon/B in beacons)
|
|
B.tele_hand = null
|
|
beacons.Cut()
|
|
qdel_null(power_source)
|
|
qdel_null(spk)
|
|
return ..()
|
|
|
|
/obj/item/device/perfect_tele/update_icon()
|
|
if(!power_source)
|
|
icon_state = "[initial(icon_state)]_o"
|
|
else if(ready && power_source.check_charge(charge_cost))
|
|
icon_state = "[initial(icon_state)]"
|
|
else
|
|
icon_state = "[initial(icon_state)]_w"
|
|
|
|
..()
|
|
|
|
/obj/item/device/perfect_tele/attack_hand(mob/user)
|
|
if(user.get_inactive_hand() == src && power_source)
|
|
to_chat(user,"<span class='notice'>You eject \the [power_source] from \the [src].</span>")
|
|
user.put_in_hands(power_source)
|
|
power_source = null
|
|
update_icon()
|
|
else
|
|
return ..()
|
|
|
|
/obj/item/device/perfect_tele/attack_self(mob/user)
|
|
if(!(user.ckey in warned_users))
|
|
warned_users |= user.ckey
|
|
alert(user,"This device can be easily used to break ERP preferences due to the nature of teleporting \
|
|
and tele-vore. Make sure you carefully examine someone's OOC prefs before teleporting them if you are \
|
|
going to use this device for ERP purposes. This device records all warnings given and teleport events for \
|
|
admin review in case of pref-breaking, so just don't do it.","OOC WARNING")
|
|
|
|
var/choice = alert(user,"What do you want to do?","[src]","Create Beacon","Cancel","Target Beacon")
|
|
switch(choice)
|
|
if("Create Beacon")
|
|
if(beacons_left <= 0)
|
|
alert("The translocator can't support any more beacons!","Error")
|
|
return
|
|
|
|
var/new_name = html_encode(input(user,"New beacon's name (2-20 char):","[src]") as text|null)
|
|
|
|
if(length(new_name) > 20 || length(new_name) < 2)
|
|
alert("Entered name length invalid (must be longer than 2, no more than than 20).","Error")
|
|
return
|
|
if(new_name in beacons)
|
|
alert("No duplicate names, please. '[new_name]' exists already.","Error")
|
|
return
|
|
|
|
var/obj/item/device/perfect_tele_beacon/nb = new(get_turf(src))
|
|
nb.tele_name = new_name
|
|
nb.tele_hand = src
|
|
nb.creator = user.ckey
|
|
beacons[new_name] = nb
|
|
beacons_left--
|
|
if(isliving(user))
|
|
var/mob/living/L = user
|
|
L.put_in_any_hand_if_possible(nb)
|
|
|
|
if("Target Beacon")
|
|
if(!beacons.len)
|
|
to_chat(user,"<span class='warning'>\The [src] doesn't have any beacons!</span>")
|
|
else
|
|
var/target = input("Which beacon do you target?","[src]") in beacons|null
|
|
if(target && (target in beacons))
|
|
destination = beacons[target]
|
|
to_chat(user,"<span class='notice'>Destination set to '[target]'.</span>")
|
|
else
|
|
return
|
|
|
|
/obj/item/device/perfect_tele/attackby(obj/W, mob/user)
|
|
if(istype(W,/obj/item/weapon/cell/device/weapon) && !power_source)
|
|
power_source = W
|
|
power_source.update_icon() //Why doesn't a cell do this already? :|
|
|
user.unEquip(power_source)
|
|
power_source.forceMove(src)
|
|
to_chat(user,"<span class='notice'>You insert \the [power_source] into \the [src].</span>")
|
|
update_icon()
|
|
|
|
else if(istype(W,/obj/item/device/perfect_tele_beacon))
|
|
var/obj/item/device/perfect_tele_beacon/tb = W
|
|
if(tb.tele_name in beacons)
|
|
to_chat(user,"<span class='notice'>You re-insert \the [tb] into \the [src].</span>")
|
|
beacons -= tb.tele_name
|
|
user.unEquip(tb)
|
|
qdel(tb)
|
|
beacons_left++
|
|
else
|
|
to_chat(user,"<span class='notice'>\The [tb] doesn't belong to \the [src].</span>")
|
|
return
|
|
else
|
|
..()
|
|
|
|
/obj/item/device/perfect_tele/afterattack(mob/living/target, mob/living/user, proximity)
|
|
//No, you can't teleport people from over there.
|
|
if(!proximity)
|
|
return
|
|
|
|
//Uhhuh, need that power source
|
|
if(!power_source)
|
|
to_chat(user,"<span class='warning'>\The [src] has no power source!</span>")
|
|
return
|
|
|
|
//Check for charge
|
|
if(!power_source.check_charge(charge_cost))
|
|
to_chat(user,"<span class='warning'>\The [src] does not have enough power left!</span>")
|
|
return
|
|
|
|
//Only mob/living need apply.
|
|
if(!istype(user) || !istype(target))
|
|
return
|
|
|
|
//No, you can't teleport buckled people.
|
|
if(target.buckled)
|
|
to_chat(user,"<span class='warning'>The target appears to be attached to something...</span>")
|
|
return
|
|
|
|
//No, you can't teleport if it's not ready yet.
|
|
if(!ready)
|
|
to_chat(user,"<span class='warning'>\The [src] is still recharging!</span>")
|
|
return
|
|
|
|
//No, you can't teleport if there's no destination.
|
|
if(!destination)
|
|
to_chat(user,"<span class='warning'>\The [src] doesn't have a current valid destination set!</span>")
|
|
return
|
|
|
|
//No, you can't teleport if there's a jammer.
|
|
if(is_jammed(src) || is_jammed(destination))
|
|
to_chat(user,"<span class='warning'>\The [src] refuses to teleport you, due to strong interference!</span>")
|
|
return
|
|
|
|
//No, you can't port to or from away missions. Stupidly complicated check.
|
|
var/turf/uT = get_turf(user)
|
|
var/turf/dT = get_turf(destination)
|
|
if(!uT || !dT)
|
|
return
|
|
|
|
if( (uT.z != dT.z) && ( (uT.z > max_default_z_level() ) || (dT.z > max_default_z_level()) ) )
|
|
to_chat(user,"<span class='warning'>\The [src] can't teleport you that far!</span>")
|
|
return
|
|
|
|
//Bzzt.
|
|
ready = 0
|
|
power_source.use(charge_cost)
|
|
|
|
//Failure chance
|
|
if(prob(failure_chance) && beacons.len >= 2)
|
|
var/list/wrong_choices = beacons - destination.tele_name
|
|
var/wrong_name = pick(wrong_choices)
|
|
destination = beacons[wrong_name]
|
|
to_chat(user,"<span class='warning'>\The [src] malfunctions and sends you to the wrong beacon!</span>")
|
|
|
|
//Destination beacon vore checking
|
|
var/datum/belly/target_belly
|
|
var/atom/real_dest = get_turf(destination)
|
|
|
|
//Destination beacon is held/eaten
|
|
if(isliving(destination.loc) && (target != destination.loc)) //We should definitely get televored unless we're teleporting ourselves into ourselves
|
|
var/mob/living/L = destination.loc
|
|
|
|
//Is the beacon IN a belly?
|
|
target_belly = check_belly(destination)
|
|
|
|
//No? Well do they have vore organs at all?
|
|
if(!target_belly && L.vore_organs.len)
|
|
|
|
//If they do, use their picked one.
|
|
if(L.vore_selected)
|
|
target_belly = L.vore_organs[L.vore_selected]
|
|
else
|
|
//Else just use the first one.
|
|
var/I = L.vore_organs[1] //We're just going to use 1
|
|
target_belly = L.vore_organs[I]
|
|
|
|
//Televore fluff stuff
|
|
if(target_belly)
|
|
real_dest = destination.loc
|
|
target_belly.internal_contents |= target
|
|
playsound(target_belly.owner, target_belly.vore_sound, 100, 1)
|
|
to_chat(target,"<span class='warning'>\The [src] teleports you right into [target_belly.owner]'s [target_belly.name]!</span>")
|
|
to_chat(target_belly.owner,"<span class='warning'>Your [target_belly.name] suddenly has a new occupant!</span>")
|
|
|
|
//Phase-out effect
|
|
phase_out(target,get_turf(target))
|
|
|
|
//Move them
|
|
target.forceMove(real_dest)
|
|
|
|
//Phase-in effect
|
|
phase_in(target,get_turf(target))
|
|
|
|
//And any friends!
|
|
for(var/obj/item/weapon/grab/G in target.contents)
|
|
if(G.affecting && (G.state >= GRAB_AGGRESSIVE))
|
|
|
|
//Phase-out effect for grabbed person
|
|
phase_out(G.affecting,get_turf(G.affecting))
|
|
|
|
//Move them, and televore if necessary
|
|
G.affecting.forceMove(real_dest)
|
|
if(target_belly)
|
|
target_belly.internal_contents |= G.affecting
|
|
to_chat(G.affecting,"<span class='warning'>\The [src] teleports you right into [target_belly.owner]'s [target_belly.name]!</span>")
|
|
|
|
//Phase-in effect for grabbed person
|
|
phase_in(G.affecting,get_turf(G.affecting))
|
|
|
|
update_icon()
|
|
spawn(30 SECONDS)
|
|
if(src) //If we still exist, anyway.
|
|
ready = 1
|
|
update_icon()
|
|
|
|
logged_events["[world.time]"] = "[user] teleported [target] to [real_dest] [target_belly ? "(Belly: [target_belly.name])" : null]"
|
|
|
|
/obj/item/device/perfect_tele/proc/phase_out(var/mob/M,var/turf/T)
|
|
|
|
if(!M || !T)
|
|
return
|
|
|
|
spk.set_up(5, 0, M)
|
|
spk.attach(M)
|
|
playsound(T, "sparks", 50, 1)
|
|
anim(T,M,'icons/mob/mob.dmi',,"phaseout",,M.dir)
|
|
|
|
/obj/item/device/perfect_tele/proc/phase_in(var/mob/M,var/turf/T)
|
|
|
|
if(!M || !T)
|
|
return
|
|
|
|
spk.start()
|
|
playsound(T, 'sound/effects/phasein.ogg', 25, 1)
|
|
playsound(T, 'sound/effects/sparks2.ogg', 50, 1)
|
|
anim(T,M,'icons/mob/mob.dmi',,"phasein",,M.dir)
|
|
spk.set_up(5, 0, src)
|
|
spk.attach(src)
|
|
|
|
/obj/item/device/perfect_tele_beacon
|
|
name = "translocator beacon"
|
|
desc = "That's unusual."
|
|
icon = 'icons/obj/device_alt.dmi'
|
|
icon_state = "motion2"
|
|
w_class = ITEMSIZE_TINY
|
|
|
|
var/tele_name
|
|
var/obj/item/device/perfect_tele/tele_hand
|
|
var/creator
|
|
var/warned_users = list()
|
|
|
|
/obj/item/device/perfect_tele_beacon/New()
|
|
..()
|
|
flags |= NOBLUDGEON
|
|
|
|
/obj/item/device/perfect_tele_beacon/Destroy()
|
|
tele_name = null
|
|
tele_hand = null
|
|
return ..()
|
|
|
|
/obj/item/device/perfect_tele_beacon/attack_hand(mob/user)
|
|
if((user.ckey != creator) && !(user.ckey in warned_users))
|
|
warned_users |= user.ckey
|
|
var/choice = alert(user,"This device is a translocator beacon. Having it on your person may mean that anyone \
|
|
who teleports to this beacon gets teleported into your selected vore-belly. If you are prey-only \
|
|
or don't wish to potentially have a random person teleported into you, it's suggested that you \
|
|
not carry this around.","OOC WARNING","Take It","Leave It")
|
|
if(choice == "Leave It")
|
|
return
|
|
|
|
..()
|
|
|
|
/obj/item/device/perfect_tele_beacon/attack_self(mob/user)
|
|
if(!isliving(user))
|
|
return
|
|
var/mob/living/L = user
|
|
var/confirm = alert(user, "You COULD eat the beacon...", "Eat beacon?", "Eat it!", "No, thanks.")
|
|
if(confirm == "Eat it!")
|
|
var/bellychoice = input("Which belly?","Select A Belly") in L.vore_organs|null
|
|
if(bellychoice)
|
|
var/datum/belly/B = L.vore_organs[bellychoice]
|
|
user.visible_message("<span class='warning'>[user] is trying to stuff \the [src] into [user.gender == MALE ? "his" : user.gender == FEMALE ? "her" : "their"] [bellychoice]!</span>","<span class='notice'>You begin putting \the [src] into your [bellychoice]!</span>")
|
|
if(do_after(user,5 SECONDS,src))
|
|
user.unEquip(src)
|
|
src.forceMove(user)
|
|
B.internal_contents |= src
|
|
user.visible_message("<span class='warning'>[user] eats a telebeacon!</span>","You eat the the beacon!")
|
|
playsound(user, B.vore_sound, 70, 1)
|
|
|
|
//InterroLouis: Ruda Lizden
|
|
/obj/item/clothing/accessory/badge/holo/detective/ruda
|
|
name = "Hisstective's Badge"
|
|
desc = "This is Ruda Lizden's personal Detective's badge. The polish is dull, as if it's simply been huffed upon and wiped against a coat. Labeled 'Hisstective.'"
|
|
icon = 'icons/vore/custom_items_vr.dmi'
|
|
icon_state = "hisstective_badge"
|
|
//slot_flags = SLOT_TIE | SLOT_BELT
|
|
|
|
/obj/item/clothing/accessory/badge/holo/detective/ruda/attack(mob/living/carbon/human/M, mob/living/user)
|
|
if(isliving(user))
|
|
user.visible_message("<span class='danger'>[user] invades [M]'s personal space, thrusting [src] into their face with an insistent huff.</span>","<span class='danger'>You invade [M]'s personal space, thrusting [src] into their face with an insistent huff.</span>")
|
|
user.do_attack_animation(M)
|
|
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //to prevent spam
|
|
|
|
/obj/item/clothing/accessory/badge/holo/detective/ruda/attack_self(mob/user as mob)
|
|
|
|
if(!stored_name)
|
|
user << "You huff along the front of your badge, then rub your sleeve on it to polish it up."
|
|
set_name(user.real_name)
|
|
return
|
|
|
|
if(isliving(user))
|
|
if(stored_name)
|
|
user.visible_message("<span class='notice'>[user] displays their [src.name].\nIt reads: [stored_name], [badge_string].</span>","<span class='notice'>You display your [src.name].\nIt reads: [stored_name], [badge_string].</span>")
|
|
else
|
|
user.visible_message("<span class='notice'>[user] displays their [src.name].\nIt reads: [badge_string].</span>","<span class='notice'>You display your [src.name]. It reads: [badge_string].</span>")
|
|
|
|
/obj/item/weapon/card/id/fluff/xennith
|
|
name = "\improper Amy Lessen's Central Command ID (Xenobiology Director)"
|
|
desc = "This ID card identifies Dr. Amelie Lessen as the founder and director of the NanoTrasen Xenobiology Research Department, circa 2553."
|
|
icon_state = "centcom"
|
|
registered_name = "Amy Lessen"
|
|
assignment = "Xenobiology Director"
|
|
access = list(access_cent_general,access_cent_thunder,access_cent_medical,access_cent_living,access_cent_storage,access_cent_teleporter,access_research,access_xenobiology,access_maint_tunnels,access_xenoarch,access_robotics,access_tox_storage,access_tox) //Yes, this looks awful. I tried calling both central and resarch access but it didn't work.
|
|
age = 39
|
|
blood_type = "O-"
|
|
sex = "Female"
|
|
|
|
/obj/item/weapon/fluff/injector //Injectors. Custom item used to explain wild changes in a mob's body or chemistry.
|
|
name = "Injector"
|
|
desc = "Some type of injector."
|
|
icon = 'icons/obj/items.dmi'
|
|
icon_state = "dnainjector"
|
|
|
|
/obj/item/weapon/fluff/injector/monkey
|
|
name = "Lesser Form Injector"
|
|
desc = "Turn the user into their lesser, more primal form."
|
|
|
|
/obj/item/weapon/fluff/injector/monkey/attack(mob/living/M, mob/living/user)
|
|
|
|
if(usr == M) //Is the person using it on theirself?
|
|
if(ishuman(M)) //If so, monkify them.
|
|
var/mob/living/carbon/human/H = user
|
|
H.monkeyize()
|
|
qdel(src) //One time use.
|
|
else //If not, do nothing.
|
|
to_chat(user,"<span class='warning'>You are unable to inject other people.</span>")
|