diff --git a/citadel.dme b/citadel.dme index a755b1faf564..52c88a6291ed 100644 --- a/citadel.dme +++ b/citadel.dme @@ -4773,6 +4773,7 @@ #include "code\modules\vore\fluffstuff\custom_items_cit.dm" #include "code\modules\vore\fluffstuff\custom_mecha.dm" #include "code\modules\vore\fluffstuff\custom_permits.dm" +#include "code\modules\vore\fluffstuff\life_crystals.dm" #include "code\modules\vore\fluffstuff\guns\bsharpoon.dm" #include "code\modules\vore\fluffstuff\guns\crestrose.dm" #include "code\modules\vore\fluffstuff\guns\dominator.dm" diff --git a/code/modules/vore/fluffstuff/custom_items.dm b/code/modules/vore/fluffstuff/custom_items.dm index 9e08915a4b17..a49ccfa82bf9 100644 --- a/code/modules/vore/fluffstuff/custom_items.dm +++ b/code/modules/vore/fluffstuff/custom_items.dm @@ -411,127 +411,6 @@ icon_state = "amp" body_cover_flags = 0 -//Lots of people are using this now. -/obj/item/clothing/accessory/collar/vmcrystal - 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) - -/obj/item/clothing/accessory/collar/vmcrystal/Initialize(mapload) - . = ..() - update_state(0) - -/obj/item/clothing/accessory/collar/vmcrystal/Destroy() //Waitwaitwait - if(state == 1) - process() //Nownownow - return ..() //Okfine - -/obj/item/clothing/accessory/collar/vmcrystal/process(delta_time) - check_owner() - if((state > 1) || !owner) - STOP_PROCESSING(SSobj, src) - -/obj/item/clothing/accessory/collar/vmcrystal/attack_self(mob/user) - . = ..() - if(.) - return - if(state > 0) //Can't re-pair, one time only, for security reasons. - to_chat(user, "The [name] doesn't do anything.") - return 0 - - owner = user //We're paired to this guy - owner_c = user.client //This is his client - update_state(1) - to_chat(user, "The [name] glows pleasantly blue.") - START_PROCESSING(SSobj, src) - -/obj/item/clothing/accessory/collar/vmcrystal/proc/check_owner() - //He's dead, jim - if((state == 1) && owner && (owner.stat == DEAD)) - update_state(2) - audible_message("The [name] begins flashing red.") - sleep(30) - visible_message("The [name] shatters into dust!") - if(owner_c) - to_chat(owner_c, "The HAVENS system is notified of your demise via \the [name].") - update_state(3) - name = "broken [initial(name)]" - desc = "This seems like a necklace, but the actual pendant is missing." - -/obj/item/clothing/accessory/collar/vmcrystal/proc/update_state(var/tostate) - state = tostate - icon_state = "[initial(icon_state)][tostate]" - update_icon() -/* -/obj/item/paper/vmcrystal_manual - name = "VM-LC91-1 manual" - info = {"

VM-LC91-1 Life Crystal

-
Usage
-
    -
  1. Hold new crystal in hand.
  2. -
  3. Make fist with that hand.
  4. -
  5. Wait 1 second.
  6. -
-
-
Purpose
-

