diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm
index 5e42c9c21c..96d64aa387 100644
--- a/code/_helpers/global_lists_vr.dm
+++ b/code/_helpers/global_lists_vr.dm
@@ -934,15 +934,32 @@ var/global/list/selectable_speech_bubbles = list(
"cyber",
"ghost",
"slime_green",
+ "slime_yellow",
+ "slime_red",
+ "slime_blue",
"dark",
"plant",
"clown",
"fox",
+ "latte_fox",
+ "blue_fox",
"maus",
+ "wolf",
+ "red_panda",
+ "blue_panda",
+ "tentacles",
"heart",
"textbox",
"posessed",
- "square")
+ "square",
+ "medical",
+ "medical_square",
+ "cardiogram",
+ "security",
+ "notepad",
+ "science",
+ "engineering",
+ "cargo")
diff --git a/code/game/objects/items/trash_vr.dm b/code/game/objects/items/trash_vr.dm
index 572c08a265..fc2d997182 100644
--- a/code/game/objects/items/trash_vr.dm
+++ b/code/game/objects/items/trash_vr.dm
@@ -64,4 +64,35 @@
/obj/item/trash/ratpackturkey
name = "\improper Prepackaged Meal Tray"
icon = 'icons/obj/trash_vr.dmi'
- icon_state = "altevian_pack_turkey-trash"
\ No newline at end of file
+ icon_state = "altevian_pack_turkey-trash"
+
+/obj/item/trash/ratpackramen
+ name = "\improper Prepackaged Meal Tray"
+ icon = 'icons/obj/trash_vr.dmi'
+ icon_state = "altevian_pack_ramen_standard-trash"
+
+/obj/item/trash/ratpackramen/standard
+ icon_state = "altevian_pack_ramen_standard-trash"
+
+/obj/item/trash/ratpackramen/lacquer1
+ icon_state = "altevian_pack_ramen_lacquer1-trash"
+
+/obj/item/trash/ratpackramen/lacquer2
+ icon_state = "altevian_pack_ramen_lacquer2-trash"
+
+/obj/item/trash/ratpackramen/lacquer3
+ icon_state = "altevian_pack_ramen_lacquer3-trash"
+
+/obj/item/trash/ratpackramen/fleet
+ icon_state = "altevian_pack_ramen_fleet-trash"
+
+/obj/item/trash/ratpackramen/trans
+ icon_state = "altevian_pack_ramen_trans-trash"
+
+/obj/item/trash/ratpackramen/ace
+ icon_state = "altevian_pack_ramen_ace-trash"
+
+/obj/item/trash/ratpacktaco
+ name = "\improper Prepackaged Meal Tray"
+ icon = 'icons/obj/trash_vr.dmi'
+ icon_state = "altevian_pack_taco-trash"
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/id cards/syndicate_ids.dm b/code/game/objects/items/weapons/id cards/syndicate_ids.dm
index 727d76fd26..b89868ca19 100644
--- a/code/game/objects/items/weapons/id cards/syndicate_ids.dm
+++ b/code/game/objects/items/weapons/id cards/syndicate_ids.dm
@@ -30,7 +30,7 @@
if(istype(O, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/I = O
src.access |= I.access
- if(player_is_antag(user.mind))
+ if(player_is_antag(user.mind) || registered_user == user)
to_chat(user, "The microscanner activates as you pass it over the ID, copying its access.")
/obj/item/weapon/card/id/syndicate/attack_self(mob/user as mob)
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 d341c1a49b..83c66d8682 100644
--- a/code/modules/client/preference_setup/loadout/loadout_head_vr.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_head_vr.dm
@@ -98,3 +98,9 @@ Talon hats
/datum/gear/head/beret/talon
display_name = "beret, Talon"
path = /obj/item/clothing/head/beret
+
+// tiny tophat
+
+/datum/gear/head/tiny_tophat
+ display_name = "tiny tophat"
+ path = /obj/item/clothing/head/tinytophat
diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm b/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm
index 75869c96e4..07a179b7ce 100644
--- a/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm
@@ -359,4 +359,10 @@ Talon jumpsuit
"jumper skirt"=/obj/item/clothing/under/skirt/colorable/jumper,
"jumper dress"=/obj/item/clothing/under/skirt/colorable/jumperdress
)
- gear_tweaks += list(new/datum/gear_tweak/path(skirts), gear_tweak_free_color_choice)
\ No newline at end of file
+ gear_tweaks += list(new/datum/gear_tweak/path(skirts), gear_tweak_free_color_choice)
+
+// gwen beedells clown clothes
+
+/datum/gear/uniform/stripeddungarees
+ display_name = "striped dungarees"
+ path = /obj/item/clothing/under/stripeddungarees
\ No newline at end of file
diff --git a/code/modules/clothing/glasses/hud_vr.dm b/code/modules/clothing/glasses/hud_vr.dm
index bb3260213b..0b67fba9b3 100644
--- a/code/modules/clothing/glasses/hud_vr.dm
+++ b/code/modules/clothing/glasses/hud_vr.dm
@@ -132,7 +132,6 @@
//We do not check if user can move or not, since this system is inspired to help see chat bubbles during scenes primarily.
//Preventing turning off the HUD could get in the way of scene flow.
- usr.visible_emote("toggles a button on their [src.name]!") //Since we're turning stuff like arrest/medical HUD on/off, we should inform those nearby.
if(ar_toggled)
away_planes = enables_planes
enables_planes = null
diff --git a/code/modules/clothing/head/misc_vr.dm b/code/modules/clothing/head/misc_vr.dm
index 9541e577d8..9b9a6a6ed3 100644
--- a/code/modules/clothing/head/misc_vr.dm
+++ b/code/modules/clothing/head/misc_vr.dm
@@ -162,4 +162,13 @@
/obj/item/clothing/head/cowboy
sprite_sheets = list(
SPECIES_TESHARI = 'icons/inventory/head/mob_vr_teshari.dmi'
- )
\ No newline at end of file
+ )
+
+// tiny tophat
+
+/obj/item/clothing/head/tinytophat
+ name = "tiny tophat"
+ desc = "A tophat that is far too small to properly sit on someone's head!"
+ icon = 'icons/inventory/head/item_vr.dmi'
+ default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
+ icon_state = "tiny_tophat"
\ No newline at end of file
diff --git a/code/modules/clothing/under/accessories/clothing_vr.dm b/code/modules/clothing/under/accessories/clothing_vr.dm
new file mode 100644
index 0000000000..47ad8b8719
--- /dev/null
+++ b/code/modules/clothing/under/accessories/clothing_vr.dm
@@ -0,0 +1,8 @@
+/obj/item/clothing/accessory/jacket/modwrap
+ name = "modern wrapped coat (coat)"
+ desc = "The cutting edge of fashion."
+ icon = 'icons/inventory/accessory/item_vr.dmi'
+ icon_override = 'icons/inventory/accessory/mob_vr.dmi'
+ icon_state = "mod_coat"
+ item_state = "mod_coat"
+ overlay_state = "mod_coat"
\ No newline at end of file
diff --git a/code/modules/clothing/under/altevian_vr.dm b/code/modules/clothing/under/altevian_vr.dm
index 89c44205f9..d7720272f3 100644
--- a/code/modules/clothing/under/altevian_vr.dm
+++ b/code/modules/clothing/under/altevian_vr.dm
@@ -19,24 +19,29 @@
name = "Altevian Hegemony Security Pants"
icon_state = "altevian-pants-sec"
worn_state = "altevian-pants-sec"
+ armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
+ siemens_coefficient = 0.9
starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian/security)
/obj/item/clothing/under/pants/altevian/engineering
name = "Altevian Hegemony Engineering Pants"
icon_state = "altevian-pants-eng"
worn_state = "altevian-pants-eng"
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian/engineering)
/obj/item/clothing/under/pants/altevian/medical
name = "Altevian Hegemony Medical Pants"
icon_state = "altevian-pants-med"
worn_state = "altevian-pants-med"
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian/medical)
/obj/item/clothing/under/pants/altevian/science
name = "Altevian Hegemony Science Pants"
icon_state = "altevian-pants-sci"
worn_state = "altevian-pants-sci"
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian/science)
/obj/item/clothing/under/pants/altevian/cargo
@@ -56,20 +61,25 @@
/obj/item/clothing/under/altevian/sci
name = "Altevian Science Duty Jumpsuit"
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
icon_state = "altevian-specialist-sci"
worn_state = "altevian-specialist-sci"
/obj/item/clothing/under/altevian/med
name = "Altevian Medical Duty Jumpsuit"
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
icon_state = "altevian-specialist-med"
worn_state = "altevian-specialist-med"
/obj/item/clothing/under/altevian/sec
name = "Altevian Security Duty Jumpsuit"
+ armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
+ siemens_coefficient = 0.9
icon_state = "altevian-specialist-sec"
worn_state = "altevian-specialist-sec"
/obj/item/clothing/under/altevian/eng
name = "Altevian Engineering Duty Jumpsuit"
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
icon_state = "altevian-specialist-eng"
worn_state = "altevian-specialist-eng"
\ No newline at end of file
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 470410d263..ce928bffa1 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -1318,12 +1318,13 @@
*/
/obj/item/clothing/under/moderncoat
- name = "modern wrapped coat"
+ name = "modern wrapped coat (pants)"
desc = "The cutting edge of fashion."
- icon_state = "mod_coat"
- worn_state = "mod_coat"
+ icon_state = "mod_coat_pants"
+ worn_state = "mod_coat_pants"
item_state_slots = list(slot_r_hand_str = "red", slot_l_hand_str = "red")
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
+ starting_accessories = list(/obj/item/clothing/accessory/jacket/modwrap)
/obj/item/clothing/under/modjump
name = "modern jumpsuit"
diff --git a/code/modules/clothing/under/miscellaneous_vr.dm b/code/modules/clothing/under/miscellaneous_vr.dm
index 196024ef98..2d2c29ca0a 100644
--- a/code/modules/clothing/under/miscellaneous_vr.dm
+++ b/code/modules/clothing/under/miscellaneous_vr.dm
@@ -586,4 +586,13 @@
desc = "A dress held up by suspenders. Not quite a skirt anymore."
icon_state = "skirt_jumperdress"
item_state = "skirt_jumperdress"
- worn_state = "skirt_jumperdress"
\ No newline at end of file
+ worn_state = "skirt_jumperdress"
+
+// Gwen Beedell's clown outfit
+
+/obj/item/clothing/under/stripeddungarees
+ name = "striped dungarees"
+ desc = "A colourful set of striped dungarees, pretty funny lookin'."
+ icon = 'icons/inventory/uniform/item_vr.dmi'
+ default_worn_icon = 'icons/inventory/uniform/mob_vr.dmi'
+ icon_state = "striped_clown_uniform"
diff --git a/code/modules/food/food/snacks_vr.dm b/code/modules/food/food/snacks_vr.dm
index f5c276d887..732567356c 100644
--- a/code/modules/food/food/snacks_vr.dm
+++ b/code/modules/food/food/snacks_vr.dm
@@ -864,7 +864,7 @@
/obj/item/weapon/reagent_containers/food/snacks/ratpackturkey
name = "Compact Holiday Special Bird"
- desc = "A great gift for holidays for assorted species. This contains a full freshly cooked turkey. Open and enjoy. Courtesy of altevian packaging"
+ desc = "A great gift for holidays for assorted species. This contains a full freshly cooked turkey. Open and enjoy. Courtesy of altevian packaging."
icon = 'icons/obj/food_vr.dmi'
icon_state = "altevian_pack_turkey"
package_open_state = "altevian_pack_turkey-open"
@@ -873,3 +873,43 @@
trash = /obj/item/trash/ratpackturkey
nutriment_amt = 18
nutriment_desc = list("high-quality poultry" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/ratpackramen
+ name = "Big Noodle Package"
+ desc = "A pack containing fully cooked ramen meal, alongside some seafood-and-rice based sides. Utensils included. For those who prefer more traditional meals."
+ icon = 'icons/obj/food_vr.dmi'
+ icon_state = "altevian_pack_ramen"
+ package_open_state = "altevian_pack_ramen_standard-open"
+ package_opening_state = "altevian_pack_ramen_standard-opening"
+ package = TRUE
+ trash = /obj/item/trash/ratpackramen/standard
+ nutriment_amt = 2
+ nutriment_desc = list("savory noodles" = 4)
+ var/list/bowl_color_options = list("standard" = 6,
+ "lacquer1" = 2,
+ "lacquer2" = 2,
+ "lacquer3" = 2,
+ "fleet" = 6,
+ "trans" = 3,
+ "ace" = 3)
+ var/randomize_bowl_color = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/ratpackramen/Initialize()
+ . = ..()
+ if(randomize_bowl_color)
+ var/bowl_color = pickweight(bowl_color_options)
+ package_open_state = "altevian_pack_ramen_[bowl_color]-open"
+ package_opening_state = "altevian_pack_ramen_[bowl_color]-opening"
+ trash = text2path("/obj/item/trash/ratpackramen/[bowl_color]")
+
+/obj/item/weapon/reagent_containers/food/snacks/ratpacktaco
+ name = "Triple Taco Tuck"
+ desc = "Three mini-tacos, minituarized further via altevian mad science into a convenient container. It comes with a salsa sauce!"
+ icon = 'icons/obj/food_vr.dmi'
+ icon_state = "altevian_pack_taco"
+ package_open_state = "altevian_pack_taco-open"
+ package_opening_state = "altevian_pack_taco-opening"
+ package = TRUE
+ trash = /obj/item/trash/ratpacktaco
+ nutriment_amt = 2
+ nutriment_desc = list("salsa sauce" = 2, "meat chunks" = 4, "cheese" = 3)
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm
index 8732246b68..77503cfb0d 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/drones/mining_drone.dm
@@ -67,7 +67,7 @@
var/last_search = 0
var/search_cooldown = 5 SECONDS
var/ignoreunarmed = TRUE
- var/allowedtools = list(/obj/item/weapon/pickaxe, /obj/item/weapon/gun/energy/kinetic_accelerator, /obj/item/weapon/gun/magnetic/matfed/phoronbore, /obj/item/weapon/kinetic_crusher)
+ var/allowedtools = list(/obj/item/weapon/pickaxe, /obj/item/weapon/gun/energy/kinetic_accelerator, /obj/item/weapon/gun/magnetic/matfed/phoronbore, /obj/item/weapon/kinetic_crusher, /obj/item/weapon/melee/shock_maul)
/mob/living/simple_mob/mechanical/mining_drone/Initialize()
ion_trail = new
diff --git a/code/modules/mob/new_player/sprite_accessories_extra.dm b/code/modules/mob/new_player/sprite_accessories_extra.dm
index 3569d1badd..3c24c00f78 100644
--- a/code/modules/mob/new_player/sprite_accessories_extra.dm
+++ b/code/modules/mob/new_player/sprite_accessories_extra.dm
@@ -362,12 +362,73 @@
icon_state = "btone"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
+/datum/sprite_accessory/marking/vr/body_tone_rarm
+ name = "Body toning (right arm)"
+ icon_state = "btone"
+ body_parts = list(BP_R_ARM,BP_R_HAND)
+
+/datum/sprite_accessory/marking/vr/body_tone_larm
+ name = "Body toning (left arm)"
+ icon_state = "btone"
+ body_parts = list(BP_L_ARM,BP_L_HAND)
+
+/datum/sprite_accessory/marking/vr/body_tone_rleg
+ name = "Body toning (right leg)"
+ icon_state = "btone"
+ body_parts = list(BP_R_FOOT,BP_R_LEG)
+
+/datum/sprite_accessory/marking/vr/body_tone_lleg
+ name = "Body toning (left leg)"
+ icon_state = "btone"
+ body_parts = list(BP_L_FOOT,BP_L_LEG)
+
+/datum/sprite_accessory/marking/vr/body_tone_torso
+ name = "Body toning (torso)"
+ icon_state = "btone"
+ body_parts = list(BP_GROIN,BP_TORSO)
+
/datum/sprite_accessory/marking/vr/gloss
name = "Full body gloss"
icon_state = "gloss"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
+/datum/sprite_accessory/marking/vr/gloss_head
+ name = "Body gloss (head)"
+ icon_state = "gloss"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_HEAD)
+
+/datum/sprite_accessory/marking/vr/gloss_rarm
+ name = "Body gloss (right arm)"
+ icon_state = "gloss"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_ARM,BP_R_HAND)
+
+/datum/sprite_accessory/marking/vr/gloss_larm
+ name = "Body gloss (left arm)"
+ icon_state = "gloss"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_L_ARM,BP_L_HAND)
+
+/datum/sprite_accessory/marking/vr/gloss_rleg
+ name = "Body gloss (right leg)"
+ icon_state = "gloss"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_FOOT,BP_R_LEG)
+
+/datum/sprite_accessory/marking/vr/gloss_lleg
+ name = "Body gloss (left leg)"
+ icon_state = "gloss"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_L_FOOT,BP_L_LEG)
+
+/datum/sprite_accessory/marking/vr/gloss_torso
+ name = "Body gloss (torso)"
+ icon_state = "gloss"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_GROIN,BP_TORSO)
+
/datum/sprite_accessory/marking/vr/eboop_panels
name = "Eggnerd FBP panels"
icon_state = "eboop"
diff --git a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm
index e5d0ee2a38..85bb90c1cb 100644
--- a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm
+++ b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm
@@ -953,3 +953,25 @@
icon_state = "zaprat_cheeks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
+
+/datum/sprite_accessory/marking/vr_secbirbfeathers
+ name = "Secretary Bird Feathers"
+ icon = 'icons/mob/human_races/markings_vr.dmi'
+ icon_state = "secbirbfeathers"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_HEAD)
+
+/datum/sprite_accessory/marking/vr_zmaskanime
+ name = "eye mask (anime eyes)"
+ icon = 'icons/mob/human_races/markings_vr.dmi'
+ icon_state = "zmaskanime"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_HEAD)
+
+/datum/sprite_accessory/marking/vr_birdpants
+ name = "leg coverings (nev/rap)"
+ icon = 'icons/mob/human_races/markings_vr.dmi'
+ icon_state = "birdpants"
+ color_blend_mode = ICON_MULTIPLY
+ body_parts = list(BP_R_LEG, BP_L_LEG, BP_GROIN)
+
diff --git a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm
index 3c42a16a65..8e3e3f7c12 100644
--- a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm
+++ b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm
@@ -1368,3 +1368,14 @@
name = "heart-bolt-shaped tail, dual color"
icon_state = "zaprat_heart_s"
extra_overlay = "zaprat_heart_markings"
+
+/datum/sprite_accessory/tail/satyrtail
+ name = "goat legs with tail, colorable"
+ desc = ""
+ icon_state = "satyr"
+ color_blend_mode = ICON_MULTIPLY
+ do_colouration = 1
+ hide_body_parts = list(BP_L_LEG, BP_L_FOOT, BP_R_LEG, BP_R_FOOT) //Exclude pelvis just in case.
+ clip_mask_icon = 'icons/mob/vore/taurs_vr.dmi'
+ clip_mask_state = "taur_clip_mask_def" //Used to clip off the lower part of suits & uniforms.
+ extra_overlay = "horse" //I can't believe this works.
diff --git a/code/modules/nifsoft/software/05_health.dm b/code/modules/nifsoft/software/05_health.dm
index f19e6c58cd..3386d185cf 100644
--- a/code/modules/nifsoft/software/05_health.dm
+++ b/code/modules/nifsoft/software/05_health.dm
@@ -86,6 +86,7 @@
var/mode = 0
health_flags = (NIF_H_SYNTHREPAIR)
+
//These self-activate on their own, these aren't user-settable to on/off.
/datum/nifsoft/medichines_syn/activate()
if((. = ..()))
@@ -98,6 +99,8 @@
/datum/nifsoft/medichines_syn/life()
if((. = ..()))
//We're good!
+ var/mob/living/carbon/human/S = nif.human
+ var/HP_percent = S.health/S.getMaxHealth()
if(!nif.human.bad_external_organs.len)
if(mode || active)
nif.notify("User Status: NORMAL. Medichines deactivating.")
@@ -120,6 +123,15 @@
else if(mode == 1)
mode = 2
nif.notify("Medichines unable to repair all damage. Perform manual repairs.",TRUE)
+
+ if(mode == 2 && HP_percent < -0.4) //lets inform someone who might be able to help us that we got toasted and roasted
+ nif.notify("User Status: CRITICAL. Notifying medical!",TRUE)
+ mode = 3 //this does nothing except stop it from repeating over and over and over and over and over and over and over
+ if(!isbelly(S.loc)) //Not notified in case of vore, for gameplay purposes.
+ var/turf/T = get_turf(S)
+ var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
+ a.autosay("[S.real_name] is in a critical condition, located at ([T.x],[T.y],[T.z])!", "[S.real_name]'s NIF", "Medical")
+ qdel(a)
return TRUE
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index bdb05918c9..b725f2d4f7 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -272,6 +272,13 @@
/obj/machinery/power/emitter/examine(mob/user)
. = ..()
+ switch(state)
+ if(0)
+ . += "It is not secured in place at all!"
+ if(1)
+ . += "It has been bolted down securely, but not welded into place."
+ if(2)
+ . += "It has been bolted down securely and welded down into place."
var/integrity_percentage = round((integrity / initial(integrity)) * 100)
switch(integrity_percentage)
if(0 to 30)
@@ -279,7 +286,7 @@
if(31 to 70)
. += "It is damaged."
if(77 to 99)
- . += ""
+ . += "It is slightly damaged."
//R-UST port
/obj/machinery/power/emitter/proc/get_initial_fire_delay()
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index 8d892b2756..4a85e1fec5 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -40,6 +40,15 @@ field_generator power level display
var/light_power_on = 1
light_color = "#5BA8FF"
+/obj/machinery/field_generator/examine()
+ . = ..()
+ switch(state)
+ if(0)
+ . += "It is not secured in place at all!"
+ if(1)
+ . += "It has been bolted down securely, but not welded into place."
+ if(2)
+ . += "It has been bolted down securely and welded down into place."
/obj/machinery/field_generator/update_icon()
cut_overlays()
diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm
index c29e200e86..a41ea2fd49 100644
--- a/code/modules/power/singularity/generator.dm
+++ b/code/modules/power/singularity/generator.dm
@@ -10,6 +10,10 @@
var/energy = 0
var/creation_type = /obj/singularity
+/obj/machinery/the_singularitygen/examine()
+ . = ..()
+ . += "It is [anchored ? "secured" : "not secured"]!"
+
/obj/machinery/the_singularitygen/process()
var/turf/T = get_turf(src)
if(src.energy >= 200)
diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm
index 2657b34a0a..33caa542a4 100644
--- a/code/modules/power/tesla/coil.dm
+++ b/code/modules/power/tesla/coil.dm
@@ -21,6 +21,10 @@
/obj/machinery/power/tesla_coil/pre_mapped
anchored = TRUE
+/obj/machinery/power/tesla_coil/examine()
+ . = ..()
+ . += "It is [anchored ? "secured" : "not secured"]!"
+
/obj/machinery/power/tesla_coil/New()
..()
wires = new(src)
@@ -107,6 +111,10 @@
buckle_lying = FALSE
circuit = /obj/item/weapon/circuitboard/grounding_rod
+/obj/machinery/power/grounding_rod/examine()
+ . = ..()
+ . += "It is [anchored ? "secured" : "not secured"]!"
+
/obj/machinery/power/grounding_rod/pre_mapped
anchored = TRUE
diff --git a/code/modules/power/tesla/generator.dm b/code/modules/power/tesla/generator.dm
index 63bce099fa..668dfe4e0a 100644
--- a/code/modules/power/tesla/generator.dm
+++ b/code/modules/power/tesla/generator.dm
@@ -5,6 +5,10 @@
icon_state = "TheSingGen"
creation_type = /obj/singularity/energy_ball
+/obj/machinery/the_singularitygen/tesla/examine()
+ . = ..()
+ . += "It is [anchored ? "secured" : "not secured"]!"
+
/obj/machinery/the_singularitygen/tesla/tesla_act(power, explosive = FALSE)
if(explosive)
energy += power
diff --git a/code/modules/reagents/reagents/food_drinks.dm b/code/modules/reagents/reagents/food_drinks.dm
index a5486708a5..2ef80b779d 100644
--- a/code/modules/reagents/reagents/food_drinks.dm
+++ b/code/modules/reagents/reagents/food_drinks.dm
@@ -4538,6 +4538,12 @@
nutriment_factor = 40 //very filling
color = "#d169b2"
+/datum/reagent/nutriment/magicdust/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ playsound(M, 'sound/items/hooh.ogg', 50, 1, -1)
+ if(prob(5))
+ to_chat(M, "You feel like you've been gnomed...")
+
/datum/reagent/drink/soda/kompot
name = "Kompot"
id = "kompot"
diff --git a/code/modules/reagents/reagents/food_drinks_vr.dm b/code/modules/reagents/reagents/food_drinks_vr.dm
index 1f46f0cfbc..5f045e0f75 100644
--- a/code/modules/reagents/reagents/food_drinks_vr.dm
+++ b/code/modules/reagents/reagents/food_drinks_vr.dm
@@ -31,29 +31,6 @@
/datum/reagent/lipozine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.adjust_nutrition(-20 * removed)
-/datum/reagent/ethanol/deathbell
- name = "Deathbell"
- id = "deathbell"
- description = "A successful experiment to make the most alcoholic thing possible."
- taste_description = "your brains smashed out by a smooth brick of hard, ice cold alcohol"
- color = "#9f6aff"
- taste_mult = 5
- strength = 10
- adj_temp = 10
- targ_temp = 330
-
- glass_name = "Deathbell"
- glass_desc = "The perfect blend of the most alcoholic things a bartender can get their hands on."
-
-/datum/reagent/ethanol/deathbell/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
- ..()
-
- if(M.species.robo_ethanol_drunk || !(M.isSynthetic()))
- if(dose * strength >= strength) // Early warning
- M.make_dizzy(24) // Intentionally higher than normal to compensate for it's previous effects.
- if(dose * strength >= strength * 2.5) // Slurring takes longer. Again, intentional.
- M.slurring = max(M.slurring, 30)
-
/datum/reagent/ethanol/burnout
name = "Burnout"
id = "burnout"
@@ -103,6 +80,40 @@
glass_name = "Monster Tamer"
glass_desc = "This looks like a vaguely-alcoholic slurry of meat. Gross."
+/datum/reagent/ethanol/monstertamer/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+
+ if(!(M.isSynthetic()))
+ if(M.species.organic_food_coeff) //it's still food!
+ switch(alien)
+ if(IS_DIONA) //Diona don't get any nutrition from nutriment or protein.
+ if(IS_SKRELL)
+ M.adjustToxLoss(0.25 * removed) //Equivalent to half as much protein, since it's half protein.
+ if(IS_TESHARI)
+ M.adjust_nutrition(alt_nutriment_factor * 1.2 * removed) //Give them the same nutrition they would get from protein.
+ if(IS_UNATHI)
+ M.adjust_nutrition(alt_nutriment_factor * 1.125 * removed) //Give them the same nutrition they would get from protein.
+ //Takes into account the 0.5 factor for all nutriment which is applied on top of the 2.25 factor for protein.
+ //Chimera don't need their own case here since their factors for nutriment and protein cancel out.
+ else
+ M.adjust_nutrition(alt_nutriment_factor * removed)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.feral > 0 && H.nutrition > 150 && H.traumatic_shock < 20 && H.jitteriness < 100) //Same check as feral triggers to stop them immediately re-feralling
+ H.feral -= removed * 3 // should calm them down quick, provided they're actually in a state to STAY calm.
+ if (H.feral <=0) //check if they're unferalled
+ H.feral = 0
+ to_chat(H, "Your mind starts to clear, soothed into a state of clarity as your senses return.")
+ log_and_message_admins("is no longer feral.", H)
+
+/datum/reagent/ethanol/monstertamer/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_SKRELL)
+ M.adjustToxLoss(removed) //Equivalent to half as much protein, since it's half protein.
+ if(M.species.organic_food_coeff)
+ if(alien == IS_SLIME || alien == IS_CHIMERA) //slimes and chimera can get nutrition from injected nutriment and protein
+ M.adjust_nutrition(alt_nutriment_factor * removed)
+
/datum/reagent/ethanol/pink_russian
name = "Pink Russian"
id = "pinkrussian"
@@ -158,51 +169,11 @@
glass_name = "Mudslide"
glass_desc = "A richly coloured drink, comes with a chocolate garnish!"
-/datum/reagent/ethanol/monstertamer/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
- ..()
-
- if(!(M.isSynthetic()))
- if(M.species.organic_food_coeff) //it's still food!
- switch(alien)
- if(IS_DIONA) //Diona don't get any nutrition from nutriment or protein.
- if(IS_SKRELL)
- M.adjustToxLoss(0.25 * removed) //Equivalent to half as much protein, since it's half protein.
- if(IS_TESHARI)
- M.adjust_nutrition(alt_nutriment_factor * 1.2 * removed) //Give them the same nutrition they would get from protein.
- if(IS_UNATHI)
- M.adjust_nutrition(alt_nutriment_factor * 1.125 * removed) //Give them the same nutrition they would get from protein.
- //Takes into account the 0.5 factor for all nutriment which is applied on top of the 2.25 factor for protein.
- //Chimera don't need their own case here since their factors for nutriment and protein cancel out.
- else
- M.adjust_nutrition(alt_nutriment_factor * removed)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.feral > 0 && H.nutrition > 150 && H.traumatic_shock < 20 && H.jitteriness < 100) //Same check as feral triggers to stop them immediately re-feralling
- H.feral -= removed * 3 // should calm them down quick, provided they're actually in a state to STAY calm.
- if (H.feral <=0) //check if they're unferalled
- H.feral = 0
- to_chat(H, "Your mind starts to clear, soothed into a state of clarity as your senses return.")
- log_and_message_admins("is no longer feral.", H)
-
-/datum/reagent/ethanol/monstertamer/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
- ..()
- if(alien == IS_SKRELL)
- M.adjustToxLoss(removed) //Equivalent to half as much protein, since it's half protein.
- if(M.species.organic_food_coeff)
- if(alien == IS_SLIME || alien == IS_CHIMERA) //slimes and chimera can get nutrition from injected nutriment and protein
- M.adjust_nutrition(alt_nutriment_factor * removed)
-
-/datum/reagent/nutriment/magicdust/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
- ..()
- playsound(M, 'sound/items/hooh.ogg', 50, 1, -1)
- if(prob(5))
- to_chat(M, "You feel like you've been gnomed...")
-
/datum/reagent/ethanol/galacticpanic
name = "Galactic Panic Attack"
id = "galacticpanic"
description = "The absolute worst thing you could ever put in your body."
- taste_description = "an entire galaxy collasping in on itself."
+ taste_description = "an entire galaxy collasping in on itself"
strength = 10
druggy = 50
halluci = 30
@@ -229,31 +200,29 @@
name = "Space Bulldog"
id = "bulldog"
description = "An inventive kahlua recipe."
- taste_description = "fizzy, creamy, soda and coffee hell."
+ taste_description = "fizzy, creamy, soda and coffee hell"
strength = 30
color = "#d3785d"
glass_name = "Space Bulldog"
glass_desc = "It looks like someone poured cola in a cup of coffee."
-
/datum/reagent/ethanol/sbagliato
name = "Negroni Sbagliato"
id = "sbagliato"
description = "A drink invented because a bartender was too drunk."
- taste_description = "sweet bubbly wine and vermouth."
+ taste_description = "sweet bubbly wine and vermouth"
strength = 30
color = "#d3785d"
glass_name = "Negroni Sbagliato"
glass_desc = "Bubbles constantly pop up to the surface with a quiet fizz."
-
/datum/reagent/ethanol/italiancrisis
name = "Italian Crisis"
id = "italiancrisis"
description = "This drink was concocted by a madwoman, causing the Italian Crisis of 2123."
- taste_description = "cola, fruit, fizz, coffee, and cream swirled together in an old boot."
+ taste_description = "cola, fruit, fizz, coffee, and cream swirled together in an old boot"
strength = 20
druggy = 0
halluci = 0
@@ -267,7 +236,7 @@
name = "Sweet Rush"
id = "sugarrush"
description = "A favorite drink amongst poor bartenders living in Neo Detroit."
- taste_description = "sweet bubblegum vodka."
+ taste_description = "sweet bubblegum vodka"
strength = 30
color = "#d3785d"
@@ -278,7 +247,7 @@
name = "Lotus"
id = "lotus"
description = "The result of making one mistake after another and trying to cover it up with sugar."
- taste_description = "rich, sweet fruit and even more sugar."
+ taste_description = "rich, sweet fruit and even more sugar"
strength = 25
color = "#d3785d"
@@ -289,7 +258,7 @@
name = "Dumb Shroom Juice"
id = "shroomjuice"
description = "The mushroom farmer didn't sort through their stock very well."
- taste_description = "sweet and sour citrus with a savory kick."
+ taste_description = "sweet and sour citrus with a savory kick"
strength = 100
druggy = 30
halluci = 30
@@ -303,7 +272,7 @@
name = "Russian Roulette"
id = "russianroulette"
description = "The perfect drink for wagering your liver on a game of cards."
- taste_description = "coffee, vodka, cream, and a hot metal slug."
+ taste_description = "coffee, vodka, cream, and a hot metal slug"
strength = 30
var/adj_dizzy = 30
color = "#d3785d"
@@ -321,7 +290,7 @@
name = "The Love Maker"
id = "lovemaker"
description = "A drink said to help one find true love."
- taste_description = "sweet fruit and honey."
+ taste_description = "sweet fruit and honey"
strength = 30
druggy = 0
halluci = 0
@@ -337,7 +306,7 @@
name = "Honey Shot"
id = "honeyshot"
description = "The perfect drink for bees."
- taste_description = "sweet tart grenadine flavored with honey."
+ taste_description = "sweet tart grenadine flavored with honey"
strength = 40
var/adj_dizzy = 10
color = "#d3785d"
@@ -349,7 +318,7 @@
name = "Appletini"
id = "appletini"
description = "A classic cocktail using every grandma's favorite fruit."
- taste_description = "green sour apple with a hint of alcohol."
+ taste_description = "green sour apple with a hint of alcohol"
strength = 45
color = "#d3785d"
@@ -360,7 +329,7 @@
name = "Glowing Appletini"
id = "glowingappletini"
description = "A new nuclear take on a pre-modern classic!"
- taste_description = "overwhelmingly sour apples powered by a nuclear fission reactor."
+ taste_description = "overwhelmingly sour apples powered by a nuclear fission reactor"
strength = 30
druggy = 20
var/adj_dizzy = 20
@@ -373,7 +342,7 @@
name = "Slow Comfortable Screw Against the Wall"
id = "scsatw"
description = "The screwdriver's bigger cousin."
- taste_description = "smooth, savory booze and tangy orange juice."
+ taste_description = "smooth, savory booze and tangy orange juice"
strength = 30
druggy = 0
halluci = 0
@@ -387,7 +356,7 @@
name = "Choccy Milk"
id = "choccymilk"
description = "Coco and milk, a timeless classic."
- taste_description = "sophisticated bittersweet chocolate mixed with silky, creamy, whole milk."
+ taste_description = "sophisticated bittersweet chocolate mixed with silky, creamy, whole milk"
color = "#d3785d"
glass_name = "Choccy Milk"
@@ -397,7 +366,7 @@
name = "Red Space Flush"
id = "redspaceflush"
description = "A drink made by imbueing the essence of redspace into the spirits."
- taste_description = "whiskey and rum strung out through a hellish dimensional rift."
+ taste_description = "whiskey and rum strung out through a hellish dimensional rift"
strength = 30
druggy = 10
var/adj_dizzy = 10
@@ -410,7 +379,7 @@
name = "Graveyard"
id = "graveyard"
description = "The result of taking a cup and filling it with all the drinks at the fountain."
- taste_description = "sugar and fizz."
+ taste_description = "sugar and fizz"
color = "#d3785d"
glass_name = "Graveyard"
@@ -420,7 +389,7 @@
name = "Giant Beer"
id = "bigbeer"
description = "Bars in Neo Detroit started to sell this drink when the city put mandatory drink limits in 2289."
- taste_description = "beer, but bigger."
+ taste_description = "beer, but bigger"
strength = 40
color = "#d3785d"
@@ -431,7 +400,7 @@
name = "Sweet Tea"
id = "sweettea"
description = "Tea that is sweetened with some form of sweetener."
- taste_description = "tea that is sweet."
+ taste_description = "tea that is sweet"
color = "#d3785d"
glass_name = "Sweet Tea"
@@ -441,7 +410,7 @@
name = "Unsweetened Tea"
id = "unsweettea"
description = "A sick experiment to take the sweetness out of tea after sugar has been added resulted in this."
- taste_description = "bland, slightly bitter, discount black tea."
+ taste_description = "bland, slightly bitter, discount black tea"
strength = 80
druggy = 10
color = "#d3785d"
@@ -453,7 +422,7 @@
name = "Hair of the Rat"
id = "hairoftherat"
description = "A meatier version of the monster tamer, complete with extra meat."
- taste_description = "meat, whiskey, ground meat, and more meat."
+ taste_description = "meat, whiskey, ground meat, and more meat"
strength = 45
color = "#d3785d"
metabolism = REM * 3.5 // about right for mixing nutriment and ethanol.
@@ -461,7 +430,7 @@
//using a new variable instead of nutriment_factor so we can call ..() without that adding nutrition for us without taking factors for protein into account
glass_name = "Hair of the Rat"
- glass_desc = "The alcohol equivelant of saying your burger isn't cooked rare enough."
+ glass_desc = "The alcoholic equivalent of saying your burger isn't cooked rare enough."
/datum/reagent/ethanol/hairoftherat/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
diff --git a/icons/_nanomaps/gb1.png b/icons/_nanomaps/gb1.png
index 8c3ac8f2db..153aa1eebf 100644
Binary files a/icons/_nanomaps/gb1.png and b/icons/_nanomaps/gb1.png differ
diff --git a/icons/_nanomaps/gb2.png b/icons/_nanomaps/gb2.png
index 63277ea186..f69ca71999 100644
Binary files a/icons/_nanomaps/gb2.png and b/icons/_nanomaps/gb2.png differ
diff --git a/icons/_nanomaps/gb3.png b/icons/_nanomaps/gb3.png
index 191ac4e7c6..2942b3fb61 100644
Binary files a/icons/_nanomaps/gb3.png and b/icons/_nanomaps/gb3.png differ
diff --git a/icons/inventory/accessory/item_vr.dmi b/icons/inventory/accessory/item_vr.dmi
index 21eaf66ec1..6f84a0e538 100644
Binary files a/icons/inventory/accessory/item_vr.dmi and b/icons/inventory/accessory/item_vr.dmi differ
diff --git a/icons/inventory/accessory/mob_vr.dmi b/icons/inventory/accessory/mob_vr.dmi
index 1ae86050c7..3ddbd06479 100644
Binary files a/icons/inventory/accessory/mob_vr.dmi and b/icons/inventory/accessory/mob_vr.dmi differ
diff --git a/icons/inventory/head/item_vr.dmi b/icons/inventory/head/item_vr.dmi
index 4d677f1265..a60948269e 100644
Binary files a/icons/inventory/head/item_vr.dmi and b/icons/inventory/head/item_vr.dmi differ
diff --git a/icons/inventory/head/mob_vr.dmi b/icons/inventory/head/mob_vr.dmi
index 9e478ee9d3..90aba59462 100644
Binary files a/icons/inventory/head/mob_vr.dmi and b/icons/inventory/head/mob_vr.dmi differ
diff --git a/icons/inventory/uniform/item.dmi b/icons/inventory/uniform/item.dmi
index e22f9dcd27..1102094c31 100644
Binary files a/icons/inventory/uniform/item.dmi and b/icons/inventory/uniform/item.dmi differ
diff --git a/icons/inventory/uniform/item_vr.dmi b/icons/inventory/uniform/item_vr.dmi
index 40659b94f8..1363a19d6d 100644
Binary files a/icons/inventory/uniform/item_vr.dmi and b/icons/inventory/uniform/item_vr.dmi differ
diff --git a/icons/inventory/uniform/mob.dmi b/icons/inventory/uniform/mob.dmi
index ad2aebade9..7f69ac6938 100644
Binary files a/icons/inventory/uniform/mob.dmi and b/icons/inventory/uniform/mob.dmi differ
diff --git a/icons/inventory/uniform/mob_vr.dmi b/icons/inventory/uniform/mob_vr.dmi
index 400e781f9e..c2d8baca44 100644
Binary files a/icons/inventory/uniform/mob_vr.dmi and b/icons/inventory/uniform/mob_vr.dmi differ
diff --git a/icons/mob/human_races/markings_vr.dmi b/icons/mob/human_races/markings_vr.dmi
index 80f2d51020..672985eeec 100644
Binary files a/icons/mob/human_races/markings_vr.dmi and b/icons/mob/human_races/markings_vr.dmi differ
diff --git a/icons/mob/talk_vr.dmi b/icons/mob/talk_vr.dmi
index eafdd6ad9f..28337d0136 100644
Binary files a/icons/mob/talk_vr.dmi and b/icons/mob/talk_vr.dmi differ
diff --git a/icons/obj/food_vr.dmi b/icons/obj/food_vr.dmi
index 6dc23e9275..35ecb88dcb 100644
Binary files a/icons/obj/food_vr.dmi and b/icons/obj/food_vr.dmi differ
diff --git a/icons/obj/trash_vr.dmi b/icons/obj/trash_vr.dmi
index 740fd0abc6..cf0cdbd120 100644
Binary files a/icons/obj/trash_vr.dmi and b/icons/obj/trash_vr.dmi differ
diff --git a/vorestation.dme b/vorestation.dme
index e6f37ddbe9..805b9bba5c 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -2194,6 +2194,7 @@
#include "code\modules\clothing\under\accessories\badges.dm"
#include "code\modules\clothing\under\accessories\badges_vr.dm"
#include "code\modules\clothing\under\accessories\clothing.dm"
+#include "code\modules\clothing\under\accessories\clothing_vr.dm"
#include "code\modules\clothing\under\accessories\holster.dm"
#include "code\modules\clothing\under\accessories\holster_vr.dm"
#include "code\modules\clothing\under\accessories\lockets.dm"