diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm
index d9a5f7a847..df7a90632c 100644
--- a/code/__defines/mobs.dm
+++ b/code/__defines/mobs.dm
@@ -447,3 +447,7 @@
#define DEATHGASP_NO_MESSAGE "no message"
#define RESIST_COOLDOWN 2 SECONDS
+
+#define VISIBLE_GENDER_FORCE_PLURAL 1 // Used by get_visible_gender to return PLURAL
+#define VISIBLE_GENDER_FORCE_IDENTIFYING 2 // Used by get_visible_gender to return the mob's identifying gender
+#define VISIBLE_GENDER_FORCE_BIOLOGICAL 3 // Used by get_visible_gender to return the mob's biological gender
diff --git a/code/datums/supplypacks/materials.dm b/code/datums/supplypacks/materials.dm
index 5e181d8af8..45951c516d 100644
--- a/code/datums/supplypacks/materials.dm
+++ b/code/datums/supplypacks/materials.dm
@@ -66,17 +66,18 @@
/obj/fiftyspawner/tealcarpet
)
-/datum/supply_pack/materials/arcade_carpet
- name = "Retro carpets"
+/datum/supply_pack/materials/retrocarpet
+ name = "Retro carpet"
containertype = /obj/structure/closet/crate/grayson
- containername = "Retro carpets crate"
+ containername = "Retro carpet crate"
cost = 15
contains = list(
- /obj/fiftyspawner/decocarpet,
- /obj/fiftyspawner/retrocarpet
+ /obj/fiftyspawner/geocarpet,
+ /obj/fiftyspawner/retrocarpet,
+ /obj/fiftyspawner/retrocarpet_red
)
-/datum/supply_pack/misc/linoleum
+/datum/supply_pack/materials/linoleum
name = "Linoleum"
containertype = /obj/structure/closet/crate/grayson
containername = "Linoleum crate"
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 3df1820fa9..b0703f63a4 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -27,7 +27,7 @@
// Overlays
///Our local copy of (non-priority) overlays without byond magic. Use procs in SSoverlays to manipulate
- var/list/our_overlays
+ var/list/our_overlays
///Overlays that should remain on top and not normally removed when using cut_overlay functions, like c4.
var/list/priority_overlays
///vis overlays managed by SSvis_overlays to automaticaly turn them like other overlays
@@ -35,7 +35,7 @@
///Our local copy of filter data so we can add/remove it
var/list/filter_data
-
+
//Detective Work, used for the duplicate data points kept in the scanners
var/list/original_atom
// Track if we are already had initialize() called to prevent double-initialization.
@@ -681,7 +681,7 @@
if(!isnull(.))
datum_flags |= DF_VAR_EDITED
return
-
+
. = ..()
/atom/proc/atom_say(message)
@@ -716,7 +716,7 @@
. = ..()
SEND_SIGNAL(src, COMSIG_ATOM_EXITED, AM, new_loc)
-/atom/proc/get_visible_gender()
+/atom/proc/get_visible_gender(mob/user, force)
return gender
/atom/proc/interact(mob/user)
diff --git a/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm b/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm
index 3332adbe0c..d827289e32 100644
--- a/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm
+++ b/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm
@@ -20,14 +20,18 @@
name = "stack of teal carpet"
type_to_spawn = /obj/item/stack/tile/carpet/teal
-/obj/fiftyspawner/decocarpet
- name = "stack of deco carpet"
- type_to_spawn = /obj/item/stack/tile/carpet/deco
+/obj/fiftyspawner/geocarpet
+ name = "stack of geometric carpet"
+ type_to_spawn = /obj/item/stack/tile/carpet/geo
/obj/fiftyspawner/retrocarpet
- name = "stack of retro carpet"
+ name = "stack of blue retro carpet"
type_to_spawn = /obj/item/stack/tile/carpet/retro
+/obj/fiftyspawner/retrocarpet_red
+ name = "stack of red retro carpet"
+ type_to_spawn = /obj/item/stack/tile/carpet/retro_red
+
/obj/fiftyspawner/floor
name = "stack of floor tiles"
type_to_spawn = /obj/item/stack/tile/floor
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 759d57414e..c6289c3147 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -65,6 +65,26 @@
desc = "An easy to fit wooden floor tile. It's blue!"
icon_state = "tile-sifwood"
+/obj/item/stack/tile/wood/alt
+ name = "wood floor tile"
+ singular_name = "wood floor tile"
+ icon_state = "tile-wood_tile"
+
+/obj/item/stack/tile/wood/parquet
+ name = "parquet wood floor tile"
+ singular_name = "parquet wood floor tile"
+ icon_state = "tile-wood_parquet"
+
+/obj/item/stack/tile/wood/panel
+ name = "large wood floor tile"
+ singular_name = "large wood floor tile"
+ icon_state = "tile-wood_large"
+
+/obj/item/stack/tile/wood/tile
+ name = "tiled wood floor tile"
+ singular_name = "tiled wood floor tile"
+ icon_state = "tile-wood_tile"
+
/obj/item/stack/tile/wood/cyborg
name = "wood floor tile synthesizer"
desc = "A device that makes wood floor tiles."
@@ -73,6 +93,8 @@
stacktype = /obj/item/stack/tile/wood
build_type = /obj/item/stack/tile/wood
+
+
/*
* Carpets
*/
@@ -97,6 +119,19 @@
icon_state = "tile-tealcarpet"
no_variants = FALSE
+/obj/item/stack/tile/carpet/geo
+ icon_state = "tile-carpet-deco"
+ desc = "A piece of carpet with a gnarly geometric design. It is the same size as a normal floor tile!"
+
+/obj/item/stack/tile/carpet/retro
+ icon_state = "tile-carpet-retro"
+ desc = "A piece of carpet with totally wicked blue space patterns. It is the same size as a normal floor tile!"
+
+/obj/item/stack/tile/carpet/retro_red
+ icon_state = "tile-carpet-retro-red"
+ desc = "A piece of carpet with red-ical space patterns. It is the same size as a normal floor tile!"
+
+// TODO - Add descriptions to these
/obj/item/stack/tile/carpet/bcarpet
icon_state = "tile-carpet"
/obj/item/stack/tile/carpet/blucarpet
@@ -111,10 +146,6 @@
icon_state = "tile-carpet"
/obj/item/stack/tile/carpet/oracarpet
icon_state = "tile-carpet"
-/obj/item/stack/tile/carpet/deco
- icon_state = "tile-carpet-deco"
-/obj/item/stack/tile/carpet/retro
- icon_state = "tile-carpet-retro"
/obj/item/stack/tile/floor
name = "floor tile"
diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm
index a843bc06d3..6f487f109d 100644
--- a/code/game/turfs/flooring/flooring.dm
+++ b/code/game/turfs/flooring/flooring.dm
@@ -320,18 +320,24 @@ var/list/flooring_types
icon_base = "tealcarpet"
build_type = /obj/item/stack/tile/carpet/teal
-/decl/flooring/carpet/deco
- name = "deco carpet"
- icon_base = "decocarpet"
- build_type = /obj/item/stack/tile/carpet/deco
+/decl/flooring/carpet/geo
+ name = "geometric carpet"
+ icon_base = "geocarpet"
+ build_type = /obj/item/stack/tile/carpet/geo
flags = TURF_REMOVE_CROWBAR | TURF_CAN_BURN
/decl/flooring/carpet/retro
- name = "retro carpet"
+ name = "blue retro carpet"
icon_base = "retrocarpet"
build_type = /obj/item/stack/tile/carpet/retro
flags = TURF_REMOVE_CROWBAR | TURF_CAN_BURN
+/decl/flooring/carpet/retro_red
+ name = "red retro carpet"
+ icon_base = "retrocarpet_red"
+ build_type = /obj/item/stack/tile/carpet/retro_red
+ flags = TURF_REMOVE_CROWBAR | TURF_CAN_BURN
+
/decl/flooring/tiling
name = "floor"
desc = "Scuffed from the passage of countless greyshirts."
@@ -495,6 +501,31 @@ var/list/flooring_types
icon_base = "sifwood"
build_type = /obj/item/stack/tile/wood/sif
+/decl/flooring/wood/alt
+ icon = 'icons/turf/flooring/wood.dmi'
+ icon_base = "wood"
+ build_type = /obj/item/stack/tile/wood/alt
+
+/decl/flooring/wood/alt/panel
+ desc = "Polished wooden panels."
+ icon = 'icons/turf/flooring/wood.dmi'
+ icon_base = "wood_panel"
+ has_damage_range = 2
+ build_type = /obj/item/stack/tile/wood/panel
+
+/decl/flooring/wood/alt/parquet
+ desc = "Polished wooden tiles."
+ icon = 'icons/turf/flooring/wood.dmi'
+ icon_base = "wood_parquet"
+ build_type = /obj/item/stack/tile/wood/parquet
+
+/decl/flooring/wood/alt/tile
+ desc = "Polished wooden tiles."
+ icon = 'icons/turf/flooring/wood.dmi'
+ icon_base = "wood_tile"
+ has_damage_range = 2
+ build_type = /obj/item/stack/tile/wood/tile
+
/decl/flooring/reinforced
name = "reinforced floor"
desc = "Heavily reinforced with steel rods."
diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm
index 42bf1e780e..a8e25b2e63 100644
--- a/code/game/turfs/flooring/flooring_premade.dm
+++ b/code/game/turfs/flooring/flooring_premade.dm
@@ -19,10 +19,10 @@
icon_state = "tealcarpet"
initial_flooring = /decl/flooring/carpet/tealcarpet
-/turf/simulated/floor/carpet/deco
+/turf/simulated/floor/carpet/geo
name = "deco carpet"
icon_state = "decocarpet"
- initial_flooring = /decl/flooring/carpet/deco
+ initial_flooring = /decl/flooring/carpet/geo
/turf/simulated/floor/carpet/retro
name = "retro carpet"
@@ -60,6 +60,21 @@
icon_state = "oracarpet"
initial_flooring = /decl/flooring/carpet/oracarpet
+/turf/simulated/floor/carpet/geo
+ name = "geometric carpet"
+ icon_state = "geocarpet"
+ initial_flooring = /decl/flooring/carpet/geo
+
+/turf/simulated/floor/carpet/retro
+ name = "blue retro carpet"
+ icon_state = "retrocarpet"
+ initial_flooring = /decl/flooring/carpet/retro
+
+/turf/simulated/floor/carpet/retro_red
+ name = "red retro carpet"
+ icon_state = "retrocarpet_red"
+ initial_flooring = /decl/flooring/carpet/retro_red
+
/turf/simulated/floor/bluegrid
name = "mainframe floor"
icon = 'icons/turf/flooring/circuit.dmi'
@@ -79,24 +94,67 @@
initial_flooring = /decl/flooring/wood
/turf/simulated/floor/wood/broken
- icon_state = "wood_broken0" // This gets changed when spawned.
+ icon_state = "wood-broken0" // This gets changed when spawned.
-/turf/simulated/floor/wood/broken/Initialize()
+/turf/simulated/floor/wood/broken/LateInitialize()
+ . = ..()
break_tile()
- return ..()
/turf/simulated/floor/wood/sif
name = "alien wooden floor"
- icon = 'icons/turf/flooring/wood.dmi'
icon_state = "sifwood"
initial_flooring = /decl/flooring/wood/sif
/turf/simulated/floor/wood/sif/broken
- icon_state = "sifwood_broken0" // This gets changed when spawned.
+ icon_state = "sifwood-broken0" // This gets changed when spawned.
-/turf/simulated/floor/wood/sif/broken/Initialize()
+/turf/simulated/floor/wood/sif/broken/LateInitialize()
+ . = ..()
+ break_tile()
+
+/turf/simulated/floor/wood/alt
+ icon = 'icons/turf/flooring/wood.dmi'
+ initial_flooring = /decl/flooring/wood/alt
+
+/turf/simulated/floor/wood/alt/broken
+ icon_state = "wood-broken0" // This gets changed when spawned.
+
+/turf/simulated/floor/wood/alt/broken/LateInitialize()
+ . = ..()
+ break_tile()
+
+/turf/simulated/floor/wood/alt/tile
+ icon_state = "wood_tile"
+ initial_flooring = /decl/flooring/wood/alt/tile
+
+/turf/simulated/floor/wood/alt/tile/broken
+ icon_state = "wood_tile-broken0" // This gets changed when spawned.
+
+/turf/simulated/floor/wood/alt/tile/broken/LateInitialize()
+ . = ..()
+ break_tile()
+
+/turf/simulated/floor/wood/alt/panel
+ icon_state = "wood_panel"
+ initial_flooring = /decl/flooring/wood/alt/panel
+
+/turf/simulated/floor/wood/alt/panel/broken
+ icon_state = "wood_panel-broken0" // This gets changed when spawned.
+
+/turf/simulated/floor/wood/alt/panel/broken/LateInitialize()
+ . = ..()
+ break_tile()
+
+/turf/simulated/floor/wood/alt/parquet
+ icon_state = "wood_parquet"
+ initial_flooring = /decl/flooring/wood/alt/parquet
+
+/turf/simulated/floor/wood/alt/parquet/broken
+ icon_state = "wood_parquet-broken0" // This gets changed when spawned.
+
+/turf/simulated/floor/wood/alt/parquet/broken/LateInitialize()
+ . = ..()
break_tile()
- return ..()
/turf/simulated/floor/grass
name = "grass patch"
diff --git a/code/game/turfs/simulated/floor_icon.dm b/code/game/turfs/simulated/floor_icon.dm
index 420d8628b5..82153557a8 100644
--- a/code/game/turfs/simulated/floor_icon.dm
+++ b/code/game/turfs/simulated/floor_icon.dm
@@ -75,7 +75,10 @@ var/image/no_ceiling_image = null
icon_state = "dmg[rand(1,4)]"
else if(flooring)
if(!isnull(broken) && (flooring.flags & TURF_CAN_BREAK))
- add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-broken-[broken]","broken[broken]"))
+ if(istype(src, /turf/simulated/floor/wood))
+ add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-broken-[broken]","[flooring.icon_base]-broken[broken]"))
+ else
+ add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-broken-[broken]","broken[broken]"))
if(!isnull(burnt) && (flooring.flags & TURF_CAN_BURN))
add_overlay(flooring.get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","burned[burnt]"))
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index f2e4ffd67a..b7b494ae65 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -76,22 +76,12 @@
BP_L_LEG = skip_body & EXAMINE_SKIPLEGS,
BP_R_LEG = skip_body & EXAMINE_SKIPLEGS)
- var/datum/gender/T = gender_datums[get_visible_gender()]
+ var/gender_hidden = (skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE)
+ var/gender_key = get_visible_gender(user, gender_hidden)
- if((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE)) //big suits/masks/helmets make it hard to tell their gender
- T = gender_datums[PLURAL]
-
- else if(species && species.ambiguous_genders)
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(H.species && !istype(species, H.species))
- T = gender_datums[PLURAL]// Species with ambiguous_genders will not show their true gender upon examine if the examiner is not also the same species.
- if(!(issilicon(user) || isobserver(user))) // Ghosts and borgs are all knowing
- T = gender_datums[PLURAL]
-
- if(!T)
- // Just in case someone VVs the gender to something strange. It'll runtime anyway when it hits usages, better to CRASH() now with a helpful message.
- CRASH("Gender datum was null; key was '[((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE)) ? PLURAL : gender]'")
+ var/datum/gender/T = gender_datums[gender_key]
+ if (!T)
+ CRASH({"Null gender datum on examine: mob="[src]",hidden="[gender_hidden]",key="[gender_key]",bio="[gender]",id="[identifying_gender]""})
var/name_ender = ""
if(!((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE)))
@@ -144,7 +134,7 @@
LAZYADD(pocket_msg, r_store_message)
if(LAZYLEN(pocket_msg))
tie_msg += " Near the waist it has [english_list(pocket_msg)]."
-
+
if(w_uniform.blood_DNA)
msg += "[T.He] [T.is] wearing [bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]"
else
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index eeee042284..692a3cb42f 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -854,13 +854,25 @@
remoteview_target = null
reset_view(0)
-/mob/living/carbon/human/get_visible_gender()
- if(wear_suit && wear_suit.flags_inv & HIDEJUMPSUIT && ((head && head.flags_inv & HIDEMASK) || wear_mask))
- return PLURAL //plural is the gender-neutral default
- if(species)
- if(species.ambiguous_genders)
- return PLURAL // regardless of what you're wearing, your gender can't be figured out
- return get_gender()
+/mob/living/carbon/human/get_visible_gender(mob/user, force)
+ switch(force)
+ if(VISIBLE_GENDER_FORCE_PLURAL)
+ return PLURAL
+ if(VISIBLE_GENDER_FORCE_IDENTIFYING)
+ return get_gender()
+ if(VISIBLE_GENDER_FORCE_BIOLOGICAL)
+ return gender
+ else
+ if((wear_mask || (head?.flags_inv & HIDEMASK)) && (wear_suit?.flags_inv & HIDEJUMPSUIT))
+ return PLURAL
+ if(species?.ambiguous_genders && user)
+ if(ishuman(user))
+ var/mob/living/carbon/human/human = user
+ if(!istype(human.species, species))
+ return PLURAL
+ else if(!isobserver(user) && !issilicon(user))
+ return PLURAL
+ return get_gender()
/mob/living/carbon/human/proc/increase_germ_level(n)
if(gloves)
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 9293eec473..c3eedab5ec 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -170,7 +170,7 @@
// Wind makes it easier or harder to move, depending on if you're with or against the wind.
// I don't like that so I'm commenting it out :)
- // VOREstation Edit Start
+ // VOREstation Edit Start
/*
if((T.is_outdoors()) && (T.z <= SSplanets.z_to_planet.len))
var/datum/planet/P = SSplanets.z_to_planet[z]
@@ -292,5 +292,5 @@
/mob/living/carbon/human/set_dir(var/new_dir)
. = ..()
- if(. && species.tail)
+ if(. && (species.tail || tail_style))
update_tail_showing()
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 248439381c..e793180f16 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -90,7 +90,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
#define L_HAND_LAYER 28 //Left-hand item
#define R_HAND_LAYER 29 //Right-hand item
#define WING_LAYER 30 //Wings or protrusions over the suit.
-#define TAIL_LAYER_ALT 31 //Modified tail-sprite layer. Tend to be larger.
+#define TAIL_NORTH_LAYER_ALT 31 //Modified tail-sprite layer. Tend to be larger.
#define MODIFIER_EFFECTS_LAYER 32 //Effects drawn by modifiers
#define FIRE_LAYER 33 //'Mob on fire' overlay layer
#define MOB_WATER_LAYER 34 //'Mob submerged' overlay layer
@@ -98,7 +98,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
#define TOTAL_LAYERS 35 //VOREStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list.
//////////////////////////////////
-#define GET_TAIL_LAYER (dir == NORTH ? TAIL_NORTH_LAYER : TAIL_SOUTH_LAYER)
+#define GET_TAIL_LAYER (dir == SOUTH ? TAIL_SOUTH_LAYER : TAIL_NORTH_LAYER)
/mob/living/carbon/human
var/list/overlays_standing[TOTAL_LAYERS]
@@ -836,7 +836,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
suit_sprite = INV_SUIT_DEF_ICON
var/icon/c_mask = null
- var/tail_is_rendered = (overlays_standing[TAIL_NORTH_LAYER] || overlays_standing[TAIL_SOUTH_LAYER])
+ var/tail_is_rendered = (overlays_standing[TAIL_NORTH_LAYER] || overlays_standing[TAIL_NORTH_LAYER_ALT] || overlays_standing[TAIL_SOUTH_LAYER])
var/valid_clip_mask = tail_style?.clip_mask
if(tail_is_rendered && valid_clip_mask && !(istype(suit) && suit.taurized)) //Clip the lower half of the suit off using the tail's clip mask for taurs since taur bodies aren't hidden.
@@ -954,9 +954,12 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
return
remove_layer(TAIL_NORTH_LAYER)
+ remove_layer(TAIL_NORTH_LAYER_ALT)
remove_layer(TAIL_SOUTH_LAYER)
- var tail_layer = GET_TAIL_LAYER
+ var/tail_layer = GET_TAIL_LAYER
+ if(tail_alt && tail_layer == TAIL_NORTH_LAYER)
+ tail_layer = TAIL_NORTH_LAYER_ALT
var/image/tail_image = get_tail_image()
if(tail_image)
@@ -996,9 +999,12 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
/mob/living/carbon/human/proc/set_tail_state(var/t_state)
var/tail_layer = GET_TAIL_LAYER
+ if(tail_alt && tail_layer == TAIL_NORTH_LAYER)
+ tail_layer = TAIL_NORTH_LAYER_ALT
var/image/tail_overlay = overlays_standing[tail_layer]
remove_layer(TAIL_NORTH_LAYER)
+ remove_layer(TAIL_NORTH_LAYER_ALT)
remove_layer(TAIL_SOUTH_LAYER)
if(tail_overlay)
diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm
index dae0fe6294..a2d7d216bf 100644
--- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm
+++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm
@@ -213,6 +213,7 @@
// Since they have bellies, add verbs to toggle settings on them.
verbs |= /mob/living/simple_mob/proc/toggle_digestion
verbs |= /mob/living/simple_mob/proc/toggle_fancygurgle
+ verbs |= /mob/living/proc/vertical_nom
//A much more detailed version of the default /living implementation
var/obj/belly/B = new /obj/belly(src)
diff --git a/code/modules/projectiles/guns/energy/stun_vr.dm b/code/modules/projectiles/guns/energy/stun_vr.dm
index b0bfd53e46..3ddc43986c 100644
--- a/code/modules/projectiles/guns/energy/stun_vr.dm
+++ b/code/modules/projectiles/guns/energy/stun_vr.dm
@@ -3,4 +3,7 @@
fire_delay = 4
/obj/item/weapon/gun/energy/stunrevolver
- charge_cost = 400
\ No newline at end of file
+ charge_cost = 400
+
+/obj/item/weapon/gun/energy/taser/mounted/cyborg
+ charge_cost = 160
\ No newline at end of file
diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm
index 5a92072756..3435541f19 100644
--- a/code/modules/vore/eating/bellymodes_vr.dm
+++ b/code/modules/vore/eating/bellymodes_vr.dm
@@ -124,7 +124,8 @@
formatted_message = replacetext(formatted_message, "%pred", owner)
formatted_message = replacetext(formatted_message, "%prey", M)
formatted_message = replacetext(formatted_message, "%countprey", absorbed_count)
- to_chat(M, "[formatted_message]")
+ if(formatted_message)
+ to_chat(M, "[formatted_message]")
else
if(digest_mode == DM_DIGEST && !M.digestable)
EL = emote_lists[DM_HOLD] // Use Hold's emote list if we're indigestible
@@ -136,7 +137,8 @@
formatted_message = replacetext(formatted_message, "%prey", M)
formatted_message = replacetext(formatted_message, "%countprey", living_count)
formatted_message = replacetext(formatted_message, "%count", contents.len)
- to_chat(M, "[formatted_message]")
+ if(formatted_message)
+ to_chat(M, "[formatted_message]")
if(to_update)
updateVRPanels()
diff --git a/icons/obj/stacks.dmi b/icons/obj/stacks.dmi
index 6a70a2982d..67a370b219 100644
Binary files a/icons/obj/stacks.dmi and b/icons/obj/stacks.dmi differ
diff --git a/icons/turf/flooring/carpet.dmi b/icons/turf/flooring/carpet.dmi
index f668ae8943..a66db7af48 100644
Binary files a/icons/turf/flooring/carpet.dmi and b/icons/turf/flooring/carpet.dmi differ
diff --git a/icons/turf/flooring/wood.dmi b/icons/turf/flooring/wood.dmi
index eb91333673..afec20c851 100644
Binary files a/icons/turf/flooring/wood.dmi and b/icons/turf/flooring/wood.dmi differ
diff --git a/icons/turf/flooring/wood_vr.dmi b/icons/turf/flooring/wood_vr.dmi
index d6024f3de0..f072969e54 100644
Binary files a/icons/turf/flooring/wood_vr.dmi and b/icons/turf/flooring/wood_vr.dmi differ
diff --git a/maps/groundbase/gb-z2.dmm b/maps/groundbase/gb-z2.dmm
index 48d050d8cf..b148fac3b2 100644
--- a/maps/groundbase/gb-z2.dmm
+++ b/maps/groundbase/gb-z2.dmm
@@ -466,7 +466,7 @@
/turf/simulated/floor/lino,
/area/groundbase/civilian/chapel/office)
"bl" = (
-/turf/simulated/floor/carpet/deco,
+/turf/simulated/floor/carpet/geo,
/area/groundbase/civilian/kitchen/backroom)
"bn" = (
/obj/machinery/door/airlock{
@@ -2397,7 +2397,7 @@
/obj/machinery/light{
dir = 4
},
-/turf/simulated/floor/carpet/deco,
+/turf/simulated/floor/carpet/geo,
/area/groundbase/civilian/kitchen/backroom)
"gZ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -2493,7 +2493,7 @@
/obj/structure/bed/chair/sofa/black,
/obj/machinery/alarm,
/obj/effect/landmark/start/chef,
-/turf/simulated/floor/carpet/deco,
+/turf/simulated/floor/carpet/geo,
/area/groundbase/civilian/kitchen/backroom)
"hp" = (
/obj/structure/bed/chair/sofa/pew/left{
@@ -4272,7 +4272,7 @@
/obj/machinery/light{
dir = 4
},
-/turf/simulated/floor/carpet/deco,
+/turf/simulated/floor/carpet/geo,
/area/groundbase/civilian/kitchen/backroom)
"mo" = (
/obj/structure/table/woodentable,
@@ -4529,7 +4529,7 @@
/area/groundbase/civilian/janitor)
"nf" = (
/obj/structure/table/wooden_reinforced,
-/turf/simulated/floor/carpet/deco,
+/turf/simulated/floor/carpet/geo,
/area/groundbase/civilian/kitchen/backroom)
"ng" = (
/obj/machinery/camera/network/research{
@@ -10608,7 +10608,7 @@
/area/groundbase/medical/psych)
"EW" = (
/obj/structure/bed/chair/sofa/right/black,
-/turf/simulated/floor/carpet/deco,
+/turf/simulated/floor/carpet/geo,
/area/groundbase/civilian/kitchen/backroom)
"EX" = (
/obj/structure/closet/secure_closet/quartermaster,
@@ -13850,7 +13850,7 @@
/obj/structure/bed/chair/sofa/black{
dir = 8
},
-/turf/simulated/floor/carpet/deco,
+/turf/simulated/floor/carpet/geo,
/area/groundbase/civilian/kitchen/backroom)
"NU" = (
/obj/structure/sign/painting/library_secure{
@@ -13949,7 +13949,7 @@
/obj/structure/bed/chair/sofa/left/black{
dir = 8
},
-/turf/simulated/floor/carpet/deco,
+/turf/simulated/floor/carpet/geo,
/area/groundbase/civilian/kitchen/backroom)
"Oi" = (
/obj/structure/disposalpipe/tagger{
@@ -13971,7 +13971,7 @@
layer = 3.3;
pixel_y = -27
},
-/turf/simulated/floor/carpet/deco,
+/turf/simulated/floor/carpet/geo,
/area/groundbase/civilian/kitchen/backroom)
"Ok" = (
/obj/machinery/power/apc{
@@ -17751,7 +17751,7 @@
/area/groundbase/cargo/office)
"Zi" = (
/obj/machinery/firealarm,
-/turf/simulated/floor/carpet/deco,
+/turf/simulated/floor/carpet/geo,
/area/groundbase/civilian/kitchen/backroom)
"Zk" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
diff --git a/maps/stellardelight/overmap.dmm b/maps/stellardelight/overmap.dmm
index 2890f0159b..8edb64c502 100644
--- a/maps/stellardelight/overmap.dmm
+++ b/maps/stellardelight/overmap.dmm
@@ -9,7 +9,7 @@
/turf/unsimulated/map,
/area/overmap)
"I" = (
-/turf/simulated/floor/carpet/deco,
+/turf/simulated/floor/carpet/geo,
/area/space)
"J" = (
/obj/effect/overmap/bluespace_rift,
diff --git a/maps/stellardelight/stellar_delight3.dmm b/maps/stellardelight/stellar_delight3.dmm
index 418fa680b0..d792ad77b3 100644
--- a/maps/stellardelight/stellar_delight3.dmm
+++ b/maps/stellardelight/stellar_delight3.dmm
@@ -8114,7 +8114,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
},
-/turf/simulated/floor/carpet/deco,
+/turf/simulated/floor/carpet/geo,
/area/ai)
"Dy" = (
/obj/machinery/atmospherics/pipe/simple/hidden/black,