The VeyMed Life Crystal is a small device typically worn around the neck for the purpose of reporting your status to the HAVENS (VeyMed'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.

-

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.

- -

Nanotrasen has negotiated a FREE Star membership for you in the HAVENS system, though an upgrade can be obtained depending on your citizenship and reputation level.

- - As a reminder, the membership levels in HAVENS are: - -
-
Technical
-

The Life Crystal is a small 5cm long diamond containing four main components which are visible inside the translucent gem.

- - From tip to top, they are: -
    -
  1. Qubit Bucket: 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. -
  2. Antimatter Bottle: 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. -
  3. Decay Reactor: 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. -
  4. Sensor Suite: The sensor that tracks the owner's life-state, such that it can be transmitted back to HAVENS when necessary. -
-

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.

-
-
Special Notes
- \[AM WARNING\] -

This device contains antimatter. Please consult all local regulations when travelling to ensure compliance with local laws.

"} -*/ -/obj/item/storage/box/vmcrystal - name = "life crystal case" - icon = 'icons/vore/custom_items_vr.dmi' - icon_state = "khlifebox" - desc = "This case can only hold the VM-LC91-1 and a manual." - item_state_slots = list(SLOT_ID_RIGHT_HAND = "syringe_kit", SLOT_ID_LEFT_HAND = "syringe_kit") - storage_slots = 2 - can_hold = list(/obj/item/clothing/accessory/collar/vmcrystal) - max_storage_space = ITEMSIZE_COST_SMALL * 2 - w_class = ITEMSIZE_SMALL - -/obj/item/storage/box/vmcrystal/Initialize(mapload) - . = ..() -// new /obj/item/paper/vmcrystal_manual(src) - new /obj/item/clothing/accessory/collar/vmcrystal(src) - /obj/item/cane/fluff name = "cane" desc = "A cane used by a true gentlemen. Or a clown." diff --git a/code/modules/vore/fluffstuff/life_crystals.dm b/code/modules/vore/fluffstuff/life_crystals.dm new file mode 100644 index 000000000000..47e1f1102195 --- /dev/null +++ b/code/modules/vore/fluffstuff/life_crystals.dm @@ -0,0 +1,156 @@ +//Lots of people are using this now. +/obj/item/clothing/accessory/collar/vmcrystal + 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) + var/last_vitals //Write world.time in once owner dies or the crystal is removed + +/obj/item/clothing/accessory/collar/vmcrystal/Initialize(mapload) + . = ..() + update_state(0) + +/obj/item/clothing/accessory/collar/vmcrystal/Destroy() //Waitwaitwait + if(state == 1) + process() //Nownownow + return ..() //Okfine + +/obj/item/clothing/accessory/collar/vmcrystal/process(delta_time) + check_owner() + if(!owner) + STOP_PROCESSING(SSobj, src) + +/obj/item/clothing/accessory/collar/vmcrystal/attack_self(mob/user) + . = ..() + if(.) + return + if(state > 0) //Can't re-pair, one time only, for security reasons. + to_chat(user, "The [name] doesn't do anything.") + return 0 + + owner = user //We're paired to this guy + owner_c = user.client //This is his client + update_state(1) + to_chat(user, "The [name] glows pleasantly blue.") + START_PROCESSING(SSobj, src) + +/obj/item/clothing/accessory/collar/vmcrystal/proc/check_owner() + //He's dead, jim + if(state < 1) + return + if(!owner)//How did we get here? + return + if((owner.stat == DEAD) || (get_turf(owner) != get_turf(src))) + if(state == 1) + become_alert() + if((state == 2) && (last_vitals < world.time - 1 MINUTE)) + send_message() + else + if(state == 2) + become_calm() + + +/obj/item/clothing/accessory/collar/vmcrystal/proc/become_alert() + update_state(2) + audible_message(SPAN_WARNING("The [name] begins flashing red and vibrating in at a low frequency."), + SPAN_WARNING("The [name] begins vibrating in at a low frequency.")) + last_vitals = world.time + +/obj/item/clothing/accessory/collar/vmcrystal/proc/become_calm() + update_state(1) + audible_message(SPAN_NOTICE("[src] stops flashing red and vibrating as it resyncronises with its linked owner."), + SPAN_NOTICE("[src] stops vibrating in at a low frequency")) + +/obj/item/clothing/accessory/collar/vmcrystal/proc/send_message() + visible_message(SPAN_WARNING("The [name] shatters into dust!")) + GLOB.global_announcer.autosay("[owner] has died!", "[owner]'s Life Crystal") + if(owner_c) + to_chat(owner_c, "The HAVENS system is notified of your demise via \the [name].") + update_state(3) + name = "broken [initial(name)]" + desc = "This seems like a necklace, but the actual pendant is missing." + +/obj/item/clothing/accessory/collar/vmcrystal/proc/update_state(var/tostate) + state = tostate + icon_state = "[initial(icon_state)][tostate]" + update_icon() + +/obj/item/clothing/accessory/collar/vmcrystal/dropped(mob/user, flags, atom/newLoc) + . = ..() + check_owner() + +/obj/item/clothing/accessory/collar/vmcrystal/pickup(mob/user, flags, atom/oldLoc) + . = ..() + check_owner() + +/obj/item/clothing/accessory/collar/vmcrystal/unequipped(mob/user, slot, flags) + . = ..() + check_owner() +/* +/obj/item/paper/vmcrystal_manual + name = "VM-LC91-1 manual" + info = {"

VM-LC91-1 Life Crystal

+
Usage
+
    +
  1. Hold new crystal in hand.
  2. +
  3. Make fist with that hand.
  4. +
  5. Wait 1 second.
  6. +
+
+
Purpose
+

The VeyMed Life Crystal is a small device typically worn around the neck for the purpose of reporting your status to the HAVENS (VeyMed'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.

+

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.

+ +

Nanotrasen has negotiated a FREE Star membership for you in the HAVENS system, though an upgrade can be obtained depending on your citizenship and reputation level.

+ + As a reminder, the membership levels in HAVENS are: + +
+
Technical
+

The Life Crystal is a small 5cm long diamond containing four main components which are visible inside the translucent gem.

+ + From tip to top, they are: +
    +
  1. Qubit Bucket: 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. +
  2. Antimatter Bottle: 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. +
  3. Decay Reactor: 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. +
  4. Sensor Suite: The sensor that tracks the owner's life-state, such that it can be transmitted back to HAVENS when necessary. +
+

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.

+
+
Special Notes
+ \[AM WARNING\] +

This device contains antimatter. Please consult all local regulations when travelling to ensure compliance with local laws.

"} +*/ +/obj/item/storage/box/vmcrystal + name = "life crystal case" + icon = 'icons/vore/custom_items_vr.dmi' + icon_state = "khlifebox" + desc = "This case can only hold the VM-LC91-1 and a manual." + item_state_slots = list(SLOT_ID_RIGHT_HAND = "syringe_kit", SLOT_ID_LEFT_HAND = "syringe_kit") + storage_slots = 2 + can_hold = list(/obj/item/clothing/accessory/collar/vmcrystal) + max_storage_space = ITEMSIZE_COST_SMALL * 2 + w_class = ITEMSIZE_SMALL + +/obj/item/storage/box/vmcrystal/Initialize(mapload) + . = ..() +// new /obj/item/paper/vmcrystal_manual(src) + new /obj/item/clothing/accessory/collar/vmcrystal(src)