diff --git a/code/game/objects/items/toys/toys_yw.dm b/code/game/objects/items/toys/toys_yw.dm
index b312d70341..7d9869ef84 100644
--- a/code/game/objects/items/toys/toys_yw.dm
+++ b/code/game/objects/items/toys/toys_yw.dm
@@ -107,3 +107,28 @@
slot_r_hand_str = 'icons/mob/items/righthand_toys_yw.dmi',
slot_back_str = 'icons/mob/toy_worn_yw.dmi',
slot_head_str = 'icons/mob/toy_worn_yw.dmi')
+
+/obj/item/toy/plushie/jeans
+ name = "Chocodoggo"
+ desc = "This plushie looks like a puppified version of Jeanne Petite. It seems as though it is watching you intently..."
+ icon_state = "Jeans_plushie"
+ item_state = "Jeans_plushie"
+ slot_flags = SLOT_HEAD
+ pokephrase = "pokerface"
+ icon = 'icons/vore/custom_items_yw.dmi'
+ item_icons = list(
+ slot_head_str = 'icons/vore/custom_onmob_yw.dmi')
+
+
+ rename_plushie()
+ set name = "Name Plushie"
+ set category = "Object"
+ set desc = "Give your plushie a cute name!"
+ var/mob/M = usr
+ if(!M.mind)
+ return 0
+
+ if(src && !M.stat && in_range(M,src))
+ to_chat(M, "You cannot rename Jeans! You hug her anyway.")
+ return 1
+
diff --git a/code/modules/client/preference_setup/loadout/loadout_fluffitems_yw.dm b/code/modules/client/preference_setup/loadout/loadout_fluffitems_yw.dm
index b9bd6b51ec..f9fd488da5 100644
--- a/code/modules/client/preference_setup/loadout/loadout_fluffitems_yw.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_fluffitems_yw.dm
@@ -641,6 +641,21 @@
description = "You're such a goggle head!"
ckeywhitelist = list("kbraid")
character_name = list("Eili") //Character name. this variable is required, or the item doesn't show in loadout. Change to "character_name = null" if not character restricted.
+
+/datum/gear/fluff/jeanscrystelchime
+ path = /obj/item/clothing/accessory/fluff/jeanscrystelchime
+ display_name = "valhollide chimes"
+ description = "a precious gift from a precious friend"
+ ckeywhitelist = list("kbraid")
+ character_name = list("Eili") //Character name. this variable is required, or the item doesn't show in loadout. Change to "character_name = null" if not character restricted.
+
+/datum/gear/fluff/jeansplushie
+ path = /obj/item/toy/plushie/jeans
+ display_name = "Jeans Plushi"
+ description = "Pupper Pitite"
+ ckeywhitelist = list("dopiotl","kbraid")
+ character_name = list("Jeanne Petite","Eili","Braid")
+
//Braid
/datum/gear/fluff/kbraidoutfit
path = /obj/item/clothing/suit/storage/hooded/fluff/kbraid
diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno_yw.dm b/code/modules/client/preference_setup/loadout/loadout_xeno_yw.dm
index d20efa7e85..ab7e3c7004 100644
--- a/code/modules/client/preference_setup/loadout/loadout_xeno_yw.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_xeno_yw.dm
@@ -77,6 +77,11 @@
path = /obj/item/clothing/suit/storage/seromi/beltcloak/jobs/jani
allowed_roles = list("Janitor")
+/datum/gear/suit/dept/beltcloak/rd
+ display_name = "research director belted cloak (Teshari)"
+ path = /obj/item/clothing/suit/storage/seromi/beltcloak/jobs/rd
+ allowed_roles = list("Research Director")
+
/datum/gear/suit/dept/cloak/command/New()
..()
var/list/cloaks = list()
@@ -213,6 +218,14 @@
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
+/datum/gear/suit/dept/beltcloak/rd/New()
+ ..()
+ var/list/cloaks = list()
+ for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/rd,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/rd/black))
+ var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/rd/cloak_type = cloak
+ cloaks[initial(cloak_type.name)] = cloak_type
+ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
+
/datum/gear/uniform/harness_white
display_name = "white gear harness (Full Body Prosthetic, Diona)"
path = /obj/item/clothing/under/harness_white
diff --git a/code/modules/clothing/suits/aliens/seromi_yw.dm b/code/modules/clothing/suits/aliens/seromi_yw.dm
index f8e50f04e5..3213daffc7 100644
--- a/code/modules/clothing/suits/aliens/seromi_yw.dm
+++ b/code/modules/clothing/suits/aliens/seromi_yw.dm
@@ -571,4 +571,15 @@
name = "janitor belted cloak"
desc = "A soft Teshari cloak made for the Janitor"
icon_state = "tesh_beltcloak_jani"
- item_state = "tesh_beltcloak_jani"
\ No newline at end of file
+ item_state = "tesh_beltcloak_jani"
+
+/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/rd
+ name = "research director belted cloak"
+ desc = "A soft Teshari cloak made for the Research Director"
+ icon_state = "tesh_beltcloak_rd"
+ item_state = "tesh_beltcloak_rd"
+/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/rd/black
+ name = "research director belted cloak (black)"
+ desc = "A soft Teshari cloak made for the Research Director"
+ icon_state = "tesh_beltcloak_rd2"
+ item_state = "tesh_beltcloak_rd2"
\ No newline at end of file
diff --git a/code/modules/clothing/suits/hooded_yw.dm b/code/modules/clothing/suits/hooded_yw.dm
index a9f800a28f..daa6d0d9f5 100644
--- a/code/modules/clothing/suits/hooded_yw.dm
+++ b/code/modules/clothing/suits/hooded_yw.dm
@@ -47,4 +47,10 @@
icon_state = "snowsuit_science"
hoodtype = /obj/item/clothing/head/hood/winter/snowsuit/science
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
- allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, /obj/item/device/analyzer,/obj/item/stack/medical, /obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray, /obj/item/device/healthanalyzer,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle)
\ No newline at end of file
+ allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, /obj/item/device/analyzer,/obj/item/stack/medical, /obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray, /obj/item/device/healthanalyzer,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle)
+
+/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/get_worn_icon_file(var/body_type, var/slot_name, var/default_icon, var/inhands)
+ if(body_type == SPECIES_TESHARI)
+ if(!inhands)
+ return 'icons/mob/species/seromi/suit_yw.dmi'
+ ..()
diff --git a/code/modules/economy/price_list_yw.dm b/code/modules/economy/price_list_yw.dm
index 893af8f6d8..0cb7bac74f 100644
--- a/code/modules/economy/price_list_yw.dm
+++ b/code/modules/economy/price_list_yw.dm
@@ -1,2 +1,5 @@
/obj/item/weapon/storage/fancy/cigarettes/yw/mauser
- price_tag = 18
\ No newline at end of file
+ price_tag = 18
+
+/datum/reagent/drink/antidepressant_yw
+ price_tag = 3
diff --git a/code/modules/food/drinkingglass/metaglass_yw.dm b/code/modules/food/drinkingglass/metaglass_yw.dm
new file mode 100644
index 0000000000..8fd61335d3
--- /dev/null
+++ b/code/modules/food/drinkingglass/metaglass_yw.dm
@@ -0,0 +1,5 @@
+
+/datum/reagent/drink/antidepressant_yw
+ glass_icon_state = "antidepressant_yw"
+ glass_center_of_mass = list("x"=16, "y"=5)
+ glass_icon_file = 'icons/obj/drinks_yw.dmi'
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/animals_yw.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/animals_yw.dm
index 98a2682aa1..72c58fcbb7 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/space/animals_yw.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/animals_yw.dm
@@ -190,3 +190,227 @@
layer = MOB_LAYER
if(client)
client.time_died_as_mouse = world.time
+
+/mob/living/simple_mob/animal/passive/snowbull
+ name = "Snowbull"
+ desc = "Some white furred bull with a single curved horn."
+ tt_desc = "legionis gayus"
+ icon = 'icons/mob/cryogaia64x64.dmi'
+ icon_state = "snowbull"
+ icon_living = "snowbull"
+ icon_dead = "snowbull-dead"
+ maxHealth = 300
+ health = 300
+ faction = "snowbull"
+ pixel_x = -16
+ special_attack_min_range = 3
+ special_attack_max_range = 8
+ special_attack_cooldown = 10 SECONDS
+ var/charging = 0
+ var/charging_warning = 1 SECONDS
+ minbodytemp = 0
+ maxbodytemp = 1000
+ min_oxy = 0 // Oxygen in moles, minimum, 0 is 'no minimum'
+ max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum'
+ min_tox = 0 // Phoron min
+ max_tox = 0 // Phoron max
+ min_co2 = 0 // CO2 min
+ max_co2 = 0 // CO2 max
+ min_n2 = 0 // N2 min
+ max_n2 = 0 // N2 max
+ attack_sharp = 1
+ melee_damage_lower = 15
+ melee_damage_upper = 20
+
+ ai_holder_type = /datum/ai_holder/simple_mob/snowbull
+
+/mob/living/simple_mob/animal/passive/snowbull/update_icon()
+ if(charging)
+ icon_state = "[icon_living]-charge"
+ ..()
+
+
+/mob/living/simple_mob/animal/passive/snowbull/do_special_attack(atom/A)
+ set waitfor = FALSE
+ set_AI_busy(TRUE)
+ charging = 1
+ movement_shake_radius = 3
+ movement_sound = 'sound/effects/mob_effects/snowbull_charge.ogg'
+ visible_message(span("danger","\The [src] prepares to charge at \the [A]!"))
+ update_icon()
+ sleep(charging_warning)
+ var/chargeturf = get_turf(A)
+ if(!chargeturf)
+ return
+ var/chargedir = get_dir(src, chargeturf)
+ set_dir(chargedir)
+ var/turf/T = get_ranged_target_turf(chargeturf, chargedir, isDiagonal(chargedir) ? 1 : 2)
+ if(!T)
+ charging = 0
+ movement_shake_radius = null
+ movement_sound = null
+ update_icon()
+ visible_message(span("danger", "\The [src] desists from charging at \the [A]"))
+ return
+ for(var/distance = get_dist(src.loc, T), src.loc!=T && distance>0, distance--)
+ var/movedir = get_dir(src.loc, T)
+ var/moveturf = get_step(src.loc, movedir)
+ SelfMove(moveturf, movedir, 2)
+ sleep(2 * world.tick_lag) //Speed it will move, default is two server ticks
+ sleep((get_dist(src, T) * 2.2))
+ charging = 0
+ update_icon()
+ movement_shake_radius = 0
+ movement_sound = null
+ set_AI_busy(FALSE)
+
+/mob/living/simple_mob/animal/passive/snowbull/Bump(atom/movable/AM)
+ if(charging)
+ if(istype(AM, /mob/living))
+ var/mob/living/M = AM
+ visible_message("[src] rams [AM]!")
+ M.Stun(5)
+ M.Weaken(3)
+ var/throwdir = pick(turn(dir, 45), turn(dir, -45))
+ M.throw_at(get_step(src.loc, throwdir), 1, 1, src)
+ runOver(M) // Actually should not use this, placeholder
+ if(istype(AM, /obj/structure))
+ if(istype(AM, /obj/structure/window))
+ var/obj/structure/window/window = AM
+ window.hit(80) //Shatters reinforced windows
+ else if(istype(AM, /obj/structure/table))
+ var/obj/structure/table/table = AM
+ var/tableflipdir = pick(turn(dir, 90), turn(dir, -90))
+ if(!table.flip(tableflipdir)) //If table don't gets flipped just generic attack it
+ AM.attack_generic(src, 20, "rams")
+ else if(istype(AM, /obj/structure/closet))
+ var/obj/structure/closet/closet = AM
+ closet.throw_at_random(0, 2, 2)
+ closet.break_open() //Lets not destroy closets that easily, instead just open it
+ else
+ AM.attack_generic(src, 20, "rams") // Otherwise just attack_generic that structure
+ if(istype(AM, /turf/simulated/wall))
+ var/turf/simulated/wall/wall = AM
+ wall.take_damage(20)
+ if(istype(AM, /obj/machinery))
+ var/obj/machinery/machinery = AM
+ machinery.attack_generic(src, 20)
+ ..()
+
+/mob/living/simple_mob/animal/passive/snowbull/proc/runOver(var/mob/living/M)
+ if(istype(M))
+ visible_message("[src] rams [M] over!")
+ playsound(src, 'sound/effects/splat.ogg', 50, 1)
+ var/damage = rand(3,4)
+ M.apply_damage(2 * damage, BRUTE, BP_HEAD)
+ M.apply_damage(2 * damage, BRUTE, BP_TORSO)
+ M.apply_damage(0.5 * damage, BRUTE, BP_L_LEG)
+ M.apply_damage(0.5 * damage, BRUTE, BP_R_LEG)
+ M.apply_damage(0.5 * damage, BRUTE, BP_L_ARM)
+ M.apply_damage(0.5 * damage, BRUTE, BP_R_ARM)
+ blood_splatter(src, M, 1)
+
+/mob/living/simple_mob/animal/passive/snowbull/handle_special()
+ if(ai_holder)
+ if(istype(ai_holder, /datum/ai_holder/simple_mob/snowbull))
+ var/datum/ai_holder/simple_mob/snowbull/changedAI = ai_holder
+ var/mobtension = 0
+ mobtension = get_tension() //Check for their tension, based on dangerous mobs and allies nearby
+ if(mobtension > 170)
+ changedAI.untrusting = TRUE
+ if(mobtension > 270)
+ changedAI.untrusting = 2
+ if(mobtension < 170)
+ changedAI.untrusting = FALSE
+ var/beforehealth = icon_living
+ var/healthpercent = health/maxHealth
+ switch(healthpercent)
+ if(0.25 to 0)
+ icon_living = "snowbull-25"
+ if(0.50 to 0.26)
+ icon_living = "snowbull-50"
+ if(0.75 to 0.51)
+ icon_living = "snowbull-75"
+ if(0.76 to INFINITY)
+ icon_living = "snowbull-100"
+ if(beforehealth != icon_living)
+ update_icon()
+
+/datum/ai_holder/simple_mob/snowbull
+ hostile = TRUE //Not actually hostile but neede for a check otherwise it won't work
+ retaliate = TRUE
+ cooperative = TRUE
+ wander_delay = 12
+ can_breakthrough = TRUE
+ violent_breakthrough = TRUE
+ lose_target_timeout = 40 SECONDS //How much time till they forget who attacked them.
+ var/untrusting = FALSE //This will make the mob check other mobs if they're very dangerous or has intent to harm them.
+ threaten = TRUE //Threaten to attack the enemy.
+ threaten_delay = 7 SECONDS
+ threaten_timeout = 0 SECONDS //we don't want to attack immediately when they get back, only if they don't behave after we warn
+ can_flee = FALSE //No, we don't flee, we attack back.
+
+/datum/ai_holder/simple_mob/snowbull/find_target(list/possible_targets, has_targets_list)
+ ai_log("find_target() : Entered.", AI_LOG_TRACE)
+ . = list()
+ if(!has_targets_list)
+ possible_targets = list_targets()
+ for(var/possible_target in possible_targets)
+ var/target_threatlevel
+ if(istype(possible_target, /atom/movable)) //Test
+ var/atom/movable/threatener = possible_target
+ target_threatlevel = threatener.get_threat(holder)
+ if(checkthreatened(possible_target, target_threatlevel)) //won't attack anything that ain't a big threat
+ if(can_attack(possible_target)) // Can we attack it?
+ . += possible_target
+ var/new_target = pick_target(.)
+ give_target(new_target)
+ return new_target
+
+/datum/ai_holder/simple_mob/snowbull/proc/checkthreatened(var/possible_target, var/target_threatlevel = 0)
+ if(check_attacker(possible_target))
+ return TRUE
+ if(untrusting == 1 && target_threatlevel > 130 && possible_target in range(5))
+ return TRUE
+ if(untrusting > 1 && target_threatlevel > 100)
+ return TRUE
+ else
+ return FALSE
+
+/datum/ai_holder/simple_mob/snowbull/threaten_target()
+ holder.face_atom(target) // Constantly face the target.
+
+ if(!threatening) // First tick.
+ threatening = TRUE
+ last_threaten_time = world.time
+ holder.visible_emote("'warning'>Huffs, reacting to the threat of [target]!")
+ //playsound(holder, holder.say_list.threaten_sound, 50, 1) // We do this twice to make the sound -very- noticable to the target.
+ //playsound(target, holder.say_list.threaten_sound, 50, 1) // Actual aim-mode also does that so at least it's consistant.
+ else // Otherwise we are waiting for them to go away or to wait long enough for escalate.
+ var/threatlevel = target.get_threat(holder)
+ if(target in list_targets() && checkthreatened(target, threatlevel)) // Are they still visible and threatening ?
+ var/should_escalate = FALSE
+
+ if(threaten_delay && last_threaten_time + threaten_delay < world.time) // Waited too long.
+ should_escalate = TRUE
+
+ if(should_escalate)
+ threatening = FALSE
+ set_stance(STANCE_APPROACH)
+ if(holder.say_list)
+ holder.visible_emote("'notice'>Gets irritated, going after [target]!")
+ else
+ return // Wait a bit.
+
+ else // They left, or so we think.
+ if(last_threaten_time + threaten_timeout < world.time) // They've been gone long enough, probably safe to stand down
+ threatening = FALSE
+ set_stance(STANCE_IDLE)
+ holder.visible_emote("'notice'>calms down, lowering down their horns")
+ if(holder.say_list)
+ holder.ISay(safepick(holder.say_list.say_stand_down))
+ playsound(holder, holder.say_list.stand_down_sound, 50, 1) // We do this twice to make the sound -very- noticable to the target.
+ playsound(target, holder.say_list.stand_down_sound, 50, 1) // Actual aim-mode also does that so at least it's consistant.
+
+
+
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_yw.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_yw.dm
index 13c987a149..2d6870f4d2 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_yw.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_yw.dm
@@ -27,3 +27,25 @@
+/datum/reagent/drink/antidepressant_yw
+ name = "Antidepressant"
+ id = "antidepressant_yw"
+ description = "A soul lightenner, you can't stay sad at the taste of this."
+ taste_description = "a mixture of sweet, creamy, fruityness. The pain of life dulls a bit..."
+ color = "#ee757c" // rgb(238, 117, 124)
+
+ glass_name = "Antidepresant"
+ glass_desc = "A Bright red coktail, warm as a roaring chimney, and bright as a smile."
+
+#define ANTIDEPRESSANT_MESSAGE_DELAY 5*60*10
+
+/datum/reagent/drink/antidepresant_yw/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
+ if(volume <= 0.1 && data != -1)
+ data = -1
+ to_chat(M, "You feel nothing...")
+ else
+ if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
+ data = world.time
+ to_chat(M, "You feel soothed...")
diff --git a/code/modules/reagents/Chemistry-Recipes_yw.dm b/code/modules/reagents/Chemistry-Recipes_yw.dm
index 8cf9a31339..01206561aa 100644
--- a/code/modules/reagents/Chemistry-Recipes_yw.dm
+++ b/code/modules/reagents/Chemistry-Recipes_yw.dm
@@ -12,3 +12,10 @@
required_reagents = list("booger" = 1, "psilocybin" = 1)
result_amount = 2
+
+/datum/chemical_reaction/drinks/antidepressant_yw
+ name = "Antidepressant"
+ id = "antidepressant_yw"
+ result = "antidepressant_yw"
+ required_reagents = list ("cream" = 1, "sugar" = 1, "watermelonjuice" = 1, "orangejuice" = 1, "limejuice" = 1)
+ result_amount = 5
diff --git a/code/modules/vore/fluffstuff/custom_clothes_yw.dm b/code/modules/vore/fluffstuff/custom_clothes_yw.dm
index 20828c133b..3d442918a5 100644
--- a/code/modules/vore/fluffstuff/custom_clothes_yw.dm
+++ b/code/modules/vore/fluffstuff/custom_clothes_yw.dm
@@ -1716,6 +1716,20 @@
item_state = "kbraid_head_s"
ear_protection = 1
+/obj/item/clothing/accessory/fluff/jeanscrystelchime
+ name = "valhollide chime"
+ desc = "a set of white crystal chimes attached to a silver ring. the sound they make when they clink together is otherworldly..."
+ icon = 'icons/vore/custom_clothes_yw.dmi'
+ icon_state = "jeanscrystelchime"
+ icon_override = 'icons/vore/custom_clothes_yw.dmi'
+ item_state = "jeanscrystelchime_s"
+ overlay_state = "jeanscrystelchime_s"
+ slot_flags = ACCESSORY_SLOT_DECOR
+ w_class = ITEMSIZE_TINY
+ species_restricted = list(SPECIES_TESHARI)
+ drop_sound = 'sound/items/pickup/ring.ogg'
+ pickup_sound = 'sound/items/pickup/ring.ogg'
+
// ********
// Whiteout
// ********
@@ -1726,4 +1740,4 @@
icon_state = "gear_harness_white"
icon_override = 'icons/vore/custom_clothes_yw.dmi'
item_state = "gear_harness_white"
- body_parts_covered = 0
+ body_parts_covered = 0
\ No newline at end of file
diff --git a/code/modules/vore/fluffstuff/custom_furniture_yw.dm b/code/modules/vore/fluffstuff/custom_furniture_yw.dm
new file mode 100644
index 0000000000..f6d56e8f05
--- /dev/null
+++ b/code/modules/vore/fluffstuff/custom_furniture_yw.dm
@@ -0,0 +1,16 @@
+// ******
+// KBraid
+// ******
+/obj/structure/bed/chair/hammock_kbraid_n
+ name = "hammock"
+ desc = "A blue hammock with two white stripes along one side and a black hexagonal pattern on the other."
+ icon = 'icons/vore/custom_furniture_yw.dmi'
+ icon_state = "kbraid_hammock_upper"
+ base_icon = "kbraid_hammock_upper"
+ color = null
+ applies_material_colour = 0
+/obj/structure/hammock_kbraid_s
+ name = "hammock"
+ desc = "A blue hammock with two white stripes along one side and a black hexagonal pattern on the other."
+ icon = 'icons/vore/custom_furniture_yw.dmi'
+ icon_state = "kbraid_hammock_lower"
\ No newline at end of file
diff --git a/icons/mob/cryogaia64x64.dmi b/icons/mob/cryogaia64x64.dmi
new file mode 100644
index 0000000000..94f8a0bed1
Binary files /dev/null and b/icons/mob/cryogaia64x64.dmi differ
diff --git a/icons/mob/species/seromi/suit_yw.dmi b/icons/mob/species/seromi/suit_yw.dmi
new file mode 100644
index 0000000000..be7c859f5e
Binary files /dev/null and b/icons/mob/species/seromi/suit_yw.dmi differ
diff --git a/icons/mob/species/seromi/teshari_cloak_yw.dmi b/icons/mob/species/seromi/teshari_cloak_yw.dmi
index 70cfc6071b..42671e5548 100644
Binary files a/icons/mob/species/seromi/teshari_cloak_yw.dmi and b/icons/mob/species/seromi/teshari_cloak_yw.dmi differ
diff --git a/icons/obj/drinks_yw.dmi b/icons/obj/drinks_yw.dmi
index 9163728bf0..8c62d72652 100644
Binary files a/icons/obj/drinks_yw.dmi and b/icons/obj/drinks_yw.dmi differ
diff --git a/icons/vore/custom_clothes_yw.dmi b/icons/vore/custom_clothes_yw.dmi
index 315b086a96..4d450f0085 100644
Binary files a/icons/vore/custom_clothes_yw.dmi and b/icons/vore/custom_clothes_yw.dmi differ
diff --git a/icons/vore/custom_furniture_yw.dmi b/icons/vore/custom_furniture_yw.dmi
new file mode 100644
index 0000000000..f6298ab0fb
Binary files /dev/null and b/icons/vore/custom_furniture_yw.dmi differ
diff --git a/icons/vore/custom_items_yw.dmi b/icons/vore/custom_items_yw.dmi
index 2cb0aae253..ce76795b39 100644
Binary files a/icons/vore/custom_items_yw.dmi and b/icons/vore/custom_items_yw.dmi differ
diff --git a/icons/vore/custom_onmob_yw.dmi b/icons/vore/custom_onmob_yw.dmi
index 4a44db9bd4..eb2e2e103e 100644
Binary files a/icons/vore/custom_onmob_yw.dmi and b/icons/vore/custom_onmob_yw.dmi differ
diff --git a/maps/yw/residential/residential.dmm b/maps/yw/residential/residential.dmm
index c9be99c789..837be114df 100644
--- a/maps/yw/residential/residential.dmm
+++ b/maps/yw/residential/residential.dmm
@@ -26,6 +26,23 @@
/obj/item/weapon/storage/box/beakers,
/turf/simulated/floor/tiled/white,
/area/residential/room8)
+"aj" = (
+/obj/machinery/shower{
+ dir = 8;
+ pixel_x = -5
+ },
+/obj/structure/window/basic{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/structure/mirror{
+ pixel_y = 25
+ },
+/obj/structure/curtain/open/privacy,
+/turf/simulated/floor/tiled/freezer,
+/area/residential/room12)
"al" = (
/obj/structure/table/marble,
/obj/item/weapon/reagent_containers/food/condiment/enzyme,
@@ -136,6 +153,10 @@
},
/turf/simulated/floor/tiled,
/area/residential/corridors)
+"aD" = (
+/obj/structure/table/marble,
+/turf/simulated/floor/carpet/oracarpet,
+/area/residential/room12)
"aE" = (
/obj/machinery/door/airlock{
name = "RM1";
@@ -291,6 +312,15 @@
/obj/structure/filingcabinet/chestdrawer,
/turf/simulated/floor/carpet,
/area/residential/mansion)
+"br" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
+/turf/simulated/floor/carpet/oracarpet,
+/area/residential/room12)
"bu" = (
/obj/structure/closet,
/turf/simulated/floor/wood,
@@ -534,6 +564,9 @@
/obj/item/clothing/under/bathrobe,
/turf/simulated/floor/tiled/white,
/area/residential/mansion)
+"cL" = (
+/turf/simulated/floor/carpet/oracarpet,
+/area/residential/room12)
"cP" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
@@ -971,6 +1004,12 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/turf/simulated/floor/tiled,
/area/residential/docking_lobby)
+"fi" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room12)
"fj" = (
/obj/machinery/alarm{
dir = 8;
@@ -1177,6 +1216,13 @@
},
/turf/simulated/floor/tiled,
/area/residential/docking_lobby)
+"gk" = (
+/obj/effect/floor_decal/corner/lightorange/border{
+ pixel_y = 6
+ },
+/obj/structure/hammock_kbraid_s,
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room12)
"gl" = (
/obj/machinery/door/airlock,
/obj/machinery/door/firedoor/glass,
@@ -1278,6 +1324,15 @@
/obj/item/weapon/reagent_containers/food/condiment/enzyme,
/turf/simulated/floor/tiled/white,
/area/residential/mroom1)
+"gD" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/oracarpet,
+/area/residential/room12)
"gG" = (
/obj/structure/table/woodentable,
/obj/structure/window/basic{
@@ -2030,7 +2085,13 @@
/turf/simulated/floor/tiled/steel_ridged,
/area/residential/ship_bay)
"ko" = (
-/turf/simulated/floor/plating,
+/obj/structure/toilet{
+ dir = 4
+ },
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/freezer,
/area/residential/room12)
"kq" = (
/obj/structure/closet/cabinet,
@@ -2063,6 +2124,10 @@
},
/turf/simulated/floor/tiled,
/area/residential/docking_lobby)
+"kz" = (
+/obj/structure/table/reinforced,
+/turf/simulated/floor/carpet/oracarpet,
+/area/residential/room12)
"kA" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -2074,6 +2139,15 @@
/obj/machinery/door/firedoor/glass/hidden,
/turf/simulated/floor/tiled,
/area/residential/corridors)
+"kB" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room12)
"kC" = (
/obj/structure/cable{
d1 = 4;
@@ -2137,13 +2211,11 @@
/turf/simulated/floor/tiled,
/area/residential/mroom1)
"kS" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/plating,
+/turf/simulated/floor/tiled/old_cargo,
/area/residential/room12)
"kU" = (
/obj/machinery/door/airlock/silver,
@@ -2503,6 +2575,11 @@
},
/turf/simulated/floor/tiled/kafel_full,
/area/residential/room9)
+"mZ" = (
+/obj/structure/table/glass,
+/obj/item/modular_computer/tablet/preset/custom_loadout/advanced,
+/turf/simulated/floor/carpet/oracarpet,
+/area/residential/room12)
"na" = (
/obj/structure/table/marble,
/turf/simulated/floor/tiled/white,
@@ -3240,6 +3317,10 @@
},
/turf/simulated/floor/wood,
/area/residential/room7)
+"qW" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room12)
"qY" = (
/obj/structure/bed/chair/comfy/black{
dir = 4
@@ -3265,6 +3346,16 @@
},
/turf/simulated/floor/tiled,
/area/residential/corridors)
+"rd" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 1
+ },
+/obj/structure/table/reinforced,
+/turf/simulated/floor/carpet/oracarpet,
+/area/residential/room12)
"re" = (
/obj/structure/closet/cabinet,
/turf/simulated/floor/carpet,
@@ -3322,6 +3413,20 @@
/obj/machinery/atmospherics/unary/vent_pump/on,
/turf/simulated/floor/wood,
/area/residential/mroom2)
+"rt" = (
+/obj/structure/closet/secure_closet/freezer/fridge,
+/obj/item/weapon/reagent_containers/food/condiment/enzyme,
+/obj/item/weapon/reagent_containers/food/snacks/meat,
+/obj/item/weapon/reagent_containers/food/snacks/meat,
+/obj/item/weapon/reagent_containers/food/snacks/meat,
+/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker,
+/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,
+/obj/item/weapon/storage/box/beakers,
+/obj/item/weapon/material/knife,
+/obj/item/weapon/reagent_containers/food/condiment/flour,
+/obj/item/weapon/reagent_containers/food/condiment/flour,
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room11)
"rw" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -3507,6 +3612,16 @@
/obj/machinery/door/firedoor/glass,
/turf/simulated/floor/tiled,
/area/residential/corridors)
+"sP" = (
+/obj/structure/sink{
+ dir = 8;
+ pixel_x = -12;
+ pixel_y = 2
+ },
+/obj/structure/window/basic,
+/obj/structure/curtain/open/privacy,
+/turf/simulated/floor/tiled/freezer,
+/area/residential/room12)
"sQ" = (
/obj/structure/cable{
d1 = 4;
@@ -3632,6 +3747,9 @@
/obj/machinery/atmospherics/unary/vent_pump/on,
/turf/simulated/floor/tiled,
/area/residential/corridors)
+"tC" = (
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room12)
"tD" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
@@ -3691,6 +3809,11 @@
"tS" = (
/turf/simulated/floor/wood,
/area/residential/room10)
+"tT" = (
+/obj/structure/table/glass,
+/obj/item/toy/plushie/teshari/w_yw,
+/turf/simulated/floor/carpet/oracarpet,
+/area/residential/room12)
"tU" = (
/obj/machinery/door/airlock,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -3827,6 +3950,12 @@
/obj/machinery/vending/hydronutrients,
/turf/simulated/floor/tiled/white,
/area/residential/mroom1)
+"uC" = (
+/obj/structure/bed/chair{
+ material = null
+ },
+/turf/simulated/floor/carpet/oracarpet,
+/area/residential/room12)
"uD" = (
/obj/machinery/door/airlock,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -3848,7 +3977,10 @@
dir = 4;
pixel_x = -28
},
-/turf/simulated/floor/plating,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/old_cargo,
/area/residential/room12)
"uH" = (
/obj/structure/table/steel_reinforced,
@@ -3878,6 +4010,12 @@
/obj/machinery/light,
/turf/simulated/floor/wood,
/area/residential/mroom2)
+"uO" = (
+/obj/structure/bed/chair/bay/comfy/blue{
+ material = "plastic"
+ },
+/turf/simulated/floor/carpet/oracarpet,
+/area/residential/room12)
"uR" = (
/obj/structure/table/woodentable,
/obj/item/weapon/flame/candle,
@@ -4377,6 +4515,17 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor,
/area/residential/lobby)
+"xQ" = (
+/obj/item/clothing/under/seromi/undercoat/standard/white_grey,
+/obj/item/clothing/suit/storage/seromi/beltcloak/standard/blue_grey,
+/obj/item/clothing/glasses/fluff/avigoggles_yw,
+/obj/item/device/communicator/watch,
+/obj/item/weapon/card/id/residential/rs12,
+/obj/structure/closet/crate/plastic{
+ name = "footlocker"
+ },
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room12)
"xR" = (
/obj/structure/toilet{
dir = 8
@@ -4422,6 +4571,16 @@
},
/turf/simulated/floor/carpet/oracarpet,
/area/residential/ship_bay)
+"yd" = (
+/obj/machinery/door/window,
+/obj/structure/window/basic,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 1
+ },
+/obj/machinery/atmospherics/unary/vent_pump/on,
+/obj/structure/curtain/open/privacy,
+/turf/simulated/floor/tiled/freezer,
+/area/residential/room12)
"yf" = (
/obj/structure/disposalpipe/segment,
/turf/space,
@@ -4716,6 +4875,14 @@
/obj/item/weapon/soap/deluxe,
/turf/simulated/floor/tiled/neutral,
/area/residential/room3)
+"zS" = (
+/obj/machinery/light_switch{
+ pixel_x = 0;
+ pixel_y = 28;
+ step_y = 0
+ },
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room12)
"zT" = (
/obj/structure/closet/cabinet,
/obj/structure/window/basic{
@@ -5183,6 +5350,10 @@
},
/turf/simulated/floor/tiled,
/area/residential/room6)
+"Cs" = (
+/obj/effect/floor_decal/corner/lightorange/border/shifted,
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room12)
"Ct" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
@@ -5565,6 +5736,12 @@
},
/turf/simulated/floor/carpet,
/area/residential/room5)
+"DO" = (
+/obj/effect/floor_decal/corner/lightorange/border{
+ pixel_y = 6
+ },
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room12)
"DP" = (
/obj/structure/table/glass,
/obj/machinery/light{
@@ -6994,6 +7171,15 @@
/obj/machinery/door/firedoor/glass,
/turf/simulated/floor/plating,
/area/space)
+"Kz" = (
+/obj/machinery/recharger{
+ pixel_x = -1;
+ pixel_y = 7;
+ step_y = 0
+ },
+/obj/structure/table/reinforced,
+/turf/simulated/floor/carpet/oracarpet,
+/area/residential/room12)
"KA" = (
/obj/structure/reagent_dispensers/winevat,
/obj/machinery/atmospherics/unary/vent_pump/on{
@@ -7187,6 +7373,10 @@
},
/turf/simulated/floor/wood,
/area/residential/room4)
+"LA" = (
+/obj/structure/table/marble,
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room12)
"LD" = (
/obj/structure/table/steel_reinforced,
/obj/machinery/microwave,
@@ -8186,6 +8376,11 @@
},
/turf/simulated/floor/tiled,
/area/residential/corridors)
+"Qq" = (
+/obj/structure/table/marble,
+/obj/machinery/microwave,
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room12)
"Qt" = (
/turf/simulated/floor/carpet,
/area/residential/ship_bay)
@@ -8531,11 +8726,9 @@
/turf/simulated/floor/carpet/blue,
/area/residential/room11)
"Si" = (
-/obj/machinery/alarm{
- frequency = 1441;
- pixel_y = 22
- },
-/turf/simulated/floor/plating,
+/obj/machinery/alarm,
+/obj/structure/bed/chair/hammock_kbraid_n,
+/turf/simulated/floor/tiled/old_cargo,
/area/residential/room12)
"Sk" = (
/obj/structure/closet/crate/trashcart,
@@ -9217,6 +9410,17 @@
},
/turf/simulated/floor/wood,
/area/residential/room11)
+"Vp" = (
+/obj/structure/curtain/black,
+/obj/structure/shuttle/window,
+/turf/simulated/floor/plating/eris/under,
+/area/residential/room12)
+"Vs" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room12)
"Vv" = (
/obj/machinery/light_switch{
dir = 1;
@@ -9725,6 +9929,15 @@
/obj/machinery/door/firedoor/glass,
/turf/simulated/floor/plating,
/area/residential/docking_lobby)
+"YE" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room12)
"YF" = (
/obj/item/weapon/bedsheet/yellow,
/obj/structure/bed/padded,
@@ -10006,6 +10219,12 @@
},
/turf/simulated/floor/tiled/kafel_full,
/area/residential/room9)
+"ZL" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/old_cargo,
+/area/residential/room12)
"ZM" = (
/turf/simulated/floor/holofloor/tiled,
/area/residential/docking_lobby)
@@ -21858,15 +22077,15 @@ aZ
aZ
Hh
ko
-ko
-ko
-ko
+sP
+ZL
+qW
uG
kS
-ko
-ko
-ko
-ko
+fi
+kB
+Cs
+LA
Hh
aZ
aZ
@@ -22019,16 +22238,16 @@ aZ
aZ
aZ
Hh
-ko
-ko
-ko
-ko
-ko
-ko
-ko
-ko
-ko
-ko
+aj
+yd
+YE
+rd
+gD
+br
+cL
+aD
+Cs
+Qq
Hh
aZ
aZ
@@ -22181,16 +22400,16 @@ aZ
aZ
aZ
Hh
-ko
-ko
-ko
-ko
-ko
-ko
-ko
-ko
-ko
-ko
+tC
+DO
+tC
+tT
+cL
+cL
+uC
+aD
+Cs
+LA
Hh
aZ
aZ
@@ -22343,16 +22562,16 @@ aZ
aZ
aZ
Hh
-ko
-ko
-ko
-ko
-ko
-ko
-ko
-ko
-ko
-ko
+zS
+DO
+tC
+mZ
+uO
+cL
+uC
+aD
+Cs
+rt
Hh
aZ
aZ
@@ -22506,15 +22725,15 @@ aZ
aZ
Hh
Si
-ko
-ko
-ko
-ko
-ko
-ko
-ko
-ko
-ko
+gk
+tC
+Kz
+kz
+cL
+cL
+aD
+Cs
+LA
Hh
aZ
aZ
@@ -22667,16 +22886,16 @@ aZ
aZ
aZ
Hh
-ko
-ko
-ko
-ko
-ko
-ko
-ko
-ko
-ko
-ko
+xQ
+DO
+Vs
+tC
+tC
+tC
+tC
+Vs
+Cs
+LA
Hh
aZ
aZ
@@ -22832,10 +23051,10 @@ Hh
Hh
Hh
Hh
-Hh
-Hh
-Hh
-Hh
+Vp
+Vp
+Vp
+Vp
Hh
Hh
Hh
diff --git a/maps/yw/residential/residential_keys.dm b/maps/yw/residential/residential_keys.dm
index 736ec010a9..290cb2f24d 100644
--- a/maps/yw/residential/residential_keys.dm
+++ b/maps/yw/residential/residential_keys.dm
@@ -48,6 +48,10 @@
name = "RS11 residential key"
access = list(8011)
+/obj/item/weapon/card/id/residential/rs12
+ name = "RS12 residential key"
+ access = list(8012)
+
/obj/item/weapon/card/id/residential/rm1
name = "RM1 residential key"
access = list(8101)
@@ -217,4 +221,11 @@
display_name = "RS11 keys"
description = "residential"
ckeywhitelist = list("rouwren")
- character_name = list("Rin Deimos")
\ No newline at end of file
+ character_name = list("Rin Deimos")
+
+/datum/gear/fluff/res_key_rs12
+ path = /obj/item/weapon/card/id/residential/rs12
+ display_name = "RS12 keys"
+ description = "residential"
+ ckeywhitelist = list("kbraid")
+ character_name = list("Eili")
diff --git a/sound/effects/mob_effects/snowbull_charge.ogg b/sound/effects/mob_effects/snowbull_charge.ogg
new file mode 100644
index 0000000000..e402b8bad4
Binary files /dev/null and b/sound/effects/mob_effects/snowbull_charge.ogg differ
diff --git a/vorestation.dme b/vorestation.dme
index 6917655a3e..de0dd7fa35 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -2175,6 +2175,7 @@
#include "code\modules\food\drinkingglass\glass_types.dm"
#include "code\modules\food\drinkingglass\metaglass.dm"
#include "code\modules\food\drinkingglass\metaglass_vr.dm"
+#include "code\modules\food\drinkingglass\metaglass_yw.dm"
#include "code\modules\food\drinkingglass\serving_glasses.dm"
#include "code\modules\food\drinkingglass\shaker.dm"
#include "code\modules\food\drinkingglass\shaker_vr.dm"
@@ -3770,6 +3771,7 @@
#include "code\modules\vore\fluffstuff\custom_boxes_yw.dm"
#include "code\modules\vore\fluffstuff\custom_clothes_vr.dm"
#include "code\modules\vore\fluffstuff\custom_clothes_yw.dm"
+#include "code\modules\vore\fluffstuff\custom_furniture_yw.dm"
#include "code\modules\vore\fluffstuff\custom_items_vr.dm"
#include "code\modules\vore\fluffstuff\custom_items_yw.dm"
#include "code\modules\vore\fluffstuff\custom_mecha_vr.dm"