From 7e7aaecf245607ac9ca763f4790c7daaf1b780c3 Mon Sep 17 00:00:00 2001
From: Metis <100518708+sheepishgoat@users.noreply.github.com>
Date: Sat, 24 Aug 2024 14:59:47 -0400
Subject: [PATCH 1/6] a
---
.../game/objects/items/docility_implant.dm | 35 +++++++++++++++++++
code/__DEFINES/traits.dm | 1 +
tgstation.dme | 1 +
3 files changed, 37 insertions(+)
create mode 100644 GainStation13/code/game/objects/items/docility_implant.dm
diff --git a/GainStation13/code/game/objects/items/docility_implant.dm b/GainStation13/code/game/objects/items/docility_implant.dm
new file mode 100644
index 00000000..c2ceea8f
--- /dev/null
+++ b/GainStation13/code/game/objects/items/docility_implant.dm
@@ -0,0 +1,35 @@
+/obj/item/implant/docile
+ name = "docility implant"
+ activated = FALSE
+
+/obj/item/implant/docile/implant(mob/living/target, mob/user, silent = FALSE)
+ . = ..()
+ if(!.)
+ return
+
+ var/mob/living/carbon/human/target_human = target
+ if(!istype(target_human))
+ return
+
+ // If you have this implant, you aren't going to be doing any fighting.
+ ADD_TRAIT(target, TRAIT_WEIGHT_LOSS_IMMUNE, src)
+ ADD_TRAIT(target, TRAIT_PACIFISM, src)
+ ADD_TRAIT(target, TRAIT_CLUMSY, src)
+ ADD_TRAIT(target, TRAIT_FAT_GOOD, src)
+ ADD_TRAIT(target, TRAIT_HEAVY_SLEEPER, src)
+
+ target_human.nutri_mult += 1
+
+/obj/item/implant/docile/removed(mob/living/source, silent = FALSE, special = 0)
+ . = ..()
+ if(!.)
+ return
+
+ REMOVE_TRAIT(target, TRAIT_WEIGHT_LOSS_IMMUNE, src)
+ REMOVE_TRAIT(target, TRAIT_PACIFISM, src)
+ REMOVE_TRAIT(target, TRAIT_CLUMSY, src)
+ REMOVE_TRAIT(target, TRAIT_FAT_GOOD, src)
+ REMOVE_TRAIT(target, TRAIT_HEAVY_SLEEPER, src)
+
+ target_human.nutri_mult -= 1
+
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 91e67196..0db2431f 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -227,6 +227,7 @@
#define TRAIT_NO_MISC "no_misc"
#define TRAIT_NO_BACKPACK "no_backpack"
#define TRAIT_NO_BUCKLE "no_buckle"
+#define TRAIT_DOCILE "docile"
// common trait sources
#define TRAIT_GENERIC "generic"
diff --git a/tgstation.dme b/tgstation.dme
index d849af0c..dcc275ec 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3086,6 +3086,7 @@
#include "GainStation13\code\game\sound.dm"
#include "GainStation13\code\game\area\ruins.dm"
#include "GainStation13\code\game\objects\effects\spawners\choco_slime_delivery.dm"
+#include "GainStation13\code\game\objects\items\docility_implant.dm"
#include "GainStation13\code\game\objects\items\RCD.dm"
#include "GainStation13\code\game\objects\items\storage\bags.dm"
#include "GainStation13\code\game\turfs\closed.dm"
From ed13ced06c8a974a4d9a22de7c7ada296f1cb4e4 Mon Sep 17 00:00:00 2001
From: Metis <100518708+sheepishgoat@users.noreply.github.com>
Date: Sat, 24 Aug 2024 15:20:29 -0400
Subject: [PATCH 2/6] prefs
---
GainStation13/code/modules/client/preferences/preferences.dm | 2 ++
code/modules/client/preferences.dm | 3 +++
code/modules/client/preferences_savefile.dm | 2 ++
3 files changed, 7 insertions(+)
diff --git a/GainStation13/code/modules/client/preferences/preferences.dm b/GainStation13/code/modules/client/preferences/preferences.dm
index 7a968916..a55ef553 100644
--- a/GainStation13/code/modules/client/preferences/preferences.dm
+++ b/GainStation13/code/modules/client/preferences/preferences.dm
@@ -21,6 +21,8 @@
var/weight_gain_extreme = FALSE
///stuckage
var/stuckage = FALSE
+ /// Are items that only affect those at high weights able to affect the player?
+ var/fatness_vulnerable = FALSE
// Helplessness, a set of prefs that make things extra tough at higher weights. If set to FALSE, they won't do anything.
///What fatness level disables movement?
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index eeeb311e..798f152b 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -1070,6 +1070,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "
GS13 Gameplay Preferences
"
dat += "Stuckage (weight results in getting stuck in doors):[stuckage == TRUE ? "Enabled" : "Disabled"]
"
+ dat += "Fatness Vulnerability (Special items are able to be used on you at high weights. Usually to your detriment.):[fatness_vulnerable == TRUE ? "Enabled" : "Disabled"]
"
dat += "Extreme Weight Gain (Sprite Size scales with weight):[weight_gain_extreme == TRUE ? "Enabled" : "Disabled"]
"
dat += "GS13 Helplessness Preferences
"
@@ -2666,6 +2667,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
bot_feeding = !bot_feeding
if("stuckage")
stuckage = !stuckage
+ if("fatness_vulnerable")
+ fatness_vulnerable = !fatness_vulnerable
if("blueberry_inflation")
blueberry_inflation = !blueberry_inflation
if("max_fatness")
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index ad1f1f0a..47658fe9 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -171,6 +171,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["helplessness_clothing_back"] >> helplessness_clothing_back
S["helplessness_no_buckle"] >> helplessness_no_buckle
S["stuckage"] >> stuckage
+ S["fatness_vulnerable"] >> fatness_vulnerable
S["blueberry_inflation"] >> blueberry_inflation
@@ -325,6 +326,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["helplessness_clothing_back"], helplessness_clothing_back)
WRITE_FILE(S["helplessness_no_buckle"], helplessness_no_buckle)
WRITE_FILE(S["stuckage"], stuckage)
+ WRITE_FILE(S["fatness_vulnerable"], fatness_vulnerable)
WRITE_FILE(S["blueberry_inflation"], blueberry_inflation)
return 1
From 6a27a0758cbc6ad5caad8f827c1ce9aade56f9eb Mon Sep 17 00:00:00 2001
From: Metis <100518708+sheepishgoat@users.noreply.github.com>
Date: Sat, 24 Aug 2024 15:32:50 -0400
Subject: [PATCH 3/6] Update docility_implant.dm
---
.../game/objects/items/docility_implant.dm | 35 +++++++++++++------
1 file changed, 24 insertions(+), 11 deletions(-)
diff --git a/GainStation13/code/game/objects/items/docility_implant.dm b/GainStation13/code/game/objects/items/docility_implant.dm
index c2ceea8f..0e713dd0 100644
--- a/GainStation13/code/game/objects/items/docility_implant.dm
+++ b/GainStation13/code/game/objects/items/docility_implant.dm
@@ -1,6 +1,24 @@
/obj/item/implant/docile
name = "docility implant"
activated = FALSE
+ /// What fatness level does the target need to be for the implant to work?
+ var/required_fatness = FATNESS_LEVEL_BLOB
+ /// What traits do we want to give the implanted mob?
+ var/list/traits_list = list(
+ TRAIT_WEIGHT_LOSS_IMMUNE,
+ TRAIT_PACIFISM,
+ TRAIT_CLUMSY,
+ TRAIT_FAT_GOOD,
+ TRAIT_HEAVY_SLEEPER,
+ TRAIT_DOCILE,
+ )
+
+/obj/item/implant/docile/can_be_implanted_in(mob/living/target)
+ var/mob/living/carbon/human/target_human = target
+ if(!istype(target_human) || (target_human.fatness_real < required_fatness))
+ return FALSE
+
+ return target?.client?.prefs?.fatness_vulnerable
/obj/item/implant/docile/implant(mob/living/target, mob/user, silent = FALSE)
. = ..()
@@ -11,25 +29,20 @@
if(!istype(target_human))
return
- // If you have this implant, you aren't going to be doing any fighting.
- ADD_TRAIT(target, TRAIT_WEIGHT_LOSS_IMMUNE, src)
- ADD_TRAIT(target, TRAIT_PACIFISM, src)
- ADD_TRAIT(target, TRAIT_CLUMSY, src)
- ADD_TRAIT(target, TRAIT_FAT_GOOD, src)
- ADD_TRAIT(target, TRAIT_HEAVY_SLEEPER, src)
+ for(var/trait in trait_list)
+ ADD_TRAIT(target, trait, src)
target_human.nutri_mult += 1
+ return TRUE
/obj/item/implant/docile/removed(mob/living/source, silent = FALSE, special = 0)
. = ..()
if(!.)
return
- REMOVE_TRAIT(target, TRAIT_WEIGHT_LOSS_IMMUNE, src)
- REMOVE_TRAIT(target, TRAIT_PACIFISM, src)
- REMOVE_TRAIT(target, TRAIT_CLUMSY, src)
- REMOVE_TRAIT(target, TRAIT_FAT_GOOD, src)
- REMOVE_TRAIT(target, TRAIT_HEAVY_SLEEPER, src)
+ for(var/trait in trait_list)
+ REMOVE_TRAIT(target, trait, src)
target_human.nutri_mult -= 1
+ return TRUE
From 7f2cb565788f548851c5b4c93e3627544284388a Mon Sep 17 00:00:00 2001
From: Metis <100518708+sheepishgoat@users.noreply.github.com>
Date: Sat, 24 Aug 2024 16:28:03 -0400
Subject: [PATCH 4/6] wew
---
.../game/objects/items/docility_implant.dm | 66 ++++++++++++++++++-
.../modules/client/preferences/preferences.dm | 2 +
code/modules/client/preferences.dm | 3 +
code/modules/client/preferences_savefile.dm | 2 +
4 files changed, 70 insertions(+), 3 deletions(-)
diff --git a/GainStation13/code/game/objects/items/docility_implant.dm b/GainStation13/code/game/objects/items/docility_implant.dm
index 0e713dd0..31254192 100644
--- a/GainStation13/code/game/objects/items/docility_implant.dm
+++ b/GainStation13/code/game/objects/items/docility_implant.dm
@@ -29,7 +29,7 @@
if(!istype(target_human))
return
- for(var/trait in trait_list)
+ for(var/trait in traits_list)
ADD_TRAIT(target, trait, src)
target_human.nutri_mult += 1
@@ -40,9 +40,69 @@
if(!.)
return
- for(var/trait in trait_list)
- REMOVE_TRAIT(target, trait, src)
+ var/mob/living/carbon/human/target_human = source
+ if(!istype(target_human))
+ return
+
+ for(var/trait in traits_list)
+ REMOVE_TRAIT(target_human, trait, src)
target_human.nutri_mult -= 1
return TRUE
+
+/obj/item/implant/docile/livstock
+ name = "livestock implant"
+ traits_list = list(
+ TRAIT_WEIGHT_LOSS_IMMUNE,
+ TRAIT_PACIFISM,
+ TRAIT_CLUMSY,
+ TRAIT_FAT_GOOD,
+ TRAIT_HEAVY_SLEEPER,
+ TRAIT_DOCILE,
+ TRAIT_NO_MISC,
+ TRAIT_NORUNNING,
+ )
+
+ /// What is the name of the mob before we change it?
+ var/stored_name = ""
+ /// What name do we want to give the mob before adding the randomized number
+ var/name_to_give = "Livestock"
+
+/obj/item/implant/docile/livestock/can_be_implanted_in(mob/living/target)
+ . = ..()
+ if(!.)
+ return FALSE
+
+ return target?.client?.prefs?.extreme_fatness_vulnerable
+
+/obj/item/implant/docile/livestock/implant(mob/living/target, mob/user, silent)
+ . = ..()
+ if(!.)
+ return
+
+ var/mob/living/carbon/human/target_human = target
+ stored_name = target_human.real_name
+ var/new_name = "[name_to_give] ([rand(0,999)])"
+
+ target_human.real_name = new_name
+ target_human.name = new_name
+
+/obj/item/implant/docile/livestock/removed(mob/living/source, silent, special)
+ . = ..()
+ if(!.)
+ return FALSE
+
+ var/mob/living/carbon/human/target_human = target
+ target_human.real_name = stored_name
+ target_human.name = stored_name
+
+/obj/item/implantcase/docile
+ name = "implant case - 'Docility'"
+ desc = "A glass case containing a docility implant."
+ imp_type = /obj/item/implant/docile
+
+/obj/item/implantcase/docile
+ name = "implant case - 'Livestock'"
+ desc = "A glass case containing a livestock implant."
+ imp_type = /obj/item/implant/docile/livestock
diff --git a/GainStation13/code/modules/client/preferences/preferences.dm b/GainStation13/code/modules/client/preferences/preferences.dm
index a55ef553..4da0f2e2 100644
--- a/GainStation13/code/modules/client/preferences/preferences.dm
+++ b/GainStation13/code/modules/client/preferences/preferences.dm
@@ -23,6 +23,8 @@
var/stuckage = FALSE
/// Are items that only affect those at high weights able to affect the player?
var/fatness_vulnerable = FALSE
+ /// Similar to fatness_vulnerable, but with more extreme effects such as transformation/hypno.
+ var/extreme_fatness_vulnerable = FALSE
// Helplessness, a set of prefs that make things extra tough at higher weights. If set to FALSE, they won't do anything.
///What fatness level disables movement?
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 798f152b..a75622a1 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -1071,6 +1071,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "GS13 Gameplay Preferences
"
dat += "Stuckage (weight results in getting stuck in doors):[stuckage == TRUE ? "Enabled" : "Disabled"]
"
dat += "Fatness Vulnerability (Special items are able to be used on you at high weights. Usually to your detriment.):[fatness_vulnerable == TRUE ? "Enabled" : "Disabled"]
"
+ dat += "Extreme Fatness Vulnerability (Similar to the previous pref, but with more extreme effects such as Hyno/TF. You have been warned.):[extreme_fatness_vulnerable == TRUE ? "Enabled" : "Disabled"]
"
dat += "Extreme Weight Gain (Sprite Size scales with weight):[weight_gain_extreme == TRUE ? "Enabled" : "Disabled"]
"
dat += "GS13 Helplessness Preferences
"
@@ -2669,6 +2670,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
stuckage = !stuckage
if("fatness_vulnerable")
fatness_vulnerable = !fatness_vulnerable
+ if("extreme_fatness_vulnerable")
+ extreme_fatness_vulnerable = !extreme_fatness_vulnerable
if("blueberry_inflation")
blueberry_inflation = !blueberry_inflation
if("max_fatness")
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 47658fe9..5461d004 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -172,6 +172,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["helplessness_no_buckle"] >> helplessness_no_buckle
S["stuckage"] >> stuckage
S["fatness_vulnerable"] >> fatness_vulnerable
+ S["extreme_fatness_vulnerable"] >> extreme_fatness_vulnerable
S["blueberry_inflation"] >> blueberry_inflation
@@ -327,6 +328,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["helplessness_no_buckle"], helplessness_no_buckle)
WRITE_FILE(S["stuckage"], stuckage)
WRITE_FILE(S["fatness_vulnerable"], fatness_vulnerable)
+ WRITE_FILE(S["extreme_fatness_vulnerable"], extreme_fatness_vulnerable)
WRITE_FILE(S["blueberry_inflation"], blueberry_inflation)
return 1
From 213629229585d38175e88637eb072c8db8a29e70 Mon Sep 17 00:00:00 2001
From: Metis <100518708+sheepishgoat@users.noreply.github.com>
Date: Sat, 24 Aug 2024 16:29:32 -0400
Subject: [PATCH 5/6] Update docility_implant.dm
---
GainStation13/code/game/objects/items/docility_implant.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/GainStation13/code/game/objects/items/docility_implant.dm b/GainStation13/code/game/objects/items/docility_implant.dm
index 31254192..d1e67514 100644
--- a/GainStation13/code/game/objects/items/docility_implant.dm
+++ b/GainStation13/code/game/objects/items/docility_implant.dm
@@ -51,7 +51,7 @@
return TRUE
-/obj/item/implant/docile/livstock
+/obj/item/implant/docile/livestock
name = "livestock implant"
traits_list = list(
TRAIT_WEIGHT_LOSS_IMMUNE,
@@ -93,7 +93,7 @@
if(!.)
return FALSE
- var/mob/living/carbon/human/target_human = target
+ var/mob/living/carbon/human/target_human = source
target_human.real_name = stored_name
target_human.name = stored_name
From dd3b0229630d5cfc65498a3fb7cda5ac08042be4 Mon Sep 17 00:00:00 2001
From: Metis <100518708+sheepishgoat@users.noreply.github.com>
Date: Sat, 24 Aug 2024 18:59:19 -0400
Subject: [PATCH 6/6] the rest
---
.../game/objects/items/docility_implant.dm | 36 ++++++++++++++++---
.../code/machinery/supply_teleporter.dm | 15 ++++++++
.../den abductors/purchaseble_goodies.dm | 12 +++++++
.../lavaland_surface_syndicate_base1.dmm | 27 +++++++++-----
_maps/RandomRuins/SpaceRuins/feeders_den.dmm | 7 ++--
code/__DEFINES/traits.dm | 1 +
code/game/machinery/quantum_pad.dm | 7 ++++
code/modules/client/preferences.dm | 6 ++--
tgstation.dme | 1 +
9 files changed, 94 insertions(+), 18 deletions(-)
create mode 100644 GainStation13/code/machinery/supply_teleporter.dm
diff --git a/GainStation13/code/game/objects/items/docility_implant.dm b/GainStation13/code/game/objects/items/docility_implant.dm
index d1e67514..5cedf064 100644
--- a/GainStation13/code/game/objects/items/docility_implant.dm
+++ b/GainStation13/code/game/objects/items/docility_implant.dm
@@ -18,6 +18,9 @@
if(!istype(target_human) || (target_human.fatness_real < required_fatness))
return FALSE
+ if(HAS_TRAIT(target_human, TRAIT_DOCILE))
+ return FALSE //They probably already have an implant, they likely don't need this.
+
return target?.client?.prefs?.fatness_vulnerable
/obj/item/implant/docile/implant(mob/living/target, mob/user, silent = FALSE)
@@ -60,6 +63,7 @@
TRAIT_FAT_GOOD,
TRAIT_HEAVY_SLEEPER,
TRAIT_DOCILE,
+ TRAIT_LIVESTOCK,
TRAIT_NO_MISC,
TRAIT_NORUNNING,
)
@@ -68,6 +72,8 @@
var/stored_name = ""
/// What name do we want to give the mob before adding the randomized number
var/name_to_give = "Livestock"
+ /// How much do we want to modifiy the productivity stats of the mob's current sex organs by?
+ var/productivity_mult = 4
/obj/item/implant/docile/livestock/can_be_implanted_in(mob/living/target)
. = ..()
@@ -88,6 +94,16 @@
target_human.real_name = new_name
target_human.name = new_name
+ if(target_human?.getorganslot("testicles"))
+ var/obj/item/organ/genital/testicles/balls = target_human?.getorganslot("testicles")
+ balls.fluid_mult = balls.fluid_mult * productivity_mult
+ balls.fluid_max_volume = balls.fluid_max_volume * productivity_mult
+
+ if(target_human?.getorganslot("breasts"))
+ var/obj/item/organ/genital/breasts/boobs = target_human?.getorganslot("breasts")
+ boobs.fluid_mult = boobs.fluid_mult * productivity_mult
+ boobs.fluid_max_volume = boobs.fluid_max_volume * productivity_mult
+
/obj/item/implant/docile/livestock/removed(mob/living/source, silent, special)
. = ..()
if(!.)
@@ -97,12 +113,22 @@
target_human.real_name = stored_name
target_human.name = stored_name
-/obj/item/implantcase/docile
- name = "implant case - 'Docility'"
- desc = "A glass case containing a docility implant."
- imp_type = /obj/item/implant/docile
+ if(target_human?.getorganslot("testicles"))
+ var/obj/item/organ/genital/testicles/balls = target_human?.getorganslot("testicles")
+ balls.fluid_mult = balls.fluid_mult / productivity_mult
+ balls.fluid_max_volume = balls.fluid_max_volume / productivity_mult
+
+ if(target_human?.getorganslot("breasts"))
+ var/obj/item/organ/genital/breasts/boobs = target_human?.getorganslot("breasts")
+ boobs.fluid_mult = boobs.fluid_mult / productivity_mult
+ boobs.fluid_max_volume = boobs.fluid_max_volume / productivity_mult
/obj/item/implantcase/docile
+ name = "implant case - 'Docility'"
+ desc = "A glass case containing a docility implant. Used to make those at high weights docile."
+ imp_type = /obj/item/implant/docile
+
+/obj/item/implantcase/docile/livestock
name = "implant case - 'Livestock'"
- desc = "A glass case containing a livestock implant."
+ desc = "A glass case containing a livestock implant. Functions similar to the docility implant, but changes the implantee's name and makes them even more helpless. cannot be combined with the docility implant."
imp_type = /obj/item/implant/docile/livestock
diff --git a/GainStation13/code/machinery/supply_teleporter.dm b/GainStation13/code/machinery/supply_teleporter.dm
new file mode 100644
index 00000000..c3320363
--- /dev/null
+++ b/GainStation13/code/machinery/supply_teleporter.dm
@@ -0,0 +1,15 @@
+/obj/machinery/quantumpad/supply_only
+ name = "supply pad"
+ desc = "A modified version of the quantum pad, only able to teleport supplies and livestock."
+ circuit = /obj/item/circuitboard/machine/quantumpad/supply_only
+
+/obj/machinery/quantumpad/supply_only/check_mob_teleportability(mob/living/mob_to_check)
+ if(istype(mob_to_check, /mob/living/simple_animal))
+ return TRUE
+
+ return HAS_TRAIT(mob_to_check, TRAIT_LIVESTOCK)
+
+/obj/item/circuitboard/machine/quantumpad/supply_only
+ name = "Supply Pad (Machine Board)"
+ build_path = /obj/machinery/quantumpad/supply_only
+
diff --git a/GainStation13/code/mechanics/den abductors/purchaseble_goodies.dm b/GainStation13/code/mechanics/den abductors/purchaseble_goodies.dm
index a070abc3..1fdf85db 100644
--- a/GainStation13/code/mechanics/den abductors/purchaseble_goodies.dm
+++ b/GainStation13/code/mechanics/den abductors/purchaseble_goodies.dm
@@ -69,3 +69,15 @@
credit_cost = 1500
item_to_dispense = /obj/item/storage/box/rndboards
initial_stock = 2
+
+/datum/feeders_den_goodie/docility_implant
+ name = "Docility Implant"
+ credit_cost = 100
+ item_to_dispense = /obj/item/implantcase/docile
+ initial_stock = 5
+
+/datum/feeders_den_goodie/docility_implant/livestock
+ name = "Livestock Implant"
+ credit_cost = 250
+ item_to_dispense = /obj/item/implantcase/docile/livestock
+ initial_stock = 5
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
index 65687a2a..fda8c6fc 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
@@ -95,7 +95,7 @@
"ca" = (/obj/structure/chair/office/light{dir = 1},/obj/effect/turf_decal/bot,/obj/effect/turf_decal/stripes/line,/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral,/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/chemistry)
"cb" = (/turf/open/floor/plasteel/white/side,/area/ruin/unpowered/syndicate_lava_base/virology)
"cc" = (/obj/structure/table,/obj/item/paper_bin,/obj/item/pen,/turf/open/floor/mineral/plastitanium,/area/ruin/unpowered/syndicate_lava_base/cargo)
-"cd" = (/obj/structure/rack,/obj/item/flashlight{pixel_x = -3; pixel_y = 3},/obj/item/flashlight,/obj/effect/turf_decal/tile/brown{dir = 1},/obj/effect/turf_decal/tile/brown{dir = 4},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/cargo)
+"cd" = (/obj/effect/turf_decal/tile/brown{dir = 1},/obj/effect/turf_decal/tile/brown{dir = 4},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/cargo)
"cf" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable/yellow{icon_state = "0-2"},/obj/machinery/power/apc/syndicate{dir = 1; name = "Cargo Bay APC"; pixel_y = 24},/obj/structure/closet/emcloset/anchored,/obj/effect/turf_decal/tile/brown{dir = 1},/obj/effect/turf_decal/tile/brown{dir = 4},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/cargo)
"cg" = (/obj/structure/closet/firecloset/full{anchored = 1},/obj/effect/turf_decal/tile/brown{dir = 1},/obj/effect/turf_decal/tile/brown{dir = 4},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/cargo)
"ch" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/mineral/plastitanium,/area/ruin/unpowered/syndicate_lava_base/testlab)
@@ -222,7 +222,7 @@
"eZ" = (/obj/effect/mob_spawn/human/lavaland_syndicate{dir = 4; icon_state = "sleeper_s"},/turf/open/floor/plasteel/grimy,/area/ruin/unpowered/syndicate_lava_base/dormitories)
"fa" = (/obj/structure/cable/yellow{icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 9},/obj/effect/turf_decal/tile/brown{dir = 1},/obj/effect/turf_decal/tile/brown{dir = 4},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/main)
"fb" = (/obj/structure/bed,/obj/item/bedsheet,/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/white/side{dir = 5},/area/ruin/unpowered/syndicate_lava_base/virology)
-"fc" = (/obj/machinery/light/small{dir = 8},/obj/machinery/airalarm/syndicate{dir = 4; pixel_x = -24},/obj/effect/turf_decal/tile/brown{dir = 1},/obj/effect/turf_decal/tile/brown{dir = 8},/obj/item/stack/sheet/glass/fifty,/obj/item/stack/sheet/metal/fifty,/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/cargo)
+"fc" = (/obj/machinery/light/small{dir = 8},/obj/machinery/airalarm/syndicate{dir = 4; pixel_x = -24},/obj/effect/turf_decal/tile/brown{dir = 1},/obj/effect/turf_decal/tile/brown{dir = 8},/obj/item/stack/sheet/glass/fifty,/obj/item/stack/sheet/metal/fifty,/obj/structure/rack,/obj/item/flashlight,/obj/item/flashlight{pixel_x = -3; pixel_y = 3},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/cargo)
"fe" = (/obj/effect/turf_decal/stripes/corner,/obj/machinery/firealarm{dir = 4; pixel_x = 26},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/cargo)
"ff" = (/obj/structure/bed,/obj/item/bedsheet,/obj/machinery/light/small{dir = 1},/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel/white/side{dir = 5},/area/ruin/unpowered/syndicate_lava_base/virology)
"fh" = (/obj/structure/grille,/obj/structure/window/plastitanium,/turf/open/floor/plating,/area/ruin/unpowered/syndicate_lava_base/virology)
@@ -235,7 +235,7 @@
"fo" = (/turf/open/floor/plasteel/white/side{dir = 1},/area/ruin/unpowered/syndicate_lava_base/main)
"fq" = (/turf/closed/wall/mineral/plastitanium/explosive,/area/ruin/unpowered/syndicate_lava_base/virology)
"fr" = (/obj/machinery/airalarm/syndicate{dir = 4; pixel_x = -24},/obj/structure/sink{dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{dir = 1},/obj/structure/disposalpipe/segment{dir = 5},/turf/open/floor/plasteel/white/side{dir = 8},/area/ruin/unpowered/syndicate_lava_base/virology)
-"fs" = (/obj/machinery/door/firedoor,/obj/structure/cable/yellow{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,/obj/machinery/door/airlock/mining/glass{name = "Warehouse"; req_access_txt = "150"},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/cargo)
+"fs" = (/obj/machinery/door/firedoor,/obj/structure/cable/yellow{icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,/obj/machinery/door/airlock/mining/glass{name = "Supply Station"; req_access_txt = "150"},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/cargo)
"ft" = (/obj/structure/grille,/obj/structure/window/plastitanium,/obj/machinery/door/firedoor,/turf/open/floor/plating,/area/ruin/unpowered/syndicate_lava_base/cargo)
"fu" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 1},/obj/structure/table,/obj/item/folder/yellow,/obj/item/stack/wrapping_paper{pixel_y = 5},/obj/item/stack/packageWrap,/obj/item/hand_labeler,/obj/effect/turf_decal/tile/brown{dir = 1},/obj/effect/turf_decal/tile/brown{dir = 4},/obj/effect/turf_decal/tile/brown{dir = 8},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/cargo)
"fv" = (/obj/structure/table,/obj/item/paper_bin,/obj/item/pen,/obj/effect/turf_decal/tile/brown{dir = 1},/obj/item/stack/credits{amount = 30},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/cargo)
@@ -556,6 +556,7 @@
"nt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 9},/obj/structure/cable/yellow{icon_state = "1-8"},/obj/effect/turf_decal/tile/red{dir = 1},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"nu" = (/obj/machinery/air_sensor{frequency = 1442; id_tag = "syndie_lavaland_n2_sensor"},/turf/open/floor/plating/airless,/area/ruin/unpowered/syndicate_lava_base/engineering)
"nw" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
+"nx" = (/obj/machinery/porta_turret/syndicate{dir = 5},/turf/closed/wall/mineral/plastitanium/nodiagonal,/area/ruin/unpowered/syndicate_lava_base/cargo)
"ny" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical/glass{dir = 4; name = "Medbay"},/turf/open/floor/plasteel/white,/area/ruin/unpowered/syndicate_lava_base/medbay)
"nz" = (/turf/open/floor/plasteel/white/side{dir = 8},/area/ruin/unpowered/syndicate_lava_base/medbay)
"nB" = (/obj/machinery/atmospherics/miner/nitrogen,/obj/machinery/light/small{dir = 4},/turf/open/floor/plating/airless,/area/ruin/unpowered/syndicate_lava_base/engineering)
@@ -594,6 +595,7 @@
"oP" = (/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/testlab)
"pi" = (/obj/structure/cable/yellow{icon_state = "4-8"},/obj/effect/turf_decal/tile/red{dir = 4},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{dir = 1},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/structure/cable/yellow{icon_state = "2-4"},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"pY" = (/obj/effect/turf_decal/tile/green{dir = 1},/obj/effect/turf_decal/tile/green{dir = 4},/obj/effect/turf_decal/tile/green,/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
+"qX" = (/obj/effect/turf_decal/stripes/line{dir = 9},/turf/open/floor/engine,/area/ruin/unpowered/syndicate_lava_base/cargo)
"rF" = (/obj/effect/turf_decal/stripes/corner,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 4},/obj/structure/cable/yellow{icon_state = "4-8"},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"rI" = (/obj/effect/turf_decal/stripes/line{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 4},/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "150"},/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen"; req_access_txt = "150"},/turf/open/floor/plating,/area/ruin/unpowered/syndicate_lava_base/testlab)
"rO" = (/obj/effect/turf_decal/tile/green,/obj/effect/turf_decal/tile/green{dir = 8},/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 4},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
@@ -607,11 +609,13 @@
"uX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 9},/obj/structure/cable/yellow{icon_state = "4-8"},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/medbay)
"vx" = (/obj/structure/table/wood,/obj/machinery/chem_dispenser/drinks/beer/fullupgrade{dir = 1},/obj/structure/sign/barsign{pixel_y = -32; req_access = null; req_access_txt = "0"},/turf/open/floor/wood,/area/ruin/unpowered/syndicate_lava_base/bar)
"vD" = (/obj/structure/closet/emcloset/anchored,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 6},/obj/structure/cable/yellow{icon_state = "2-4"},/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/obj/effect/turf_decal/tile/red{dir = 8},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
+"wG" = (/obj/effect/turf_decal/stripes/line{dir = 5},/turf/open/floor/engine,/area/ruin/unpowered/syndicate_lava_base/cargo)
"wN" = (/obj/machinery/hydroponics/constructable,/obj/structure/window/reinforced{dir = 8},/obj/effect/turf_decal/loading_area{icon_state = "drain"; name = "drain"},/obj/machinery/firealarm{dir = 1; pixel_y = 24},/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"xn" = (/obj/machinery/hydroponics/constructable,/obj/effect/turf_decal/loading_area{icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"xo" = (/obj/structure/sink/kitchen{dir = 4; pixel_x = -13},/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/bar)
"xF" = (/obj/structure/table/reinforced,/obj/item/stock_parts/cell/high/plus{pixel_x = 7; pixel_y = -5},/obj/item/stock_parts/cell/high/plus{pixel_x = -8; pixel_y = -3},/obj/item/multitool{pixel_x = -1; pixel_y = -13},/obj/machinery/airalarm/syndicate{pixel_y = 24},/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/white/side{dir = 4},/area/ruin/unpowered/syndicate_lava_base/circuits)
"xO" = (/obj/structure/fans/tiny,/obj/machinery/door/airlock/external{req_access_txt = "150"},/obj/effect/mapping_helpers/airlock/cyclelink_helper{dir = 1},/turf/open/floor/plating,/area/ruin/unpowered/syndicate_lava_base/arrivals)
+"xP" = (/obj/effect/turf_decal/box,/obj/machinery/quantumpad/supply_only{map_pad_id = "lavalandbase"; map_pad_link_id = "denbase"},/turf/open/floor/engine,/area/ruin/unpowered/syndicate_lava_base/cargo)
"xT" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{dir = 8},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/circuits)
"yq" = (/obj/effect/turf_decal/stripes/corner{dir = 4},/obj/effect/turf_decal/tile/red{dir = 4},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"zy" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{dir = 2},/obj/structure/cable/yellow{icon_state = "1-4"},/obj/structure/cable/yellow{icon_state = "1-8"},/turf/open/floor/plasteel/white/side{dir = 4},/area/ruin/unpowered/syndicate_lava_base/arrivals)
@@ -621,6 +625,7 @@
"Ax" = (/obj/structure/table/reinforced,/obj/machinery/plantgenes{density = 0; pixel_y = 6},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"AL" = (/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 4},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/circuits)
"Bk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 4},/obj/structure/cable/yellow{icon_state = "4-8"},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
+"BJ" = (/obj/effect/turf_decal/stripes/line{dir = 1},/turf/open/floor/engine,/area/ruin/unpowered/syndicate_lava_base/cargo)
"CD" = (/obj/machinery/power/apc/syndicate{dir = 4; name = "Medbay APC"; pixel_x = 24},/obj/structure/cable/yellow,/obj/machinery/computer/operating{dir = 8},/turf/open/floor/plasteel/white/side{dir = 4},/area/ruin/unpowered/syndicate_lava_base/medbay)
"CL" = (/obj/machinery/hydroponics/constructable,/obj/structure/window/reinforced{dir = 8},/obj/effect/turf_decal/loading_area{icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"Dc" = (/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/arrivals)
@@ -638,6 +643,7 @@
"Ml" = (/obj/effect/turf_decal/stripes/corner{dir = 1},/obj/effect/turf_decal/stripes/white/corner{dir = 1},/turf/open/floor/circuit/telecomms,/area/ruin/unpowered/syndicate_lava_base/nanites)
"Mn" = (/turf/closed/wall/mineral/plastitanium/explosive,/area/ruin/unpowered/syndicate_lava_base/bar)
"MY" = (/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/obj/machinery/atm{pixel_y = 30},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
+"Nf" = (/obj/effect/turf_decal/stripes/line{dir = 10},/turf/open/floor/engine,/area/ruin/unpowered/syndicate_lava_base/cargo)
"NH" = (/obj/machinery/portable_atmospherics/scrubber,/obj/effect/turf_decal/bot,/turf/open/floor/engine,/area/ruin/unpowered/syndicate_lava_base/engineering)
"NZ" = (/obj/machinery/button/door{id = "lavalandsyndi_telecomms"; name = "Telecomms Blast Door Control"; pixel_x = 26; req_access_txt = "150"},/obj/item/storage/box/disks_nanite,/obj/item/storage/box/disks_nanite,/obj/item/nanite_scanner,/obj/item/nanite_remote/comm,/obj/item/nanite_remote,/obj/structure/closet/crate,/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/nanites)
"Ov" = (/obj/effect/turf_decal/stripes/line{dir = 6},/obj/structure/lattice/catwalk,/turf/open/lava/smooth/lava_land_surface,/area/ruin/unpowered/syndicate_lava_base/arrivals)
@@ -645,6 +651,7 @@
"Pa" = (/turf/closed/wall/mineral/plastitanium/nodiagonal,/area/ruin/unpowered/syndicate_lava_base/circuits)
"Px" = (/obj/structure/table/reinforced,/obj/item/stock_parts/cell/high/plus{pixel_x = -5; pixel_y = 9},/obj/item/stock_parts/cell/high/plus{pixel_x = -8; pixel_y = -3},/obj/item/multitool,/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/white/side{dir = 8},/area/ruin/unpowered/syndicate_lava_base/circuits)
"PE" = (/obj/structure/table/reinforced,/obj/item/integrated_circuit_printer/upgraded,/turf/open/floor/plasteel/white/side{dir = 6},/area/ruin/unpowered/syndicate_lava_base/circuits)
+"Qa" = (/obj/effect/turf_decal/tile/brown{dir = 8},/obj/effect/turf_decal/tile/brown,/obj/machinery/door/airlock/mining/glass{name = "Supply Station"; req_access_txt = "150"},/obj/effect/turf_decal/tile/brown{dir = 4},/obj/effect/turf_decal/tile/brown{dir = 1},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/cargo)
"Qk" = (/obj/item/toy/plush/nukeplushie{desc = "This one seems to be quite worn. It even has a different tag. It reads: Property of Aeterna. Please dry wash only."},/turf/open/floor/circuit/red,/area/ruin/unpowered/syndicate_lava_base/main)
"Qm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 4},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/cable/yellow{icon_state = "4-8"},/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"Ra" = (/obj/structure/cable/yellow{icon_state = "2-8"},/obj/structure/table/optable,/obj/item/surgical_drapes,/obj/effect/decal/cleanable/generic,/turf/open/floor/plasteel/white/side{dir = 4},/area/ruin/unpowered/syndicate_lava_base/medbay)
@@ -660,14 +667,18 @@
"TB" = (/obj/structure/table/reinforced,/obj/machinery/smartfridge/disks{density = 0; pixel_y = 2},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"Ug" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/medbay)
"UM" = (/obj/effect/turf_decal/tile/green,/obj/effect/turf_decal/tile/green{dir = 8},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
+"Vl" = (/obj/effect/turf_decal/stripes/line{dir = 4},/turf/open/floor/engine,/area/ruin/unpowered/syndicate_lava_base/cargo)
"Vu" = (/obj/effect/turf_decal/stripes/line{dir = 10},/obj/effect/turf_decal/stripes/white/line{dir = 5},/turf/open/floor/circuit/telecomms,/area/ruin/unpowered/syndicate_lava_base/nanites)
"Wt" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/components/unary/vent_pump/on,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 10},/obj/structure/noticeboard{dir = 8; pixel_x = 27},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/stripes/white/line{dir = 1; icon_state = "steel_decals9"},/obj/effect/turf_decal/stripes/white/line{dir = 4; icon_state = "steel_decals9"},/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/nanites)
"Xa" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 4},/obj/structure/cable/yellow{icon_state = "4-8"},/obj/machinery/power/apc/syndicate{dir = 1; name = "Arrival Hallway APC"; pixel_y = 24},/obj/structure/cable/yellow{icon_state = "0-4"},/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"Xm" = (/obj/effect/turf_decal/loading_area{dir = 9; icon_state = "steel_panel"; name = "steel pannel"},/obj/effect/turf_decal/loading_area{dir = 6; icon_state = "steel_panel"; name = "steel pannel"},/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"XL" = (/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/structure/closet{name = "Hydroponics locker"},/obj/item/storage/box/disks_plantgene,/obj/item/storage/box/disks_plantgene,/obj/item/hatchet,/obj/item/hatchet,/obj/item/watertank,/obj/item/reagent_containers/glass/bucket,/obj/item/reagent_containers/glass/bucket,/obj/item/storage/bag/plants,/obj/item/storage/bag/plants,/obj/item/plant_analyzer,/obj/item/plant_analyzer,/obj/item/storage/box/disks_plantgene,/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"Yj" = (/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 8},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/medbay)
+"YE" = (/obj/effect/turf_decal/stripes/line,/turf/open/floor/engine,/area/ruin/unpowered/syndicate_lava_base/cargo)
+"Zr" = (/obj/effect/turf_decal/stripes/line{dir = 6},/turf/open/floor/engine,/area/ruin/unpowered/syndicate_lava_base/cargo)
"Zv" = (/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red,/obj/effect/turf_decal/tile/red{dir = 4},/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"ZK" = (/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/stripes/white/line{dir = 6; icon_state = "steel_decals6"},/obj/effect/turf_decal/stripes/white/line{dir = 10; icon_state = "steel_decals6"},/obj/effect/turf_decal/stripes/white/line{dir = 9; icon_state = "steel_decals6"},/obj/effect/turf_decal/stripes/white/line{dir = 5; icon_state = "steel_decals6"},/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/nanites)
+"ZL" = (/obj/effect/turf_decal/stripes/line{dir = 8},/obj/machinery/light/small{dir = 8},/turf/open/floor/engine,/area/ruin/unpowered/syndicate_lava_base/cargo)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -677,11 +688,11 @@ aaaaaaaaaaaaabaaababababababababababababababababababababababababababaaababababab
aaaaaaaaabaaabababababiiaeaeaeaeaeaeaeaeaeaeaeaeacabababababababababababababababababababababaaaaaaaa
aaaaaaaaabababababababaeadaFagaFaeahaiajdraFaFaFaeababababababababababababababababababababaaaaaaaaaa
aaaaaaababababababababaeaFaFaFalaxaHdddianaFaAaqaeababababababababababababababababababababababaaaaaa
-aaaaaaaaababababababawaeaFaFaFaFanbebiaMaxbjbjayaeaBabababababababababababababababababababababaaaaaa
-aaaaaaabababababababaIaeaFaFaFaFdrbeaYcZdraFaFaFaeaKasaLaLaLasabababababababababababababababaaaaaaaa
-aaaaabababababababababaeaFaFaQaFaedcddbKanaFaFaXaeasasataZbbasacbgababababababababababababababaaaaaa
-aaaaababababababababawaeaeaeaeaeaecqbNbhaxbjbjayblbnbPbScabpasasdydydydybrababababababababababaaaaaa
-aaabababababababababawbraecTbtcTdrbQdibxdraFaFaFaeducrcAcAbAbBasbDbEbIdydydydydydyabababababababaaaa
+aaaaaaaaababababababawaeaFaFaFaFanbebiaMaxbjbjayaeaBabababababababababdydydydynxabababababababaaaaaa
+aaaaaaabababababababaIaeaFaFaFaFdrbeaYcZdraFaFaFaeaKasaLaLaLasababababdyqXBJwGdyababababababaaaaaaaa
+aaaaabababababababababaeaFaFaQaFaedcddbKanaFaFaXaeasasataZbbasacbgababdyZLxPVldyabababababababaaaaaa
+aaaaababababababababawaeaeaeaeaeaecqbNbhaxbjbjayblbnbPbScabpasasdydydydyNfYEZrdyabababababababaaaaaa
+aaabababababababababawbraecTbtcTdrbQdibxdraFaFaFaeducrcAcAbAbBasbDbEbIdydyQadydydyabababababababaaaa
aaababababababababababawaeaOaNbJbOazdibKrIaFaAaqaedBbRbRdEdIbTasdLdMbXccdycdcfcgdyacababababababaaaa
aaabababababababababababaecTaUcTdrdddfbhaxchchcxaedUdVdXdYdZcyasebecdbeceeefegGfcEcFababababababaaaa
aaabababababababababababaeaeaeaeaeckcHcMaeaeaeaeaedqdsdvevewasasdxdHcQdOfteCeDeEeFcFabababababababaa
diff --git a/_maps/RandomRuins/SpaceRuins/feeders_den.dmm b/_maps/RandomRuins/SpaceRuins/feeders_den.dmm
index 5d99b05f..877cd915 100644
--- a/_maps/RandomRuins/SpaceRuins/feeders_den.dmm
+++ b/_maps/RandomRuins/SpaceRuins/feeders_den.dmm
@@ -13,7 +13,7 @@
"bW" = (/obj/structure/closet/secure_closet/freezer/meat,/obj/item/reagent_containers/food/snacks/carpmeat,/obj/item/reagent_containers/food/snacks/carpmeat,/obj/item/reagent_containers/food/snacks/carpmeat,/obj/item/reagent_containers/food/snacks/carpmeat,/obj/item/reagent_containers/food/snacks/carpmeat,/obj/item/reagent_containers/food/snacks/meat/rawbacon,/obj/item/reagent_containers/food/snacks/meat/rawbacon,/obj/item/reagent_containers/food/snacks/meat/rawbacon,/obj/item/reagent_containers/food/snacks/meat/slab/bear,/obj/item/reagent_containers/food/snacks/meat/slab/bear,/obj/item/reagent_containers/food/snacks/meat/slab/bear,/obj/structure/window/reinforced/tinted{dir = 8},/turf/open/floor/plasteel/freezer,/area/ruin/space/has_grav/feedersden)
"bX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/machinery/meter,/turf/open/floor/plating,/area/ruin/space/has_grav/feedersden)
"cd" = (/obj/effect/turf_decal/tile/red{dir = 4},/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/loading_area{dir = 1; icon_state = "drain"; name = "drain"},/obj/effect/turf_decal/loading_area{dir = 1; icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel/dark,/area/ruin/space/has_grav/feedersden)
-"cn" = (/obj/structure/table,/obj/machinery/recharger,/obj/effect/turf_decal/tile/brown{dir = 4},/obj/effect/turf_decal/tile/brown{dir = 1},/obj/structure/medkit_cabinet{pixel_y = 27},/obj/item/grenade/chem_grenade/lipoifier_weak{pixel_x = -12},/turf/open/floor/plasteel,/area/ruin/space/has_grav/feedersden)
+"cn" = (/obj/structure/table,/obj/machinery/recharger,/obj/effect/turf_decal/tile/brown{dir = 4},/obj/effect/turf_decal/tile/brown{dir = 1},/obj/structure/medkit_cabinet{pixel_y = 27},/obj/item/grenade/chem_grenade/lipoifier_weak{pixel_x = -12},/obj/item/implanter{pixel_x = 9; pixel_y = 15},/obj/item/implanter{pixel_x = 9; pixel_y = 11},/turf/open/floor/plasteel,/area/ruin/space/has_grav/feedersden)
"cw" = (/obj/machinery/light{dir = 8},/turf/open/floor/wood,/area/ruin/space/has_grav/feedersden)
"cx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 8},/obj/structure/cable{icon_state = "2-8"},/turf/open/floor/plating,/area/ruin/space/has_grav/feedersden)
"cy" = (/obj/structure/table/reinforced,/obj/item/reagent_containers/food/snacks/store/cake/chocolate,/obj/machinery/light/small{dir = 1},/turf/open/floor/mineral/basaltstone_floor,/area/ruin/space/has_grav/feedersden)
@@ -87,7 +87,7 @@
"lQ" = (/obj/structure/chair/sofa/right,/turf/open/floor/carpet/orange,/area/ruin/space/has_grav/feedersden)
"lR" = (/obj/machinery/iv_drip/feeding_tube,/obj/machinery/light/small{dir = 1},/turf/open/floor/carpet/black,/area/ruin/space/has_grav/feedersden)
"ma" = (/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plating,/area/ruin/space/has_grav/feedersden)
-"mf" = (/obj/effect/turf_decal/tile/brown{dir = 1},/obj/effect/turf_decal/tile/brown{dir = 8},/obj/structure/reagent_dispensers/keg/milk,/turf/open/floor/plasteel,/area/ruin/space/has_grav/feedersden)
+"mf" = (/obj/effect/turf_decal/tile/brown{dir = 1},/obj/effect/turf_decal/tile/brown{dir = 8},/obj/machinery/quantumpad/supply_only{map_pad_id = "denbase"; map_pad_link_id = "lavalandbase"},/turf/open/floor/plasteel,/area/ruin/space/has_grav/feedersden)
"mm" = (/obj/machinery/vending/mealdor{free = 1},/obj/machinery/light{dir = 4},/turf/open/floor/plasteel/dark,/area/ruin/space/has_grav/feedersden)
"mD" = (/obj/structure/closet/emcloset/anchored,/obj/effect/turf_decal/stripes/white/line{dir = 2},/obj/effect/turf_decal/stripes/white/line{dir = 1; icon_state = "steel_decals_central4"},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/tile/neutral,/turf/open/floor/plasteel,/area/ruin/space/has_grav/feedersden)
"mJ" = (/obj/structure/chair/sofa/corner{dir = 1},/turf/open/floor/carpet/orange,/area/ruin/space/has_grav/feedersden)
@@ -227,6 +227,7 @@
"Eq" = (/obj/machinery/shower{dir = 8},/obj/effect/turf_decal/loading_area{dir = 4; icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel/freezer,/area/ruin/space/has_grav/feedersden)
"Es" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4; piping_layer = 3; pixel_x = 5; pixel_y = 5},/turf/closed/wall/r_wall/syndicate,/area/ruin/space/has_grav/feedersden)
"Ex" = (/obj/item/trash/boritos,/turf/open/floor/wood,/area/ruin/space/has_grav/feedersden)
+"EH" = (/obj/structure/reagent_dispensers/keg/milk,/turf/open/floor/plating,/area/ruin/space/has_grav/feedersden)
"EU" = (/obj/structure/table/wood,/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/obj/item/paper/fluff/ruins/feeder_den/report4,/obj/item/pen/red,/turf/open/floor/plasteel/dark,/area/ruin/space/has_grav/feedersden)
"EW" = (/obj/machinery/porta_turret/fattening,/obj/item/stack/marker_beacon{anchored = 1; icon_state = "markerburgundy-on"; light_color = "#FA644B"; light_power = 3; light_range = 2; name = "landing marker"; picked_color = "Burgundy"},/obj/structure/lattice/catwalk,/turf/open/floor/plating,/area/ruin/space/has_grav/feedersden)
"Ff" = (/obj/structure/sign/poster/contraband/eat{pixel_y = 32},/turf/open/floor/carpet/black,/area/ruin/space/has_grav/feedersden)
@@ -387,7 +388,7 @@ FEFEFEFEfmBrBrBrnrZnNBLvAjNRgZKWNRAjNXTGTGTGTGBDTGXWZhZhZhqquOuOuOuOuOrJZOWrndWr
FEFEFEfmfmBrBrBrDcDcNJNJDcnrnrnrnrnrnrnrnrnrDcWJiONxgUgUgUuXZpTKDcnrnrQFnrnrnrnrnrnrDciuiuDcDcBrFEFEFEFEFEFEFE
FEFEBrZCfmISBrBrBrnrMaEqnrikNggqnrWNYEfncnbanrDxvYFDLNdCsRiNvYSsnrZeIoxCkoPgnrridlkCnrfNginrBrBrBrFEFEFEFEFEFE
FEFEBrBrfmfmBrBrBrnrtyEqnrIGJhJhWsDOlsuklslsvtDxvYSyBeaaaaUBvYmUnrcWmaUerscxtVbXJhkMnrfNdAnrBrBrBrFEFEFEFEFEFE
-FEFEFEBrwwfmeEBrBrDcnrnrDcnrxGHpNkDOtHguboygaQoYvYvYvYvYvYvwvYkdnrgFXsFHYpDBnrzlJhXPDcnrnrDcBrBrBrFEFEFEFEFEFE
+FEFEFEBrwwfmeEBrBrDcnrnrDcxGHpEHNkDOtHguboygaQoYvYvYvYvYvYvwvYkdnrgFXsFHYpDBnrzlJhXPDcnrnrDcBrBrBrFEFEFEFEFEFE
FEFEFEBrxZfmfmBrBrBrBrBrDcDcnrnrDcmflsucaEBPnrvYaDMYMdRhDKjhANYUnrnrnrTPJhfKDcnrRanrDcBrEWYNxZBrBrBrFEFEFEFEFE
FEFEFEFEfmfmBrBrBrBrBrBrnrnKEfWKnrqhlslszcVFDczAnrnrnrkgnrnrnrnrDcmDnQddRCuFnrNtVWdvnrISVefmfmfxBrBrFEFEFEFEFE
FEFEFEFEFEfmBrBrBrBrBrBrnrNUcVgkcRDOrfrfYhdzPItjfhnroHoHoHdrVxnwAaYAtBTYzGzEHivLMisCkgeEfmFEFEebFEFEFEFEFEFEFE
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 0db2431f..f2c4d5dc 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -228,6 +228,7 @@
#define TRAIT_NO_BACKPACK "no_backpack"
#define TRAIT_NO_BUCKLE "no_buckle"
#define TRAIT_DOCILE "docile"
+#define TRAIT_LIVESTOCK "livestock"
// common trait sources
#define TRAIT_GENERIC "generic"
diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm
index 01f94565..d7a81bc2 100644
--- a/code/game/machinery/quantum_pad.dm
+++ b/code/game/machinery/quantum_pad.dm
@@ -162,6 +162,9 @@
if(QDELETED(ROI))
continue //sleeps in CHECK_TICK
+ if(isliving(ROI) && !check_mob_teleportability(ROI))
+ continue
+
// if is anchored, don't let through
if(ROI.anchored)
if(isliving(ROI))
@@ -184,6 +187,10 @@
linked_pad = link
. = TRUE
+/// Checks if the mob is able to be teleported.
+/obj/machinery/quantumpad/proc/check_mob_teleportability(mob/living/mob_to_check)
+ return TRUE
+
/obj/item/paper/guides/quantumpad
name = "Quantum Pad For Dummies"
info = "Dummies Guide To Quantum Pads
Do you hate the concept of having to use your legs, let alone walk to places? Well, with the Quantum Pad (tm), never again will the fear of cardio keep you from going places!
How to set up your Quantum Pad(tm)
1.Unscrew the Quantum Pad(tm) you wish to link.
2. Use your multi-tool to cache the buffer of the Quantum Pad(tm) you wish to link.
3. Apply the multi-tool to the secondary Quantum Pad(tm) you wish to link to the first Quantum Pad(tm)
If you followed these instructions carefully, your Quantum Pad(tm) should now be properly linked together for near-instant movement across the station! Bear in mind that this is technically a one-way teleport, so you'll need to do the same process with the secondary pad to the first one if you wish to travel between both."
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index a75622a1..f781c3ba 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -1070,8 +1070,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "GS13 Gameplay Preferences
"
dat += "Stuckage (weight results in getting stuck in doors):[stuckage == TRUE ? "Enabled" : "Disabled"]
"
- dat += "Fatness Vulnerability (Special items are able to be used on you at high weights. Usually to your detriment.):[fatness_vulnerable == TRUE ? "Enabled" : "Disabled"]
"
- dat += "Extreme Fatness Vulnerability (Similar to the previous pref, but with more extreme effects such as Hyno/TF. You have been warned.):[extreme_fatness_vulnerable == TRUE ? "Enabled" : "Disabled"]
"
+ dat += "This preference will allow items that work based on weight to work to you, usually to your detriment.
"
+ dat += "Fatness Vulnerability:[fatness_vulnerable == TRUE ? "Enabled" : "Disabled"]
"
+ dat += "This preference functions similar to the one before but allows for items with more drastic effects. Do not enable this if you aren't okay with more drastic things happening to your character.
"
+ dat += "Extreme Fatness Vulnerability:[extreme_fatness_vulnerable == TRUE ? "Enabled" : "Disabled"]
"
dat += "Extreme Weight Gain (Sprite Size scales with weight):[weight_gain_extreme == TRUE ? "Enabled" : "Disabled"]
"
dat += "GS13 Helplessness Preferences
"
diff --git a/tgstation.dme b/tgstation.dme
index dcc275ec..f69fa596 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3095,6 +3095,7 @@
#include "GainStation13\code\machinery\adipoelectric_transformer.dm"
#include "GainStation13\code\machinery\fattening_turret.dm"
#include "GainStation13\code\machinery\feeding_tube.dm"
+#include "GainStation13\code\machinery\supply_teleporter.dm"
#include "GainStation13\code\mechanics\fatness.dm"
#include "GainStation13\code\mechanics\fattening_trap.dm"
#include "GainStation13\code\mechanics\helplessness.dm"