diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index e0f685e5605..ed652ad8ea4 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -181,10 +181,6 @@
if(isnewplayer(src.mob))
to_chat(src, "If the title screen is black, resources are still downloading. Please be patient until the title screen appears.")
- if(src.mob && src.mob.bellies_loaded == FALSE) // Quick fix
- log_debug("Fallback reload of bellies from [src] into [src.mob]")
- src.mob.init_vore()
-
GLOB.clients += src
GLOB.directory[ckey] = src
diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm
index 1d6d57ac2bb..4d28a7bc1dc 100644
--- a/code/modules/client/preference_setup/general/03_body.dm
+++ b/code/modules/client/preference_setup/general/03_body.dm
@@ -58,11 +58,23 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
// Sanitize for non-existent keys.
if(ear_style && !(ear_style in get_available_styles(global.ear_styles_list)))
- ear_style = null
+ var/backup = get_available_backup_style(global.ear_styles_list, ear_style)
+ if(backup)
+ ear_style = backup
+ else
+ ear_style = null
if(wing_style && !(wing_style in get_available_styles(global.wing_styles_list)))
- wing_style = null
+ var/backup = get_available_backup_style(global.wing_styles_list, wing_style)
+ if(backup)
+ wing_style = backup
+ else
+ wing_style = null
if(tail_style && !(tail_style in get_available_styles(global.tail_styles_list)))
- tail_style = null
+ var/backup = get_available_backup_style(global.tail_styles_list, tail_style)
+ if(backup)
+ tail_style = backup
+ else
+ tail_style = null
/datum/preferences/proc/get_available_styles(var/style_list)
. = list("Normal" = null)
@@ -76,6 +88,22 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
continue
.[instance.name] = instance
+/datum/preferences/proc/get_available_backup_style(var/style_list, var/our_value)
+ . = list("Normal" = null)
+ for(var/path in style_list)
+ var/datum/sprite_accessory/instance = style_list[path]
+ if(!istype(instance))
+ continue
+ if(!instance.backup_name)
+ continue
+ if(!(our_value in instance.backup_name))
+ continue
+ if(instance.ckeys_allowed && (!client || !(client.ckey in instance.ckeys_allowed)))
+ continue
+ if(instance.species_allowed && (!species || !(species in instance.species_allowed)) && (!client || !check_rights(R_ADMIN | R_EVENT | R_FUN, 0, client)) && (!custom_base || !(custom_base in instance.species_allowed))) //VOREStation Edit: Custom Species
+ continue
+ return instance.name
+
/datum/preferences/proc/mass_edit_marking_list(var/marking, var/change_on = TRUE, var/change_color = TRUE, var/marking_value = null, var/on = TRUE, var/color = "#000000")
var/datum/sprite_accessory/marking/mark_datum = body_marking_styles_list[marking]
var/list/new_marking = marking_value||mark_datum.body_parts
diff --git a/code/modules/clothing/masks/tesh_synth_facemask.dm b/code/modules/clothing/masks/tesh_synth_facemask.dm
new file mode 100644
index 00000000000..33141e2465b
--- /dev/null
+++ b/code/modules/clothing/masks/tesh_synth_facemask.dm
@@ -0,0 +1,73 @@
+//TESHARI FACE MASK //Defning all the procs in one go
+/obj/item/clothing/mask/synthfacemask
+ name = "Synth Face"
+ desc = "A round dark muzzle made of LEDs."
+ flags = PHORONGUARD //Since it cant easily be removed...
+ item_flags = AIRTIGHT | FLEXIBLEMATERIAL | BLOCK_GAS_SMOKE_EFFECT //This should make it properly work as a mask... and allow you to eat stuff through it!
+ body_parts_covered = FACE|EYES
+ icon = 'icons/mob/species/teshari/synth_facemask.dmi'
+ icon_override = 'icons/mob/species/teshari/synth_facemask.dmi'
+ icon_state = "synth_facemask"
+// origin_tech = list(TECH_ILLEGAL = 1) // RS REMOVE - Loadout item
+ var/lstat
+ var/visor_state = "Neutral" //Separating this from lstat so that it could potentially be used for an override system or something
+ var/mob/living/carbon/maskmaster
+
+/obj/item/clothing/mask/synthfacemask/equipped()
+ ..()
+ var/mob/living/carbon/human/H = loc
+ if(istype(H) && H.wear_mask == src)
+ canremove = 0
+ maskmaster = H
+ START_PROCESSING(SSprocessing, src)
+
+/obj/item/clothing/mask/synthfacemask/dropped()
+ canremove = 1
+ maskmaster = null
+ STOP_PROCESSING(SSprocessing, src)
+ return ..()
+
+/obj/item/clothing/mask/synthfacemask/Destroy()
+ . = ..()
+ STOP_PROCESSING(SSprocessing, src)
+
+/obj/item/clothing/mask/synthfacemask/mob_can_equip(var/mob/living/carbon/human/user, var/slot, var/disable_warning = FALSE)
+ if (!..())
+ return 0
+ if(istype(user))
+ var/obj/item/organ/external/E = user.organs_by_name[BP_HEAD]
+ if(istype(E) && (E.robotic >= ORGAN_ROBOT))
+ return 1
+ to_chat(user, "You must have a compatible robotic head to install this upgrade.")
+ return 0
+
+/obj/item/clothing/mask/synthfacemask/update_icon()
+ var/mob/living/carbon/human/H = loc
+ switch(visor_state)
+ if (DEAD)
+ icon_state = "synth_facemask_dead"
+ else
+ icon_state = "synth_facemask"
+ if(istype(H)) H.update_inv_wear_mask()
+
+/obj/item/clothing/mask/synthfacemask/process()
+ if(maskmaster && lstat != maskmaster.stat)
+ lstat = maskmaster.stat
+ visor_state = "Neutral" //This does nothing at the moment, but it's there incase anyone wants to add more states.
+ //Maybe a verb that sets an emote override here
+ if(lstat == DEAD)
+ visor_state = DEAD
+ update_icon()
+
+
+//LOADOUT ITEM
+/datum/gear/mask/synthface/
+ display_name = "Synth Facemask (Teshari)"
+ path = /obj/item/clothing/mask/synthfacemask
+ sort_category = "Xenowear"
+ whitelisted = SPECIES_TESHARI
+ cost = 1
+
+/datum/gear/mask/synthface/New()
+ ..()
+ gear_tweaks += list(gear_tweak_free_color_choice)
diff --git a/code/modules/mob/living/carbon/human/examine_vr.dm b/code/modules/mob/living/carbon/human/examine_vr.dm
index d153ff5701b..1ece610464a 100644
--- a/code/modules/mob/living/carbon/human/examine_vr.dm
+++ b/code/modules/mob/living/carbon/human/examine_vr.dm
@@ -38,21 +38,21 @@
message = nutrition_messages[1]
if(50 to 99)
message = nutrition_messages[2]
- if(100 to 4140)
+ if(100 to 1800)
message = nutrition_messages[3]
- if(4141 to 8290) // Fat.
+ if(1801 to 2800) // Fat.
message = nutrition_messages[4]
- if(8291 to 11611)
+ if(2801 to 3900)
message = nutrition_messages[5]
- if(11612 to 16052) // One person fully digested.
+ if(3901 to 10000) // One person fully digested.
message = nutrition_messages[6]
- if(16053 to 24933) // Two people.
+ if(10001 to 18000) // Two people.
message = nutrition_messages[7]
- if(24944 to 33814) // Three people.
+ if(18001 to 27000) // Three people.
message = nutrition_messages[8]
- if(33815 to 42530) // Four people.
+ if(27001 to 39000) // Four people.
message = nutrition_messages[9]
- if(42530 to INFINITY) // More.
+ if(39001 to INFINITY) // More.
message = nutrition_messages[10]
if(message)
message = "[message]"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index b5030a40f0c..62359de0d74 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1614,6 +1614,12 @@
/mob/living/carbon/human/can_feel_pain(var/obj/item/organ/check_organ)
if(isSynthetic())
return 0
+ //RS ADD START
+ if(!species.digest_pain && (isbelly(src.loc) || istype(src.loc, /turf/simulated/floor/water/digestive_enzymes)))
+ var/obj/belly/b = src.loc
+ if(b.digest_mode == DM_DIGEST || b.digest_mode == DM_SELECT)
+ return FALSE
+ //RS ADD END
for(var/datum/modifier/M in modifiers)
if(M.pain_immunity == TRUE)
return 0
diff --git a/code/modules/mob/living/carbon/human/species/species_rs.dm b/code/modules/mob/living/carbon/human/species/species_rs.dm
index 74e3dc0ca8a..0904c357cb6 100644
--- a/code/modules/mob/living/carbon/human/species/species_rs.dm
+++ b/code/modules/mob/living/carbon/human/species/species_rs.dm
@@ -1,8 +1,9 @@
/datum/species
var/vore_belly_default_variant = "H"
+ var/digest_pain = TRUE
/datum/species/unathi
vore_belly_default_variant = "L"
/datum/species/teshari
- vore_belly_default_variant = "T"
\ No newline at end of file
+ vore_belly_default_variant = "T"
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
index ffafc749852..35ba73fd09d 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
@@ -1008,3 +1008,11 @@
desc = "Makes your nice clawed, scaled, hooved, armored, or otherwise just awfully calloused feet immune to glass shards."
cost = 0
var_changes = list("flags" = NO_MINOR_CUT) //Checked the flag is only used by shard stepping.
+//RS ADD
+/datum/trait/neutral/nodigestpain
+ name = "Painless Digestion"
+ desc = "Makes it so that you feel no pain from being digested, even if you otherwise would."
+ cost = 0
+ var_changes = list("digest_pain" = FALSE)
+ custom_only = FALSE
+ can_take = ORGANICS
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index 398c748ccce..bf5374dbba6 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -83,4 +83,8 @@
if(cloaked && cloaked_selfimage)
client.images += cloaked_selfimage
- SEND_SIGNAL(src, COMSIG_MOB_CLIENT_LOGIN, client)
\ No newline at end of file
+ SEND_SIGNAL(src, COMSIG_MOB_CLIENT_LOGIN, client)
+
+ if(src.client && src.bellies_loaded == FALSE) // Quick fix
+ log_debug("Fallback reload of bellies from [src.client] into [src]")
+ src.init_vore()
diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm
index 5bba1ce72dd..1fa5b26c77d 100644
--- a/code/modules/mob/new_player/sprite_accessories.dm
+++ b/code/modules/mob/new_player/sprite_accessories.dm
@@ -49,6 +49,8 @@
var/sorting_group //For use in the Preference menu
+ var/list/backup_name = null //RS ADD - compat
+
/*
////////////////////////////
/ =--------------------= /
diff --git a/code/modules/mob/new_player/sprite_accessories_ear.dm b/code/modules/mob/new_player/sprite_accessories_ear.dm
index da2e870eb71..7e738d3f8fe 100644
--- a/code/modules/mob/new_player/sprite_accessories_ear.dm
+++ b/code/modules/mob/new_player/sprite_accessories_ear.dm
@@ -34,6 +34,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "ears_plain-inner"
+ backup_name = list(
+ "tajaran, colorable (old)"
+ )
/datum/sprite_accessory/ears/taj_ears_tall
name = "Tajaran Tall Ears"
@@ -41,6 +44,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "msai_plain-inner"
+ backup_name = list(
+ "tajaran tall, colorable (old)"
+ )
/datum/sprite_accessory/ears/alt_ram_horns
name = "Solid ram horns"
@@ -60,6 +66,9 @@
icon_state = "foxearshc"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "highlander zorren ears, colorable"
+ )
/datum/sprite_accessory/ears/fenearshc
name = "flatland zorren ears"
@@ -67,12 +76,18 @@
extra_overlay = "fenears-inner"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "flatland zorren ears, colorable"
+ )
/datum/sprite_accessory/ears/sergalhc
name = "Sergal ears"
icon_state = "serg_plain_s"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "Sergal ears, colorable"
+ )
/datum/sprite_accessory/ears/mousehc
name = "mouse"
@@ -80,12 +95,19 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "mouseinner"
+ backup_name = list(
+ "mouse, colorable",
+ )
/datum/sprite_accessory/ears/mousehcno
name = "mouse, no inner"
icon_state = "mouse"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "mouse, colorable, no inner",
+ "mouse-grey"
+ )
/datum/sprite_accessory/ears/wolfhc
name = "wolf"
@@ -93,12 +115,23 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "wolfinner"
+ backup_name = list(
+ "wolf, colorable",
+ "wolf, grey",
+ "wolf, green",
+ "wolf, wise"
+ )
/datum/sprite_accessory/ears/bearhc
name = "bear"
icon_state = "bear"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "bear, colorable",
+ "bear, brown",
+ "bear, panda"
+ )
/datum/sprite_accessory/ears/smallbear
name = "small bear"
@@ -111,6 +144,11 @@
icon_state = "squirrel"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "squirrel, colorable",
+ "squirrel-orange",
+ "squirrel, red"
+ )
/datum/sprite_accessory/ears/kittyhc
name = "kitty"
@@ -118,12 +156,19 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "kittyinner"
+ backup_name = list(
+ "kitty, colorable"
+ )
/datum/sprite_accessory/ears/bunnyhc
name = "bunny"
icon_state = "bunny"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "bunny, colorable",
+ "bunny, white"
+ )
/datum/sprite_accessory/ears/antlers
name = "antlers"
@@ -162,6 +207,9 @@
icon_state = "cow-c"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "cow, horns, colorable"
+ )
/datum/sprite_accessory/ears/cow_nohorns
name = "cow, no horns"
@@ -181,6 +229,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "otie-inner"
+ backup_name = list(
+ "otie, colorable"
+ )
/datum/sprite_accessory/ears/donkey
name = "donkey"
@@ -188,6 +239,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "otie-inner"
+ backup_name = list(
+ "donkey, colorable"
+ )
/datum/sprite_accessory/ears/zears
name = "jagged ears"
@@ -227,36 +281,54 @@
icon_state = "floppy_bun"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "floopy bunny ears (colorable)"
+ )
/datum/sprite_accessory/ears/shark
name = "shark ears"
icon_state = "shark_ears"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "shark ears (Colorable)"
+ )
/datum/sprite_accessory/ears/sharkhigh
name = "shark upper ears"
icon_state = "shark_ears_upper"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "shark upper ears (Colorable)"
+ )
/datum/sprite_accessory/ears/sharklow
name = "shark lower ears"
icon_state = "shark_ears_lower"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "shark lower ears (Colorable)"
+ )
/datum/sprite_accessory/ears/sharkfin
name = "shark fin"
icon_state = "shark_fin"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "shark fin (Colorable)"
+ )
/datum/sprite_accessory/ears/sharkfinalt
name = "shark fin alt"
icon_state = "shark_fin_alt"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "shark fin alt style (Colorable)"
+ )
/datum/sprite_accessory/ears/sharkboth
name = "shark ears and fin"
@@ -264,6 +336,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "shark_fin"
+ backup_name = list(
+ "shark ears and fin (Colorable)"
+ )
/datum/sprite_accessory/ears/sharkbothalt
name = "shark ears and fin alt"
@@ -271,6 +346,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "shark_fin_alt"
+ backup_name = list(
+ "shark ears and fin alt style (Colorable)"
+ )
/datum/sprite_accessory/ears/sharkhighboth
name = "shark upper ears and fin"
@@ -278,6 +356,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "shark_fin"
+ backup_name = list(
+ "shark upper ears and fin (Colorable)"
+ )
/datum/sprite_accessory/ears/sharkhighbothalt
name = "shark upper ears and fin alt"
@@ -285,6 +366,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "shark_fin_alt"
+ backup_name = list(
+ "shark upper ears and fin alt style (Colorable)"
+ )
/datum/sprite_accessory/ears/sharklowboth
name = "shark lower ears and fin"
@@ -292,6 +376,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "shark_fin"
+ backup_name = list(
+ "shark lower ears and fin (Colorable)"
+ )
/datum/sprite_accessory/ears/sharklowbothalt
name = "shark lower ears and fin alt"
@@ -299,6 +386,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "shark_fin_alt"
+ backup_name = list(
+ "shark lower ears and fin alt style (Colorable)"
+ )
/datum/sprite_accessory/ears/wilddog
name = "Wild Dog Ears"
@@ -327,6 +417,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "kittyr"
+ backup_name = list(
+ "kitty right only, colorable"
+ )
/datum/sprite_accessory/ears/cobra_hood
name = "Cobra hood (large)"
@@ -385,6 +478,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "teshariinner"
+ backup_name = list(
+ "Teshari (colorable fluff)"
+ )
/datum/sprite_accessory/ears/tesharihigh
name = "Teshari upper ears"
@@ -392,6 +488,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "tesharihighinner"
+ backup_name = list(
+ "Teshari upper ears (colorable fluff)"
+ )
/datum/sprite_accessory/ears/tesharilow
name = "Teshari lower ears"
@@ -399,6 +498,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "tesharilowinner"
+ backup_name = list(
+ "Teshari lower ears (colorable fluff)"
+ )
/datum/sprite_accessory/ears/tesh_pattern_ear_male
name = "Teshari male ear pattern"
@@ -406,6 +508,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "teshari_male_pattern"
+ backup_name = list(
+ "Teshari male ear pattern (colorable)"
+ )
/datum/sprite_accessory/ears/tesh_pattern_ear_female
name = "Teshari female ear pattern"
@@ -413,6 +518,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "teshari_female_pattern"
+ backup_name = list(
+ "Teshari female ear pattern (colorable)"
+ )
/datum/sprite_accessory/ears/teshbeeantenna
name = "Teshari bee antenna"
@@ -462,24 +570,36 @@
icon_state = "oni-h1_c"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "oni horns, colorable"
+ )
/datum/sprite_accessory/ears/demon_horns1_c
name = "demon horns"
icon_state = "demon-horns1_c"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "demon horns, colorable"
+ )
/datum/sprite_accessory/ears/demon_horns2
name = "demon horns, outward color"
icon_state = "demon-horns2"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "demon horns, colorable(outward)"
+ )
/datum/sprite_accessory/ears/dragon_horns
name = "dragon horns"
icon_state = "dragon-horns"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "dragon horns, colorable"
+ )
/datum/sprite_accessory/ears/elfs1
name = "pointed ears (tall)"
@@ -534,6 +654,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "caprahorns"
+ backup_name = list(
+ "Caprine horns with pointy ears, colorable"
+ )
/datum/sprite_accessory/ears/elf_oni_colorable
name = "oni horns with pointy ears"
@@ -541,6 +664,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "oni-h1_c"
+ backup_name = list(
+ "oni horns with pointy ears, colorable"
+ )
/datum/sprite_accessory/ears/elf_demon_colorable
name = "Demon horns with pointy ears"
@@ -548,6 +674,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "demon-horns1_c"
+ backup_name = list(
+ "Demon horns with pointy ears, colorable"
+ )
/datum/sprite_accessory/ears/elf_demon_outwards_colorable
name = "Demon horns with pointy ears, outwards"
@@ -555,6 +684,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "demon-horns2"
+ backup_name = list(
+ "Demon horns with pointy ears, outwards, colourable"
+ )
/datum/sprite_accessory/ears/elf_dragon_colorable
name = "Dragon horns with pointy ears"
@@ -562,6 +694,15 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "dragon-horns"
+ backup_name = list(
+ "Dragon horns with pointy ears, colourable"
+ )
+
+/datum/sprite_accessory/ears/forward_curled_demon_horns_bony
+ name = "Succubus horns, colourable"
+ icon_state = "succu-horns_b"
+ do_colouration = TRUE
+ color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/forward_curled_demon_horns_bony_with_colorable_ears
name = "Succubus horns with pointy ears, colourable"
@@ -598,12 +739,6 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
-/datum/sprite_accessory/ears/forward_curled_demon_horns_bony
- name = "Succubus horns, colourable"
- icon_state = "succu-horns_b"
- do_colouration = TRUE
- color_blend_mode = ICON_MULTIPLY
-
/datum/sprite_accessory/ears/chorns_nubbydogs
name = "Nubby Chorns"
icon_state = "chorn_nubby"
@@ -657,10 +792,3 @@
// Special snowflake ears go below here.
-
-/datum/sprite_accessory/ears/shadekin
- name = "Shadekin Ears, colorable"
- icon_state = "shadekin"
- do_colouration = TRUE
- color_blend_mode = ICON_MULTIPLY
- species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
\ No newline at end of file
diff --git a/code/modules/mob/new_player/sprite_accessories_ear_snowflake.dm b/code/modules/mob/new_player/sprite_accessories_ear_snowflake.dm
index e89ebee56e8..b3cee8cb209 100644
--- a/code/modules/mob/new_player/sprite_accessories_ear_snowflake.dm
+++ b/code/modules/mob/new_player/sprite_accessories_ear_snowflake.dm
@@ -117,12 +117,25 @@
/* Ears of atypical size! */
/********************************************/
+/datum/sprite_accessory/ears/shadekin
+ name = "Shadekin Ears"
+ icon_state = "shadekin"
+ do_colouration = TRUE
+ color_blend_mode = ICON_MULTIPLY
+ species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
+ backup_name = list(
+ "Shadekin Ears, colorable"
+ )
+
/datum/sprite_accessory/ears/shadekin/round
- name = "Shadekin Ears Round, colorable"
+ name = "Shadekin Ears Round"
icon = 'icons/mob/vore/ears_32x64.dmi'
icon_state = "shadekin-round"
do_colouration = TRUE
extra_overlay = "shadekin-round-inner"
+ backup_name = list(
+ "Shadekin Ears Round, colorable"
+ )
/datum/sprite_accessory/ears/bnnuy
name = "Bnnuy Ears"
diff --git a/code/modules/mob/new_player/sprite_accessories_tail.dm b/code/modules/mob/new_player/sprite_accessories_tail.dm
index 542daba086f..722c475db32 100644
--- a/code/modules/mob/new_player/sprite_accessories_tail.dm
+++ b/code/modules/mob/new_player/sprite_accessories_tail.dm
@@ -62,23 +62,41 @@
icon = null
icon_state = null
+/datum/sprite_accessory/tail/alien_slug
+ name = "Alien slug tail"
+ icon_state = "alien_slug"
+ do_colouration = TRUE
+ color_blend_mode = ICON_MULTIPLY
+ extra_overlay = "alien_slug_markings"
+
/datum/sprite_accessory/tail/squirrel
name = "squirrel"
icon_state = "squirrel"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "squirrel, colorable",
+ "squirel, orange",
+ "squirrel, red"
+ )
/datum/sprite_accessory/tail/kitty
name = "kitty, downwards"
icon_state = "kittydown"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "kitty, colorable, downwards"
+ )
/datum/sprite_accessory/tail/kittyup
name = "kitty, upwards"
icon_state = "kittyup"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "kitty, colorable, upwards"
+ )
/datum/sprite_accessory/tail/tiger_white
name = "tiger"
@@ -86,6 +104,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "tigerinnerwhite"
+ backup_name = list(
+ "tiger, colorable"
+ )
/datum/sprite_accessory/tail/stripey
name = "stripey taj"
@@ -93,29 +114,46 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "stripeytail_mark"
+ backup_name = list(
+ "stripey taj, colorable",
+ "stripey taj, brown"
+ )
/datum/sprite_accessory/tail/chameleon
name = "Chameleon"
icon_state = "chameleon"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "Chameleon, colorable"
+ )
/datum/sprite_accessory/tail/bunny
name = "bunny"
icon_state = "bunny"
do_colouration = TRUE
+ backup_name = list(
+ "bunny, colorable"
+ )
/datum/sprite_accessory/tail/bear
name = "bear"
icon_state = "bear"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "bear, colorable",
+ "bear, brown"
+ )
/datum/sprite_accessory/tail/dragon
name = "dragon"
icon_state = "dragon"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "dragon, colorable"
+ )
/datum/sprite_accessory/tail/wolf
name = "wolf"
@@ -123,36 +161,59 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "wolfinner"
+ backup_name = list(
+ "wolf, colorable",
+ "wolf, grey",
+ "wolf, green",
+ "wolf, wise",
+ "wolf, black"
+ )
/datum/sprite_accessory/tail/mouse
name = "mouse"
icon_state = "mouse"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "mouse, colorable",
+ "mouse, pink"
+ )
/datum/sprite_accessory/tail/horse
name = "horse"
icon_state = "horse"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "horse tail, colorable"
+ )
/datum/sprite_accessory/tail/cow
name = "cow tail"
icon_state = "cow"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "cow tail, colorable"
+ )
/datum/sprite_accessory/tail/fantail
name = "avian fantail"
icon_state = "fantail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "avian fantail, colorable"
+ )
/datum/sprite_accessory/tail/wagtail
name = "avian wagtail"
icon_state = "wagtail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "avian wagtail, colorable"
+ )
/datum/sprite_accessory/tail/nevreandc
name = "nevrean tail"
@@ -160,6 +221,9 @@
extra_overlay = "nevreantail_dc_tail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "nevrean tail, dual-color"
+ )
/datum/sprite_accessory/tail/nevreanwagdc
name = "nevrean wagtail"
@@ -167,6 +231,9 @@
extra_overlay = "wagtail_dc_tail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "nevrean wagtail, dual-color"
+ )
/datum/sprite_accessory/tail/nevreanwagdc_alt
name = "nevrean wagtail, marked"
@@ -174,6 +241,9 @@
extra_overlay = "wagtail2_dc_mark"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "nevrean wagtail, marked, dual-color"
+ )
/datum/sprite_accessory/tail/crossfox
name = "cross fox"
@@ -187,6 +257,9 @@
name = "spade-tail"
icon_state = "spadetail-black"
do_colouration = TRUE
+ backup_name = list(
+ "spade-tail (colorable)"
+ )
/datum/sprite_accessory/tail/snag
name = "xenomorph tail 1"
@@ -223,6 +296,9 @@
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "ringtail_mark"
+ backup_name = list(
+ "ringtail, colorable"
+ )
/datum/sprite_accessory/tail/ringtailwag
name = "ringtail (vwag)"
@@ -247,6 +323,9 @@
icon_state = "tailmaw"
color_blend_mode = ICON_MULTIPLY
do_colouration = TRUE
+ backup_name = list(
+ "tailmaw, colorable"
+ )
/datum/sprite_accessory/tail/curltail
name = "curltail (vwag)"
@@ -316,6 +395,9 @@
icon_state = "snaketail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "snake tail, colorable"
+ )
/datum/sprite_accessory/tail/bigsnaketail
name = "large snake tail (vwag)"
@@ -387,6 +469,13 @@
color_blend_mode = ICON_MULTIPLY
extra_overlay = "deertail_mark"
+/datum/sprite_accessory/tail/tesh_feathered
+ name = "Teshari tail"
+ icon_state = "teshtail_s"
+ do_colouration = TRUE
+ extra_overlay = "teshtail_feathers_s"
+ color_blend_mode = ICON_MULTIPLY
+
/datum/sprite_accessory/tail/teshari_fluffytail
name = "Teshari alternative, colorable"
icon_state = "teshari_fluffytail"
@@ -416,7 +505,7 @@
extra_overlay = "teshpattern_fem_tail"
/datum/sprite_accessory/tail/tesh_pattern_fem_alt
- name = "Teshari male tail alt. pattern"
+ name = "Teshari female tail alt. pattern"
icon_state = "teshtail_s"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
@@ -427,13 +516,14 @@
icon_state = "nightstalker"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "Nightstalker, colorable"
+ )
/datum/sprite_accessory/tail/zenghu_taj
name = "Zeng-Hu Tajaran Synth tail"
- desc = ""
icon_state = "zenghu_taj"
-
/datum/sprite_accessory/tail/tail_smooth
name = "Smooth Lizard Tail, colorable"
icon_state = "tail_smooth"
@@ -448,74 +538,105 @@
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/fox_tail
- name = "Fox tail, colorable"
+ name = "Fox tail"
icon_state = "fox_tail_s"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "Fox tail, colorable"
+ )
/datum/sprite_accessory/tail/fox_tail_plain
- name = "Fox tail, colorable, plain"
+ name = "Fox tail, plain"
icon_state = "fox_tail_plain_s"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "Fox tail, colorable, plain"
+ )
/datum/sprite_accessory/tail/foxtail
- name = "Fox tail, colourable (vwag)"
+ name = "Fox tail (vwag)"
icon_state = "foxtail"
extra_overlay = "foxtail-tips"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
ani_state = "foxtail_w"
extra_overlay_w = "foxtail-tips_w"
+ backup_name = list(
+ "Fox tail, colorable (vwag)"
+ )
/datum/sprite_accessory/tail/doublekitsune
- name = "Kitsune 2 tails, colorable"
+ name = "Kitsune 2 tails"
icon_state = "doublekitsune"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "Kitsune 2 tails, colorable"
+ )
+
/datum/sprite_accessory/tail/doublekitsunealt
- name = "Kitsune 2 tails, colorable, alt"
+ name = "Kitsune 2 tails, alt"
icon_state = "doublekitsunealt"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "doublekitsunealt-tips"
+ backup_name = list(
+ "Kitsune 2 tails, colorable, alt"
+ )
/datum/sprite_accessory/tail/triplekitsune_colorable
- name = "Kitsune 3 tails, colorable"
+ name = "Kitsune 3 tails"
icon_state = "triplekitsune"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "triplekitsune_tips"
+ backup_name = list(
+ "Kitsune 3 tails, colorable"
+ )
/datum/sprite_accessory/tail/sevenkitsune_colorable
- name = "Kitsune 7 tails, colorable"
+ name = "Kitsune 7 tails"
icon_state = "sevenkitsune"
extra_overlay = "sevenkitsune-tips"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "Kitsune 7 tails, colorable"
+ )
/datum/sprite_accessory/tail/ninekitsune_colorable
- name = "Kitsune 9 tails, colorable"
+ name = "Kitsune 9 tails"
icon_state = "ninekitsune"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "ninekitsune-tips"
+ backup_name = list(
+ "Kitsune 9 tails, colorable"
+ )
/datum/sprite_accessory/tail/hideableninetails
- name = "Kitsune 9-in-1 tail, colourable (vwag)"
- icon_state = "ninekitsune"
- extra_overlay = "ninekitsune-tips"
- do_colouration = TRUE
- color_blend_mode = ICON_MULTIPLY
- ani_state = "foxtail_w"
- extra_overlay_w = "foxtail-tips_w"
+ name = "Kitsune 9-in-1 tail (vwag)"
+ icon_state = "ninekitsune"
+ extra_overlay = "ninekitsune-tips"
+ do_colouration = TRUE
+ color_blend_mode = ICON_MULTIPLY
+ ani_state = "foxtail_w"
+ extra_overlay_w = "foxtail-tips_w"
+ backup_name = list(
+ "Kitsune 9-in-1 tail, colourable (vwag)"
+ )
/datum/sprite_accessory/tail/shadekin_short
- name = "Shadekin Short Tail, colorable"
+ name = "Shadekin Short Tail"
icon_state = "shadekin-short"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "Shadekin Short Tail, colorable"
+ )
/datum/sprite_accessory/tail/wartacosushi_tail
name = "Ward-Takahashi Tail"
@@ -541,7 +662,6 @@
/datum/sprite_accessory/tail/Easterntail
name = "Eastern Dragon (Animated)"
- desc = ""
icon_state = "Easterntail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
@@ -551,14 +671,12 @@
/datum/sprite_accessory/tail/synthtail_static
name = "Synthetic lizard tail"
- desc = ""
icon_state = "synthtail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/synthtail_vwag
name = "Synthetic lizard tail (vwag)"
- desc = ""
icon_state = "synthtail"
ani_state = "synthtail_w"
do_colouration = TRUE
@@ -566,7 +684,6 @@
/datum/sprite_accessory/tail/Plugtail
name = "Synthetic plug tail"
- desc = ""
icon_state = "Plugtail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
@@ -575,7 +692,6 @@
/datum/sprite_accessory/tail/Segmentedtail
name = "Segmented tail, animated"
- desc = ""
icon_state = "Segmentedtail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
@@ -585,7 +701,6 @@
/datum/sprite_accessory/tail/Segmentedlights
name = "Segmented tail, animated synth"
- desc = ""
icon_state = "Segmentedtail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
@@ -595,58 +710,54 @@
/datum/sprite_accessory/tail/lizard_tail_smooth
name = "Lizard Tail (Smooth)"
- desc = ""
icon_state = "lizard_tail_smooth"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/lizard_tail_dark_tiger
name = "Lizard Tail (Dark Tiger)"
- desc = ""
icon_state = "lizard_tail_dark_tiger"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/lizard_tail_light_tiger
name = "Lizard Tail (Light Tiger)"
- desc = ""
icon_state = "lizard_tail_light_tiger"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/lizard_tail_spiked
name = "Lizard Tail (Spiked)"
- desc = ""
icon_state = "lizard_tail_spiked"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/xenotail_fullcolour
- name = "xenomorph tail (fully colourable)"
- desc = ""
+ name = "xenomorph tail"
icon_state = "xenotail_fullcolour"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "xenomorph tail (fully colourable)"
+ )
/datum/sprite_accessory/tail/xenotailalt_fullcolour
- name = "xenomorph tail alt. (fully colourable)"
- desc = ""
+ name = "xenomorph tail alt"
icon_state = "xenotailalt_fullcolour"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "xenomorph tail alt. (fully colourable)"
+ )
/datum/sprite_accessory/tail/peacocktail_red //this is ckey locked for now, but prettiebyrd wants these tails to be unlocked at a later date
name = "Peacock tail (vwag)"
- desc = ""
- icon = 'icons/mob/vore/tails_vr.dmi'
icon_state = "peacocktail_red"
ani_state = "peacocktail_red_w"
ckeys_allowed = list("prettiebyrd")
/datum/sprite_accessory/tail/peacocktail //ditto
name = "Peacock tail, colorable (vwag)"
- desc = ""
- icon = 'icons/mob/vore/tails_vr.dmi'
icon_state = "peacocktail"
ani_state = "peacocktail_w"
do_colouration = TRUE
@@ -655,7 +766,6 @@
/datum/sprite_accessory/tail/altevian
name = "Altevian Tail"
- icon = 'icons/mob/vore/tails_vr.dmi'
icon_state = "altevian"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
@@ -690,66 +800,75 @@
/datum/sprite_accessory/tail/turkey //Would have been a really good thing for Thanksgiving probably but I'm not going to wait that long.
name = "turkey"
- desc = ""
icon_state = "turkey"
/datum/sprite_accessory/tail/shark_markings
- name = "akula tail, colorable, tail and fins"
- desc = ""
+ name = "akula tail, tail and fins"
icon_state = "sharktail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "sharktail_markings"
+ backup_name = list(
+ "akula tail, colorable, tail and fins"
+ )
/datum/sprite_accessory/tail/shark_stripes
- name = "akula tail, colorable, stripe"
- desc = ""
+ name = "akula tail, stripe"
icon_state = "sharktail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "sharktail_stripemarkings"
+ backup_name = list(
+ "akula tail, colorable, stripe"
+ )
/datum/sprite_accessory/tail/shark_tips
- name = "akula tail, colorable, tips"
- desc = ""
+ name = "akula tail, tips"
icon_state = "sharktail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "sharktail_tipmarkings"
+ backup_name = list(
+ "akula tail, colorable, tips"
+ )
/datum/sprite_accessory/tail/narrow_tail
- name = "feathered narrow tail, colorable"
- desc = ""
+ name = "feathered narrow tail"
icon_state = "narrowtail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "feathered narrow tail, colorable"
+ )
/datum/sprite_accessory/tail/narrow_tail2
name = "feathered narrow tail, 2 colors"
- desc = ""
icon_state = "narrowtail_2color"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "narrowtail_2color-1"
-
// Dino Tails
/datum/sprite_accessory/tail/clubtail
- name = "dino clubtail, colorable"
- desc = ""
+ name = "dino clubtail"
icon_state = "clubtail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "clubtail-1"
+ backup_name = list(
+ "dino clubtail, colorable"
+ )
/datum/sprite_accessory/tail/spiketail
- name = "dino spiketail, colorable"
- desc = ""
+ name = "dino spiketail"
icon_state = "spiketail"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
extra_overlay = "spiketail-1"
+ backup_name = list(
+ "dino spiketail, colorable"
+ )
//For all species tails. Includes haircolored tails.
/datum/sprite_accessory/tail/special
@@ -859,48 +978,75 @@
icon_state = "tail_s"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "default zorren tail, colorable"
+ )
/datum/sprite_accessory/tail/special/foxhc
name = "highlander zorren tail"
icon_state = "foxtail_hc_s"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "highlander zorren tail, colorable"
+ )
/datum/sprite_accessory/tail/special/fennechc
name = "flatland zorren tail"
icon_state = "fentail_hc_s"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
+ backup_name = list(
+ "flatland zorren tail, colorable"
+ )
/datum/sprite_accessory/tail/special/armalishc
name = "armalis tail"
icon_state = "armalis_tail_humanoid_hc_s"
do_colouration = TRUE
+ backup_name = list(
+ "armalis tail, colorable"
+ )
/datum/sprite_accessory/tail/special/xenodronehc
name = "xenomorph drone tail"
icon_state = "xenos_drone_tail_hc_s"
do_colouration = TRUE
+ backup_name = list(
+ "xenomorph drone tail, colorable"
+ )
/datum/sprite_accessory/tail/special/xenosentinelhc
name = "xenomorph sentinel tail"
icon_state = "xenos_sentinel_tail_hc_s"
do_colouration = TRUE
+ backup_name = list(
+ "xenomorph sentinel tail, colorable"
+ )
/datum/sprite_accessory/tail/special/xenohunterhc
name = "xenomorph hunter tail"
icon_state = "xenos_hunter_tail_hc_s"
do_colouration = TRUE
+ backup_name = list(
+ "xenomorph hunter tail, colorable"
+ )
/datum/sprite_accessory/tail/special/xenoqueenhc
name = "xenomorph queen tail"
icon_state = "xenos_queen_tail_hc_s"
do_colouration = TRUE
+ backup_name = list(
+ "xenomorph queen tail, colorable"
+ )
/datum/sprite_accessory/tail/special/monkeyhc
name = "monkey tail"
icon_state = "chimptail_hc_s"
do_colouration = TRUE
+ backup_name = list(
+ "monkey tail, colorable"
+ )
/datum/sprite_accessory/tail/special/tesharitailhc
name = "teshari tail, colorable"
@@ -1244,16 +1390,19 @@
/*** Leg replacements but tails ***/
/datum/sprite_accessory/tail/satyr
- name = "goat legs, colorable"
+ name = "goat legs"
icon_state = "satyr"
color_blend_mode = ICON_MULTIPLY
do_colouration = TRUE
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/human_races/sprite_accessories/taurs.dmi'
clip_mask_state = "taur_clip_mask_def" //Used to clip off the lower part of suits & uniforms.
+ backup_name = list(
+ "goat legs, colorable"
+ )
/datum/sprite_accessory/tail/satyrtail
- name = "goat legs with tail, colorable"
+ name = "goat legs with tail"
icon_state = "satyr"
color_blend_mode = ICON_MULTIPLY
do_colouration = TRUE
@@ -1261,9 +1410,12 @@
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.
+ backup_name = list(
+ "goat legs with tail, colorable"
+ )
/datum/sprite_accessory/tail/synthetic_stilt_legs
- name = "synthetic stilt-legs, colorable"
+ name = "synthetic stilt-legs"
icon_state = "synth_stilts"
color_blend_mode = ICON_MULTIPLY
do_colouration = TRUE
@@ -1271,6 +1423,9 @@
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.
+ backup_name = list(
+ "synthetic stilt-legs, colorable"
+ )
//LONG TAILS ARE NOT TAUR BUTTS >:O
/datum/sprite_accessory/tail/longtail
@@ -1303,4 +1458,4 @@
/datum/sprite_accessory/tail/longtail/zaprat/heart
name = "heart-bolt-shaped tail, dual color"
icon_state = "zaprat_heart_s"
- extra_overlay = "zaprat_heart_markings"
\ No newline at end of file
+ extra_overlay = "zaprat_heart_markings"
diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm
index 76ef81b0aa6..308d74cb2ec 100644
--- a/code/modules/mob/say_vr.dm
+++ b/code/modules/mob/say_vr.dm
@@ -192,8 +192,8 @@
var/mob/living/itsme = src
if(itsme.vore_organs.len)
for(var/obj/belly/ourbelly in itsme.vore_organs)
- for(var/anything in ourbelly.contents)
- vis_objs |= anything
+ for(var/obj/O in ourbelly.contents)
+ vis_objs |= O
for(var/obj/O in vis_objs) //Let's see if there is anything that might have mobs in it around!
if(istype(O,/obj/effect/overmap/visitable/ship)) //Let's look for ships!
diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm
index 013c866792b..d10a57e2b30 100644
--- a/code/modules/vore/eating/belly_obj_vr.dm
+++ b/code/modules/vore/eating/belly_obj_vr.dm
@@ -294,7 +294,7 @@
to_chat(owner,"[thing] slides into your [lowertext(name)].")
//Sound w/ antispam flag setting
- if(vore_sound && !recent_sound && !istype(thing, /mob/observer)) //RSEdit: Ports VOREStation PR15918 || does not play vorebelly insertion sound upon ghost entering
+ if(vore_sound && !recent_sound && !istype(thing, /mob/observer)) //RSEdit: Ports VOREStation PR15918 || does not play vorebelly insertion sound upon ghost entering
var/soundfile
if(!fancy_vore)
soundfile = classic_vore_sounds[vore_sound]
@@ -449,7 +449,7 @@
// Release all contents of this belly into the owning mob's location.
// If that location is another mob, contents are transferred into whichever of its bellies the owning mob is in.
// Returns the number of mobs so released.
-/obj/belly/proc/release_all_contents(include_absorbed = FALSE, silent = FALSE)
+/obj/belly/proc/release_all_contents(include_absorbed = FALSE, silent = FALSE, include_bones = FALSE) //RS EDIT
//Don't bother if we don't have contents
if(!contents.len)
return FALSE
@@ -463,6 +463,8 @@
var/mob/living/L = AM
if(L.absorbed && !include_absorbed)
continue
+ if(istype(AM, /obj/item/weapon/digestion_remains) && !include_bones) // RS ADD
+ continue //RS ADD
count += release_specific_contents(AM, silent = TRUE)
//Clean up our own business
@@ -563,7 +565,7 @@
privacy_volume = 25
//Print notifications/sound if necessary
- if(!silent)
+ if(!silent && !isobserver(M)) //RSEdit: Ports VOREStation PR15918 | Don't display release message for ghosts
owner.visible_message("[owner] [release_verb] [M] from their [lowertext(name)]!",range = privacy_range)
var/soundfile
if(!fancy_vore)
@@ -974,7 +976,7 @@
if(!digested)
items_preserved |= item
else
- owner.adjust_nutrition((nutrition_percent / 100) * 5 * digested)
+ owner.adjust_nutrition((nutrition_percent / 100) * 15 * digested)
if(isrobot(owner))
var/mob/living/silicon/robot/R = owner
R.cell.charge += ((nutrition_percent / 100) * 50 * digested)
@@ -1219,7 +1221,7 @@
if(!(content in src) || !istype(target))
return
content.forceMove(target)
- if(ismob(content))
+ if(ismob(content) && !isobserver(content)) //RSEdit: Ports VOREStation PR15918 | Fixes bug where camera is not set to follow the ghost
var/mob/ourmob = content
ourmob.reset_view(owner)
if(isitem(content))
diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm
index e267f5ce53f..62a5b15e568 100644
--- a/code/modules/vore/eating/bellymodes_datum_vr.dm
+++ b/code/modules/vore/eating/bellymodes_datum_vr.dm
@@ -77,9 +77,9 @@ GLOBAL_LIST_INIT(digest_modes, list())
var/mob/living/silicon/robot/R = B.owner
R.cell.charge += 25 * damage_gain
if(offset) // If any different than default weight, multiply the % of offset.
- B.owner.adjust_nutrition(offset*(4.5 * (damage_gain) / difference)*L.get_digestion_nutrition_modifier()*B.owner.get_digestion_efficiency_modifier()) //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved.
+ B.owner.adjust_nutrition(offset*(14 * (damage_gain) / difference)*L.get_digestion_nutrition_modifier()*B.owner.get_digestion_efficiency_modifier()) //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved.
else
- B.owner.adjust_nutrition((4.5 * (damage_gain) / difference)*L.get_digestion_nutrition_modifier()*B.owner.get_digestion_efficiency_modifier())
+ B.owner.adjust_nutrition((14 * (damage_gain) / difference)*L.get_digestion_nutrition_modifier()*B.owner.get_digestion_efficiency_modifier())
if(L.stat != oldstat)
return list("to_update" = TRUE)
@@ -156,24 +156,24 @@ GLOBAL_LIST_INIT(digest_modes, list())
var/obj/item/organ/external/O = E
if(O.brute_dam > 0 || O.burn_dam > 0) //Making sure healing continues until fixed.
O.heal_damage(0.5, 0.5, 0, 1) // Less effective healing as able to fix broken limbs
- B.owner.adjust_nutrition(-5) // More costly for the pred, since metals and stuff
+ B.owner.adjust_nutrition(-10) // More costly for the pred, since metals and stuff
if(L.health < L.maxHealth)
L.adjustToxLoss(-2)
L.adjustOxyLoss(-2)
L.adjustCloneLoss(-1)
- B.owner.adjust_nutrition(-1) // Normal cost per old functionality
+ B.owner.adjust_nutrition(-2) // Normal cost per old functionality
if(B.owner.nutrition > 90 && (L.health < L.maxHealth) && !H.isSynthetic())
L.adjustBruteLoss(-2.5)
L.adjustFireLoss(-2.5)
L.adjustToxLoss(-5)
L.adjustOxyLoss(-5)
L.adjustCloneLoss(-1.25)
- B.owner.adjust_nutrition(-2)
+ B.owner.adjust_nutrition(-4)
if(L.nutrition <= 400)
- L.adjust_nutrition(1)
+ L.adjust_nutrition(2)
else if(B.owner.nutrition > 90 && (L.nutrition <= 400))
- B.owner.adjust_nutrition(-1)
- L.adjust_nutrition(1)
+ B.owner.adjust_nutrition(-2)
+ L.adjust_nutrition(2)
if(L.stat != oldstat)
return list("to_update" = TRUE)
diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm
index ca8921dd873..6bc644a0422 100644
--- a/code/modules/vore/eating/bellymodes_vr.dm
+++ b/code/modules/vore/eating/bellymodes_vr.dm
@@ -258,7 +258,7 @@
/obj/belly/proc/handle_digestion_death(mob/living/M)
var/digest_alert_owner = pick(digest_messages_owner)
var/digest_alert_prey = pick(digest_messages_prey)
- var/compensation = M.maxHealth / 5 //Dead body bonus.
+ var/compensation = M.maxHealth / 1.5 //Dead body bonus.
if(ishuman(M))
compensation += M.getOxyLoss() //How much of the prey's damage was caused by passive crit oxyloss to compensate the lost nutrition.
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index b6602ab3cc8..e2728eca92f 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -317,7 +317,7 @@
//
/mob/living/proc/release_vore_contents(var/include_absorbed = TRUE, var/silent = FALSE)
for(var/obj/belly/B as anything in vore_organs)
- B.release_all_contents(include_absorbed, silent)
+ B.release_all_contents(include_absorbed, silent, TRUE) //RS EDIT
//
// Returns examine messages for bellies
diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm
index aceb8b773b0..87a61eba92c 100644
--- a/code/modules/vore/eating/vorepanel_vr.dm
+++ b/code/modules/vore/eating/vorepanel_vr.dm
@@ -727,9 +727,8 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
/datum/vore_look/proc/pick_from_outside(mob/user, params)
var/intent
- //Handle the [All] choice. Ugh inelegant. Someone make this pretty.
if(params["pickall"])
- intent = tgui_alert(user, "Eject all, Move all?","Query",list("Eject all","Cancel","Move all"))
+ intent = tgui_alert(user, "You are affecting all [lowertext(host.vore_selected)] contents with this choice.","[uppertext(host.vore_selected)] contents management",list("Eject all","Move all","Advance all","Cancel"))
switch(intent)
if("Cancel")
return TRUE
@@ -738,8 +737,19 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
if(host.stat)
to_chat(user,"You can't do that in your state!")
return TRUE
+ //RS ADD START
+ var/bones_detected = FALSE
+ var/bone_time = FALSE
+ for(var/thing in host.vore_selected.contents)
+ if(istype(thing, /obj/item/weapon/digestion_remains))
+ bones_detected = TRUE
+ break
+ if(bones_detected)
+ if(tgui_alert(user, "Do you want to include the remains that are inside your [lowertext(host.vore_selected)]?","",list("Yes","No")) == "Yes")
+ bone_time = TRUE
+ //RS ADD END
- host.vore_selected.release_all_contents()
+ host.vore_selected.release_all_contents(include_bones = bone_time) //RS EDIT
return TRUE
if("Move all")
@@ -751,16 +761,39 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
if(!choice)
return FALSE
+ for(var/atom/movable/target in host.vore_selected)
+ to_chat(target,"You're squished from [host]'s host.vore_selected to their [lowertext(choice.name)]!")
+ host.vore_selected.transfer_contents(target, choice, 1)
+ return TRUE
+ //RS ADD START
+ if("Advance all")
+ if(host.stat)
+ to_chat(user,"You can't do that in your state!")
+ return TRUE
+ var/list/choices = list()
+ var/obj/belly/choice
+ for(var/obj/belly/b in host.vore_organs)
+ if(b.name == host.vore_selected.transferlocation || b.name == host.vore_selected.transferlocation_secondary)
+ choices += b
+ if(!choices.len)
+ to_chat(user,"You haven't configured any transfer locations for your [lowertext(host.vore_selected)]. Please configure at least one transfer location in order to advance your [lowertext(host.vore_selected)]'s contents.")
+ else
+ choice = tgui_input_list(user, "Advance your [lowertext(host.vore_selected)]'s contents to which belly?","Select Belly", choices)
+
+ if(!choice)
+ return TRUE
+
for(var/atom/movable/target in host.vore_selected)
to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected)] to their [lowertext(choice.name)]!")
host.vore_selected.transfer_contents(target, choice, 1)
return TRUE
+ //RS ADD END
return
var/atom/movable/target = locate(params["pick"])
if(!(target in host.vore_selected))
return TRUE // Not in our X anymore, update UI
- var/list/available_options = list("Examine", "Eject", "Move", "Transfer")
+ var/list/available_options = list("Examine", "Eject", "Move", "Advance", "Transfer")
if(ishuman(target))
available_options += "Transform"
if(isliving(target))
@@ -913,6 +946,26 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono",
b.absorb_living(ourtarget)
if("Cancel")
return
+ //RS ADD START
+ if("Advance")
+ if(host.stat)
+ to_chat(user,"You can't do that in your state!")
+ return TRUE
+ var/list/choices = list()
+ var/obj/belly/choice
+ for(var/obj/belly/b in host.vore_organs)
+ if(b.name == host.vore_selected.transferlocation || b.name == host.vore_selected.transferlocation_secondary)
+ choices += b
+ if(!choices.len)
+ to_chat(user,"You haven't configured any transfer locations for your [lowertext(host.vore_selected)]. Please configure at least one transfer location in order to advance your [lowertext(host.vore_selected)]'s contents.")
+ else
+ choice = tgui_input_list(user, "Advance your [lowertext(host.vore_selected)]'s contents to which belly?","Select Belly", choices)
+
+ if(!choice || !(target in host.vore_selected))
+ return TRUE
+ to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected.name)] to their [lowertext(choice.name)]!")
+ host.vore_selected.transfer_contents(target, choice)
+ //RS ADD END
/datum/vore_look/proc/set_attr(mob/user, params)
if(!host.vore_selected)
diff --git a/icons/mob/species/teshari/synth_facemask.dmi b/icons/mob/species/teshari/synth_facemask.dmi
new file mode 100644
index 00000000000..d85b0ff129e
Binary files /dev/null and b/icons/mob/species/teshari/synth_facemask.dmi differ
diff --git a/maps/groundbase/gb-mining.dmm b/maps/groundbase/gb-mining.dmm
index f06ca4762a6..316a25e7bc1 100644
--- a/maps/groundbase/gb-mining.dmm
+++ b/maps/groundbase/gb-mining.dmm
@@ -2267,7 +2267,7 @@ I
I
I
I
-I
+Z
Z
Z
Z
@@ -2409,7 +2409,7 @@ I
I
I
I
-I
+Z
Z
Z
Z
@@ -2550,8 +2550,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
Z
Z
@@ -2692,8 +2692,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -2833,8 +2833,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -2975,8 +2975,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -3117,8 +3117,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -3259,9 +3259,9 @@ I
I
I
I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -3402,10 +3402,10 @@ I
I
I
I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
I
I
I
@@ -3545,12 +3545,12 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
+Z
+Z
I
I
I
@@ -3689,10 +3689,10 @@ I
I
I
I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
I
I
I
@@ -3833,9 +3833,9 @@ I
I
I
I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -3977,8 +3977,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
Z
Z
@@ -4120,7 +4120,7 @@ I
I
I
I
-I
+Z
I
Z
Z
@@ -4262,7 +4262,7 @@ I
I
I
I
-I
+Z
Z
Z
Z
@@ -4404,7 +4404,7 @@ I
I
I
I
-I
+Z
Z
Z
I
@@ -4546,7 +4546,7 @@ I
I
I
I
-I
+Z
Z
Z
I
@@ -5480,11 +5480,11 @@ I
I
I
I
-Z
-Z
-b
-b
-b
+I
+I
+I
+I
+I
I
I
I
@@ -5621,12 +5621,12 @@ I
I
I
I
-Z
-Z
-Z
-x
-Z
-b
+I
+I
+I
+I
+I
+I
I
I
I
@@ -5763,12 +5763,12 @@ I
I
I
I
-Z
-Z
-Z
-x
-Z
-b
+I
+I
+I
+I
+I
+I
I
I
I
@@ -5906,11 +5906,11 @@ I
I
I
I
-Z
-Z
-b
-b
-b
+I
+I
+I
+I
+I
I
I
I
@@ -7291,7 +7291,7 @@ Z
Z
Z
Z
-I
+Z
I
I
I
@@ -7432,8 +7432,8 @@ I
Z
Z
Z
-I
-I
+Z
+Z
I
I
I
@@ -7574,9 +7574,9 @@ I
Z
Z
I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -7636,8 +7636,8 @@ I
Z
Z
Z
-I
-I
+Z
+Z
I
I
I
@@ -7717,6 +7717,8 @@ Z
Z
Z
I
+Z
+Z
I
I
I
@@ -7774,12 +7776,10 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
I
I
Z
@@ -7859,6 +7859,8 @@ Z
I
I
I
+Z
+Z
I
I
I
@@ -7917,11 +7919,9 @@ I
I
I
I
-I
-I
-I
-I
-I
+Z
+Z
+Z
I
I
Z
@@ -8001,6 +8001,9 @@ Z
Z
I
I
+Z
+Z
+Z
I
I
I
@@ -8059,11 +8062,8 @@ I
I
I
I
-I
-I
-I
-I
-I
+Z
+Z
Z
Z
Z
@@ -8143,12 +8143,9 @@ Z
I
I
I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -8215,6 +8212,9 @@ Z
Z
Z
Z
+Z
+Z
+Z
I
I
Z
@@ -8266,8 +8266,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -8286,8 +8286,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -8406,12 +8406,12 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
+Z
+Z
I
I
I
@@ -8428,8 +8428,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -8548,13 +8548,13 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
+Z
+Z
+Z
I
I
I
@@ -8570,8 +8570,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -8689,15 +8689,15 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
+Z
+Z
+Z
+Z
+Z
I
I
I
@@ -8712,8 +8712,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -8831,9 +8831,15 @@ I
I
I
I
+Z
+Z
+Z
I
I
I
+Z
+Z
+Z
I
I
I
@@ -8847,14 +8853,8 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
I
I
I
@@ -8972,12 +8972,17 @@ I
I
I
I
+Z
+Z
+Z
I
I
I
I
I
I
+Z
+Z
I
I
I
@@ -8990,13 +8995,8 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
I
I
I
@@ -9114,6 +9114,8 @@ I
I
I
I
+Z
+Z
I
I
I
@@ -9121,6 +9123,9 @@ I
I
I
I
+Z
+Z
+Z
I
I
I
@@ -9131,14 +9136,9 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -9256,6 +9256,8 @@ I
I
I
I
+Z
+Z
I
I
I
@@ -9263,6 +9265,10 @@ I
I
I
I
+Z
+Z
+Z
+Z
I
I
I
@@ -9270,17 +9276,11 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
+Z
I
I
I
@@ -9398,6 +9398,8 @@ I
I
I
I
+Z
+Z
I
I
I
@@ -9406,23 +9408,21 @@ I
I
I
I
+Z
+Z
+Z
+Z
+Z
I
I
I
I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
+Z
+Z
I
I
I
@@ -9540,6 +9540,8 @@ I
I
I
I
+Z
+Z
I
I
I
@@ -9549,21 +9551,19 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
+Z
+Z
+Z
+Z
+Z
+Z
+Z
+Z
+Z
I
I
I
@@ -9682,6 +9682,8 @@ I
I
I
I
+Z
+Z
I
I
I
@@ -9693,18 +9695,16 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
+Z
+Z
+Z
+Z
+Z
+Z
I
I
I
@@ -9824,6 +9824,8 @@ I
I
I
I
+Z
+Z
I
I
I
@@ -9837,13 +9839,11 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
+Z
I
I
I
@@ -9967,8 +9967,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -10109,8 +10109,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -10251,9 +10251,9 @@ I
I
I
I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -10393,9 +10393,9 @@ I
I
I
I
-I
-I
-I
+Z
+Z
+Z
I
Z
Z
@@ -10464,7 +10464,7 @@ Z
Z
Z
Z
-I
+Z
I
I
I
@@ -10536,8 +10536,8 @@ I
I
I
I
-I
-I
+Z
+Z
Z
Z
Z
@@ -10602,10 +10602,10 @@ Z
Z
Z
Z
-I
-I
-I
-I
+Z
+Z
+Z
+Z
I
I
I
@@ -10679,7 +10679,7 @@ I
I
I
I
-I
+Z
Z
Z
Z
@@ -10743,9 +10743,9 @@ Z
Z
I
I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -10822,7 +10822,7 @@ I
I
I
I
-I
+Z
Z
Z
b
@@ -10885,8 +10885,8 @@ Z
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -11026,8 +11026,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -11167,9 +11167,9 @@ I
I
I
I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -11309,8 +11309,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -11450,8 +11450,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -11592,8 +11592,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -11734,8 +11734,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -11876,8 +11876,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -12018,8 +12018,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -12160,9 +12160,9 @@ I
I
I
I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -12302,9 +12302,9 @@ I
I
I
I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -12445,8 +12445,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -12587,8 +12587,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -12729,8 +12729,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -12872,8 +12872,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -13014,8 +13014,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -13157,8 +13157,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -13299,8 +13299,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -13441,9 +13441,9 @@ I
I
I
I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -13584,9 +13584,9 @@ I
I
I
I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -13727,10 +13727,10 @@ I
I
I
I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
I
I
Z
@@ -13871,9 +13871,9 @@ I
I
I
I
-I
Z
-I
+Z
+Z
Z
Z
Z
@@ -14015,7 +14015,7 @@ I
Z
Z
Z
-I
+Z
Z
Z
Z
@@ -14858,7 +14858,7 @@ I
I
Z
Z
-I
+Z
I
I
I
@@ -15284,7 +15284,7 @@ I
I
I
Z
-I
+Z
I
I
I
@@ -15569,7 +15569,7 @@ I
I
Z
Z
-I
+Z
I
I
I
@@ -15711,7 +15711,7 @@ I
I
Z
Z
-I
+Z
Z
Z
I
@@ -16564,7 +16564,7 @@ I
I
I
I
-I
+Z
Z
Z
Z
@@ -16707,10 +16707,10 @@ I
I
I
I
-I
Z
Z
-I
+Z
+Z
I
I
I
@@ -16850,9 +16850,9 @@ I
I
I
I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -16992,8 +16992,8 @@ I
I
I
I
-I
-I
+Z
+Z
I
I
I
@@ -17134,9 +17134,9 @@ I
I
I
I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -17276,6 +17276,9 @@ I
I
I
I
+Z
+Z
+Z
I
I
I
@@ -17283,12 +17286,9 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -17417,14 +17417,10 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
I
I
I
@@ -17433,6 +17429,10 @@ I
I
Z
Z
+Z
+Z
+Z
+Z
b
b
b
@@ -17559,14 +17559,10 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
I
I
I
@@ -17575,6 +17571,10 @@ I
Z
Z
Z
+Z
+Z
+Z
+Z
x
Z
b
@@ -17701,19 +17701,19 @@ I
I
I
I
+Z
+Z
+Z
I
I
I
I
I
I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
Z
Z
Z
@@ -17842,18 +17842,18 @@ I
I
I
I
+Z
+Z
+Z
+Z
I
I
I
I
I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -17984,17 +17984,17 @@ I
I
I
I
+Z
+Z
+Z
I
I
I
I
I
I
-I
-I
-I
-I
-I
+Z
+Z
I
I
I
@@ -18126,17 +18126,17 @@ I
I
I
I
+Z
+Z
+Z
I
I
I
I
I
I
-I
-I
-I
-I
-I
+Z
+Z
I
I
I
@@ -18268,17 +18268,17 @@ I
I
I
I
+Z
+Z
+Z
I
I
I
I
I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -18410,16 +18410,16 @@ I
I
I
I
+Z
+Z
+Z
+Z
I
I
I
I
-I
-I
-I
-I
-I
-I
+Z
+Z
I
I
I
@@ -18553,15 +18553,15 @@ I
I
I
I
+Z
+Z
+Z
+Z
I
I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
I
I
I
@@ -18696,13 +18696,13 @@ I
I
I
I
-I
-I
-I
-I
-I
-I
-I
+Z
+Z
+Z
+Z
+Z
+Z
+Z
I
I
I
diff --git a/maps/groundbase/rp-z2.dmm b/maps/groundbase/rp-z2.dmm
index 4b48af70609..fe94abfd07f 100644
--- a/maps/groundbase/rp-z2.dmm
+++ b/maps/groundbase/rp-z2.dmm
@@ -9397,7 +9397,7 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/obj/effect/landmark/start/qm,
+/obj/structure/filingcabinet/filingcabinet,
/turf/simulated/floor/tiled,
/area/groundbase/cargo/office)
"Ja" = (
@@ -11270,7 +11270,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/machinery/smartfridge/sheets/persistent_lossy,
+/obj/machinery/smartfridge/sheets/persistent,
/turf/simulated/floor/tiled,
/area/groundbase/cargo/office)
"Pr" = (
@@ -11949,6 +11949,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
+/obj/effect/landmark/start/qm,
/turf/simulated/floor/tiled,
/area/groundbase/cargo/office)
"Ry" = (
@@ -12240,8 +12241,9 @@
/turf/simulated/floor/tiled/dark,
/area/groundbase/civilian/chapel)
"Sy" = (
-/obj/structure/filingcabinet/filingcabinet,
-/turf/simulated/floor/tiled,
+/obj/machinery/door/firedoor/glass,
+/obj/machinery/smartfridge/sheets/persistent,
+/turf/simulated/floor/plating,
/area/groundbase/cargo/office)
"Sz" = (
/obj/structure/grille,
@@ -28831,8 +28833,8 @@ HK
hF
ER
kj
+WZ
Sy
-sX
Sw
pT
ep
diff --git a/vorestation.dme b/vorestation.dme
index 1fc828c8c50..d8bc40e0c2e 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -2042,6 +2042,7 @@
#include "code\modules\clothing\masks\miscellaneous.dm"
#include "code\modules\clothing\masks\miscellaneous_vr.dm"
#include "code\modules\clothing\masks\shiny_vr.dm"
+#include "code\modules\clothing\masks\tesh_synth_facemask.dm"
#include "code\modules\clothing\masks\voice.dm"
#include "code\modules\clothing\rings\material.dm"
#include "code\modules\clothing\rings\rings.dm"
@@ -4287,6 +4288,7 @@
#include "maps\expedition_vr\beach\submaps\mountains.dm"
#include "maps\expedition_vr\beach\submaps\mountains_areas.dm"
#include "maps\gateway_archive_vr\blackmarketpackers.dm"
+#include "maps\groundbase\groundbase.dm"
#include "maps\redgate\fantasy_items.dm"
#include "maps\redgate\code\snowglobe_rs.dm"
#include "maps\southern_cross\items\clothing\sc_accessory.dm"
@@ -4295,7 +4297,6 @@
#include "maps\southern_cross\loadout\loadout_suit.dm"
#include "maps\southern_cross\loadout\loadout_uniform.dm"
#include "maps\southern_cross\loadout\loadout_vr.dm"
-#include "maps\stellar_delight\stellar_delight.dm"
#include "maps\submaps\_helpers.dm"
#include "maps\submaps\_readme.dm"
#include "maps\submaps\admin_use_vr\event_autonomous_drone.dm"