diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index 9099488143..19a0ceb7de 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -1,6 +1,14 @@
{
"recommendations": [
- "gbasood.byond-dm-language-support",
- "platymuus.dm-langclient"
- ]
+ "gbasood.byond-dm-language-support",
+ "platymuus.dm-langclient",
+ "stylemistake.auto-comment-blocks",
+ "eamodio.gitlens",
+ "oderwat.indent-rainbow",
+ "rexebin.darkpurple-black",
+ "dbaeumer.vscode-eslint",
+ "editorconfig.editorconfig",
+ "donkie.vscode-tgstation-test-adapter",
+ "icrawl.discord-vscode"
+ ]
}
diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm
index f1de2ddd45..80f25e5fb8 100644
--- a/code/__defines/chemistry.dm
+++ b/code/__defines/chemistry.dm
@@ -36,6 +36,7 @@
#define CE_SPEEDBOOST "gofast" // Hyperzine
#define CE_SLOWDOWN "goslow" // Slowdown
#define CE_ANTACID "nopuke" // Don't puke.
+#define CE_ALLERGEN "allergyreaction" // Self explanatory
#define REAGENTS_PER_SHEET 20
@@ -46,7 +47,7 @@
// Chemistry lists.
var/list/tachycardics = list("coffee", "inaprovaline", "hyperzine", "nitroglycerin", "thirteenloko", "nicotine") // Increase heart rate.
-var/list/bradycardics = list("neurotoxin", "cryoxadone", "clonexadone", "space_drugs", "stoxin") // Decrease heart rate.
+var/list/bradycardics = list("neurotoxin", "cryoxadone", "clonexadone", "bliss", "stoxin", "ambrosia_extract") // Decrease heart rate.
var/list/heartstopper = list("potassium_chlorophoride", "zombie_powder") // This stops the heart.
var/list/cheartstopper = list("potassium_chloride") // This stops the heart when overdose is met. -- c = conditional
diff --git a/code/__defines/span_vr.dm b/code/__defines/span_vr.dm
new file mode 100644
index 0000000000..85e9672dae
--- /dev/null
+++ b/code/__defines/span_vr.dm
@@ -0,0 +1,121 @@
+// Sorted alphabetically
+// Shamelessly yoinked from TGCode, luv u folks
+#define span_abductor(str) ("" + str + "")
+#define span_admin(str) ("" + str + "")
+#define span_adminhelp(str) ("" + str + "")
+#define span_adminnotice(str) ("" + str + "")
+#define span_adminobserverooc(str) ("" + str + "")
+#define span_adminooc(str) ("" + str + "")
+#define span_adminsay(str) ("" + str + "")
+#define span_aiprivradio(str) ("" + str + "")
+#define span_alert(str) ("" + str + "")
+#define span_alertalien(str) ("" + str + "")
+#define span_alertsyndie(str) ("" + str + "")
+#define span_alertwarning(str) ("" + str + "")
+#define span_alien(str) ("" + str + "")
+#define span_announce(str) ("" + str + "")
+#define span_big(str) ("" + str + "")
+#define span_bigicon(str) ("" + str + "")
+#define span_binarysay(str) ("" + str + "")
+#define span_blue(str) ("" + str + "")
+#define span_blueteamradio(str) ("" + str + "")
+#define span_bold(str) ("" + str + "")
+#define span_boldannounce(str) ("" + str + "")
+#define span_boldnotice(str) ("" + str + "")
+#define span_boldwarning(str) ("" + str + "")
+#define span_centcomradio(str) ("" + str + "")
+#define span_changeling(str) ("" + str + "")
+#define span_clown(str) ("" + str + "")
+#define span_colossus(str) ("" + str + "")
+#define span_command_headset(str) ("" + str + "")
+#define span_comradio(str) ("" + str + "")
+#define span_cult(str) ("" + str + "")
+#define span_cultbold(str) ("" + str + "")
+#define span_cultboldtalic(str) ("" + str + "")
+#define span_cultitalic(str) ("" + str + "")
+#define span_cultlarge(str) ("" + str + "")
+#define span_danger(str) ("" + str + "")
+#define span_deadsay(str) ("" + str + "")
+#define span_deconversion_message(str) ("" + str + "")
+#define span_drone(str) ("" + str + "")
+#define span_engradio(str) ("" + str + "")
+#define span_extremelybig(str) ("" + str + "")
+#define span_ghostalert(str) ("" + str + "")
+#define span_green(str) ("" + str + "")
+#define span_greenannounce(str) ("" + str + "")
+#define span_greenteamradio(str) ("" + str + "")
+#define span_greentext(str) ("" + str + "")
+#define span_hear(str) ("" + str + "")
+#define span_hidden(str) ("" + str + "")
+#define span_hierophant(str) ("" + str + "")
+#define span_hierophant_warning(str) ("" + str + "")
+#define span_highlight(str) ("" + str + "")
+#define span_his_grace(str) ("" + str + "")
+#define span_holoparasite(str) ("" + str + "")
+#define span_hypnophrase(str) ("" + str + "")
+#define span_icon(str) ("" + str + "")
+#define span_info(str) ("" + str + "")
+#define span_interface(str) ("" + str + "")
+#define span_looc(str) ("" + str + "")
+#define span_medal(str) ("" + str + "")
+#define span_medradio(str) ("" + str + "")
+#define span_memo(str) ("" + str + "")
+#define span_memoedit(str) ("" + str + "")
+#define span_mind_control(str) ("" + str + "")
+#define span_minorannounce(str) ("" + str + "")
+#define span_monkey(str) ("" + str + "")
+#define span_monkeyhive(str) ("" + str + "")
+#define span_monkeylead(str) ("" + str + "")
+#define span_name(str) ("" + str + "")
+#define span_narsie(str) ("" + str + "")
+#define span_narsiesmall(str) ("" + str + "")
+#define span_nicegreen(str) ("" + str + "")
+#define span_notice(str) ("" + str + "")
+#define span_noticealien(str) ("" + str + "")
+#define span_ooc(str) ("" + str + "")
+#define span_papyrus(str) ("" + str + "")
+#define span_phobia(str) ("" + str + "")
+#define span_prefix(str) ("" + str + "")
+#define span_purple(str) ("" + str + "")
+#define span_radio(str) ("" + str + "")
+#define span_reallybig(str) ("" + str + "")
+#define span_red(str) ("" + str + "")
+#define span_redteamradio(str) ("" + str + "")
+#define span_redtext(str) ("" + str + "")
+#define span_resonate(str) ("" + str + "")
+#define span_revenbignotice(str) ("" + str + "")
+#define span_revenboldnotice(str) ("" + str + "")
+#define span_revendanger(str) ("" + str + "")
+#define span_revenminor(str) ("" + str + "")
+#define span_revennotice(str) ("" + str + "")
+#define span_revenwarning(str) ("" + str + "")
+#define span_robot(str) ("" + str + "")
+#define span_rose(str) ("" + str + "")
+#define span_sans(str) ("" + str + "")
+#define span_sciradio(str) ("" + str + "")
+#define span_secradio(str) ("" + str + "")
+#define span_servradio(str) ("" + str + "")
+#define span_singing(str) ("" + str + "")
+#define span_slime(str) ("" + str + "")
+#define span_small(str) ("" + str + "")
+#define span_smallnotice(str) ("" + str + "")
+#define span_smallnoticeital(str) ("" + str + "")
+#define span_spider(str) ("" + str + "")
+#define span_suicide(str) ("" + str + "")
+#define span_suppradio(str) ("" + str + "")
+#define span_swarmer(str) ("" + str + "")
+#define span_syndradio(str) ("" + str + "")
+#define span_tape_recorder(str) ("" + str + "")
+#define span_tinynotice(str) ("" + str + "")
+#define span_tinynoticeital(str) ("" + str + "")
+#define span_unconscious(str) ("" + str + "")
+#define span_userdanger(str) ("" + str + "")
+#define span_warning(str) ("" + str + "")
+#define span_yell(str) ("" + str + "")
+#define span_yellowteamradio(str) ("" + str + ""
+
+// VORE Specific stuff after this point
+// Sorted by however I felt like it
+#define span_game_say(str) ("" + str + ""
+#define span_emote_subtle(str) ("" + str + ""
+#define span_emote(str) ("" + str + ""
\ No newline at end of file
diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm
index 46cff510cb..67d6b6e7d6 100644
--- a/code/__defines/species_languages.dm
+++ b/code/__defines/species_languages.dm
@@ -40,14 +40,16 @@
#define ALLERGEN_STIMULANT 0x1000 // Stimulants are what makes the Tajaran heart go ruh roh - not just coffee!
// Allergen reactions
-#define AG_TOX_DMG 0x1 // the classic
-#define AG_OXY_DMG 0x2 // intense airway reactions
-#define AG_EMOTE 0x4 // general emote reactions based on affect type
-#define AG_PAIN 0x8 // short-lived hurt
-#define AG_WEAKEN 0x10 // too weak to move, oof
-#define AG_BLURRY 0x20 // blurred vision!
-#define AG_SLEEPY 0x40 // fatigue/exhaustion
-#define AG_CONFUSE 0x80 // disorientation - VOREStation addition
+#define AG_PHYS_DMG 0x1 // brute
+#define AG_BURN_DMG 0x2 // burns
+#define AG_TOX_DMG 0x4 // the classic
+#define AG_OXY_DMG 0x8 // intense airway reactions
+#define AG_EMOTE 0x10 // general emote reactions based on affect type
+#define AG_PAIN 0x20 // short-lived hurt
+#define AG_WEAKEN 0x40 // too weak to move, oof
+#define AG_BLURRY 0x80 // blurred vision!
+#define AG_SLEEPY 0x100 // fatigue/exhaustion
+#define AG_CONFUSE 0x200 // disorientation
// Species spawn flags
#define SPECIES_IS_WHITELISTED 0x1 // Must be whitelisted to play.
diff --git a/code/_helpers/turfs.dm b/code/_helpers/turfs.dm
index cdca430fb6..690e4f1833 100644
--- a/code/_helpers/turfs.dm
+++ b/code/_helpers/turfs.dm
@@ -1,10 +1,20 @@
-// Returns the atom sitting on the turf.
-// For example, using this on a disk, which is in a bag, on a mob, will return the mob because it's on the turf.
-/proc/get_atom_on_turf(var/atom/movable/M)
- var/atom/mloc = M
- while(mloc && mloc.loc && !istype(mloc.loc, /turf/))
- mloc = mloc.loc
- return mloc
+/**
+* Returns a best attempt at the least-nested containing movable of subject, or subject.
+* eg, if subject is an item in a bag on a mob in a locker in the world, returns the locker.
+*/
+/proc/get_atom_on_turf(atom/movable/subject)
+ var/atom/parent = subject?.loc
+ if (!parent || !ismovable(subject) || isarea(parent))
+ return subject
+ var/atom/current = subject
+ do
+ parent = current.loc
+ if (isturf(parent))
+ return current
+ current = parent
+ while (current)
+ return subject
+
/proc/iswall(turf/T)
return (istype(T, /turf/simulated/wall) || istype(T, /turf/unsimulated/wall) || istype(T, /turf/simulated/shuttle/wall))
diff --git a/code/datums/underwear/undershirts.dm b/code/datums/underwear/undershirts.dm
index 6b2cc3d10f..11c4f1f6b3 100644
--- a/code/datums/underwear/undershirts.dm
+++ b/code/datums/underwear/undershirts.dm
@@ -196,4 +196,14 @@
/datum/category_item/underwear/undershirt/sleevelessturtle
name = "Turtleneck, Sleeveless"
icon_state = "sleevelessturtle"
+ has_color = TRUE
+
+/datum/category_item/underwear/undershirt/dress_shirt_fem
+ name = "Dress shirt, feminine"
+ icon_state = "undershirt_dress_fem"
+ has_color = TRUE
+
+/datum/category_item/underwear/undershirt/dress_shirt
+ name = "Dress shirt, masculine"
+ icon_state = "undershirt_dress"
has_color = TRUE
\ No newline at end of file
diff --git a/code/game/gamemodes/newobjective.dm b/code/game/gamemodes/newobjective.dm
index 4639f57138..c52e51d5b5 100644
--- a/code/game/gamemodes/newobjective.dm
+++ b/code/game/gamemodes/newobjective.dm
@@ -1081,8 +1081,8 @@ datum
return 0
drugs
- steal_target = /datum/reagent/space_drugs
- explanation_text = "Steal some space drugs."
+ steal_target = /datum/reagent/drugs/bliss
+ explanation_text = "Steal some bliss."
weight = 40
get_points(var/job)
diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm
index e98e687af4..227e36948c 100644
--- a/code/game/machinery/biogenerator.dm
+++ b/code/game/machinery/biogenerator.dm
@@ -101,8 +101,9 @@
BIOGEN_ITEM("Winter Coat", /obj/item/clothing/suit/storage/hooded/wintercoat, 1, 500),
//VOREStation Edit - Algae for oxygen generator
BIOGEN_ITEM("4 Algae Sheets", /obj/item/stack/material/algae, 4, 400),
+ BIOGEN_ITEM("50 Algae Sheets", /obj/item/stack/material/algae, 50, 5000),
)
-
+
/obj/machinery/biogenerator/tgui_static_data(mob/user)
var/list/static_data[0]
@@ -155,7 +156,7 @@
if(!(category in item_list) || !(name in item_list[category])) // Not trying something that's not in the list, are you?
return
-
+
var/datum/data/biogenerator_item/bi = item_list[category][name]
if(!istype(bi))
var/datum/data/biogenerator_reagent/br = item_list[category][name]
@@ -175,7 +176,7 @@
beaker.reagents.add_reagent(br.reagent_id, amt_to_actually_dispense)
playsound(src, 'sound/machines/reagent_dispense.ogg', 25, 1)
return
-
+
var/cost = round(bi.cost / build_eff)
if(cost > points)
to_chat(usr, "Insufficient biomass.")
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index 1980079098..d36a9be13d 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -1,85 +1,41 @@
-#define CHARGER_EMPTY 0
-#define CHARGER_WORKING 1
-#define CHARGER_DONE 2
-
/obj/machinery/cell_charger
name = "heavy-duty cell charger"
desc = "A much more powerful version of the standard recharger that is specially designed for charging power cells."
icon = 'icons/obj/power.dmi'
- icon_state = "recharger"
- anchored = TRUE
+ icon_state = "ccharger0"
+ anchored = 1
use_power = USE_POWER_IDLE
- power_channel = EQUIP
idle_power_usage = 5
active_power_usage = 60000 //60 kW. (this the power drawn when charging)
- circuit = /obj/item/weapon/circuitboard/cell_charger
-
var/efficiency = 60000 //will provide the modified power rate when upgraded
+ power_channel = EQUIP
var/obj/item/weapon/cell/charging = null
- var/charging_vis_flags = NONE
- var/charge_state = CHARGER_EMPTY
+ var/chargelevel = -1
+ circuit = /obj/item/weapon/circuitboard/cell_charger
/obj/machinery/cell_charger/Initialize()
. = ..()
default_apply_parts()
/obj/machinery/cell_charger/update_icon()
- var/new_state
+ icon_state = "ccharger[charging ? 1 : 0]"
+
if(!anchored)
- new_state = "[initial(icon_state)]4"
- return
+ icon_state = "ccharger2"
- if(stat & (BROKEN|NOPOWER))
- new_state = "[initial(icon_state)]3"
- return
+ if(charging && !(stat & (BROKEN|NOPOWER)))
- switch(charge_state)
- if(CHARGER_EMPTY)
- new_state = "[initial(icon_state)]0"
- if(CHARGER_WORKING)
- new_state = "[initial(icon_state)]1"
- if(CHARGER_DONE)
- new_state = "[initial(icon_state)]2"
-
- if(icon_state != new_state)
- icon_state = new_state
+ var/newlevel = round(charging.percent() * 4.0 / 99)
+ //to_world("nl: [newlevel]")
-/obj/machinery/cell_charger/proc/insert_item(obj/item/W, mob/user)
- if(!W || !user)
- return
+ if(chargelevel != newlevel)
- user.drop_item()
- charging = W
- charging.loc = src
- charging_vis_flags = charging.vis_flags
- charging.vis_flags = VIS_INHERIT_ID
- vis_contents += charging
-
- charge_state = CHARGER_WORKING
- update_icon()
+ cut_overlays()
+ add_overlay("ccharger-o[newlevel]")
- if((stat & (BROKEN|NOPOWER)) || !anchored)
- update_use_power(USE_POWER_OFF)
+ chargelevel = newlevel
else
- update_use_power(USE_POWER_ACTIVE)
-
-/obj/machinery/cell_charger/proc/remove_item(mob/user)
- if(!charging || !user)
- return
-
- vis_contents -= charging
- charging.vis_flags = charging_vis_flags
- user.put_in_hands(charging)
- charging = null
-
- charge_state = CHARGER_EMPTY
-
- if((stat & (BROKEN|NOPOWER)) || !anchored)
- update_use_power(USE_POWER_OFF)
- else
- update_use_power(USE_POWER_IDLE)
-
- update_icon()
+ cut_overlays()
/obj/machinery/cell_charger/examine(mob/user)
. = ..()
@@ -107,8 +63,11 @@
to_chat(user, "\The [src] blinks red as you try to insert [W]!")
return
- insert_item(W, user)
+ user.drop_item()
+ W.loc = src
+ charging = W
user.visible_message("[user] inserts [charging] into [src].", "You insert [charging] into [src].")
+ chargelevel = -1
update_icon()
else if(W.is_wrench())
if(charging)
@@ -129,15 +88,22 @@
add_fingerprint(user)
if(charging)
- remove_item(user)
+ user.put_in_hands(charging)
+ charging.update_icon()
user.visible_message("[user] removes [charging] from [src].", "You remove [charging] from [src].")
+ charging = null
+ chargelevel = -1
+ update_icon()
+
/obj/machinery/cell_charger/attack_ai(mob/user)
if(istype(user, /mob/living/silicon/robot) && Adjacent(user)) // Borgs can remove the cell if they are near enough
if(charging)
- remove_item(user)
- user.visible_message("[user] disconnects [charging] from [src].", "You disconnect [charging] from [src].")
-
+ user.visible_message("[user] removes [charging] from [src].", "You remove [charging] from [src].")
+ charging.loc = src.loc
+ charging.update_icon()
+ charging = null
+ update_icon()
/obj/machinery/cell_charger/emp_act(severity)
if(stat & (BROKEN|NOPOWER))
@@ -146,9 +112,6 @@
charging.emp_act(severity)
..(severity)
-/obj/machinery/cell_charger/power_change()
- . = ..()
- update_icon()
/obj/machinery/cell_charger/process()
//to_world("ccpt [charging] [stat]")
@@ -156,22 +119,16 @@
update_use_power(USE_POWER_OFF)
return
- if(charging)
- if(!charging.fully_charged())
- charge_state = CHARGER_WORKING
- charging.give(efficiency*CELLRATE)
- update_use_power(USE_POWER_ACTIVE)
- else
- charge_state = CHARGER_DONE
- update_use_power(USE_POWER_IDLE)
+ if(charging && !charging.fully_charged())
+ charging.give(efficiency*CELLRATE)
+ update_use_power(USE_POWER_ACTIVE)
+
update_icon()
+ else
+ update_use_power(USE_POWER_IDLE)
/obj/machinery/cell_charger/RefreshParts()
var/E = 0
for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts)
E += C.rating
- efficiency = active_power_usage * (1+ (E - 1)*0.5)
-
-#undef CHARGER_EMPTY
-#undef CHARGER_WORKING
-#undef CHARGER_DONE
\ No newline at end of file
+ efficiency = active_power_usage * (1+ (E - 1)*0.5)
\ No newline at end of file
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index 37a5b837f8..751d09b8e8 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -57,9 +57,12 @@
health -= Proj.get_structure_damage()
healthcheck()
+/obj/effect/spider/proc/die()
+ qdel(src)
+
/obj/effect/spider/proc/healthcheck()
if(health <= 0)
- qdel(src)
+ die()
/obj/effect/spider/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 300 + T0C)
@@ -148,7 +151,7 @@
layer = HIDING_LAYER
health = 3
var/last_itch = 0
- var/amount_grown = -1
+ var/amount_grown = 0
var/obj/machinery/atmospherics/unary/vent_pump/entry_vent
var/travelling_in_vent = 0
var/list/grow_as = list(/mob/living/simple_mob/animal/giant_spider, /mob/living/simple_mob/animal/giant_spider/nurse, /mob/living/simple_mob/animal/giant_spider/hunter)
@@ -187,16 +190,17 @@
else
..()
-/obj/effect/spider/spiderling/proc/die()
+/obj/effect/spider/spiderling/die()
visible_message("[src] dies!")
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
- qdel(src)
+ ..()
/obj/effect/spider/spiderling/healthcheck()
if(health <= 0)
die()
/obj/effect/spider/spiderling/process()
+ healthcheck()
if(travelling_in_vent)
if(istype(src.loc, /turf))
travelling_in_vent = 0
diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm
index a6e1ef3c2d..b9895428b7 100644
--- a/code/game/objects/items/contraband.dm
+++ b/code/game/objects/items/contraband.dm
@@ -1,6 +1,8 @@
-//Let's get some REAL contraband stuff in here. Because come on, getting brigged for LIPSTICK is no fun.
-
-//Illicit drugs~
+// Let's get some REAL contraband stuff in here. Because come on, getting brigged for LIPSTICK is no fun.
+//
+// Includes drug powder.
+//
+// Illicit drugs~
/obj/item/weapon/storage/pill_bottle/happy
name = "bottle of Happy pills"
desc = "Highly illegal drug. When you want to see the rainbow."
@@ -19,7 +21,7 @@
/obj/item/weapon/reagent_containers/glass/beaker/vial/random/toxin
random_reagent_list = list(
- list("mindbreaker" = 10, "space_drugs" = 20) = 3,
+ list("mindbreaker" = 10, "bliss" = 20) = 3,
list("carpotoxin" = 15) = 2,
list("impedrezene" = 15) = 2,
list("zombiepowder" = 10) = 1)
@@ -39,3 +41,56 @@
desc = "Contains [english_list(names)]."
update_icon()
+
+//
+// Drug Powder
+//
+/obj/item/weapon/reagent_containers/powder
+ name = "powder"
+ desc = "A powdered form of... something."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "powder"
+ item_state = "powder"
+ amount_per_transfer_from_this = 2
+ possible_transfer_amounts = 2
+ w_class = ITEMSIZE_TINY
+ volume = 50
+
+/obj/item/weapon/reagent_containers/powder/examine(mob/user)
+ if(reagents)
+ var/datum/reagent/R = reagents.get_master_reagent()
+ desc = "A powdered form of what appears to be [R.name]. There's about [reagents.total_volume] units here."
+ return ..()
+
+/obj/item/weapon/reagent_containers/powder/Initialize()
+ ..()
+ get_appearance()
+
+/obj/item/weapon/reagent_containers/powder/proc/get_appearance()
+ /// Names and colors based on dominant reagent.
+ if (reagents.reagent_list.len > 0)
+ color = reagents.get_color()
+ var/datum/reagent/R = reagents.get_master_reagent()
+ var/new_name = lowertext(R)
+ name = "powdered [new_name]"
+
+/// Snorting.
+
+/obj/item/weapon/reagent_containers/powder/attackby(var/obj/item/weapon/W, var/mob/living/user)
+
+ if(!ishuman(user)) /// You gotta be fleshy to snort the naughty drugs.
+ return ..()
+
+ if(!istype(W, /obj/item/weapon/glass_extra/straw) && !istype(W, /obj/item/weapon/reagent_containers/rollingpaper))
+ return ..()
+
+ user.visible_message("[user] snorts [src] with [W]!")
+ playsound(loc, 'sound/effects/snort.ogg', 50, 1)
+
+ if(reagents)
+ reagents.trans_to_mob(user, amount_per_transfer_from_this, CHEM_BLOOD)
+
+ if(!reagents.total_volume) /// Did we use all of it?
+ qdel(src)
+
+////// End powder. /////////
\ No newline at end of file
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index f0ff01c05a..4a800e9292 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -144,7 +144,7 @@
to_chat(user, "There's visible lag between left and right pupils' reactions.")
var/list/pinpoint = list("oxycodone"=1,"tramadol"=5)
- var/list/dilating = list("space_drugs"=5,"mindbreaker"=1)
+ var/list/dilating = list("bliss"=5,"ambrosia_extract"=5,"mindbreaker"=1)
if(M.reagents.has_any_reagent(pinpoint) || H.ingested.has_any_reagent(pinpoint))
to_chat(user, "\The [M]'s pupils are already pinpoint and cannot narrow any more.")
else if(M.reagents.has_any_reagent(dilating) || H.ingested.has_any_reagent(dilating))
diff --git a/code/game/objects/items/stacks/stack_vr.dm b/code/game/objects/items/stacks/stack_vr.dm
index 25ea848ffb..eb00a7ee9a 100644
--- a/code/game/objects/items/stacks/stack_vr.dm
+++ b/code/game/objects/items/stacks/stack_vr.dm
@@ -3,6 +3,10 @@
/obj/item/stack/proc/merge(obj/item/stack/S) //Merge src into S, as much as possible
if(uses_charge || S.uses_charge) // This should realistically never happen, but in case it does lets avoid breaking things.
return
+ if(S.stacktype != stacktype)
+ return
+ if(S.amount >= S.max_amount)
+ return
var/transfer = get_amount()
transfer = min(transfer, S.max_amount - S.amount)
@@ -15,6 +19,6 @@
S.add(transfer)
/obj/item/stack/Crossed(var/atom/movable/AM)
- if(AM != src && istype(AM, src.type) && !AM.throwing)
+ if(isturf(AM.loc) && AM != src && istype(AM, src.type) && !AM.throwing)
merge(AM)
return ..()
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/capture_crystal.dm b/code/game/objects/items/weapons/capture_crystal.dm
index 104145d8ce..46b935419e 100644
--- a/code/game/objects/items/weapons/capture_crystal.dm
+++ b/code/game/objects/items/weapons/capture_crystal.dm
@@ -226,6 +226,13 @@
//Tries to unleash or recall your stored mob
/obj/item/capture_crystal/attack_self(mob/living/user)
+ if(bound_mob && !owner)
+ if(bound_mob == user)
+ to_chat(user, "\The [src] emits an unpleasant tone... It does not activate for you.")
+ playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
+ return
+ if(tgui_alert(user, "\The [src] hasn't got an owner. It has \the [bound_mob] registered to it. Would you like to claim this as yours?", "Claim ownership", list("No","Yes")) == "Yes")
+ owner = user
if(!cooldown_check())
to_chat(user, "\The [src] emits an unpleasant tone... It is not ready yet.")
if(bound_mob)
diff --git a/code/game/objects/items/weapons/chewables.dm b/code/game/objects/items/weapons/chewables.dm
index a715fee32c..59e95f103f 100644
--- a/code/game/objects/items/weapons/chewables.dm
+++ b/code/game/objects/items/weapons/chewables.dm
@@ -287,13 +287,12 @@
desc = "A chocolate-coated biscuit stick."
icon_state = "pockystick"
item_state = "pocky"
+ filling = list("sugar" = 2, "chocolate" = 5)
type_butt = null
/obj/item/clothing/mask/chewable/candy/pocky/process()
chew()
if(chewtime < 1)
+ if(ismob(loc))
+ to_chat(loc, "There's no more of \the [name] left!")
spitout(0)
-
-/obj/item/clothing/mask/chewable/candy/pocky/Initialize()
- . = ..()
- reagents.add_reagent("chocolate", 10)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 7f7bdbca03..d85e21ae1c 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -116,7 +116,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(ishuman(loc))
var/mob/living/carbon/human/C = loc
if (src == C.wear_mask && C.check_has_mouth()) // if it's in the human/monkey mouth, transfer reagents to the mob
- reagents.trans_to_mob(C, REM, CHEM_INGEST, 0.2) // Most of it is not inhaled... balance reasons.
+ reagents.trans_to_mob(C, amount, CHEM_INGEST, 1.5) // I don't predict significant balance issues by letting blunts actually WORK.
else // else just remove some of the reagents
reagents.remove_any(REM)
diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm
index 30ef860641..a2a8075acf 100644
--- a/code/game/objects/items/weapons/material/knives.dm
+++ b/code/game/objects/items/weapons/material/knives.dm
@@ -88,7 +88,7 @@
name = "combat knife"
desc = "If only you had a boot to put it in."
icon = 'icons/obj/weapons.dmi'
- icon_state = "tacknife"
+ icon_state = "tacknife2"
item_state = "knife"
force_divisor = 0.34 // 20 with hardness 60 (steel)
thrown_force_divisor = 1.75 // 20 with weight 20 (steel)
@@ -101,7 +101,7 @@
name = "boot knife"
desc = "A small fixed-blade knife for putting inside a boot."
icon = 'icons/obj/weapons.dmi'
- icon_state = "tacknife"
+ icon_state = "tacknife3"
item_state = "knife"
force_divisor = 0.15
applies_material_colour = 0
@@ -130,7 +130,7 @@
/obj/item/weapon/material/knife/butch
name = "butcher's cleaver"
- icon_state = "butch"
+ icon_state = "cleaver"
desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown-by-products."
force_divisor = 0.25 // 15 when wielded with hardness 60 (steel)
attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
diff --git a/code/game/objects/items/weapons/storage/bags_vr.dm b/code/game/objects/items/weapons/storage/bags_vr.dm
index 6f9d0a0b15..ccafe5fa63 100644
--- a/code/game/objects/items/weapons/storage/bags_vr.dm
+++ b/code/game/objects/items/weapons/storage/bags_vr.dm
@@ -1,2 +1,15 @@
/obj/item/weapon/storage/bag/chemistry
slot_flags = null
+
+/obj/item/weapon/storage/bag/xeno
+ name = "xenobiology bag"
+ icon = 'icons/obj/storage.dmi'
+ icon_state = "chembag"
+ max_storage_space = ITEMSIZE_COST_SMALL * 12
+ max_w_class = ITEMSIZE_NORMAL
+ w_class = ITEMSIZE_SMALL
+ can_hold = list(
+ /obj/item/slime_extract,
+ /obj/item/slimepotion,
+ /obj/item/weapon/reagent_containers/food/snacks/monkeycube
+ )
\ No newline at end of file
diff --git a/code/game/objects/random/unidentified/medicine.dm b/code/game/objects/random/unidentified/medicine.dm
index ffd134384a..3bd10ba4f2 100644
--- a/code/game/objects/random/unidentified/medicine.dm
+++ b/code/game/objects/random/unidentified/medicine.dm
@@ -32,7 +32,7 @@ much more likely to show up. This is done for several purposes;
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/healing_nanites/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm/unidentified,
- /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/space_drugs/unidentified,
+ /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/expired/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium/unidentified,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin/unidentified,
@@ -108,7 +108,7 @@ much more likely to show up. This is done for several purposes;
prob(5);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting/unidentified,
prob(40);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/combat/unidentified,
prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm/unidentified,
- prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/space_drugs/unidentified,
+ prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss/unidentified,
prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/serotrotium/unidentified,
prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin/unidentified,
prob(20);/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/mindbreaker/unidentified,
diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
index d9692abdc3..c592c3e69f 100644
--- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
@@ -49,7 +49,8 @@
/obj/structure/closet/l3closet/scientist/double
starts_with = list(
/obj/item/clothing/suit/bio_suit/scientist = 2,
- /obj/item/clothing/head/bio_hood/scientist = 2)
+ /obj/item/clothing/head/bio_hood/scientist = 2,
+ /obj/item/weapon/storage/bag/xeno = 2) // VOREEdit, adding the xenobag to xenobio.
/obj/structure/closet/l3closet/medical
diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm
index 3a1bf84386..1af54a1b4e 100644
--- a/code/game/objects/structures/tank_dispenser.dm
+++ b/code/game/objects/structures/tank_dispenser.dm
@@ -3,7 +3,7 @@
/obj/structure/dispenser
name = "tank storage unit"
desc = "A simple yet bulky storage device for gas tanks. Has room for up to ten oxygen tanks, and ten phoron tanks."
- icon = 'icons/obj/objects.dmi'
+ icon = 'icons/obj/objects_vr.dmi'
icon_state = "dispenser"
density = TRUE
anchored = TRUE
diff --git a/code/modules/client/preference_setup/loadout/loadout_general_vr.dm b/code/modules/client/preference_setup/loadout/loadout_general_vr.dm
index 9b72d27aba..3daa644f6b 100644
--- a/code/modules/client/preference_setup/loadout/loadout_general_vr.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_general_vr.dm
@@ -90,4 +90,9 @@
/datum/gear/textmug
display_name = "mug with text"
description = "A mug with something written on it."
- path = /obj/item/weapon/reagent_containers/food/drinks/textmug
\ No newline at end of file
+ path = /obj/item/weapon/reagent_containers/food/drinks/textmug
+
+/datum/gear/schnapsen
+ display_name = "schnapsen playing cards"
+ description = "French-suit playing cards! Pre-picked for 2-player mode."
+ path = /obj/item/weapon/deck/schnapsen
diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm
index c342fb9b3e..931a3c1f58 100644
--- a/code/modules/client/preference_setup/vore/07_traits.dm
+++ b/code/modules/client/preference_setup/vore/07_traits.dm
@@ -198,13 +198,21 @@
. += " "
. += "Custom Say: "
- . += "Set Say Verb "
+ . += "Set Say Verb"
+ . += "(Reset)"
+ . += " "
. += "Custom Whisper: "
- . += "Set Whisper Verb "
+ . += "Set Whisper Verb"
+ . += "(Reset)"
+ . += " "
. += "Custom Ask: "
- . += "Set Ask Verb "
+ . += "Set Ask Verb"
+ . += "(Reset)"
+ . += " "
. += "Custom Exclaim: "
- . += "Set Exclaim Verb "
+ . += "Set Exclaim Verb"
+ . += "(Reset)"
+ . += " "
/datum/category_item/player_setup_item/vore/traits/OnTopic(var/href,var/list/href_list, var/mob/user)
if(!CanUseTopic(user))
@@ -283,6 +291,30 @@
pref.custom_exclaim = exclaim_choice
return TOPIC_REFRESH
+ else if(href_list["reset_say"])
+ var/say_choice = tgui_alert(usr, "Reset your Custom Say Verb?","Reset Verb",list("Yes","No"))
+ if(say_choice == "Yes")
+ pref.custom_say = null
+ return TOPIC_REFRESH
+
+ else if(href_list["reset_whisper"])
+ var/whisper_choice = tgui_alert(usr, "Reset your Custom Whisper Verb?","Reset Verb",list("Yes","No"))
+ if(whisper_choice == "Yes")
+ pref.custom_whisper = null
+ return TOPIC_REFRESH
+
+ else if(href_list["reset_ask"])
+ var/ask_choice = tgui_alert(usr, "Reset your Custom Ask Verb?","Reset Verb",list("Yes","No"))
+ if(ask_choice == "Yes")
+ pref.custom_ask = null
+ return TOPIC_REFRESH
+
+ else if(href_list["reset_exclaim"])
+ var/exclaim_choice = tgui_alert(usr, "Reset your Custom Exclaim Verb?","Reset Verb",list("Yes","No"))
+ if(exclaim_choice == "Yes")
+ pref.custom_exclaim = null
+ return TOPIC_REFRESH
+
else if(href_list["add_trait"])
var/mode = text2num(href_list["add_trait"])
var/list/picklist
diff --git a/code/modules/clothing/under/tribal.dm b/code/modules/clothing/under/tribal.dm
index 10894e5ae4..93e178aeed 100644
--- a/code/modules/clothing/under/tribal.dm
+++ b/code/modules/clothing/under/tribal.dm
@@ -11,6 +11,7 @@
name = "primitive clothes"
desc = "Some patched together rags. Better than being naked."
force = 0
+ has_sensor = 0
icon_state = "rag"
worn_state = "rag"
@@ -41,26 +42,31 @@
name = "tribalwear"
desc = "A traditionally woven robe made with locally sourced material."
icon_state = "tribal_common1"
+ has_sensor = 0
/obj/item/clothing/under/tribalwear/common2
name = "tribalwear"
desc = "A traditionally woven outfit made with locally sourced material."
icon_state = "tribal_common2"
+ has_sensor = 0
/obj/item/clothing/under/tribalwear/hunter
name = "hunting tribalwear"
desc = "Dusty rags decorated with strips of leather and small pieces of cyan colored stones."
icon_state = "tribal_hunter"
+ has_sensor = 0
/obj/item/clothing/under/tribalwear/chief
name = "chief's tribalwear"
desc = "Well maintained robe adorned with fine leather and polished cyan stones."
icon_state = "tribal_chief"
+ has_sensor = 0
/obj/item/clothing/under/tribalwear/shaman
name = "shaman robes"
desc = "Carefully hand wozen cloth robes with heavy colored stones jewelry drapped over top."
icon_state = "tribal_shaman"
+ has_sensor = 0
/obj/item/clothing/shoes/tribalwear
name = "tribal sandals"
diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm
index 2b53ccac85..d0ef6be1eb 100644
--- a/code/modules/economy/vending_machines.dm
+++ b/code/modules/economy/vending_machines.dm
@@ -530,6 +530,7 @@
/obj/item/seeds/cocoapodseed = 3,
/obj/item/seeds/plumpmycelium = 2,
/obj/item/seeds/cabbageseed = 3,
+ /obj/item/seeds/lettuce = 3,
/obj/item/seeds/grapeseed = 3,
/obj/item/seeds/pumpkinseed = 3,
/obj/item/seeds/cherryseed = 3,
@@ -1530,7 +1531,7 @@
has_logs = 1
/obj/machinery/vending/wardrobe/lawdrobe
- name = "lawyer wardrobe vendor"
+ name = "IAA wardrobe vendor"
desc = "All the things you need to perform your job! Why didn't you already have them?"
product_slogans = "Want to do your job? Sure you do!"
icon_state = "lawdrobe"
diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm
index b1d3baa97d..db37cd13ce 100644
--- a/code/modules/food/food/snacks.dm
+++ b/code/modules/food/food/snacks.dm
@@ -1083,7 +1083,7 @@
icon_state = "dankpocket"
nutriment_amt = 2
nutriment_desc = list("heartiness" = 1, "dough" = 2)
- heated_reagents = list("space_drugs" = 5)
+ heated_reagents = list("bliss" = 5)
/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket
name = "\improper Sin-pocket"
@@ -3283,7 +3283,7 @@
/obj/item/weapon/reagent_containers/food/snacks/sliceable/cosmicbrownies/Initialize()
. = ..()
reagents.add_reagent("protein", 2)
- reagents.add_reagent("space_drugs", 2)
+ reagents.add_reagent("ambrosia_extract", 2)
reagents.add_reagent("bicaridine", 1)
reagents.add_reagent("kelotane", 1)
reagents.add_reagent("toxin", 1)
@@ -4086,7 +4086,7 @@
reagents.add_reagent("oxycodone", 1)
reagents.add_reagent("sifsap", 5)
- reagents.add_reagent("space_drugs", 5)
+ reagents.add_reagent("bliss", 5)
/obj/item/weapon/reagent_containers/food/snacks/bellefritter
name = "frostbelle fritters"
diff --git a/code/modules/food/food/thecake.dm b/code/modules/food/food/thecake.dm
index 0b45d1eeb6..d10cb35a4a 100644
--- a/code/modules/food/food/thecake.dm
+++ b/code/modules/food/food/thecake.dm
@@ -201,7 +201,7 @@
desc = "A mysterious slice, coated in purple frosting that smells like grapes."
nutriment_desc = list("The desire to show off an party" = 10)
reagents.add_reagent("stoxin", 2)
- reagents.add_reagent("space_drugs", 10)
+ reagents.add_reagent("bliss", 10)
reagents.add_reagent("serotrotium", 4)
reagents.add_reagent("cryptobiolin", 8)
reagents.add_reagent("mindbreaker", 10)
diff --git a/code/modules/food/recipes_grill.dm b/code/modules/food/recipes_grill.dm
index 9a71472d6e..df92a7148a 100644
--- a/code/modules/food/recipes_grill.dm
+++ b/code/modules/food/recipes_grill.dm
@@ -281,7 +281,7 @@
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
)
reagents = list("spacespice" = 1)
- fruit = list("cabbage" = 1, "lime" = 1)
+ fruit = list("lettuce" = 1, "lime" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/grilled_carp
/datum/recipe/grilledcheese
diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm
index b7616c982c..7b30e0f5c1 100644
--- a/code/modules/food/recipes_microwave.dm
+++ b/code/modules/food/recipes_microwave.dm
@@ -433,7 +433,7 @@ I said no!
result = /obj/item/weapon/reagent_containers/food/snacks/beetsoup
/datum/recipe/tossedsalad
- fruit = list("cabbage" = 2, "tomato" = 1, "carrot" = 1, "apple" = 1)
+ fruit = list("lettuce" = 2, "tomato" = 1, "carrot" = 1, "apple" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/tossedsalad
/datum/recipe/flowersalad
@@ -1083,7 +1083,7 @@ I said no!
result = /obj/item/weapon/reagent_containers/food/snacks/fish_taco
/datum/recipe/blt
- fruit = list("tomato" = 1, "cabbage" = 1)
+ fruit = list("tomato" = 1, "lettuce" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
diff --git a/code/modules/food/recipes_microwave_vr.dm b/code/modules/food/recipes_microwave_vr.dm
index 329c3e1198..31c9d1268c 100644
--- a/code/modules/food/recipes_microwave_vr.dm
+++ b/code/modules/food/recipes_microwave_vr.dm
@@ -100,7 +100,7 @@
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/sushi
/datum/recipe/lobster
- fruit = list("lemon" = 1, "cabbage" = 1)
+ fruit = list("lemon" = 1, "lettuce" = 1)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/lobster
)
diff --git a/code/modules/games/schnapsen_vr.dm b/code/modules/games/schnapsen_vr.dm
new file mode 100644
index 0000000000..b10d6890e5
--- /dev/null
+++ b/code/modules/games/schnapsen_vr.dm
@@ -0,0 +1,29 @@
+// this is a playing card deck based off of the Austrian/Hungarian national card game, Schnapsen
+//TODO: Sprite up Double German/William Tell card icons. Sending this in as is as I suck at spriting and want to play schnapsen
+//TODO: Implement functionality for "sub-decks": Create a over-schnapsen deck with nines, eights and sevens.
+//TODO:Let players choose 2,3,4 player mode to get decks of ace/ten/jack/queen/king + seven for 3 player, nine+eight for 4 player modes.
+
+/obj/item/weapon/deck/schnapsen
+ name = "deck of schnapsen cards"
+ desc = "An ancient trick-taking card game from a bygone-Earth country. For 2 players!"
+ icon_state = "deck"
+
+/obj/item/weapon/deck/schnapsen/New()
+ ..()
+ //Stealing french card icons.
+ var/datum/playingcard/P
+ var/colour
+ for(var/suit in list("spades","clubs","diamonds","hearts"))
+ if(suit == "spades" || suit == "clubs")
+ colour = "black_"
+ else
+ colour = "red_"
+ for(var/number in list("ace","ten","jack","queen","king")) //Schnapsen has knight worth 2 pts, queen 3 pts, king 4. Ace 11, ten 10
+ P = new()
+ P.name = "[number] of [suit]"
+ if(number == "ten")
+ P.card_icon = "[colour]num"
+ else
+ P.card_icon = "[colour]col"
+ P.back_icon = "card_back"
+ cards += P
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index bc2bfaffb8..288e66bb1b 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -88,7 +88,7 @@
descriptors |= "radioactive"
if(reagents.has_reagent("amatoxin") || reagents.has_reagent("toxin"))
descriptors |= "poisonous"
- if(reagents.has_reagent("psilocybin") || reagents.has_reagent("space_drugs") || reagents.has_reagent("earthsblood"))
+ if(reagents.has_reagent("psilocybin") || reagents.has_reagent("bliss") || reagents.has_reagent("earthsblood"))
descriptors |= "hallucinogenic"
if(reagents.has_reagent("bicaridine") || reagents.has_reagent("earthsblood"))
descriptors |= "medicinal"
@@ -185,7 +185,7 @@
pocell.charge = pocell.maxcharge
qdel(src)
return
-
+
if(W.sharp)
if(seed.kitchen_tag == "pumpkin") // Ugggh these checks are awful.
@@ -213,7 +213,7 @@
to_chat(user, "You add the newly-formed wood to the stack. It now contains [NG.get_amount()] planks.")
qdel(src)
return
-
+
if(seed.kitchen_tag == "sunflower")
new /obj/item/weapon/reagent_containers/food/snacks/rawsunflower(get_turf(src))
to_chat(user, SPAN_NOTICE("You remove the seeds from the flower, slightly damaging them."))
@@ -225,25 +225,25 @@
new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src))
qdel(src)
return
-
+
if(!isnull(seed.chems["carrotjuice"]))
to_chat(user, "You slice \the [src] into sticks.")
new /obj/item/weapon/reagent_containers/food/snacks/carrotfries(get_turf(src))
qdel(src)
return
-
+
if(!isnull(seed.chems["pineapplejuice"]))
to_chat(user, "You slice \the [src] into rings.")
new /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring(get_turf(src))
qdel(src)
return
-
+
if(!isnull(seed.chems["soymilk"]))
to_chat(user, "You roughly chop up \the [src].")
new /obj/item/weapon/reagent_containers/food/snacks/soydope(get_turf(src))
qdel(src)
return
-
+
if(seed.get_trait(TRAIT_FLESH_COLOUR))
to_chat(user, "You slice up \the [src].")
var/slices = rand(3,5)
diff --git a/code/modules/hydroponics/seedtypes/ambrosia.dm b/code/modules/hydroponics/seedtypes/ambrosia.dm
index 6a6dda8a14..289b182d9a 100644
--- a/code/modules/hydroponics/seedtypes/ambrosia.dm
+++ b/code/modules/hydroponics/seedtypes/ambrosia.dm
@@ -5,7 +5,7 @@
display_name = "ambrosia vulgaris"
kitchen_tag = "ambrosia"
mutants = list("ambrosiadeus")
- chems = list("nutriment" = list(1), "space_drugs" = list(1,8), "kelotane" = list(1,8,1), "bicaridine" = list(1,10,1), "toxin" = list(1,10))
+ chems = list("nutriment" = list(1), "ambrosia_extract" = list(1,8), "kelotane" = list(1,8,1), "bicaridine" = list(1,10,1))
/datum/seed/ambrosia/New()
..()
@@ -25,7 +25,7 @@
display_name = "ambrosia deus"
kitchen_tag = "ambrosiadeus"
mutants = list("ambrosiainfernus", "ambrosiagaia")
- chems = list("nutriment" = list(1), "bicaridine" = list(1,8), "synaptizine" = list(1,8,1), "hyperzine" = list(1,10,1), "space_drugs" = list(1,10))
+ chems = list("nutriment" = list(1), "bicaridine" = list(1,8), "synaptizine" = list(1,8,1), "hyperzine" = list(1,10,1), "ambrosia_extract" = list(1,10))
/datum/seed/ambrosia/deus/New()
..()
@@ -38,7 +38,7 @@
display_name = "ambrosia infernus"
kitchen_tag = "ambrosiainfernus"
mutants = null
- chems = list("nutriment" = list(1,3), "oxycodone" = list(1,8), "impedrezene" = list(1,10), "mindbreaker" = list(1,10))
+ chems = list("nutriment" = list(1,3), "oxycodone" = list(1,8), "impedrezene" = list(1,10), "mindbreaker" = list(1,10), "ambrosia_extract" = list(1,10))
/datum/seed/ambrosia/infernus/New()
..()
diff --git a/code/modules/hydroponics/seedtypes/lettuce.dm b/code/modules/hydroponics/seedtypes/lettuce.dm
index ae2830f88a..b9293fbed7 100644
--- a/code/modules/hydroponics/seedtypes/lettuce.dm
+++ b/code/modules/hydroponics/seedtypes/lettuce.dm
@@ -3,7 +3,7 @@
name = "lettuce"
seed_name = "lettuce"
display_name = "lettuce"
- kitchen_tag = "cabbage"
+ kitchen_tag = "lettuce"
chems = list("nutriment" = list(1,15))
/datum/seed/lettuce/New()
diff --git a/code/modules/hydroponics/seedtypes/mushrooms.dm b/code/modules/hydroponics/seedtypes/mushrooms.dm
index 6f3b36c806..4be5e0fb31 100644
--- a/code/modules/hydroponics/seedtypes/mushrooms.dm
+++ b/code/modules/hydroponics/seedtypes/mushrooms.dm
@@ -80,7 +80,7 @@
seed_name = "liberty cap"
display_name = "liberty cap mushrooms"
mutants = null
- chems = list("nutriment" = list(1), "stoxin" = list(3,3), "space_drugs" = list(1,25))
+ chems = list("nutriment" = list(1), "stoxin" = list(3,3), "bliss" = list(1,25))
/datum/seed/mushroom/hallucinogenic/strong/New()
..()
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index c24194b090..4abf6898bf 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -6,7 +6,7 @@ var/list/mining_overlay_cache = list()
icon = 'icons/turf/walls.dmi'
icon_state = "rock-dark"
density = TRUE
-
+
/turf/simulated/mineral //wall piece
name = "rock"
icon = 'icons/turf/walls.dmi'
@@ -23,6 +23,8 @@ var/list/mining_overlay_cache = list()
var/rock_side_icon_state = "rock_side"
var/sand_icon_state = "asteroid"
var/rock_icon_state = "rock"
+ var/sand_icon_path = 'icons/turf/flooring/asteroid.dmi' // Override this on a subtype turf if you want a custom icon
+ var/rock_icon_path = 'icons/turf/walls.dmi' // Override this on a subtype turf if you want a custom icon
var/random_icon = 0
var/ore/mineral
@@ -30,6 +32,7 @@ var/list/mining_overlay_cache = list()
var/mined_ore = 0
var/last_act = 0
var/overlay_detail
+ var/overlay_detail_icon_path = 'icons/turf/flooring/decals.dmi' // Override this on a subtype turf if you want a custom icon
var/datum/geosample/geologic_data
var/excavation_level = 0
@@ -220,7 +223,7 @@ var/list/mining_overlay_cache = list()
else
name = "rock"
- icon = 'icons/turf/walls.dmi'
+ icon = rock_icon_path
icon_state = rock_icon_state
//Apply overlays if we should have borders
@@ -238,7 +241,7 @@ var/list/mining_overlay_cache = list()
//We are a sand floor
else
name = floor_name
- icon = 'icons/turf/flooring/asteroid.dmi'
+ icon = sand_icon_path
icon_state = sand_icon_state
if(sand_dug)
@@ -253,10 +256,10 @@ var/list/mining_overlay_cache = list()
else
var/turf/T = get_step(src, direction)
if(istype(T) && T.density)
- add_overlay(get_cached_border(rock_side_icon_state,direction,'icons/turf/walls.dmi',rock_side_icon_state))
+ add_overlay(get_cached_border(rock_side_icon_state,direction,rock_icon_path,rock_side_icon_state))
if(overlay_detail)
- add_overlay('icons/turf/flooring/decals.dmi',overlay_detail)
+ add_overlay(overlay_detail_icon_path,overlay_detail)
if(update_neighbors)
for(var/direction in alldirs)
diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm
index e6d86dcf0d..083da22d3d 100644
--- a/code/modules/mob/living/bot/farmbot.dm
+++ b/code/modules/mob/living/bot/farmbot.dm
@@ -330,7 +330,7 @@
/obj/item/weapon/farmbot_arm_assembly
name = "water tank/robot arm assembly"
desc = "A water tank with a robot arm permanently grafted to it."
- icon = 'icons/obj/aibots.dmi'
+ icon = 'icons/obj/chemical_tanks.dmi'
icon_state = "water_arm"
var/build_step = 0
var/created_name = "Farmbot"
diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm
index 66bf9133ec..cfa6421c6f 100644
--- a/code/modules/mob/living/carbon/brain/brain.dm
+++ b/code/modules/mob/living/carbon/brain/brain.dm
@@ -70,3 +70,31 @@
typing = FALSE
return state
+
+// Vorestation edit start
+
+/mob/living/carbon/brain/verb/backup_ping()
+ set category = "IC"
+ set name = "Notify Transcore"
+ set desc = "Your body is gone. Notify robotics to be resleeved!"
+ var/datum/transcore_db/db = SStranscore.db_by_mind_name(mind.name)
+ if(db)
+ var/datum/transhuman/mind_record/record = db.backed_up[src.mind.name]
+ if(!(record.dead_state == MR_DEAD))
+ if((world.time - timeofhostdeath ) > 5 MINUTES) //Allows notify transcore to be used if you have an entry but for some reason weren't marked as dead
+ record.dead_state = MR_DEAD //Such as if you got scanned but didn't take an implant. It's a little funky, but I mean, you got scanned
+ db.notify(record) //So you probably will want to let someone know if you die.
+ record.last_notification = world.time
+ to_chat(src, "New notification has been sent.")
+ else
+ to_chat(src, "Your backup is not past-due yet.")
+ else if((world.time - record.last_notification) < 5 MINUTES)
+ to_chat(src, "Too little time has passed since your last notification.")
+ else
+ db.notify(record)
+ record.last_notification = world.time
+ to_chat(src, "New notification has been sent.")
+ else
+ to_chat(src,"No backup record could be found, sorry.")
+
+// VS edit ends
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index c9d4dfad52..b0557e2bc1 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -430,6 +430,10 @@
else
chem_effects[effect] = magnitude
+/mob/living/carbon/proc/remove_chemical_effect(var/effect, var/magnitude)
+ if(effect in chem_effects)
+ chem_effects[effect] = magnitude ? max(0,chem_effects[effect]-magnitude) : 0
+
/mob/living/carbon/get_default_language()
if(default_language)
if(can_speak(default_language))
diff --git a/code/modules/mob/living/carbon/human/MedicalSideEffects.dm b/code/modules/mob/living/carbon/human/MedicalSideEffects.dm
index 6946f26a80..b37dff23ac 100644
--- a/code/modules/mob/living/carbon/human/MedicalSideEffects.dm
+++ b/code/modules/mob/living/carbon/human/MedicalSideEffects.dm
@@ -134,7 +134,7 @@
// ====
/datum/medical_effect/itch
name = "Itch"
- triggers = list("space_drugs" = 10)
+ triggers = list("bliss" = 10)
cures = list("inaprovaline")
cure_message = "The itching stops..."
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 51529e04db..76cb94c948 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -84,6 +84,8 @@
handle_shock()
handle_pain()
+
+ handle_allergens()
handle_medical_side_effects()
@@ -638,6 +640,35 @@
breath.update_values()
return 1
+/mob/living/carbon/human/proc/handle_allergens()
+ if(chem_effects[CE_ALLERGEN])
+ //first, multiply the basic species-level value by our allergen effect rating, so consuming multiple seperate allergen typess simultaneously hurts more
+ var/damage_severity = species.allergen_damage_severity * chem_effects[CE_ALLERGEN]
+ var/disable_severity = species.allergen_disable_severity * chem_effects[CE_ALLERGEN]
+ if(species.allergen_reaction & AG_PHYS_DMG)
+ adjustBruteLoss(damage_severity)
+ if(species.allergen_reaction & AG_BURN_DMG)
+ adjustFireLoss(damage_severity)
+ if(species.allergen_reaction & AG_TOX_DMG)
+ adjustToxLoss(damage_severity)
+ if(species.allergen_reaction & AG_OXY_DMG)
+ adjustOxyLoss(damage_severity)
+ if(prob(disable_severity/2))
+ emote(pick("cough","gasp","choke"))
+ if(species.allergen_reaction & AG_EMOTE)
+ if(prob(disable_severity/2))
+ emote(pick("pale","shiver","twitch"))
+ if(species.allergen_reaction & AG_PAIN)
+ adjustHalLoss(disable_severity)
+ if(species.allergen_reaction & AG_WEAKEN)
+ Weaken(disable_severity)
+ if(species.allergen_reaction & AG_BLURRY)
+ eye_blurry = max(eye_blurry, disable_severity)
+ if(species.allergen_reaction & AG_SLEEPY)
+ drowsyness = max(drowsyness, disable_severity)
+ if(species.allergen_reaction & AG_CONFUSE)
+ Confuse(disable_severity/4)
+
/mob/living/carbon/human/handle_environment(datum/gas_mixture/environment)
if(!environment)
return
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 9dd1eaffe7..91770ff1f4 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -53,9 +53,9 @@
var/taste_sensitivity = TASTE_NORMAL // How sensitive the species is to minute tastes.
var/allergens = null // Things that will make this species very sick
- var/allergen_reaction = AG_TOX_DMG|AG_OXY_DMG|AG_EMOTE|AG_PAIN|AG_BLURRY|AG_CONFUSE // What type of reactions will you have? These the 'main' options and are intended to approximate anaphylactic shock at high doses. VOREStation Edit'd.
- var/allergen_damage_severity = 4 // How bad are reactions to the allergen? Touch with extreme caution. VOREStation Edit'd.
- var/allergen_disable_severity = 4 // Whilst this determines how long nonlethal effects last and how common emotes are. VOREStation Edit'd.
+ var/allergen_reaction = AG_TOX_DMG|AG_OXY_DMG|AG_EMOTE|AG_PAIN|AG_BLURRY|AG_CONFUSE // What type of reactions will you have? These the 'main' options and are intended to approximate anaphylactic shock at high doses.
+ var/allergen_damage_severity = 2.5 // How bad are reactions to the allergen? Touch with extreme caution.
+ var/allergen_disable_severity = 10 // Whilst this determines how long nonlethal effects last and how common emotes are.
var/min_age = 17
var/max_age = 70
diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm
index 73cccb8fdc..23605b1067 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm
@@ -161,7 +161,7 @@
var/blood_color = species.blood_color
var/flesh_color = species.flesh_color
new /obj/effect/gibspawner/human/xenochimera(T, null, flesh_color, blood_color)
-
+
playsound(T, 'sound/effects/mob_effects/xenochimera/hatch.ogg', 50)
revive_ready = world.time + 10 MINUTES //set the cooldown CHOMPEdit: Reduced this to 10 minutes, you're playing with fire if you're reviving that often.
@@ -813,7 +813,7 @@
/mob/living/proc/flying_toggle()
set name = "Toggle Flight"
- set desc = "While flying over open spaces, you will use up some nutrition. If you run out nutrition, you will fall. Additionally, you can't fly if you are too heavy."
+ set desc = "While flying over open spaces, you will use up some nutrition. If you run out nutrition, you will fall."
set category = "Abilities"
var/mob/living/carbon/human/C = src
@@ -826,14 +826,25 @@
if(C.nutrition < 25 && !C.flying) //Don't have any food in you?" You can't fly.
to_chat(C, "You lack the nutrition to fly.")
return
- if(C.nutrition > 1000 && !C.flying)
- to_chat(C, "You have eaten too much to fly! You need to lose some nutrition.")
- return
C.flying = !C.flying
update_floating()
to_chat(C, "You have [C.flying?"started":"stopped"] flying.")
+/mob/living/
+ var/flight_vore = FALSE
+
+/mob/living/proc/flying_vore_toggle()
+ set name = "Toggle Flight Vore"
+ set desc = "Allows you to engage in voracious misadventures while flying."
+ set category = "Abilities"
+
+ flight_vore = !flight_vore
+ if(flight_vore)
+ to_chat(src, "You have allowed for flight vore! Bumping into characters while flying will now trigger dropnoms! Unless prefs don't match.. then you will take a tumble!")
+ else
+ to_chat(src, "Flight vore disabled! You will no longer engage dropnoms while in flight.")
+
//Proc to stop inertial_drift. Exchange nutrition in order to stop gliding around.
/mob/living/proc/start_wings_hovering()
set name = "Hover"
diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
index f11b4c3115..e2946cbbd9 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm
@@ -27,6 +27,7 @@
/mob/living/carbon/human/proc/sonar_ping,
/mob/living/carbon/human/proc/tie_hair,
/mob/living/proc/flying_toggle,
+ /mob/living/proc/flying_vore_toggle,
/mob/living/proc/start_wings_hovering) //Xenochimera get all the special verbs since they can't select traits.
virus_immune = 1 // They practically ARE one.
@@ -205,7 +206,7 @@
feral++
else
feral = max(0,--feral)
-
+
// Being in a belly or in the darkness decreases stress further. Helps mechanically reward players for staying in darkness + RP'ing appropriately. :9
var/turf/T = get_turf(H)
if(feral && (isbelly(H.loc) || T.get_lumcount() <= 0.1))
diff --git a/code/modules/mob/living/carbon/human/species/station/station_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_vr.dm
index b23a24c190..1c1941943b 100644
--- a/code/modules/mob/living/carbon/human/species/station/station_vr.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station_vr.dm
@@ -129,6 +129,7 @@
name_language = LANGUAGE_BIRDSONG
color_mult = 1
inherent_verbs = list(/mob/living/proc/flying_toggle,
+ /mob/living/proc/flying_vore_toggle,
/mob/living/proc/start_wings_hovering,
/mob/living/carbon/human/proc/tie_hair)
min_age = 18
@@ -356,7 +357,7 @@
name_language = null
color_mult = 1
genders = list(MALE, FEMALE, PLURAL, NEUTER)
- inherent_verbs = list(/mob/living/proc/flying_toggle,/mob/living/proc/start_wings_hovering,/mob/living/carbon/human/proc/tie_hair)
+ inherent_verbs = list(/mob/living/proc/flying_toggle,/mob/living/proc/flying_vore_toggle,/mob/living/proc/start_wings_hovering,/mob/living/carbon/human/proc/tie_hair)
min_age = 18
max_age = 80
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
index 8c54fbaee0..b0d9b66440 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
@@ -251,7 +251,7 @@
desc = "This trait drastically reduces the effects of allergen reactions. If you don't have any allergens set, it does nothing. It does not apply to special reactions (such as unathi drowsiness from sugars)."
cost = 0
custom_only = FALSE
- var_changes = list("allergen_damage_severity" = 2, "allergen_disable_severity" = 3)
+ var_changes = list("allergen_damage_severity" = 1.25, "allergen_disable_severity" = 5)
excludes = list(/datum/trait/neutral/allergen_increased_effect)
/datum/trait/neutral/allergen_increased_effect
@@ -259,7 +259,7 @@
desc = "This trait drastically increases the effects of allergen reactions, enough that even a small dose can be lethal. If you don't have any allergens set, it does nothing. It does not apply to special reactions (such as unathi drowsiness from sugars)."
cost = 0
custom_only = FALSE
- var_changes = list("allergen_damage_severity" = 8, "allergen_disable_severity" = 6)
+ var_changes = list("allergen_damage_severity" = 5, "allergen_disable_severity" = 20)
excludes = list(/datum/trait/neutral/allergen_reduced_effect)
// Spicy Food Traits, from negative to positive.
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm
index 2ef1c8f422..b6a3687829 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm
@@ -111,6 +111,7 @@
/datum/trait/positive/winged_flight/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.verbs |= /mob/living/proc/flying_toggle
+ H.verbs |= /mob/living/proc/flying_vore_toggle
H.verbs |= /mob/living/proc/start_wings_hovering
/datum/trait/positive/soft_landing
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index e08db4b575..9972a80b92 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -21,7 +21,8 @@
/obj/item/weapon/camera_assembly,
/obj/item/weapon/tank,
/obj/item/weapon/circuitboard,
- /obj/item/weapon/smes_coil
+ /obj/item/weapon/smes_coil,
+ /obj/item/weapon/fuel_assembly
)
var/obj/item/wrapped = null // Item currently being held.
diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm
index 3349bd433f..a5cab0546f 100644
--- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm
+++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm
@@ -36,7 +36,7 @@
var/vore_stomach_flavor // The flavortext for the first belly if not the default
var/vore_default_item_mode = IM_DIGEST_FOOD //How belly will interact with items
- var/vore_default_contaminates = TRUE //Will it contaminate?
+ var/vore_default_contaminates = FALSE //Will it contaminate?
var/vore_default_contamination_flavor = "Generic" //Contamination descriptors
var/vore_default_contamination_color = "green" //Contamination color
diff --git a/code/modules/mob/new_player/sprite_accessories_taur.dm b/code/modules/mob/new_player/sprite_accessories_taur.dm
index be53387d14..4637ac008e 100644
--- a/code/modules/mob/new_player/sprite_accessories_taur.dm
+++ b/code/modules/mob/new_player/sprite_accessories_taur.dm
@@ -333,3 +333,11 @@
icon_state = "mermaid_s"
can_ride = 0
icon_sprite_tag = "mermaid"
+
+/datum/sprite_accessory/tail/taur/noodle
+ name = "Eastern Dragon (Taur)"
+ icon_state = "noodle_s"
+ extra_overlay = "noodle_markings"
+ suit_sprites = 'icons/mob/taursuits_noodle.dmi'
+ clip_mask_state = "taur_clip_mask_noodle"
+ icon_sprite_tag = "noodle"
diff --git a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm
index 2bfb196e4d..320bea3898 100644
--- a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm
+++ b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm
@@ -583,4 +583,13 @@
icon_state = "rat_s"
extra_overlay = "rat_markings"
clip_mask_state = "taur_clip_mask_rat"
- icon_sprite_tag = "rat"
\ No newline at end of file
+ icon_sprite_tag = "rat"
+
+/datum/sprite_accessory/tail/taur/noodle
+ name = "Eastern Dragon (Taur)"
+ icon_state = "noodle_s"
+ extra_overlay = "noodle_markings"
+ extra_overlay2 = "noodle_markings_2"
+ suit_sprites = 'icons/mob/taursuits_noodle_vr.dmi'
+ clip_mask_state = "taur_clip_mask_noodle"
+ icon_sprite_tag = "noodle"
\ No newline at end of file
diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm
index f4fb3ffef8..b2a15865d8 100644
--- a/code/modules/multiz/movement.dm
+++ b/code/modules/multiz/movement.dm
@@ -243,9 +243,6 @@
if(L.incapacitated(INCAPACITATION_ALL))
L.stop_flying()
//Just here to see if the person is KO'd, stunned, etc. If so, it'll move onto can_fall.
- else if (L.nutrition > 1000) //Eat too much while flying? Get fat and fall.
- to_chat(L, "You're too heavy! Your wings give out and you plummit to the ground!")
- L.stop_flying() //womp womp.
else if(L.nutrition < 300 && L.nutrition > 299.4) //290 would be risky, as metabolism could mess it up. Let's do 289.
to_chat(L, "You are starting to get fatigued... You probably have a good minute left in the air, if that. Even less if you continue to fly around! You should get to the ground soon!") //Ticks are, on average, 3 seconds. So this would most likely be 90 seconds, but lets just say 60.
L.adjust_nutrition(-0.5)
diff --git a/code/modules/multiz/movement_vr.dm b/code/modules/multiz/movement_vr.dm
index 2df84190ce..49dd8eab97 100644
--- a/code/modules/multiz/movement_vr.dm
+++ b/code/modules/multiz/movement_vr.dm
@@ -43,13 +43,13 @@
var/mob/living/prey = src
var/fallloc = prey.loc
- if(pred.can_be_drop_pred && prey.can_be_drop_prey)
+ if(pred.can_be_drop_pred && prey.can_be_drop_prey && pred.drop_vore && prey.drop_vore)
pred.feed_grabbed_to_self_falling_nom(pred,prey)
pred.loc = fallloc
if(!safe_fall)
pred.Weaken(8)
pred.visible_message("\The [pred] falls right onto \the [prey]!")
- else if(prey.can_be_drop_pred && pred.can_be_drop_prey)
+ else if(prey.can_be_drop_pred && pred.can_be_drop_prey && pred.drop_vore && prey.drop_vore)
prey.feed_grabbed_to_self_falling_nom(prey,pred)
pred.Weaken(4)
pred.visible_message("\The [pred] falls right into \the [prey]!")
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index 852a086d97..eaafdcba81 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -6,7 +6,7 @@
name = "power cell"
desc = "A rechargable electrochemical power cell."
icon = 'icons/obj/power_cells.dmi'
- icon_state = "b_st"
+ icon_state = "standard"
item_state = "cell"
origin_tech = list(TECH_POWER = 1)
force = 5.0
diff --git a/code/modules/power/cells/device_cells.dm b/code/modules/power/cells/device_cells.dm
index b18b7b415c..4caec97207 100644
--- a/code/modules/power/cells/device_cells.dm
+++ b/code/modules/power/cells/device_cells.dm
@@ -2,7 +2,7 @@
/obj/item/weapon/cell/device
name = "device power cell"
desc = "A small power cell designed to power handheld devices."
- icon_state = "m_st"
+ icon_state = "device_cell"
item_state = "egg6"
w_class = ITEMSIZE_SMALL
force = 0
@@ -16,7 +16,7 @@
/obj/item/weapon/cell/device/weapon
name = "weapon power cell"
desc = "A small power cell designed to power handheld weaponry."
- icon_state = "m_sup"
+ icon_state = "weapon_cell"
maxcharge = 2400
charge_amount = 20
@@ -31,7 +31,7 @@
/obj/item/weapon/cell/device/weapon/recharge
name = "self-charging weapon power cell"
desc = "A small power cell designed to power handheld weaponry. This one recharges itself."
- icon_state = "meb_m_nu"
+ icon_state = "sc_weapon_cell"
self_recharge = TRUE
charge_amount = 120
charge_delay = 75
diff --git a/code/modules/power/cells/esoteric_cells.dm b/code/modules/power/cells/esoteric_cells.dm
index a37fd22050..a94a7223e0 100644
--- a/code/modules/power/cells/esoteric_cells.dm
+++ b/code/modules/power/cells/esoteric_cells.dm
@@ -3,7 +3,7 @@
name = "modified power cell"
desc = "A modified power cell sitting in a highly conductive chassis."
origin_tech = list(TECH_POWER = 2)
- icon_state = "exs_m"
+ icon_state = "modded"
maxcharge = 10000
matter = list(MAT_STEEL = 1000, MAT_GLASS = 80, MAT_SILVER = 100)
self_recharge = TRUE
diff --git a/code/modules/power/cells/power_cells.dm b/code/modules/power/cells/power_cells.dm
index 09831fd42e..375e4cb2b6 100644
--- a/code/modules/power/cells/power_cells.dm
+++ b/code/modules/power/cells/power_cells.dm
@@ -2,7 +2,7 @@
name = "\improper rechargable AA battery"
desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT
origin_tech = list(TECH_POWER = 0)
- icon_state = "s_st"
+ icon_state = "crap"
maxcharge = 500
matter = list(MAT_STEEL = 700, MAT_GLASS = 40)
@@ -13,7 +13,7 @@
/obj/item/weapon/cell/secborg
name = "security borg rechargable D battery"
origin_tech = list(TECH_POWER = 0)
- icon_state = "meb_s_st"
+ icon_state = "secborg"
maxcharge = 600 //600 max charge / 100 charge per shot = six shots
matter = list(MAT_STEEL = 700, MAT_GLASS = 40)
@@ -25,14 +25,14 @@
/obj/item/weapon/cell/apc
name = "heavy-duty power cell"
origin_tech = list(TECH_POWER = 1)
- icon_state = "meb_b_st"
+ icon_state = "apc"
maxcharge = 5000
matter = list(MAT_STEEL = 700, MAT_GLASS = 50)
/obj/item/weapon/cell/high
name = "high-capacity power cell"
origin_tech = list(TECH_POWER = 2)
- icon_state = "b_hi"
+ icon_state = "high"
maxcharge = 10000
matter = list(MAT_STEEL = 700, MAT_GLASS = 60)
@@ -44,7 +44,7 @@
/obj/item/weapon/cell/super
name = "super-capacity power cell"
origin_tech = list(TECH_POWER = 5)
- icon_state = "b_sup"
+ icon_state = "super"
maxcharge = 20000
matter = list(MAT_STEEL = 700, MAT_GLASS = 70)
@@ -56,7 +56,7 @@
/obj/item/weapon/cell/hyper
name = "hyper-capacity power cell"
origin_tech = list(TECH_POWER = 6)
- icon_state = "b_hy"
+ icon_state = "hyper"
maxcharge = 30000
matter = list(MAT_STEEL = 700, MAT_GLASS = 80)
@@ -67,13 +67,13 @@
/obj/item/weapon/cell/mech
name = "mecha power cell"
- icon_state = "exs_l"
+ icon_state = "mech"
charge = 15000
maxcharge = 15000
/obj/item/weapon/cell/infinite
name = "infinite-capacity power cell!"
- icon_state = "infinite_b"
+ icon_state = "infinite"
origin_tech = null
maxcharge = 30000 //determines how badly mobs get shocked
matter = list(MAT_STEEL = 700, MAT_GLASS = 80)
@@ -88,8 +88,7 @@
name = "potato battery"
desc = "A rechargable starch based power cell."
origin_tech = list(TECH_POWER = 1)
- icon = 'icons/obj/power.dmi' //'icons/obj/harvest.dmi'
- icon_state = "potato_cell" //"potato_battery"
+ icon_state = "potato"
charge = 100
maxcharge = 300
minor_fault = 1
@@ -112,7 +111,7 @@
name = "backup battery"
desc = "A small one-time-use chemical battery for synthetic crew when they are low on power in emergency situations."
icon = 'icons/obj/power_cells.dmi'
- icon_state = "exs_s"
+ icon_state = "backup"
w_class = ITEMSIZE_SMALL
var/amount = 100
var/used = FALSE
@@ -150,7 +149,7 @@
desc = "A tiny power cell with a very low power capacity. Used in light fixtures to power them in the event of an outage."
maxcharge = 120 //Emergency lights use 0.2 W per tick, meaning ~10 minutes of emergency power from a cell
matter = list(MAT_GLASS = 20)
- icon_state = "meb_s_sup"
+ icon_state = "em_light"
w_class = ITEMSIZE_TINY
/obj/item/weapon/cell/emergency_light/Initialize()
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index e4cd464663..db6b088492 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -1,3 +1,6 @@
+/*
+ * Laser Rifle
+ */
/obj/item/weapon/gun/energy/laser
name = "laser rifle"
desc = "A Hephaestus Industries G40E rifle, designed to kill with concentrated energy blasts. This variant has the ability to \
@@ -53,39 +56,23 @@
list(mode_name="suppressive", projectile_type=/obj/item/projectile/beam/practice, charge_cost = 12),
)
-//Functionally identical, but slightly higher tech due to rarer.
+/*
+ * Sleek Laser Rifle
+ */
/obj/item/weapon/gun/energy/laser/sleek
- name = "\improper LR1 Shishi"
- desc = "A Bishamonten Company LR1 Shishi rifle, a rare early 23rd century futurist design with a nonetheless timeless ability to kill."
- description_fluff = "Bisamonten was arms company that operated from roughly 2150-2280 - the height of the first extrasolar colonisation boom - before filing for bankruptcy and selling off its assets to various companies that would go on to become today’s TSCs. \
- Focused on sleek ‘futurist’ designs which have largely fallen out of fashion but remain popular with collectors and people hoping to make some quick thalers from replica weapons. \
- Their weapons tended to be form over function - despite their flashy looks, most were completely unremarkable one way or another as weapons and used very standard firing mechanisms."
+ name = "\improper LR1 \"Shishi\""
+ desc = "A Bishamonten Company LR1 \"Shishi\" rifle, a rare early 23rd century futurist design with a nonetheless timeless ability to kill."
+ description_fluff = "Bisamonten was arms company that operated from roughly 2150-2280 - the height of the first extrasolar colonisation boom - before filing for \
+ bankruptcy and selling off its assets to various companies that would go on to become today’s TSCs. Focused on sleek ‘futurist’ designs which have largely \
+ fallen out of fashion but remain popular with collectors and people hoping to make some quick thalers from replica weapons. Their weapons tended to be form \
+ over function - despite their flashy looks, most were completely unremarkable one way or another as weapons and used very standard firing mechanisms."
icon_state = "lrifle"
item_state = "lrifle"
origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 3)
-/obj/item/weapon/gun/energy/mininglaser
- name = "mining-laser rifle"
- desc = "A Hephaestus Industries G22T rifle, now only produced for its impeccable ability to break stone with its pulsating blasts."
- description_fluff = "The leading arms producer in the SCG, Hephaestus typically only uses its 'top level' branding for its military-grade equipment used by armed forces across human space."
- icon = 'icons/obj/gun2.dmi'
- icon_state = "mininglaser"
- item_state = "laser"
- wielded_item_state = "laser-wielded"
- fire_delay = 8
- slot_flags = SLOT_BELT|SLOT_BACK
- w_class = ITEMSIZE_LARGE
- force = 15
- origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
- matter = list(MAT_STEEL = 2000)
- projectile_type = /obj/item/projectile/beam/mininglaser
- one_handed_penalty = 30
-
- firemodes = list(
- list(mode_name="mining", fire_delay=8, projectile_type=/obj/item/projectile/beam/mininglaser, charge_cost = 200),
- list(mode_name="deter", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 80),
- )
-
+/*
+ * Retro Laser Rifle
+ */
/obj/item/weapon/gun/energy/retro
name = "retro laser"
icon_state = "retro"
@@ -104,6 +91,22 @@
icon_state = "retro"
cell_type = null
+/*
+ * Alien Pistol
+ */
+/obj/item/weapon/gun/energy/alien
+ name = "alien pistol"
+ desc = "A weapon that works very similarly to a traditional energy weapon. How this came to be will likely be a mystery for the ages."
+ catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_pistol)
+ icon_state = "alienpistol"
+ item_state = "alienpistol"
+ fire_delay = 10 // Handguns should be inferior to two-handed weapons. Even alien ones I suppose.
+ charge_cost = 480 // Five shots.
+
+ projectile_type = /obj/item/projectile/beam/cyan
+ cell_type = /obj/item/weapon/cell/device/weapon/recharge/alien // Self charges.
+ origin_tech = list(TECH_COMBAT = 8, TECH_MAGNET = 7)
+ modifystate = "alienpistol"
/datum/category_item/catalogue/anomalous/precursor_a/alien_pistol
name = "Precursor Alpha Weapon - Appendageheld Laser"
@@ -133,21 +136,9 @@
may have caused it to degrade, yet still remain functional at a reduced capability."
value = CATALOGUER_REWARD_MEDIUM
-/obj/item/weapon/gun/energy/alien
- name = "alien pistol"
- desc = "A weapon that works very similarly to a traditional energy weapon. How this came to be will likely be a mystery for the ages."
- catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_pistol)
- icon_state = "alienpistol"
- item_state = "alienpistol"
- fire_delay = 10 // Handguns should be inferior to two-handed weapons. Even alien ones I suppose.
- charge_cost = 480 // Five shots.
-
- projectile_type = /obj/item/projectile/beam/cyan
- cell_type = /obj/item/weapon/cell/device/weapon/recharge/alien // Self charges.
- origin_tech = list(TECH_COMBAT = 8, TECH_MAGNET = 7)
- modifystate = "alienpistol"
-
-
+/*
+ * Antique Laser Gun
+ */
/obj/item/weapon/gun/energy/captain
name = "antique laser gun"
icon_state = "caplaser"
@@ -167,6 +158,9 @@
cell_type = /obj/item/weapon/cell/device/weapon/recharge/captain
battery_lock = 1
+/*
+ * Laser Cannon
+ */
/obj/item/weapon/gun/energy/lasercannon
name = "laser cannon"
desc = "With the laser cannon, the lasing medium is enclosed in a tube lined with uranium-235 and subjected to high neutron \
@@ -195,6 +189,9 @@
charge_cost = 400
fire_delay = 20
+/*
+ * X-ray
+ */
/obj/item/weapon/gun/energy/xray
name = "xray laser gun"
desc = "A high-power laser gun capable of expelling concentrated xray blasts, which are able to penetrate matter easier than \
@@ -205,6 +202,9 @@
projectile_type = /obj/item/projectile/beam/xray
charge_cost = 200
+/*
+ * Marksman Rifle
+ */
/obj/item/weapon/gun/energy/sniperrifle
name = "marksman energy rifle"
desc = "The HI DMR 9E is an older design of Hephaestus Industries. A designated marksman rifle capable of shooting powerful \
@@ -237,18 +237,93 @@
toggle_scope(2.0)
+/*
+ * Laser Scattergun (proof of concept)
+ */
+/obj/item/weapon/gun/energy/lasershotgun
+ name = "laser scattergun"
+ icon = 'icons/obj/energygun.dmi'
+ item_state = "laser"
+ icon_state = "scatter"
+ desc = "A strange Almachi weapon, utilizing a refracting prism to turn a single laser blast into a diverging cluster."
+ origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 1, TECH_MATERIAL = 4)
+
+ projectile_type = /obj/item/projectile/scatter/laser
+
+/*
+ * Imperial Pistol
+ */
+/obj/item/weapon/gun/energy/imperial
+ name = "imperial energy pistol"
+ desc = "An elegant weapon developed by the Imperium Auream. Their weaponsmiths have cleverly found a way to make a gun that \
+ is only about the size of an average energy pistol, yet with the fire power of a laser carbine."
+ icon = 'icons/obj/gun_vr.dmi'
+ icon_override = 'icons/obj/gun_vr.dmi'
+ icon_state = "ge_pistol"
+ item_state = "ge_pistol"
+ slot_flags = SLOT_BELT
+ w_class = ITEMSIZE_NORMAL
+ force = 10
+ origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2)
+ matter = list(MAT_STEEL = 2000)
+ fire_sound = 'sound/weapons/mandalorian.ogg'
+ projectile_type = /obj/item/projectile/beam/imperial
+
+/*
+ * Mining-Laser Rifle
+ */
+/obj/item/weapon/gun/energy/mininglaser
+ name = "mining-laser rifle"
+ desc = "An industrial grade mining laser. Comes with a built-in 'stun' mode for encounters with local wildlife."
+ icon = 'icons/obj/gun.dmi'
+ icon_state = "mininglaser"
+ item_state = "mininglaser"
+ fire_delay = 8
+ slot_flags = SLOT_BELT|SLOT_BACK
+ w_class = ITEMSIZE_LARGE
+ force = 15
+ origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
+ matter = list(MAT_STEEL = 2000)
+ projectile_type = /obj/item/projectile/beam/mininglaser
+
+ firemodes = list(
+ list(mode_name="mining", fire_delay=8, projectile_type=/obj/item/projectile/beam/mininglaser, charge_cost = 200),
+ list(mode_name="deter", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 80),
+ )
+
+/*
+ * Old Laser Rifle
+ */
+/obj/item/weapon/gun/energy/laser/old
+ name = "vintage laser rifle"
+ desc = "A Hephaestus Industries G32E rifle, designed to kill with concentrated energy blasts. This older model laser rifle only has one firemode."
+ description_fluff = "The leading arms producer in the SCG, Hephaestus typically only uses its 'top level' branding for its military-grade \
+ equipment used by armed forces across human space."
+ icon_state = "oldlaser"
+ item_state = "laser"
+ fire_delay = 6
+ slot_flags = SLOT_BELT
+ w_class = ITEMSIZE_NORMAL
+ force = 8
+ origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 1) //Older rifle - less tech
+ matter = list(MAT_STEEL = 1500)
+ projectile_type = /obj/item/projectile/beam/midlaser
+
+/*
+ * Mono-Rifle
+ */
/obj/item/weapon/gun/energy/monorifle
name = "antique mono-rifle"
- desc = "An old laser rifle. This one can only fire once before requiring recharging."
- description_fluff = "Modeled after ancient hunting rifles, this rifle was dubbed the 'Rainy Day Special' by some, due to its use as some barmens' fight-stopper of choice. One shot is all it takes, or so they say."
- icon = 'icons/obj/energygun.dmi'
+ desc = "An old model laser rifle with a nice wood finish. This weapon was only designed to fire once before requiring a recharge."
+ description_fluff = "Modeled after ancient hunting rifles designs, this rifle was dubbed the 'Rainy Day Special' by some, due to its use as the \
+ choice \"fight-stopper\" of barkeeps. One shot is all it takes... so they say."
icon_state = "mono"
item_state = "shotgun"
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_POWER = 3)
projectile_type = /obj/item/projectile/beam/sniper
slot_flags = SLOT_BACK
action_button_name = "Aim Down Sights"
- charge_cost = 1300
+ charge_cost = 2400
fire_delay = 20
force = 8
w_class = ITEMSIZE_LARGE
@@ -269,23 +344,12 @@
/obj/item/weapon/gun/energy/monorifle/combat
name = "combat mono-rifle"
- desc = "A modernized version of the mono-rifle. This one can fire twice before requiring recharging."
- description_fluff = "A modern design produced by a small company operating out of Saint Columbia, based on the antique mono-rifle 'Rainy Day Special' design."
+ desc = "A modernized version of the classic mono-rifle. This one has an optimized capacitor bank that allows the rifle to fire twice before requiring a recharge."
+ description_fluff = "A modern design of a classic rifle produced by a small arms company operating out of Saint Columbia. It was based on the \
+ antique mono-rifle design that was dubbed the 'Rainy Day Special' by many of its users."
icon_state = "cmono"
item_state = "cshotgun"
- charge_cost = 1000
+ charge_cost = 1200
force = 12
accuracy = 0
- scoped_accuracy = 20
-
-// Laser scattergun, proof of concept.
-
-/obj/item/weapon/gun/energy/lasershotgun
- name = "laser scattergun"
- icon = 'icons/obj/energygun.dmi'
- item_state = "laser"
- icon_state = "scatter"
- desc = "A strange Almachi weapon, utilizing a refracting prism to turn a single laser blast into a diverging cluster."
- origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 1, TECH_MATERIAL = 4)
-
- projectile_type = /obj/item/projectile/scatter/laser
\ No newline at end of file
+ scoped_accuracy = 20
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm
index f7090e7ca7..4a604b7cbb 100644
--- a/code/modules/projectiles/guns/energy/nuclear.dm
+++ b/code/modules/projectiles/guns/energy/nuclear.dm
@@ -3,8 +3,10 @@
*/
/obj/item/weapon/gun/energy/gun
name = "energy gun"
- desc = "Another bestseller of Lawson Arms, the LAEP80 Thor is a versatile energy based pistol, capable of switching between low and high capacity projectile settings. In other words: Stun or Kill."
- description_fluff = "Lawson Arms is Hephaestus Industries’ main personal-energy-weapon branding, often sold alongside MarsTech projectile weapons to security and law enforcement agencies."
+ desc = "Another bestseller of Lawson Arms, the LAEP80 Thor is a versatile energy based pistol, capable of switching between low and high \
+ capacity projectile settings. In other words: Stun or Kill."
+ description_fluff = "Lawson Arms is Hephaestus Industries’ main personal-energy-weapon branding, often sold alongside MarsTech projectile \
+ weapons to security and law enforcement agencies."
icon_state = "egunstun"
item_state = null //so the human update icon uses the icon_state instead.
fire_delay = 8
@@ -23,7 +25,8 @@
*/
/obj/item/weapon/gun/energy/gun/rifle
name = "energy rifle"
- desc = "Another bestseller of Lawson Arms, the LAEP100 Svarog is a versatile energy rifle, capable of switching between low and high capacity projectile settings. In other words: Stun or Kill."
+ desc = "Another bestseller of Lawson Arms, the LAEP100 Svarog is a versatile energy rifle, capable of switching between low and high capacity \
+ projectile settings. In other words: Stun or Kill."
icon_state = "riflestun"
item_state = null //so the human update icon uses the icon_state instead.
wielded_item_state = "riflestun-wielded"
@@ -46,7 +49,8 @@
*/
/obj/item/weapon/gun/energy/gun/burst
name = "energy carbine"
- desc = "The Lawson Arms FM-2t is a versatile energy based carbine made from modifying the original LAEP100 design. It is capable of switching between stun or kill with a three round burst option for both settings."
+ desc = "The Lawson Arms FM-2t is a versatile energy based carbine made from modifying the original LAEP100 design. It is capable of switching \
+ between stun or kill with a three round burst option for both settings."
icon_state = "energystun"
item_state = null //so the human update icon uses the icon_state instead.
force = 8
@@ -64,14 +68,40 @@
list(mode_name="lethal burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="energykill"),
)
+/*
+ * Energy Thompson (RCW)
+ */
+/obj/item/weapon/gun/energy/gun/etommy
+ name = "Energy RCW"
+ desc = "The Lawson Arms experimental Rapid Capacitor Weapon is a highly reguarded and deadly peice of military hardware. Using a large drum shaped \
+ capacitor bank the weapon is capable of accurate, rapid burst fire."
+ description_fluff = "The Rapid Capacitor Weapon is one of a few weapons that never saw full production. IT was an experimental Shock Trooper weapon developed by \
+ Lawsom Arms during the Hegemony Conflict. While only a few hundred were made it didn't take long for smaller arms dealers to break apart stolen units and revese engineer \
+ the tech used in their design. While they're an uncommon sight, they're known to be used by roving bands in the Salthan Fyrds as a forms of personal protection because \
+ of their ease of use and firepower."
+ icon_state = "etommy"
+ item_state = "fm-2tkill"
+ force = 8
+ w_class = ITEMSIZE_LARGE
+ fire_delay = 7
+
+ projectile_type = /obj/item/projectile/beam/burstlaser
+ origin_tech = list(TECH_COMBAT = 5, TECH_MAGNET = 3, TECH_ILLEGAL = 4)
+
+ firemodes = list(
+ list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, charge_cost = 200),
+ list(mode_name="lethal burst", burst=4, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser),
+ )
+
/*
* Energy PDW (Martin)
*/
/obj/item/weapon/gun/energy/gun/compact
name = "personal energy weapon"
- desc = "The RayZar EW20 \"Martin\" personal energy weapon - or PEW - is Ward-Takahasi's entry into the variable capacity energy gun market. New users are advised to 'set RayZars to stun'."
- description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist energy weapons of various types and quality primarily for the civilian market."
-
+ desc = "The RayZar EW20 \"Martin\" personal energy weapon - or PEW - is Ward-Takahasi's entry into the variable capacity energy gun market. \
+ New users are advised to 'set RayZars to stun'."
+ description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist \
+ energy weapons of various types and quality primarily for the civilian market."
icon_state = "PDWstun"
fire_sound = 'sound/weapons/Taser.ogg'
w_class = ITEMSIZE_SMALL
@@ -89,7 +119,8 @@
*/
/obj/item/weapon/gun/energy/gun/eluger
name = "energy Luger"
- desc = "The finest sidearm produced by RauMauser. Although its battery cannot be removed, its ergonomic design makes it easy to shoot, allowing for rapid follow-up shots. It also has the ability to toggle between stun and kill."
+ desc = "The finest sidearm produced by RauMauser. Although its battery cannot be removed, its ergonomic design makes it easy to shoot, allowing \
+ for rapid follow-up shots. It also has the ability to toggle between stun and kill."
icon_state = "ep08stun"
item_state = "gun"
fire_delay = null // Lugers are quite comfortable to shoot, thus allowing for more controlled follow-up shots. Rate of fire similar to a laser carbine.
diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm
index 21be1ebe76..1127e1e909 100644
--- a/code/modules/projectiles/guns/energy/pulse.dm
+++ b/code/modules/projectiles/guns/energy/pulse.dm
@@ -1,12 +1,17 @@
+/*
+ * Pulse Rifle
+ */
/obj/item/weapon/gun/energy/pulse_rifle
- name = "pulse rifle"
- desc = "A weapon that uses advanced pulse-based beam generation technology to emit powerful laser blasts. Because of its complexity and cost, it is rarely seen in use except by specialists."
+ name = "\improper LP1 Locust Rifle"
+ desc = "The Bishamonten LP1 is a weapon that uses advanced pulse-based beam generation technology to emit powerful laser blasts. \
+ Because of its complexity and cost, it is rarely seen in use except by specialists."
icon_state = "pulse"
item_state = null //so the human update icon uses the icon_state instead.
slot_flags = SLOT_BELT|SLOT_BACK
force = 10
projectile_type = /obj/item/projectile/beam
charge_cost = 120
+ fire_delay = 8
sel_mode = 2
firemodes = list(
@@ -19,30 +24,54 @@
self_recharge = 1
use_external_power = 1
+/*
+ * Pulse Destroyer
+ */
/obj/item/weapon/gun/energy/pulse_rifle/destroyer
- name = "pulse destroyer"
- desc = "A heavy-duty, pulse-based energy weapon. Because of its complexity and cost, it is rarely seen in use except by specialists."
+ name = "\improper LP1 MkII"
+ desc = "A more heavy-duty version of the Bishamonten LP1. It's had all its safety functions ripped out to facilitate the perfect killing machine."
+ icon_state = "pulsedest"
projectile_type=/obj/item/projectile/beam/pulse
charge_cost = 120
+ fire_delay = 12
/obj/item/weapon/gun/energy/pulse_rifle/destroyer/attack_self(mob/living/user as mob)
to_chat(user, "[src.name] has three settings, and they are all DESTROY.")
+/*
+ * Pulse Carbine
+ */
+/obj/item/weapon/gun/energy/pulse_rifle/carbine
+ name = "\improper LP2 Grasshopper Carbine"
+ desc = "The Bishamonten LP2 is a sleek, compact version of the LP1. Because of its smaller design it takes less time to charge a shot."
+ icon_state = "pulsecarbine"
+ charge_cost = 480
+ fire_delay = 2
-//non-bus version because it looks adorable.
+ firemodes = list(
+ list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_delay=null, charge_cost = 120),
+ list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_delay=null, charge_cost = 120),
+ list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_delay=null, charge_cost = 240),
+ )
+
+/*
+ * Pulse Pistol
+ */
/obj/item/weapon/gun/energy/pulse_rifle/compact
- name = "\improper LP2 Grasshopper Compact"
- desc = "You feel like you're going to break the damn thing. The Bishamonten LP2 is a rare collectors item from the early 23rd century."
- description_fluff = "The Bishamonten Company operated from roughly 2150-2280 - the height of the first extrasolar colonisation boom - before filing for bankruptcy and selling off its assets to various companies that would go on to become today’s TSCs. \
- Focused on sleek ‘futurist’ designs which have largely fallen out of fashion but remain popular with collectors and people hoping to make some quick thalers from replica weapons. \
- Bishamonten weapons tended to be form over function - despite their flashy looks, most were completely unremarkable one way or another as weapons and used very standard firing mechanisms.\
- The Grasshopper remains one of the smallest production laser pistols ever produced that is still capable of causing significant damage to organic tissue."
+ name = "\improper LP4 Mantis Compact"
+ desc = "The Bishamonten LP4 was once the weapon of choice for military officers during the Hegemony War. Today it is little more than a collectors item."
+ description_fluff = "The Bishamonten Company operated from roughly 2150-2280 - the height of the first extrasolar colonisation boom - before filing for \
+ bankruptcy and selling off its assets to various companies that would go on to become today’s TSCs. Focused on sleek ‘futurist’ designs which have \
+ largely fallen out of fashion but remain popular with collectors and people hoping to make some quick thalers from replica weapons. Bishamonten weapons \
+ tended to be form over function - despite their flashy looks, most were completely unremarkable one way or another as weapons and used very standard \
+ firing mechanisms.The Grasshopper remains one of the smallest production laser pistols ever produced that is still capable of causing significant \
+ damage to organic tissue."
slot_flags = SLOT_BELT|SLOT_HOLSTER
- icon_state = "lpistol"
+ icon_state = "pulsepistol"
charge_cost = 480
/obj/item/weapon/gun/energy/pulse_rifle/compact/admin
- name = "\improper LP2 Grasshopper Deluxe"
+ name = "\improper LP4 Mantis Deluxe"
desc = "It's not the size of the gun, it's the size of the hole it puts through people."
charge_cost = 240
diff --git a/code/modules/projectiles/guns/energy/laser_vr.dm b/code/modules/projectiles/guns/energy/pump.dm
similarity index 51%
rename from code/modules/projectiles/guns/energy/laser_vr.dm
rename to code/modules/projectiles/guns/energy/pump.dm
index 0add3098a3..3080ffe6a1 100644
--- a/code/modules/projectiles/guns/energy/laser_vr.dm
+++ b/code/modules/projectiles/guns/energy/pump.dm
@@ -1,119 +1,19 @@
-/* TUTORIAL
- "icon" is the file with the HUD/ground icon for the item
- "icon_state" is the iconstate in this file for the item
- "icon_override" is the file with the on-mob icons, can be the same file
- "item_state" is the iconstate for the on-mob icons:
- item_state_s is used for worn uniforms on mobs
- item_state_r and item_state_l are for being held in each hand
+/* Contains the weapons that are station locked for expeditions
+ * and can be hand pumped to charge their battery.
+ *
+ * Contains:
+ * Gun Locking Mechanism
+ * Expedition Frontier Phaser
+ * Expedition Frontier Carbine
+ * Expedition Frontier Rifle
+ * Holdout Phaser Pistol
+ * Holdout Phaser Bow
+ */
- "item_state_slots" can replace "item_state", it is a list:
- item_state_slots["slotname1"] = "item state for that slot"
- item_state_slots["slotname2"] = "item state for that slot"
- on guns, in particular:
- item_state being null makes it look for exactly the icon_state in the on-mob file,
- including any 0,75,etc appended from the energy bar setting
- item_state being present prevents different mode sprites, sadly, but you may
- be able to override this on the gun itself with a proc
-*/
-
-/* TEMPLATE
-//ckey:Character Name
-/obj/item/weapon/gun/type/fluff/charactername
- name = ""
- desc = ""
-
- icon = 'icons/vore/custom_guns_vr.dmi'
- icon_state = "myicon"
-
- icon_override = 'icons/vore/custom_guns_vr.dmi'
- item_state = "myicon"
-
-*/
-
-// For general use
-/obj/item/weapon/gun/energy/imperial
- name = "imperial energy pistol"
- desc = "An elegant weapon developed by the Imperium Auream. Their weaponsmiths have cleverly found a way to make a gun that is only about the size of an average energy pistol, yet with the fire power of a laser carbine."
- icon = 'icons/obj/gun_vr.dmi'
- icon_override = 'icons/obj/gun_vr.dmi'
- icon_state = "ge_pistol"
- item_state = "ge_pistol"
- slot_flags = SLOT_BELT
- w_class = ITEMSIZE_NORMAL
- force = 10
- origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2)
- matter = list(MAT_STEEL = 2000)
- fire_sound = 'sound/weapons/mandalorian.ogg'
- projectile_type = /obj/item/projectile/beam/imperial
-
-// Removed because gun64_vr.dmi guns don't work.
/*
-//-----------------------G44 Energy Variant--------------------
-/obj/item/weapon/gun/energy/gun/burst/g44e
- name = "G44 Energy Rifle"
- desc = "The G44 Energy is a laser variant of the G44 lightweight assault rifle manufactured by the National Armory of Gaia. Though almost exclusively to the United Federation's Military Assault Command Operations Department (MACOs) and Starfleet, it is occassionally sold to security departments for their stun capabilities."
- icon = 'icons/obj/gun64_vr.dmi'
- icon_state = "g44estun100"
- item_state = "energystun100" //This is temporary.
- fire_sound = 'sound/weapons/Taser.ogg'
- charge_cost = 100
- force = 8
- w_class = ITEMSIZE_LARGE
- fire_delay = 6
- pixel_x = -16
-
- projectile_type = /obj/item/projectile/beam/stun/weak
- origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2, TECH_ILLEGAL = 3)
- modifystate = "g44estun"
-
- one_handed_penalty = 60
-
- firemodes = list(
- list(mode_name="stun", burst=1, projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="g44estun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 100),
- list(mode_name="stun burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="g44estun", fire_sound='sound/weapons/Taser.ogg'),
- list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="g44ekill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 200),
- list(mode_name="lethal burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="g44ekill", fire_sound='sound/weapons/Laser.ogg'),
- )
-*/
-
-//////////////////// Energy Weapons ////////////////////
-
-// ------------ Energy Luger ------------
-//MOVED TO nuclear.dm
-
-//////////////////// Eris Ported Guns ////////////////////
-//HoP gun
-/obj/item/weapon/gun/energy/gun/martin
- name = "holdout energy gun"
- desc = "The FS PDW E \"Martin\" is small holdout e-gun. Don't miss!"
- icon = 'icons/obj/gun_vr.dmi'
- icon_state = "PDW"
- item_state = "gun"
- w_class = ITEMSIZE_SMALL
- projectile_type = /obj/item/projectile/beam/stun
- charge_cost = 1200
- charge_meter = 0
- modifystate = null
- battery_lock = 1
- fire_sound = 'sound/weapons/Taser.ogg'
- origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
- firemodes = list(
- list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', charge_cost = 600),
- list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg', charge_cost = 1200),
- )
-
-/obj/item/weapon/gun/energy/gun/martin/proc/update_mode()
- var/datum/firemode/current_mode = firemodes[sel_mode]
- switch(current_mode.name)
- if("stun") add_overlay("taser_pdw")
- if("lethal") add_overlay("lazer_pdw")
-
-/obj/item/weapon/gun/energy/gun/martin/update_icon()
- cut_overlays()
- update_mode()
-
-//Gun Locking Mechanism
+ * Gun Locking Mechanism
+ */
/obj/item/weapon/gun/energy/locked
req_access = list(access_armory) //for toggling safety
var/locked = 1
@@ -145,13 +45,19 @@
return 0
return ..()
-////////////////Expedition Frontier Phaser////////////////
-
+/*
+ * Expedition Frontier Phaser
+ */
/obj/item/weapon/gun/energy/locked/frontier
name = "frontier phaser"
- desc = "An extraordinarily rugged laser weapon, built to last and requiring effectively no maintenance. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
- description_fluff = "The NT Brand Model E2 Secured Phaser System, a specialty phaser that has an intergrated chip that prevents the user from opperating the weapon within the vicinity of any NanoTrasen opperated outposts/stations/bases. However, this chip can be disabled so the weapon CAN BE used in the vicinity of any NanoTrasen opperated outposts/stations/bases. The weapon doesn't use traditional weapon power cells and instead works via a pump action that recharges the internal cells. It is a staple amongst exploration personell who usually don't have the license to opperate a lethal weapon through NT and provides them with a weapon that can be recharged away from civilization."
- icon = 'icons/obj/gun_vr.dmi'
+ desc = "An extraordinarily rugged laser weapon, built to last and requiring effectively no maintenance. Includes a built-in crank \
+ charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
+ description_fluff = "The NT Brand Model E2 Secured Phaser System, a specialty phaser that has an intergrated chip that prevents \
+ the user from opperating the weapon within the vicinity of any NanoTrasen opperated outposts/stations/bases. However, this chip \
+ can be disabled so the weapon CAN BE used in the vicinity of any NanoTrasen opperated outposts/stations/bases. The weapon doesn't \
+ use traditional weapon power cells and instead works via a pump action that recharges the internal cells. It is a staple amongst \
+ exploration personell who usually don't have the license to opperate a lethal weapon through NT and provides them with a weapon \
+ that can be recharged away from civilization."
icon_state = "phaserkill"
item_state = "phaser"
item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_guns_vr.dmi', slot_r_hand_str = 'icons/mob/items/righthand_guns_vr.dmi', "slot_belt" = 'icons/inventory/belt/mob_vr.dmi')
@@ -206,27 +112,35 @@
return
/obj/item/weapon/gun/energy/locked/frontier/unlocked
- desc = "An extraordinarily rugged laser weapon, built to last and requiring effectively no maintenance. Includes a built-in crank charger for recharging away from civilization."
+ desc = "An extraordinarily rugged laser weapon, built to last and requiring effectively no maintenance. Includes a \
+ built-in crank charger for recharging away from civilization."
req_access = newlist() //for toggling safety
locked = 0
lockable = 0
-////////////////Phaser Carbine////////////////
-
+/*
+ * Expedition Frontier Carbine
+ */
/obj/item/weapon/gun/energy/locked/frontier/carbine
name = "frontier carbine"
- desc = "An ergonomically improved version of the venerable frontier phaser, the carbine is a fairly new weapon, and has only been produced in limited numbers so far. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
- description_fluff = "The NT Brand Model AT2 Secured Phaser System, a specialty phaser that has an intergrated chip that prevents the user from opperating the weapon within the vicinity of any NanoTrasen opperated outposts/stations/bases. However, this chip can be disabled so the weapon CAN BE used in the vicinity of any NanoTrasen opperated outposts/stations/bases. The weapon doesn't use traditional weapon power cells and instead works via a pump action that recharges the internal cells. It is a staple amongst exploration personell who usually don't have the license to opperate a lethal weapon through NT and provides them with a weapon that can be recharged away from civilization."
- icon = 'icons/obj/gun_vr.dmi'
- icon_state = "carbinekill"
+ desc = "An ergonomically improved version of the venerable frontier phaser, the carbine is a fairly new weapon, and has only been \
+ produced in limited numbers so far. Includes a built-in crank charger for recharging away from civilization. This one has a safety \
+ interlock that prevents firing while in proximity to the facility."
+ description_fluff = "The NT Brand Model AT2 Secured Phaser System, a specialty phaser that has an intergrated chip that prevents \
+ the user from opperating the weapon within the vicinity of any NanoTrasen opperated outposts/stations/bases. However, this chip can \
+ be disabled so the weapon CAN BE used in the vicinity of any NanoTrasen opperated outposts/stations/bases. The weapon doesn't use \
+ traditional weapon power cells and instead works via a pump action that recharges the internal cells. It is a staple amongst exploration \
+ personell who usually don't have the license to opperate a lethal weapon through NT and provides them with a weapon that can be \
+ recharged away from civilization."
+ icon_state = "phcarbinekill"
item_state = "energykill"
item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi', slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi')
phase_power = 150
- modifystate = "carbinekill"
+ modifystate = "phcarbinekill"
firemodes = list(
- list(mode_name="lethal", fire_delay=8, projectile_type=/obj/item/projectile/beam/blue, modifystate="carbinekill", charge_cost = 300),
- list(mode_name="low-power", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser/blue, modifystate="carbinestun", charge_cost = 100),
+ list(mode_name="lethal", fire_delay=8, projectile_type=/obj/item/projectile/beam/blue, modifystate="phcarbinekill", charge_cost = 300),
+ list(mode_name="low-power", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser/blue, modifystate="phcarbinestun", charge_cost = 100),
)
/obj/item/weapon/gun/energy/locked/frontier/carbine/update_icon()
@@ -237,44 +151,28 @@
..()
/obj/item/weapon/gun/energy/locked/frontier/carbine/unlocked
- desc = "An ergonomically improved version of the venerable frontier phaser, the carbine is a fairly new weapon, and has only been produced in limited numbers so far. Includes a built-in crank charger for recharging away from civilization."
+ desc = "An ergonomically improved version of the venerable frontier phaser, the carbine is a fairly new weapon, and has only been \
+ produced in limited numbers so far. Includes a built-in crank charger for recharging away from civilization."
req_access = newlist() //for toggling safety
locked = 0
lockable = 0
-////////////////Expeditionary Holdout Phaser Pistol////////////////
-
-/obj/item/weapon/gun/energy/locked/frontier/holdout
- name = "holdout frontier phaser"
- desc = "An minaturized weapon designed for the purpose of expeditionary support to defend themselves on the field. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
- icon = 'icons/obj/gun_vr.dmi'
- icon_state = "holdoutkill"
- item_state = null
- phase_power = 100
-
- w_class = ITEMSIZE_SMALL
- charge_cost = 600
- modifystate = "holdoutkill"
- firemodes = list(
- list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam/blue, modifystate="holdoutkill", charge_cost = 600),
- list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser/blue, modifystate="holdoutstun", charge_cost = 200),
- list(mode_name="stun", fire_delay=12, projectile_type=/obj/item/projectile/beam/stun/med, modifystate="holdoutshock", charge_cost = 300),
- )
-
-/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked
- desc = "An minaturized weapon designed for the purpose of expeditionary support to defend themselves on the field. Includes a built-in crank charger for recharging away from civilization."
- req_access = newlist() //for toggling safety
- locked = 0
- lockable = 0
-
-////////////////Phaser Rifle////////////////
-
+/*
+ * Expedition Frontier Rifle
+ */
/obj/item/weapon/gun/energy/locked/frontier/rifle
name = "frontier marksman rifle"
- desc = "A much larger, heavier weapon than the typical frontier-type weapons, this DMR can be fired both from the hip, and in scope. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
- icon = 'icons/obj/gun_vr.dmi'
- icon_state = "riflekill"
- item_state = "sniper"
+ desc = "A much larger, heavier weapon than the typical frontier-type weapons, this DMR can be fired both from the hip, and in scope. \
+ Includes a built-in crank charger for recharging away from civilization. Unlike other frontier-type weapons, this model lacks a non-lethal option. \
+ This one has a safety interlock that prevents firing while in proximity to the facility."
+ description_fluff = "The NT Brand Model LR10 Secured Phaser System, a specialty phaser that has an intergrated chip that prevents \
+ the user from opperating the weapon within the vicinity of any NanoTrasen opperated outposts/stations/bases. However, this chip can \
+ be disabled so the weapon CAN BE used in the vicinity of any NanoTrasen opperated outposts/stations/bases. The weapon doesn't use \
+ traditional weapon power cells and instead works via a pump action that recharges the internal cells. It is a staple amongst exploration \
+ personell who usually don't have the license to opperate a lethal weapon through NT and provides them with a weapon that can be \
+ recharged away from civilization."
+ icon_state = "phrifledmr"
+ item_state = "lsniper"
item_state_slots = list(slot_r_hand_str = "lsniper", slot_l_hand_str = "lsniper")
wielded_item_state = "lsniper-wielded"
action_button_name = "Use Scope"
@@ -286,10 +184,10 @@
phase_power = 150 //efficient crank charger
projectile_type = /obj/item/projectile/beam/sniper
- modifystate = "riflekill"
+ modifystate = "phrifledmr"
firemodes = list(
- list(mode_name="sniper", fire_delay=35, projectile_type=/obj/item/projectile/beam/sniper, modifystate="riflekill", charge_cost = 600),
- list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam, modifystate="riflestun", charge_cost = 200),
+ list(mode_name="sniper", fire_delay=35, projectile_type=/obj/item/projectile/beam/sniper, modifystate="phrifledmr", charge_cost = 600),
+ list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam, modifystate="phriflekill", charge_cost = 200),
)
/obj/item/weapon/gun/energy/locked/frontier/rifle/ui_action_click()
@@ -310,21 +208,51 @@
..()
/obj/item/weapon/gun/energy/locked/frontier/rifle/unlocked
- desc = "A much larger, heavier weapon than the typical frontier-type weapons, this DMR can be fired both from the hip, and in scope. Includes a built-in crank charger for recharging away from civilization."
+ desc = "A much larger, heavier weapon than the typical frontier-type weapons, this DMR can be fired both from the hip, and in scope. \
+ Unlike other frontier-type weapons, this model lacks a non-lethal option. Includes a built-in crank charger for recharging away from civilization."
req_access = newlist() //for toggling safety
locked = 0
lockable = 0
-///phaser bow///
+/*
+ * Holdout Phaser Pistol
+ */
+/obj/item/weapon/gun/energy/locked/frontier/holdout
+ name = "holdout frontier phaser"
+ desc = "An minaturized weapon designed for the purpose of expeditionary support to defend themselves on the field. Includes a built-in crank charger for \
+ recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
+ description_fluff = null
+ icon_state = "holdoutkill"
+ item_state = null
+ phase_power = 100
+ slot_flags = SLOT_BELT|SLOT_HOLSTER
+ w_class = ITEMSIZE_SMALL
+ charge_cost = 600
+ modifystate = "holdoutkill"
+ firemodes = list(
+ list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam/blue, modifystate="holdoutkill", charge_cost = 600),
+ list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser/blue, modifystate="holdoutstun", charge_cost = 200),
+ list(mode_name="stun", fire_delay=12, projectile_type=/obj/item/projectile/beam/stun/med, modifystate="holdoutshock", charge_cost = 300),
+ )
+/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked
+ desc = "An minaturized weapon designed for the purpose of expeditionary support to defend themselves on the field. Includes a built-in \
+ crank charger for recharging away from civilization."
+ req_access = newlist() //for toggling safety
+ locked = 0
+ lockable = 0
+
+/*
+ * Holdout Phaser Bow
+ */
/obj/item/weapon/gun/energy/locked/frontier/handbow
name = "phaser handbow"
- desc = "An minaturized weapon that fires a bolt of energy. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
- icon = 'icons/obj/gun_vr.dmi'
+ desc = "An minaturized weapon that fires a bolt of energy. Includes a built-in crank charger for recharging away from civilization. \
+ This one has a safety interlock that prevents firing while in proximity to the facility."
+ description_fluff = null
icon_state = "handbowkill"
item_state = null
phase_power = 100
-
w_class = ITEMSIZE_SMALL
charge_cost = 600
modifystate = "handbowkill"
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 028c988a2a..1c2257e2b6 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -1,3 +1,6 @@
+/*
+ * Daka SMG (Code Base)
+ */
/obj/item/weapon/gun/projectile/automatic //This should never be spawned in, it is just here because of code necessities.
name = "daka SMG"
desc = "A small SMG. You really shouldn't be able to get this gun. Uses 9mm rounds."
@@ -13,11 +16,14 @@
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)))
+/*
+ * Advanced SMG
+ */
/obj/item/weapon/gun/projectile/automatic/advanced_smg
name = "advanced SMG"
desc = "An advanced submachine gun with a reflective laser optic that makes burst fire less inaccurate than other SMGs. Uses 9mm rounds."
icon = 'icons/obj/gun.dmi'
- icon_state = "advanced_smg-empty"
+ icon_state = "advanced_smg-e"
w_class = ITEMSIZE_NORMAL
load_method = MAGAZINE
caliber = "9mm"
@@ -33,12 +39,17 @@
/obj/item/weapon/gun/projectile/automatic/advanced_smg/update_icon()
..()
- icon_state = (ammo_magazine)? "advanced_smg" : "advanced_smg-empty"
- return
+ if(ammo_magazine)
+ icon_state = "advanced_smg"
+ else
+ icon_state = "advanced_smg-e"
/obj/item/weapon/gun/projectile/automatic/advanced_smg/loaded
magazine_type = /obj/item/ammo_magazine/m9mmAdvanced
+/*
+ * C-20r
+ */
/obj/item/weapon/gun/projectile/automatic/c20r
name = "submachine gun"
desc = "The C-20r is a lightweight and rapid firing SMG, for when you REALLY need someone dead. It has 'Scarborough Arms - Per falcis, per pravitas', inscribed on the stock. Uses 10mm rounds."
@@ -57,7 +68,8 @@
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
-// one_handed_penalty = 15
+/obj/item/weapon/gun/projectile/automatic/c20r/rubber
+ magazine_type = /obj/item/ammo_magazine/m10mm/rubber
/obj/item/weapon/gun/projectile/automatic/c20r/empty
magazine_type = null
@@ -70,6 +82,9 @@
icon_state = "c20r"
return
+/*
+ * Assault Carbine (STS-35)
+ */
/obj/item/weapon/gun/projectile/automatic/sts35
name = "assault rifle"
desc = "The rugged Jindal Arms STS-35 is a durable automatic weapon of a make popular on the frontier worlds. Uses 5.45mm rounds."
@@ -96,7 +111,6 @@
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6))
-// list(mode_name="short bursts", burst=5, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15,-30,-30,-45), dispersion=list(0.6, 1.0, 1.0, 1.0, 1.2)),
)
/obj/item/weapon/gun/projectile/automatic/sts35/update_icon(var/ignore_inhands)
@@ -107,6 +121,39 @@
icon_state = (ammo_magazine)? "arifle" : "arifle-empty"
if(!ignore_inhands) update_held_icon()
+/*
+ * X-9mm (PDW)
+ */
+/obj/item/weapon/gun/projectile/automatic/pdw
+ name = "personal defense weapon"
+ desc = "The X-9mm is a select-fire personal defense weapon designed in-house by Xing Private Security. It was made to compete with the WT550 Saber, \
+ but never caught on with NanoTrasen. Uses 9mm rounds."
+ icon_state = "pdw"
+ item_state = "c20r"
+ w_class = ITEMSIZE_NORMAL
+ caliber = "9mm"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
+ slot_flags = SLOT_BELT
+ load_method = MAGAZINE
+ magazine_type = /obj/item/ammo_magazine/m9mmAdvanced
+ allowed_magazines = list(/obj/item/ammo_magazine/m9mmAdvanced)
+
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6))
+ )
+
+/obj/item/weapon/gun/projectile/automatic/pdw/update_icon(var/ignore_inhands)
+ ..()
+ if(ammo_magazine)
+ icon_state = "pdw"
+ else
+ icon_state = "pdw-e"
+ return
+
+/*
+ * Machine Pistol (WT550)
+ */
/obj/item/weapon/gun/projectile/automatic/wt550
name = "machine pistol"
desc = "The WT550 Saber is a cheap self-defense weapon mass-produced by Ward-Takahashi for paramilitary and private use. Uses 9mm rounds."
@@ -130,15 +177,19 @@
icon_state = "wt550"
return
+/*
+ * Battle Rifle (Z8)
+ */
/obj/item/weapon/gun/projectile/automatic/z8
name = "battle rifle"
- desc = "The Z8 Bulldog is an older model battle rifle, made by the now defunct Zendai Foundries. Makes you feel like an old-school badass when you hold it, even though it can only hold 10 round magazines. Uses 7.62mm rounds and has an under barrel grenade launcher."
+ desc = "The Z8 Bulldog is an older model battle rifle, made by the now defunct Zendai Foundries. Makes you feel like an old-school badass when you hold it, \
+ even though it can only hold 10 round magazines. Uses 7.62mm rounds and has an under barrel grenade launcher."
description_fluff = "Zendai Foundries was a well-respected mid-sized arms company that operated until 2508, when it was acquired by Hephaestus Industries. \
Plans to integrate the brand into wider corporate operations were brought to an abrupt halt by the SolGov-Hegemony war, and the company was left by the wayside. \
Hephaestus still produces replacement parts for many of Zendai's most popular weapons, including the Z8 Bulldog, and a great detail remain in service."
icon_state = "carbine" // This isn't a carbine. :T
item_state = "z8carbine"
- wielded_item_state = "z8carbine-wielded"
+ wielded_item_state = "z8bulldog-wielded"
w_class = ITEMSIZE_LARGE
force = 10
caliber = "7.62mm"
@@ -206,6 +257,9 @@
/obj/item/weapon/gun/projectile/automatic/z8/empty
magazine_type = null
+/*
+ * LMG (L6 SAW)
+ */
/obj/item/weapon/gun/projectile/automatic/l6_saw
name = "light machine gun"
desc = "A rather sturdily made L6 SAW with a reassuringly ergonomic pistol grip. 'Hephaestus Industries' is engraved on the reciever. Uses 5.45mm rounds. It's also compatible with magazines from STS-35 assault rifles."
@@ -229,15 +283,6 @@
var/cover_open = 0
-/* Commented out for quality control and testing.
- firemodes = list(
- list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null, automatic = 0),
- list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0), automatic = 0),
- list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2), automatic = 0),
- list(mode_name="automatic", burst=1, fire_delay=-1, move_delay=null, burst_accuracy=null, dispersion=null, automatic = 1),
- )
-*/
-
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)),
@@ -290,7 +335,7 @@
..()
/*
- * Automatic Shotgun
+ * Automatic Shotgun (AS-24)
*/
/obj/item/weapon/gun/projectile/automatic/as24
name = "automatic shotgun"
@@ -326,13 +371,16 @@
icon_state = "ashot-empty"
return
+/*
+ * Uzi
+ */
/obj/item/weapon/gun/projectile/automatic/mini_uzi
name = "micro-smg"
desc = "The infamous ProTek Spitz is a lightweight, compact, fast firing machine pistol. Cheaply produced under the ProTek consumer brand, the Spitz seems to find its way into every corner of the galaxy. Uses .45 rounds."
description_fluff = "Budget-grade weapons for the budget-grade consumer! Hephaestus’ low-end brand of cheaply made, low-maintenance personal defense weapons for those who just need a handgun with absolutely no frills. \
Early ProTek weapons were notoriously unsafe and unreliable, though more recent designs have improved somewhat - they still aren’t very good. \
Though sold for a pittance, the profit margin is too irresistible for Hephaestus to discontinue the brand."
- icon_state = "mini-uzi"
+ icon_state = "uzi"
w_class = ITEMSIZE_NORMAL
load_method = MAGAZINE
caliber = ".45"
@@ -348,10 +396,13 @@
/obj/item/weapon/gun/projectile/automatic/mini_uzi/update_icon()
..()
if(ammo_magazine)
- icon_state = "mini-uzi"
+ icon_state = "uzi"
else
- icon_state = "mini-uzi-empty"
+ icon_state = "uzi-e"
+/*
+ * P90 (H90K)
+ */
/obj/item/weapon/gun/projectile/automatic/p90
name = "personal defense weapon"
desc = "The H90K is a compact, large capacity submachine gun produced by MarsTech. Despite its fierce reputation, it still manages to feel like a toy. Uses 9mm rounds."
@@ -374,11 +425,15 @@
/obj/item/weapon/gun/projectile/automatic/p90/update_icon()
icon_state = "p90smg-[ammo_magazine ? round(ammo_magazine.stored_ammo.len, 6) : "empty"]"
+/*
+ * Tommy Gun
+ */
/obj/item/weapon/gun/projectile/automatic/tommygun
name = "\improper Tommy Gun"
desc = "This weapon was made famous by gangsters in the 20th century. Cybersun Industries is currently reproducing these for a target market of historic gun collectors and classy criminals. Uses .45 rounds."
description_fluff = "Cybersun Industries is a minor arms manufacturer specialising in replica firearms from eras past. Though they offer a wide selection of made-to-order models, their products are seen as little more than novelty items to most serious collectors."
- icon_state = "tommygun"
+ icon_state = "tommy"
+ item_state = "stg44"
w_class = ITEMSIZE_NORMAL
caliber = ".45"
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
@@ -393,19 +448,17 @@
)
/obj/item/weapon/gun/projectile/automatic/tommygun/update_icon()
- //VOREStation Edit Start - vr sprite
if(istype(ammo_magazine,/obj/item/ammo_magazine/m45tommy))
- icon_state = "tommygun-mag"
- item_state = icon_state
+ icon_state = "tommy-mag"
else if(istype(ammo_magazine,/obj/item/ammo_magazine/m45tommydrum))
- icon_state = "tommygun-drum"
- item_state = icon_state
+ icon_state = "tommy-drum"
else
- icon_state = "tommygun-empty"
- item_state = icon_state
+ icon_state = "tommy-e"
update_held_icon()
- //VOREStation Edit End
+/*
+ * Bullpup Rifle
+ */
/obj/item/weapon/gun/projectile/automatic/bullpup // Admin abuse assault rifle. ToDo: Make this less shit. Maybe remove its autofire, and make it spawn with only 10 rounds at start.
name = "bullpup rifle"
desc = "The bullpup configured GP3000 is a battle rifle produced by Gurov Projectile Weapons LLC. It is sold almost exclusively to standing armies. Uses 7.62mm rounds."
@@ -440,7 +493,9 @@
if(!ignore_inhands)
update_held_icon()
-//Functionally a mini-uzi with slightly less terrible burst spread.
+/*
+ * Combat SMG (PP3 Ten)
+ */
/obj/item/weapon/gun/projectile/automatic/combatsmg
name = "\improper PP3 Ten"
desc = "The Bishamonten PP3 Ten personal defense weapon is a rare design much sought after - though more for its looks than its functionality. Uses 9mm rounds."
diff --git a/code/modules/projectiles/guns/projectile/automatic_vr.dm b/code/modules/projectiles/guns/projectile/automatic_vr.dm
index 8e53aec9e1..161a577ecc 100644
--- a/code/modules/projectiles/guns/projectile/automatic_vr.dm
+++ b/code/modules/projectiles/guns/projectile/automatic_vr.dm
@@ -28,34 +28,6 @@
slot_flags = SLOT_BACK
one_handed_penalty = 60 // The weapon itself is heavy
-// For general use
-/obj/item/weapon/gun/projectile/automatic/pdw
- name = "personal defense weapon"
- desc = "The X-9MM is a select-fire personal defense weapon designed in-house by Xing Private Security. It was made to compete with the WT550 Saber, but never caught on with NanoTrasen. Uses 9mm rounds."
- icon = 'icons/obj/gun_vr.dmi'
- icon_state = "pdw"
- item_state = "c20r" // Placeholder
- w_class = ITEMSIZE_NORMAL
- caliber = "9mm"
- origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
- slot_flags = SLOT_BELT
- load_method = MAGAZINE
- magazine_type = /obj/item/ammo_magazine/m9mml
- allowed_magazines = list(/obj/item/ammo_magazine/m9mm, /obj/item/ammo_magazine/m9mml)
-
- firemodes = list(
- list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
- list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6))
- )
-
-/obj/item/weapon/gun/projectile/automatic/pdw/update_icon(var/ignore_inhands)
- ..()
- if(istype(ammo_magazine,/obj/item/ammo_magazine/m9mm))
- icon_state = "pdw-short"
- else
- icon_state = (ammo_magazine)? "pdw" : "pdw-empty"
- if(!ignore_inhands) update_held_icon()
-
// For general use
/obj/item/weapon/gun/projectile/automatic/stg
name = "\improper Sturmgewehr"
@@ -77,45 +49,6 @@
item_state = (ammo_magazine)? "arifle" : "arifle-empty"
if(!ignore_inhands) update_held_icon()
-// Removed because gun64_vr.dmi guns don't work.
-/*
-//-----------------------UF-ARC----------------------------------
-/obj/item/weapon/gun/projectile/automatic/carbine/fluff/ufarc
- name = "UF-ARC"
- desc = "The UF-ARC is a lightweight assault rifle manufactured by the National Armory of Gaia and sold almost exclusively to the United Federation's standing army, the Military Assault Command Operations Department (MACOs)."
- icon = 'icons/obj/gun64_vr.dmi'
- icon_state = "ufarc"
- icon_override = 'icons/obj/gun_vr.dmi'
- item_state = "battlerifle_i"
- item_icons = null
- pixel_x = -16
-
-/obj/item/weapon/gun/projectile/automatic/carbine/fluff/ufarc/update_icon(var/ignore_inhands)
- ..()
- // TODO - Fix this for spriting different size magazines
- icon_state = (ammo_magazine)? "ufarc" : "ufarc-empty"
- item_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
- if(!ignore_inhands) update_held_icon()
-
-
-
-//-----------------------G44----------------------------------
-/obj/item/weapon/gun/projectile/automatic/carbine/fluff/g44
- name = "G44 Rifle"
- desc = "The G44 is a lightweight assault rifle manufactured by the National Armory of Gaia and sold almost exclusively to the United Federation's standing army, the Military Assault Command Operations Department (MACOs)."
- icon = 'icons/obj/gun64_vr.dmi'
- icon_state = "g44"
- item_state = "bullpup"
- pixel_x = -16
-
-/obj/item/weapon/gun/projectile/automatic/carbine/fluff/g44/update_icon(var/ignore_inhands)
- ..()
- // TODO - Fix this for spriting different size magazines
- icon_state = (ammo_magazine)? "g44" : "g44-empty"
- item_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
- if(!ignore_inhands) update_held_icon()
-*/
-
//////////////////// Eris Ported Guns ////////////////////
// No idea what this is for.
/obj/item/weapon/gun/projectile/automatic/sol
@@ -212,18 +145,4 @@
/obj/item/ammo_magazine/m9mml/ap
name = "\improper SMG magazine (9mm armor-piercing)"
- ammo_type = /obj/item/ammo_casing/a9mm/ap
-
-/* Seems to have been de-coded?
-/obj/item/ammo_magazine/m9mml/flash
- name = "\improper SMG magazine (9mm flash)"
- ammo_type = /obj/item/ammo_casing/a9mmf
-
-/obj/item/ammo_magazine/m9mml/rubber
- name = "\improper SMG magazine (9mm rubber)"
- ammo_type = /obj/item/ammo_casing/a9mmr
-
-/obj/item/ammo_magazine/m9mml/practice
- name = "\improper SMG magazine (9mm practice)"
- ammo_type = /obj/item/ammo_casing/a9mmp
-*/
+ ammo_type = /obj/item/ammo_casing/a9mm/ap
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile/dartgun_vr.dm b/code/modules/projectiles/guns/projectile/dartgun_vr.dm
index dda197ccc6..a802c17327 100644
--- a/code/modules/projectiles/guns/projectile/dartgun_vr.dm
+++ b/code/modules/projectiles/guns/projectile/dartgun_vr.dm
@@ -27,3 +27,10 @@
else
icon_state = "tranqgun"
return 1
+
+// This is to allow xenobio to activate slime cores via remote.
+/obj/item/projectile/bullet/chemdart/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null)
+ ..()
+ if(blocked < 2)
+ if(istype(target, /obj/item/weapon/reagent_containers/food) || istype(target, /obj/item/slime_extract))
+ reagents.trans_to_obj(target, reagent_amount)
\ No newline at end of file
diff --git a/code/modules/reagents/reactions/instant/instant.dm b/code/modules/reagents/reactions/instant/instant.dm
index fdfd0a0df9..2bb809ccef 100644
--- a/code/modules/reagents/reactions/instant/instant.dm
+++ b/code/modules/reagents/reactions/instant/instant.dm
@@ -82,10 +82,10 @@
required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1)
result_amount = 3
-/decl/chemical_reaction/instant/space_drugs
- name = "Space Drugs"
- id = "space_drugs"
- result = "space_drugs"
+/decl/chemical_reaction/instant/bliss
+ name = "Bliss"
+ id = "bliss"
+ result = "bliss"
required_reagents = list("mercury" = 1, "sugar" = 1, "lithium" = 1)
result_amount = 3
@@ -1185,7 +1185,7 @@
name = "Talum-quem"
id = "talum_quem"
result = "talum_quem"
- required_reagents = list("space_drugs" = 2, "sugar" = 1, "amatoxin" = 1)
+ required_reagents = list("bliss" = 2, "sugar" = 1, "amatoxin" = 1)
result_amount = 4
/decl/chemical_reaction/instant/qerr_quem
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 5fdc6a50af..cee7ed4133 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -308,11 +308,11 @@
This one is filled with serotrotium, which causes concentrated production of the serotonin neurotransmitter in humans."
filled_reagents = list("serotrotium" = 15)
-/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/space_drugs
+/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss
name = "illicit injector"
desc = "A refined version of the standard autoinjector, allowing greater capacity. \
This one contains various illicit drugs, held inside a hypospray to make smuggling easier."
- filled_reagents = list("space_drugs" = 15)
+ filled_reagents = list("bliss" = 15)
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/cryptobiolin
name = "cryptobiolin injector"
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index de4871c6c1..b3b0a637cd 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -91,6 +91,29 @@
return
+/obj/item/weapon/reagent_containers/pill/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(is_sharp(W))
+ var/obj/item/weapon/reagent_containers/powder/J = new /obj/item/weapon/reagent_containers/powder(src.loc)
+ user.visible_message("[user] gently cuts up [src] with [W]!")
+ playsound(src.loc, 'sound/effects/chop.ogg', 50, 1)
+
+ if(reagents)
+ reagents.trans_to_obj(J, reagents.total_volume)
+ J.get_appearance()
+ qdel(src)
+
+ if(istype(W, /obj/item/weapon/card/id))
+ var/obj/item/weapon/reagent_containers/powder/J = new /obj/item/weapon/reagent_containers/powder(src.loc)
+ user.visible_message("[user] clumsily chops up [src] with [W]!")
+ playsound(src.loc, 'sound/effects/chop.ogg', 50, 1)
+
+ if(reagents)
+ reagents.trans_to_obj(J, reagents.total_volume)
+ J.get_appearance()
+ qdel(src)
+
+ return ..()
+
////////////////////////////////////////////////////////////////////////////////
/// Pills. END
////////////////////////////////////////////////////////////////////////////////
@@ -294,7 +317,7 @@
/obj/item/weapon/reagent_containers/pill/happy/Initialize()
. = ..()
- reagents.add_reagent("space_drugs", 15)
+ reagents.add_reagent("bliss", 15)
reagents.add_reagent("sugar", 15)
color = reagents.get_color()
diff --git a/code/modules/reagents/reagent_containers/unidentified_hypospray.dm b/code/modules/reagents/reagent_containers/unidentified_hypospray.dm
index 1a3412dbe7..cf57cb4b34 100644
--- a/code/modules/reagents/reagent_containers/unidentified_hypospray.dm
+++ b/code/modules/reagents/reagent_containers/unidentified_hypospray.dm
@@ -58,7 +58,7 @@
init_hide_identity = TRUE
flags = 0
-/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/space_drugs/unidentified
+/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/bliss/unidentified
init_hide_identity = TRUE
flags = 0
diff --git a/code/modules/reagents/reagents/_reagents.dm b/code/modules/reagents/reagents/_reagents.dm
index fafd022559..b42dd2d905 100644
--- a/code/modules/reagents/reagents/_reagents.dm
+++ b/code/modules/reagents/reagents/_reagents.dm
@@ -27,7 +27,7 @@
var/affects_robots = 0 // Does this chem process inside a Synth?
var/allergen_type // What potential allergens does this contain?
- var/allergen_factor = 1 // If the potential allergens are mixed and low-volume, they're a bit less dangerous. Needed for drinks because they're a single reagent compared to food which contains multiple seperate reagents.
+ var/allergen_factor = 2 // If the potential allergens are mixed and low-volume, they're a bit less dangerous. Needed for drinks because they're a single reagent compared to food which contains multiple seperate reagents.
var/cup_icon_state = null
var/cup_name = null
@@ -171,27 +171,7 @@
if(overdose && (volume > overdose * M?.species.chemOD_threshold) && (active_metab.metabolism_class != CHEM_TOUCH && !can_overdose_touch))
overdose(M, alien, removed)
if(M.species.allergens & allergen_type) //uhoh, we can't handle this!
- var/damage_severity = M.species.allergen_damage_severity*allergen_factor
- var/disable_severity = M.species.allergen_disable_severity*allergen_factor
- if(M.species.allergen_reaction & AG_TOX_DMG)
- M.adjustToxLoss(damage_severity)
- if(M.species.allergen_reaction & AG_OXY_DMG)
- M.adjustOxyLoss(damage_severity*1.5) //VOREStation Edit
- if(prob(2.5*disable_severity))
- M.emote(pick("cough","gasp","choke"))
- if(M.species.allergen_reaction & AG_EMOTE)
- if(prob(2.5*disable_severity)) //this has a higher base chance, but not *too* high
- M.emote(pick("pale","shiver","twitch"))
- if(M.species.allergen_reaction & AG_PAIN)
- M.adjustHalLoss(disable_severity*2) //VOREStation Edit
- if(M.species.allergen_reaction & AG_WEAKEN)
- M.Weaken(disable_severity)
- if(M.species.allergen_reaction & AG_BLURRY)
- M.eye_blurry = max(M.eye_blurry, disable_severity)
- if(M.species.allergen_reaction & AG_SLEEPY)
- M.drowsyness = max(M.drowsyness, disable_severity)
- if(M.species.allergen_reaction & AG_CONFUSE) //VOREStation Addition
- M.Confuse(disable_severity/4) //VOREStation Addition
+ M.add_chemical_effect(CE_ALLERGEN,allergen_factor)
remove_self(removed)
return
diff --git a/code/modules/reagents/reagents/dispenser.dm b/code/modules/reagents/reagents/dispenser.dm
index abc0522886..7708609a33 100644
--- a/code/modules/reagents/reagents/dispenser.dm
+++ b/code/modules/reagents/reagents/dispenser.dm
@@ -104,7 +104,7 @@
glass_name = "ethanol"
glass_desc = "A well-known alcohol with a variety of applications."
- allergen_factor = 0.5 //simulates mixed drinks containing less of the allergen, as they have only a single actual reagent unlike food
+ allergen_factor = 1 //simulates mixed drinks containing less of the allergen, as they have only a single actual reagent unlike food
/datum/reagent/ethanol/touch_mob(var/mob/living/L, var/amount)
..()
diff --git a/code/modules/reagents/reagents/drugs.dm b/code/modules/reagents/reagents/drugs.dm
new file mode 100644
index 0000000000..3dba29d6f7
--- /dev/null
+++ b/code/modules/reagents/reagents/drugs.dm
@@ -0,0 +1,255 @@
+/*
+/// Recreational and psychiatric drugs go here! Please keep them separated in the file.
+/// Due to concerns and safety for our repo, illegal real-world drug names should generally be avoided.
+*/
+
+/datum/reagent/drugs
+ name = "generic drugs"
+ id = "drugs"
+ description = "Some generic drugs."
+ taste_description = "a bad investment"
+ taste_mult = 1.2 /// The overwhelming flavor of a good(?) time!
+ color = "#f2f2f2"
+ var/high_messages = TRUE
+ var/list/high_message_list = list("You feel great! For now...", "You feel a wave of happiness!")
+ var/list/sober_message_list = list("You feel like garbage...", "Your head aches.")
+ data = 0
+
+ var/prob_proc = FALSE /// ANY probabilities in specific drugs should check for this to be TRUE + the desired probability AND set this back to false.
+
+ reagent_state = LIQUID
+ metabolism = REM * 0.5
+ ingest_met = REM * 1.5 /// Be very careful with this, ingestion is weird and will spam high/sober messages horribly!
+ mrate_static = TRUE
+ overdose = REAGENTS_OVERDOSE
+
+/datum/reagent/drugs/affect_blood(mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
+
+ if(high_messages == TRUE)
+ if(world.time > data + 90 SECONDS && volume > 0.5) /// Spam prevention.
+ data = world.time
+ var/msg = pick(high_message_list)
+ to_chat(M, "[msg]")
+ else if(volume <= 0.2 && data != -1)
+ data = -1
+ var/msg = pick(sober_message_list)
+ to_chat(M, "[msg]")
+ if(prob(5) && prob_proc == FALSE) /// Enables procs to activate, remains true until THAT PROC sets it to false again.
+ prob_proc = TRUE
+
+/datum/reagent/drugs/bliss /// Replaces Space Drugs.
+ name = "Bliss"
+ id = "bliss"
+ description = "Known for providing a euphoric high, this psychoactive drug is often used recreationally."
+ taste_description = "unpleasant bitterness"
+ taste_mult = 0.4
+ high_message_list = list("You don't quite know what up or down is anymore...",
+ "Colors just seem much more amazing.",
+ "You feel incredibly confident. No one can stop you.",
+ "You clench your jaw involuntarily.",
+ "You feel... unsteady.",
+ "You really feel like talking about your feelings!")
+ sober_message_list = list("Everything feels a little more grounded.",
+ "Colors seem... flatter.",
+ "Everything feels a little dull, now.")
+
+/datum/reagent/drugs/bliss/affect_blood(mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ var/drug_strength = 15
+ if(alien == IS_SKRELL)
+ drug_strength = drug_strength * 0.8
+ if(alien == IS_SLIME)
+ drug_strength = drug_strength * 1.2
+
+ M.druggy = max(M.druggy, drug_strength)
+ if(prob_proc == TRUE && prob(10) && isturf(M.loc) && !istype(M.loc, /turf/space) && M.canmove && !M.restrained())
+ step(M, pick(cardinal))
+ prob_proc = FALSE
+ if(prob_proc == TRUE && prob(7))
+ M.emote(pick("twitch", "drool", "moan", "giggle"))
+ prob_proc = FALSE
+
+/datum/reagent/drugs/bliss/overdose(var/mob/living/M as mob)
+ if(prob_proc == TRUE && prob(20))
+ M.hallucination = max(M.hallucination, 5)
+ prob_proc = FALSE
+ M.adjustBrainLoss(0.25*REM)
+ M.adjustToxLoss(0.25*REM)
+ ..()
+
+/datum/reagent/drugs/ambrosia_extract
+ name = "Ambrosia extract"
+ id = "ambrosia_extract"
+ description = "The extract from the plant family ambrosia, responsible for the more \"recreational\" effects."
+ taste_description = "a strong-tasting plant"
+ color = "#358f49"
+ high_message_list = list("You feel so much more relaxed.",
+ "You can't quite focus on anything.",
+ "Colors around you seem much more intense.",
+ "You could snack on something right now...",
+ "You feel lightheaded and giggly.",
+ "Everything seems so hilarious.",
+ "You really could go for some takeout right now.",
+ "You momentarily forget where you are.",
+ "You have a mild urge to look over your shoulder.")
+ sober_message_list = list("You feel the urge to just sit there and do nothing.",
+ "Reality seems like a real pain in the ass to deal with right now.",
+ "Things feel really colourless to you all of a sudden.",
+ "You feel the urge to lie down and nap.")
+
+/datum/reagent/drugs/ambrosia_extract/affect_blood(mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ var/drug_strength = 3
+ if(alien == IS_SKRELL)
+ drug_strength = drug_strength * 0.8
+ if(alien == IS_SLIME)
+ drug_strength = drug_strength * 1.2
+
+ M.adjustToxLoss(-2)
+ M.druggy = max(M.druggy, drug_strength)
+ M.heal_organ_damage(6)
+ M.adjustOxyLoss(-3)
+ M.AdjustStunned(-1)
+ if(prob(5) && prob_proc == TRUE)
+ M.emote("giggle")
+ prob_proc = FALSE
+ if(prob(10) && prob_proc == TRUE)
+ M.adjust_nutrition(-10)
+ prob_proc = FALSE
+
+/datum/reagent/drugs/psilocybin
+ name = "Psilocybin"
+ id = "psilocybin"
+ description = "A strong psycotropic derived from certain species of mushroom."
+ taste_description = "mushroom"
+ color = "#E700E7"
+ high_message_list = list("The world distorts around you...!",
+ "The walls look like they're moving...",
+ "Nothing really makes sense right now.",
+ "It feels like you've melded with the world around you...")
+ sober_message_list = list("Everything feels... flat.", "You feel almost TOO grounded in your surroundings.")
+
+/datum/reagent/drugs/psilocybin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+
+ var/threshold = 1 * M.species.chem_strength_tox
+ if(alien == IS_SKRELL)
+ threshold = 1.2
+
+ if(alien == IS_SLIME)
+ threshold = 0.8
+
+ M.druggy = max(M.druggy, 30)
+
+ var/effective_dose = dose
+ if(issmall(M)) effective_dose *= 2
+ if(effective_dose < 1 * threshold)
+ M.apply_effect(3, STUTTER)
+ M.make_dizzy(5)
+ if(prob(3) && prob_proc == TRUE)
+ M.emote(pick("twitch", "giggle"))
+ prob_proc = FALSE
+ else if(effective_dose < 2 * threshold)
+ M.apply_effect(3, STUTTER)
+ M.make_jittery(5)
+ M.make_dizzy(5)
+ M.druggy = max(M.druggy, 35)
+ if(prob(5) && prob_proc == TRUE)
+ M.emote(pick("twitch", "giggle"))
+ prob_proc = FALSE
+ else
+ M.apply_effect(3, STUTTER)
+ M.make_jittery(10)
+ M.make_dizzy(10)
+ M.druggy = max(M.druggy, 40)
+ if(prob(10) && prob_proc == TRUE)
+ M.emote(pick("twitch", "giggle"))
+ prob_proc = FALSE
+
+/datum/reagent/drugs/talum_quem
+ name = "Talum-quem"
+ id = "talum_quem"
+ description = " A very carefully tailored hallucinogen, for use of the Talum-Katish."
+ taste_description = "bubblegum"
+ taste_mult = 1.6
+ color = "#db2ed8"
+ high_message_list = list("The world distorts around you...!",
+ "The walls look like they're moving...",
+ "Nothing really makes sense right now.",
+ "It feels like you've melded with the world around you...")
+ sober_message_list = list("Everything feels... flat.", "You feel almost TOO grounded in your surroundings.")
+
+/datum/reagent/drugs/talum_quem/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+
+ var/drug_strength = 29 * M.species.chem_strength_tox
+ if(alien == IS_SKRELL)
+ drug_strength = drug_strength * 0.8
+ else
+ M.adjustToxLoss(10 * removed) //Given incorporations of other toxins with similiar damage, this seems right.
+
+ M.druggy = max(M.druggy, drug_strength)
+ if(prob(10) && prob_proc == TRUE && isturf(M.loc) && !istype(M.loc, /turf/space) && M.canmove && !M.restrained())
+ step(M, pick(cardinal))
+ prob_proc = FALSE
+ if(prob(7) && prob_proc == TRUE)
+ M.emote(pick("twitch", "drool", "moan", "giggle"))
+ prob_proc = FALSE
+
+/datum/reagent/drugs/nicotine
+ name = "Nicotine"
+ id = "nicotine"
+ description = "A highly addictive stimulant extracted from the tobacco plant."
+ taste_description = "sour staleness"
+ color = "#181818"
+ high_messages = FALSE
+
+/*///////////////////////////////////////////////////////////////////////////
+/// PSYCHIATRIC DRUGS /////
+/// /////
+/// Psychiatric drugs use similar mechanics and will go under "drugs". /////
+*////////////////////////////////////////////////////////////////////////////
+/datum/reagent/drugs/methylphenidate
+ name = "Methylphenidate"
+ id = "methylphenidate"
+ description = "Improves the ability to concentrate."
+ taste_description = "mild grape" ///Referencing real life oral solutions for these meds.
+ color = "#BF80BF"
+ high_message_list = list("You feel focused.", "Your attention is undivided.")
+ sober_message_list = list("It becomes harder to focus...", "You feel distractible.")
+
+/datum/reagent/drugs/citalopram
+ name = "Citalopram"
+ id = "citalopram"
+ description = "Stabilizes the mind a little."
+ taste_description = "mild peppermint"
+ color = "#FF80FF"
+ high_message_list = list("Everything feels a bit more steady.", "Your mind feels stable.")
+ sober_message_list = list("You feel a little tired.", "You feel a little more listless...")
+
+/datum/reagent/drugs/paroxetine
+ name = "Paroxetine"
+ id = "paroxetine"
+ description = "Stabilizes the mind greatly, but has a chance of adverse effects."
+ taste_description = "mild oranges"
+ color = "#FF80BF"
+ high_message_list = list("Everything feels good, stable.", "You feel grounded.")
+ sober_message_list = list("The stability is gone...", "Everything is much less stable.")
+
+/datum/reagent/drugs/paroxetine/affect_blood(mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(prob(5) && prob_proc == TRUE)
+ to_chat(M, "Everything feels out of control...")
+ M.hallucination += 200
+ prob_proc = FALSE
+
+/datum/reagent/drugs/qerr_quem
+ name = "Qerr-quem"
+ id = "qerr_quem"
+ description = "A potent sedative and anti-anxiety medication, made for the Qerr-Katish."
+ taste_description = "mint"
+ color = "#e6efe3"
+ high_message_list = list("You feel sluggish...", "You feel calm and collected.")
+ sober_message_list = list("You feel so much more antsy...", "Your concentration wavers.")
\ No newline at end of file
diff --git a/code/modules/reagents/reagents/food_drinks.dm b/code/modules/reagents/reagents/food_drinks.dm
index fc6d2c3269..0323520e89 100644
--- a/code/modules/reagents/reagents/food_drinks.dm
+++ b/code/modules/reagents/reagents/food_drinks.dm
@@ -436,6 +436,15 @@
nutriment_factor = 5
color = "#302000"
+/datum/reagent/nutriment/chocolate
+ name = "Chocolate"
+ id = "chocolate"
+ description = "Great for cooking or on its own!"
+ taste_description = "chocolate"
+ color = "#582815"
+ nutriment_factor = 5
+ taste_mult = 1.3
+
/datum/reagent/nutriment/instantjuice
name = "Juice Powder"
id = "instantjuice"
@@ -1004,6 +1013,16 @@
..()
M.reagents.add_reagent("imidazoline", removed * 0.2)
+/datum/reagent/drink/juice/lettuce
+ name = "Lettuce Juice"
+ id = "lettucejuice"
+ description = "It's mostly water, just a bit more lettucy."
+ taste_description = "fresh greens"
+ color = "#29df4b"
+
+ glass_name = "lettuce juice"
+ glass_desc = "This is just lettuce water. Fresh but boring."
+
/datum/reagent/drink/juice
name = "Grape Juice"
id = "grapejuice"
@@ -1092,7 +1111,7 @@
glass_desc = "Vitamins! Yay!"
allergen_type = ALLERGEN_FRUIT //Oranges are fruit
-/datum/reagent/drink/orangejuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+/datum/reagent/drink/juice/orange/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
if(alien == IS_DIONA)
return
diff --git a/code/modules/reagents/reagents/medicine.dm b/code/modules/reagents/reagents/medicine.dm
index a18a2a1a73..469b192f22 100644
--- a/code/modules/reagents/reagents/medicine.dm
+++ b/code/modules/reagents/reagents/medicine.dm
@@ -3,7 +3,7 @@
/datum/reagent/inaprovaline
name = "Inaprovaline"
id = "inaprovaline"
- description = "Inaprovaline is a synaptic stimulant and cardiostimulant. Commonly used to stabilize patients."
+ description = "Inaprovaline is a synaptic stimulant and cardiostimulant. Commonly used to stabilize patients. Also counteracts allergic reactions."
taste_description = "bitterness"
reagent_state = LIQUID
color = "#00BFFF"
@@ -15,6 +15,7 @@
if(alien != IS_DIONA)
M.add_chemical_effect(CE_STABLE, 15)
M.add_chemical_effect(CE_PAINKILLER, 10 * M.species.chem_strength_pain)
+ M.remove_chemical_effect(CE_ALLERGEN)
/datum/reagent/inaprovaline/topical
name = "Inaprovalaze"
@@ -1301,8 +1302,8 @@
//VOREstation edit. Floor polishing.
if(istype(T, /turf/simulated))
var/turf/simulated/S = T
- S.dirt = -50
- //VOREstation edit end
+ S.dirt = -50
+ //VOREstation edit end
/datum/reagent/sterilizine/touch_mob(var/mob/living/L, var/amount)
..()
@@ -1378,106 +1379,6 @@
M.make_dizzy(5)
M.make_jittery(5)
-/* Antidepressants */
-
-#define ANTIDEPRESSANT_MESSAGE_DELAY 5*60*10
-
-/datum/reagent/methylphenidate
- name = "Methylphenidate"
- id = "methylphenidate"
- description = "Improves the ability to concentrate."
- taste_description = "bitterness"
- reagent_state = LIQUID
- color = "#BF80BF"
- metabolism = 0.01
- ingest_met = 0.25
- mrate_static = TRUE
- data = 0
-
-/datum/reagent/methylphenidate/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 lose focus...")
- else
- if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
- data = world.time
- to_chat(M, "Your mind feels focused and undivided.")
-
-/datum/reagent/citalopram
- name = "Citalopram"
- id = "citalopram"
- description = "Stabilizes the mind a little."
- taste_description = "bitterness"
- reagent_state = LIQUID
- color = "#FF80FF"
- metabolism = 0.01
- ingest_met = 0.25
- mrate_static = TRUE
- data = 0
-
-/datum/reagent/citalopram/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, "Your mind feels a little less stable...")
- else
- if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
- data = world.time
- to_chat(M, "Your mind feels stable... a little stable.")
-
-/datum/reagent/paroxetine
- name = "Paroxetine"
- id = "paroxetine"
- description = "Stabilizes the mind greatly, but has a chance of adverse effects."
- taste_description = "bitterness"
- reagent_state = LIQUID
- color = "#FF80BF"
- metabolism = 0.01
- ingest_met = 0.25
- mrate_static = TRUE
- data = 0
-
-/datum/reagent/paroxetine/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, "Your mind feels much less stable...")
- else
- if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
- data = world.time
- if(prob(90))
- to_chat(M, "Your mind feels much more stable.")
- else
- to_chat(M, "Your mind breaks apart...")
- M.hallucination += 200
-
-/datum/reagent/qerr_quem
- name = "Qerr-quem"
- id = "qerr_quem"
- description = "A potent stimulant and anti-anxiety medication, made for the Qerr-Katish."
- taste_description = "mint"
- reagent_state = LIQUID
- color = "#e6efe3"
- metabolism = 0.01
- ingest_met = 0.25
- mrate_static = TRUE
- data = 0
-
-/datum/reagent/qerr_quem/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 antsy, your concentration wavers...")
- else
- if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
- data = world.time
- to_chat(M, "You feel invigorated and calm.")
-
// This exists to cut the number of chemicals a merc borg has to juggle on their hypo.
/datum/reagent/healing_nanites
name = "Restorative Nanites"
@@ -1515,7 +1416,7 @@
reagent_state = LIQUID
color = "#ffb500"
overdose = REAGENTS_OVERDOSE * 0.50
-
+
/datum/reagent/earthsblood/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.heal_organ_damage (4 * removed, 4 * removed)
diff --git a/code/modules/reagents/reagents/toxins.dm b/code/modules/reagents/reagents/toxins.dm
index 6b7c2c66fe..003ba3e74f 100644
--- a/code/modules/reagents/reagents/toxins.dm
+++ b/code/modules/reagents/reagents/toxins.dm
@@ -762,34 +762,6 @@
/* Drugs */
-/datum/reagent/space_drugs
- name = "Space drugs"
- id = "space_drugs"
- description = "An illegal chemical compound used as drug."
- taste_description = "bitterness"
- taste_mult = 0.4
- reagent_state = LIQUID
- color = "#60A584"
- metabolism = REM * 0.5
- overdose = REAGENTS_OVERDOSE
-
-/datum/reagent/space_drugs/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
- if(alien == IS_DIONA)
- return
-
- var/drug_strength = 15 * M.species.chem_strength_tox
- if(alien == IS_SKRELL)
- drug_strength = drug_strength * 0.8
-
- if(alien == IS_SLIME)
- drug_strength = drug_strength * 1.2
-
- M.druggy = max(M.druggy, drug_strength)
- if(prob(10) && isturf(M.loc) && !istype(M.loc, /turf/space) && M.canmove && !M.restrained())
- step(M, pick(cardinal))
- if(prob(7))
- M.emote(pick("twitch", "drool", "moan", "giggle"))
-
/datum/reagent/serotrotium
name = "Serotrotium"
id = "serotrotium"
@@ -892,85 +864,6 @@
M.hallucination = max(M.hallucination, drug_strength)
-/datum/reagent/psilocybin
- name = "Psilocybin"
- id = "psilocybin"
- description = "A strong psycotropic derived from certain species of mushroom."
- taste_description = "mushroom"
- color = "#E700E7"
- overdose = REAGENTS_OVERDOSE
- metabolism = REM * 0.5
-
-/datum/reagent/psilocybin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
- if(alien == IS_DIONA)
- return
-
- var/threshold = 1 * M.species.chem_strength_tox
- if(alien == IS_SKRELL)
- threshold = 1.2
-
- if(alien == IS_SLIME)
- threshold = 0.8
-
- M.druggy = max(M.druggy, 30)
-
- var/effective_dose = dose
- if(issmall(M)) effective_dose *= 2
- if(effective_dose < 1 * threshold)
- M.apply_effect(3, STUTTER)
- M.make_dizzy(5)
- if(prob(5))
- M.emote(pick("twitch", "giggle"))
- else if(effective_dose < 2 * threshold)
- M.apply_effect(3, STUTTER)
- M.make_jittery(5)
- M.make_dizzy(5)
- M.druggy = max(M.druggy, 35)
- if(prob(10))
- M.emote(pick("twitch", "giggle"))
- else
- M.apply_effect(3, STUTTER)
- M.make_jittery(10)
- M.make_dizzy(10)
- M.druggy = max(M.druggy, 40)
- if(prob(15))
- M.emote(pick("twitch", "giggle"))
-
-/datum/reagent/nicotine
- name = "Nicotine"
- id = "nicotine"
- description = "A highly addictive stimulant extracted from the tobacco plant."
- taste_description = "bitterness"
- reagent_state = LIQUID
- color = "#181818"
-
-/datum/reagent/talum_quem
- name = "Talum-quem"
- id = "talum_quem"
- description = " A very carefully tailored hallucinogen, for use of the Talum-Katish."
- taste_description = "bubblegum"
- taste_mult = 1.6
- reagent_state = LIQUID
- color = "#db2ed8"
- metabolism = REM * 0.5
- overdose = REAGENTS_OVERDOSE
-
-/datum/reagent/talum_quem/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
- if(alien == IS_DIONA)
- return
-
- var/drug_strength = 29 * M.species.chem_strength_tox
- if(alien == IS_SKRELL)
- drug_strength = drug_strength * 0.8
- else
- M.adjustToxLoss(10 * removed) //Given incorporations of other toxins with similiar damage, this seems right.
-
- M.druggy = max(M.druggy, drug_strength)
- if(prob(10) && isturf(M.loc) && !istype(M.loc, /turf/space) && M.canmove && !M.restrained())
- step(M, pick(cardinal))
- if(prob(7))
- M.emote(pick("twitch", "drool", "moan", "giggle"))
-
/* Transformations */
/datum/reagent/slimetoxin
diff --git a/code/modules/recycling/disposal_vr.dm b/code/modules/recycling/disposal_vr.dm
new file mode 100644
index 0000000000..b1d09cfa97
--- /dev/null
+++ b/code/modules/recycling/disposal_vr.dm
@@ -0,0 +1,12 @@
+/obj/machinery/disposal/wall/cleaner
+ name = "resleeving equipment deposit"
+ desc = "Automatically cleans and transports items to the local resleeving facilities."
+ icon = 'icons/obj/pipes/disposal_vr.dmi'
+ icon_state = "bluewall"
+
+/obj/machinery/disposal/wall/cleaner/flush()
+ flick("[icon_state]-flush", src)
+ for(var/obj/item/i in src)
+ if(istype(i, /obj/item))
+ i.decontaminate()
+ . = ..()
\ No newline at end of file
diff --git a/code/modules/research/designs/xenobio_toys_vr.dm b/code/modules/research/designs/xenobio_toys_vr.dm
new file mode 100644
index 0000000000..39491c1b0c
--- /dev/null
+++ b/code/modules/research/designs/xenobio_toys_vr.dm
@@ -0,0 +1,17 @@
+/datum/design/item/weapon/xenobio/monkey_gun
+ name = "bluespace monkey deployment system"
+ desc = "An Advanced monkey teleportation and rehydration system. For serious monkey business."
+ id = "monkey_gun"
+ req_tech = list(TECH_MATERIAL = 3, TECH_BIO = 3, TECH_POWER = 4, TECH_COMBAT = 4, TECH_BLUESPACE = 6)
+ materials = list(MAT_PLASTEEL = 5000, MAT_GLASS = 5000, MAT_DIAMOND = 500, MAT_MORPHIUM = 350)
+ build_path = /obj/item/weapon/xenobio/monkey_gun
+ sort_string = "HBBA"
+
+/datum/design/item/weapon/xenobio/grinder
+ name = "portable slime processor"
+ desc = "This high tech device combines the slime processor with the latest in woodcutting technology."
+ id = "slime_grinder"
+ req_tech = list(TECH_MAGNET = 4, TECH_BIO = 7)
+ materials = list(MAT_STEEL = 500, MAT_GLASS = 500, MAT_DIAMOND = 500, MAT_MORPHIUM = 100)
+ build_path = /obj/item/weapon/slime_grinder
+ sort_string = "HBBB"
\ No newline at end of file
diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm
index df3cf32347..6045284b4c 100644
--- a/code/modules/virus2/effect.dm
+++ b/code/modules/virus2/effect.dm
@@ -337,7 +337,7 @@
if(c_data)
data = c_data
else
- data = pick("bicaridine", "kelotane", "anti_toxin", "inaprovaline", "space_drugs", "sugar",
+ data = pick("bicaridine", "kelotane", "anti_toxin", "inaprovaline", "bliss", "sugar",
"tramadol", "dexalin", "cryptobiolin", "impedrezene", "hyperzine", "ethylredoxrazine",
"mindbreaker", "glucose")
var/datum/reagent/R = SSchemistry.chemical_reagents[data]
diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm
index 351ca2191e..554dac57f1 100644
--- a/code/modules/vore/eating/belly_obj_vr.dm
+++ b/code/modules/vore/eating/belly_obj_vr.dm
@@ -147,7 +147,7 @@
"Their %belly looks larger than usual.")
var/item_digest_mode = IM_DIGEST_FOOD // Current item-related mode from item_digest_modes
- var/contaminates = TRUE // Whether the belly will contaminate stuff
+ var/contaminates = FALSE // Whether the belly will contaminate stuff
var/contamination_flavor = "Generic" // Determines descriptions of contaminated items
var/contamination_color = "green" // Color of contamination overlay
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index e951477ba7..b049402836 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -31,6 +31,9 @@
var/drain_finalized = 0 // Determines if the succubus drain will be KO'd/absorbed. Can be toggled on at any time.
var/fuzzy = 0 // Preference toggle for sharp/fuzzy icon.
var/permit_healbelly = TRUE
+ var/stumble_vore = FALSE
+ var/slip_vore = FALSE
+ var/drop_vore = FALSE
var/can_be_drop_prey = FALSE
var/can_be_drop_pred = TRUE // Mobs are pred by default.
var/allow_spontaneous_tf = FALSE // Obviously.
@@ -238,6 +241,9 @@
P.allow_spontaneous_tf = src.allow_spontaneous_tf
P.step_mechanics_pref = src.step_mechanics_pref
P.pickup_pref = src.pickup_pref
+ P.drop_vore = src.drop_vore
+ P.slip_vore = src.slip_vore
+ P.stumble_vore = src.stumble_vore
var/list/serialized = list()
for(var/obj/belly/B as anything in src.vore_organs)
@@ -274,6 +280,9 @@
allow_spontaneous_tf = P.allow_spontaneous_tf
step_mechanics_pref = P.step_mechanics_pref
pickup_pref = P.pickup_pref
+ drop_vore = P.drop_vore
+ slip_vore = P.slip_vore
+ stumble_vore = P.stumble_vore
if(bellies)
release_vore_contents(silent = TRUE)
@@ -939,6 +948,9 @@
dispvoreprefs += "Healbelly permission: [permit_healbelly ? "Allowed" : "Disallowed"] "
dispvoreprefs += "Spontaneous vore prey: [can_be_drop_prey ? "Enabled" : "Disabled"] "
dispvoreprefs += "Spontaneous vore pred: [can_be_drop_pred ? "Enabled" : "Disabled"] "
+ dispvoreprefs += "Drop Vore: [drop_vore ? "Enabled" : "Disabled"] "
+ dispvoreprefs += "Slip Vore: [slip_vore ? "Enabled" : "Disabled"] "
+ dispvoreprefs += "Stumble Vore: [stumble_vore ? "Enabled" : "Disabled"] "
dispvoreprefs += "Inbelly Spawning: [allow_inbelly_spawning ? "Allowed" : "Disallowed"] "
dispvoreprefs += "Spontaneous transformation: [allow_spontaneous_tf ? "Enabled" : "Disabled"] "
dispvoreprefs += "Can be stepped on/over: [step_mechanics_pref ? "Allowed" : "Disallowed"] "
diff --git a/code/modules/vore/eating/slipvore_vr.dm b/code/modules/vore/eating/slipvore_vr.dm
index 2adc3f757e..b2eeefbfdc 100644
--- a/code/modules/vore/eating/slipvore_vr.dm
+++ b/code/modules/vore/eating/slipvore_vr.dm
@@ -16,6 +16,8 @@
return FALSE
if(!src.vore_selected) //Gotta have one selected as well.
return FALSE
+ if(!slip_vore || !target.slip_vore)
+ return FALSE
return TRUE
/mob/living/proc/can_be_slip_vored_by(var/mob/living/target)
@@ -29,6 +31,9 @@
return FALSE
if(!target.vore_selected) //Gotta have one selected as well.
return FALSE
+ if(!slip_vore || !target.slip_vore)
+ to_chat(src,"Pred slip_vore is [target.slip_vore] Prey slip_vore is [slip_vore]")
+ return FALSE
return TRUE
/mob/living/Crossed(var/atom/movable/AM)
diff --git a/code/modules/vore/eating/stumblevore_vr.dm b/code/modules/vore/eating/stumblevore_vr.dm
new file mode 100644
index 0000000000..0928dcccff
--- /dev/null
+++ b/code/modules/vore/eating/stumblevore_vr.dm
@@ -0,0 +1,54 @@
+/mob/living/proc/CanStumbleVore(mob/living/target)
+ if(!can_be_drop_pred)
+ return FALSE
+ if(!is_vore_predator(src))
+ return FALSE
+ if(!target.devourable)
+ return FALSE
+ if(!target.can_be_drop_prey)
+ return FALSE
+ if(!target.stumble_vore || !stumble_vore)
+ return FALSE
+ return TRUE
+
+/mob/living/Bump(atom/movable/AM)
+ //. = ..()
+ if(istype(AM, /mob/living))
+ if(((confused || is_blind()) && stat == CONSCIOUS && prob(50) && m_intent=="run") || flying && flight_vore)
+ AM.stumble_into(src)
+ return ..()
+// Because flips toggle density
+/mob/living/Crossed(var/atom/movable/AM)
+ if(istype(AM, /mob/living) && isturf(loc) && AM != src)
+ var/mob/living/AMV = AM
+ if(((AMV.confused || AMV.is_blind()) && AMV.stat == CONSCIOUS && prob(50) && AMV.m_intent=="run") || AMV.flying && AMV.flight_vore)
+ stumble_into(AMV)
+ ..()
+
+/mob/living/stumble_into(mob/living/M)
+ var/mob/living/carbon/human/S = src
+
+ playsound(src, "punch", 25, 1, -1)
+ M.Weaken(4)
+ M.stop_flying()
+ if(CanStumbleVore(M))
+ visible_message("[M] flops carlessly into [src]!")
+ perform_the_nom(src,M,src,src.vore_selected,1)
+ else if(M.CanStumbleVore(src))
+ visible_message("[M] flops carlessly into [src]!")
+ perform_the_nom(M,src,M,M.vore_selected,1)
+ else if(S.species.lightweight == 1)
+ visible_message("[M] carelessly bowls [src] over!")
+ M.forceMove(get_turf(src))
+ M.apply_damage(0.5, BRUTE)
+ Weaken(4)
+ stop_flying()
+ apply_damage(0.5, BRUTE)
+ else if(round(weight) > 474)
+ var/throwtarget = get_edge_target_turf(M, reverse_direction(M.dir))
+ visible_message("[M] bounces backwards off of [src]'s plush body!")
+ M.throw_at(throwtarget, 2, 1)
+ else
+ visible_message("[M] trips over [src]!")
+ M.forceMove(get_turf(src))
+ M.apply_damage(1, BRUTE)
\ No newline at end of file
diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm
index 4163277462..adab08ebe1 100644
--- a/code/modules/vore/eating/vore_vr.dm
+++ b/code/modules/vore/eating/vore_vr.dm
@@ -55,6 +55,11 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
var/allowmobvore = TRUE
var/permit_healbelly = TRUE
+ // These are 'modifier' prefs, do nothing on their own but pair with drop_prey/drop_pred settings.
+ var/drop_vore = FALSE
+ var/stumble_vore = FALSE
+ var/slip_vore = FALSE
+
var/resizable = TRUE
var/show_vore_fx = TRUE
var/step_mechanics_pref = FALSE
@@ -143,6 +148,9 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
step_mechanics_pref = json_from_file["step_mechanics_pref"]
pickup_pref = json_from_file["pickup_pref"]
belly_prefs = json_from_file["belly_prefs"]
+ drop_vore = json_from_file["drop_vore"]
+ slip_vore = json_from_file["slip_vore"]
+ stumble_vore = json_from_file["stumble_vore"]
//Quick sanitize
if(isnull(digestable))
@@ -177,6 +185,12 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
pickup_pref = TRUE
if(isnull(belly_prefs))
belly_prefs = list()
+ if(isnull(drop_vore))
+ drop_vore = FALSE
+ if(isnull(slip_vore))
+ slip_vore = FALSE
+ if(isnull(stumble_vore))
+ stumble_vore = FALSE
return TRUE
@@ -205,6 +219,9 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
"step_mechanics_pref" = step_mechanics_pref,
"pickup_pref" = pickup_pref,
"belly_prefs" = belly_prefs,
+ "drop_vore" = drop_vore,
+ "slip_vore" = slip_vore,
+ "stumble_vore" = stumble_vore,
)
//List to JSON
diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm
index 4a17a253f3..a84bbd4526 100644
--- a/code/modules/vore/eating/vorepanel_vr.dm
+++ b/code/modules/vore/eating/vorepanel_vr.dm
@@ -249,6 +249,9 @@
"step_mechanics_active" = host.step_mechanics_pref,
"pickup_mechanics_active" = host.pickup_pref,
"noisy" = host.noisy,
+ "drop_vore" = host.drop_vore,
+ "slip_vore" = host.slip_vore,
+ "stumble_vore" = host.stumble_vore,
)
return data
@@ -465,6 +468,18 @@
host.noisy = !host.noisy
unsaved_changes = TRUE
return TRUE
+ if("toggle_drop_vore")
+ host.drop_vore = !host.drop_vore
+ unsaved_changes = TRUE
+ return TRUE
+ if("toggle_slip_vore")
+ host.slip_vore = !host.slip_vore
+ unsaved_changes = TRUE
+ return TRUE
+ if("toggle_stumble_vore")
+ host.stumble_vore = !host.stumble_vore
+ unsaved_changes = TRUE
+ return TRUE
/datum/vore_look/proc/pick_from_inside(mob/user, params)
var/atom/movable/target = locate(params["pick"])
@@ -686,7 +701,7 @@
host.vore_selected.item_digest_mode = new_mode
host.vore_selected.items_preserved.Cut() //Re-evaltuate all items in belly on belly-mode change
. = TRUE
- if("b_contaminates")
+ if("b_contaminate")
host.vore_selected.contaminates = !host.vore_selected.contaminates
. = TRUE
if("b_contamination_flavor")
diff --git a/code/modules/xenobio/items/weapons_vr.dm b/code/modules/xenobio/items/weapons_vr.dm
new file mode 100644
index 0000000000..24a91715a4
--- /dev/null
+++ b/code/modules/xenobio/items/weapons_vr.dm
@@ -0,0 +1,159 @@
+/obj/item/weapon/xenobio
+ name = "xenobio gun"
+ desc = "You shouldn't see this!"
+ icon = 'icons/obj/gun_vr.dmi'
+ icon_state = "harpoon-2"
+ var/loadable_item = null
+ var/loaded_item = null
+ var/loadable_name = null
+ var/firable = TRUE
+/obj/item/weapon/xenobio/examine(var/mob/user)
+ . = ..()
+ if(loaded_item)
+ .+= "A [loaded_item] is slotted into the side."
+ else
+ .+= "There appears to be an empty slot for attaching a [loadable_name]."
+
+/obj/item/weapon/xenobio/attack_hand(mob/user as mob)
+ if(user.get_inactive_hand() == src && loaded_item)
+ user.put_in_hands(loaded_item)
+ user.visible_message("[user] removes [loaded_item] from [src].", "You remove [loaded_item] from [src].")
+ loaded_item = null
+ playsound(src, 'sound/weapons/empty.ogg', 50, 1)
+ else
+ return ..()
+
+/obj/item/weapon/xenobio/attackby(obj/item/I as obj, mob/user as mob)
+ if(istype(I, loadable_item))
+ if(loaded_item)
+ to_chat(user, "[I] doesn't seem to fit into [src].")
+ return
+ //var/obj/item/weapon/reagent_containers/glass/beaker/B = I
+ user.drop_item()
+ I.loc = src
+ loaded_item = I
+ user.visible_message("[user] inserts [I] into [src].", "You slot [I] into [src].")
+ return 1
+ ..()
+
+/obj/item/weapon/xenobio/attack_self(mob/living/user as mob)
+ if(loaded_item)
+ user.put_in_hands(loaded_item)
+ user.visible_message("[user] removes [loaded_item] from [src].", "You remove [loaded_item] from [src].")
+ loaded_item = null
+ playsound(src, 'sound/weapons/empty.ogg', 50, 1)
+
+/obj/item/weapon/xenobio/afterattack(atom/A, mob/user as mob)
+ if(!loaded_item)
+ to_chat(user,"\The [src] shot fizzles, it appears you need to load something!")
+ //playsound(src, 'sound/weapons/wave.ogg', 60, 1)
+ playsound(src, 'sound/weapons/empty.ogg', 50, 1)
+ return
+ if(!firable)
+ return
+
+ playsound(src, 'sound/weapons/wave.ogg', 60, 1)
+
+ user.visible_message("[user] fires \the [src]!","You fire \the [src]!")
+
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(4, 1, A)
+ s.start()
+ s = new /datum/effect/effect/system/spark_spread
+ s.set_up(4, 1, user)
+ s.start()
+
+/obj/item/weapon/xenobio/monkey_gun
+ name = "Bluespace Cube Rehydrator"
+ desc = "Based on the technology of the 'Bluespace Harpoon' this device can teleport a loaded cube to a given target and rehydrate it."
+ loadable_item = /obj/item/weapon/reagent_containers/food/snacks/monkeycube
+ loadable_name = "Monkey Cube"
+ origin_tech = list(TECH_BLUESPACE = 5, TECH_BIO = 6)
+ //projectile_type = /obj/item/projectile/beam/xenobio/monkey
+
+/obj/item/weapon/xenobio/monkey_gun/afterattack(atom/A, mob/user as mob)
+ ..()
+
+ if(!firable)
+ return
+
+ var/turf/T = get_turf(A)
+ if(!T || (T.check_density(ignore_mobs = TRUE)))
+ to_chat(user,"Your rehydrator flashes an error as it attempts to process your target.")
+ playsound(src, 'sound/weapons/empty.ogg', 50, 1)
+ return
+ if(istype(A, /mob/living))
+ to_chat(user,"The rehydrator's saftey systems prevent firing into living creatures!")
+ playsound(src, 'sound/weapons/empty.ogg', 50, 1)
+ return
+ if(loaded_item)
+ var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = loaded_item
+ cube.loc = A
+ cube.Expand()
+ loaded_item = null
+ firable = FALSE
+ VARSET_IN(src, firable, TRUE, 2 SECONDS)
+
+// Instead of bringing the slime to the grinder, lets bring the grinder to the slime! This will process slimes and monkies one at a time.
+/obj/item/weapon/slime_grinder
+ name = "portable slime processor"
+ desc = "An industrial grinder used to automate the process of slime core extraction. It can also recycle biomatter. This one appears miniturized"
+ //icon = 'icons/obj/weapons_vr.dmi'
+ icon_state = "chainsaw0"
+ var/processing = FALSE // So I heard you like processing.
+ var/list/to_be_processed = list()
+ var/monkeys_recycled = 0
+ description_info = "Click a monkey or slime to begin processing."
+
+/obj/item/weapon/slime_grinder/proc/extract(var/atom/movable/AM, var/mob/living/user)
+ processing = TRUE
+ if(istype(AM, /mob/living/simple_mob/slime))
+ var/mob/living/simple_mob/slime/S = AM
+ while(S.cores)
+ playsound(src, 'sound/machines/juicer.ogg', 25, 1)
+ if(do_after(user, 15))
+ new S.coretype(get_turf(AM))
+ playsound(src, 'sound/effects/splat.ogg', 50, 1)
+ S.cores--
+ qdel(S)
+
+ if(istype(AM, /mob/living/carbon/human/monkey))
+ playsound(src, 'sound/machines/juicer.ogg', 25, 1)
+ if(do_after(user, 15))
+ var/mob/living/carbon/human/M = AM
+ playsound(src, 'sound/effects/splat.ogg', 50, 1)
+ qdel(M)
+ monkeys_recycled++
+ sleep(1 SECOND)
+ while(monkeys_recycled >= 4)
+ new /obj/item/weapon/reagent_containers/food/snacks/monkeycube(get_turf(src))
+ playsound(src, 'sound/effects/splat.ogg', 50, 1)
+ monkeys_recycled -= 4
+ sleep(1 SECOND)
+ processing = FALSE
+
+/obj/item/weapon/slime_grinder/proc/can_insert(var/atom/movable/AM)
+ if(istype(AM, /mob/living/simple_mob/slime))
+ var/mob/living/simple_mob/slime/S = AM
+ if(S.stat != DEAD)
+ return FALSE
+ return TRUE
+ if(istype(AM, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = AM
+ if(!istype(H.species, /datum/species/monkey))
+ return FALSE
+ if(H.stat != DEAD)
+ return FALSE
+ return TRUE
+ return FALSE
+
+/obj/item/weapon/slime_grinder/attack(mob/M as mob, mob/living/user as mob)
+ if(processing)
+ return
+ if(!can_insert(M))
+ to_chat(user, "\The [src] cannot process \the [M] at this time.")
+ playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1)
+ return
+
+ extract(M, user)
+ return ..()
\ No newline at end of file
diff --git a/code/modules/xenobio2/_xeno_setup.dm b/code/modules/xenobio2/_xeno_setup.dm
index e77230b3e5..7d2d2a2e80 100644
--- a/code/modules/xenobio2/_xeno_setup.dm
+++ b/code/modules/xenobio2/_xeno_setup.dm
@@ -48,57 +48,57 @@
#define MINOR_MALEABLE 1
#define MIN_MALEABLE 0
-var/global/list/xenoChemList = list("mutationtoxin",
- "psilocybin",
- "mindbreaker",
- "impedrezene",
+var/global/list/xenoChemList = list("mutationtoxin",
+ "psilocybin",
+ "mindbreaker",
+ "impedrezene",
"cryptobiolin",
- "space_drugs",
- "chloralhydrate",
- "stoxin",
- "mutagen",
- "lexorin",
- "pacid",
- "cyanide",
- "phoron",
- "plasticide",
- "amatoxin",
- "carbon",
- "radium",
- "sacid",
- "sugar",
- "kelotane",
- "dermaline",
- "anti_toxin",
- "dexalin",
- "synaptizine",
- "alkysine",
- "imidazoline",
- "peridaxon",
+ "bliss",
+ "chloralhydrate",
+ "stoxin",
+ "mutagen",
+ "lexorin",
+ "pacid",
+ "cyanide",
+ "phoron",
+ "plasticide",
+ "amatoxin",
+ "carbon",
+ "radium",
+ "sacid",
+ "sugar",
+ "kelotane",
+ "dermaline",
+ "anti_toxin",
+ "dexalin",
+ "synaptizine",
+ "alkysine",
+ "imidazoline",
+ "peridaxon",
"rezadone",
"mutationtoxin",
"docilitytoxin")
-
+
/datum/xeno/traits
var/list/traits = list()
var/list/chemlist = list()
var/list/chems = list()
var/source = "unknown"
-
+
/datum/xeno/traits/proc/set_trait(var/trait, var/newval)
traits["[trait]"] = newval
return
-
+
/datum/xeno/traits/proc/get_trait(var/trait)
var/val = traits["[trait]"]
return val
-
+
/datum/xeno/traits/proc/copy_traits(var/datum/xeno/traits/target)
target.traits = traits
target.chemlist = chemlist
target.chems = chems
target.source = source
-
+
/datum/xeno/traits/New()
..()
set_trait(TRAIT_XENO_COLOR, "#CACACA")
@@ -122,15 +122,15 @@ var/global/list/xenoChemList = list("mutationtoxin",
set_trait(TRAIT_XENO_CANSPEAK, 1)
set_trait(TRAIT_XENO_STRENGTH, 0)
set_trait(TRAIT_XENO_STR_RANGE, 0)
-
+
/datum/xeno/traits/proc/get_gene(var/genetype)
-
+
if(!genetype) return 0
-
+
var/datum/xeno/genes/G = new()
G.genetype = genetype
G.values = list()
-
+
switch(genetype)
if(GENE_XENO_BIOCHEMISTRY)
G.values["[TRAIT_XENO_CHEMVOL]"] = get_trait(TRAIT_XENO_CHEMVOL)
@@ -165,18 +165,18 @@ var/global/list/xenoChemList = list("mutationtoxin",
if(GENE_XENO_SPECIAL)
G.values["[TRAIT_XENO_HOSTILE]"] = get_trait(TRAIT_XENO_HOSTILE)
G.values["[TRAIT_XENO_CHROMATIC]"] = get_trait(TRAIT_XENO_CHROMATIC)
-
+
return G
-
+
/datum/xeno/traits/proc/apply_gene(var/datum/xeno/genes/genes)
if(!genes.genetype) return 0
-
+
switch(genes.genetype)
if(GENE_XENO_BIOCHEMISTRY)
set_trait(TRAIT_XENO_CHEMVOL, genes.values["[TRAIT_XENO_CHEMVOL]"])
for(var/reagent in genes.chems)
chems[reagent] = genes[reagent]
-
+
if(GENE_XENO_HEALTH)
set_trait(TRAIT_XENO_HEALTH, genes.values["[TRAIT_XENO_HEALTH]"])
set_trait(TRAIT_XENO_STRENGTH, genes.values["[TRAIT_XENO_STRENGTH]"])
@@ -207,11 +207,10 @@ var/global/list/xenoChemList = list("mutationtoxin",
if(GENE_XENO_SPECIAL)
set_trait(TRAIT_XENO_HOSTILE, genes.values["[TRAIT_XENO_HOSTILE]"])
set_trait(TRAIT_XENO_CHROMATIC, genes.values["[TRAIT_XENO_CHROMATIC]"])
-
+
/datum/xeno/genes
var/genetype //Label for specifying what gene is used.
var/list/values //What's going to be put into specific traits
var/list/chems
-
-
\ No newline at end of file
+
diff --git a/guides/Guide to Your First POI Map.md b/guides/Guide to Your First POI Map.md
new file mode 100644
index 0000000000..759ef04256
--- /dev/null
+++ b/guides/Guide to Your First POI Map.md
@@ -0,0 +1,155 @@
+Welcome!
+
+This guide **ASSUMES** you have gone through the Guide to Opening your First PR. If you have NOT done so yet, please refer here, and ask in Discord's #ss13-development channel (For CHOMPStation), #dev-general (for VOREStation), or #code (for Polaris) if you have any questions, or need assistance with completing these steps.
+
+You can also @ maintainers or staff devs, which can be viewed in the sidebar of each codebase’s Discord, and will usually have roles such as “Maintainer” (For VOREStation), “StaffDev/StaffMaintainer” (for CHOMPStation), and “Maintainer” (for Polaris).
+
+[CHOMPStation]([https://github.com/CHOMPStation2/CHOMPStation2/blob/master/guides/Guide%20to%20Opening%20Your%20First%20PR.md](https://github.com/CHOMPStation2/CHOMPStation2/blob/master/guides/Guide%20to%20Opening%20Your%20First%20PR.md))
+
+[VOREStation]([https://github.com/VOREStation/VOREStation/blob/master/guides/Guide%20to%20Opening%20Your%20First%20PR.md](https://github.com/VOREStation/VOREStation/blob/master/guides/Guide%20to%20Opening%20Your%20First%20PR.md))
+
+[Polaris - TBD]
+
+You will also WANT VSCode to edit the files, but this is not required, as DM can also do so. See Guide to VSCode/Editor Setup, or check the wiki pages on how to contribute to learn more. (These are currently TBD but will be done soon:™:)
+
+Before proceeding, remember to make your branch! We should have a new branch titled “x-dev-POI”, or whatever you want to name it. We’ll assume it’s named “shep-dev-POI” for this tutorial’s context.
+
+With that out of the way, congrats on getting setup! Let’s dive into how to make your first POI. \
+ \
+To start, we need to open up the repo you downloaded earlier. If you’re not sure where that is, Gitkraken should be able to tell you by hovering over the codebase name, in the top left, and hitting **Alt+O** will open the file manager. \
+Either way, we should see [this]([https://i.imgur.com/FOUVK4n.png](https://i.imgur.com/FOUVK4n.png)) - Image references CHOMPStation, but the general folders should be the same for Polaris + VOREStation.
+
+Before we can map, we need to setup several code prerequisites in order to actually have a new area for our map. In order to do so, we are going to locate the POI folder. We are going to add a POI to the Wilderness area for our tutorial.
+
+Follow this reference: \
+Go to /maps/, and then find the folder the POIs for the given map are saved. This is code-base specific, so Polaris + CHOMP use /maps/submaps/surface_submaps/ for theirs, and then each folder (mountains, wilderness, plains) is a different area. If you’re on Southern Cross, Plains is the area around the outpost, Mountains is the mines, and Wilderness is the deep wilds. Polaris, TBD.
+
+VORE has their submaps for SPECIFIC areas defined in /mapused (IE Tether)/submaps. This sub-main folder should only be used for map-specific POIs, for example, POIs that would only exist if Tether was loaded.
+
+Otherwise, refer to /submaps/ and locate the folder in question. If you’re not sure, poke around, or ask in the channel for the codebase you’re currently working on for help.
+
+Once we’ve gotten to the folder in question, scroll down until you see, for this reference, wilderness.dm, and wilderness_areas.dm.
+
+Double click to open wilderness_areas.dm. Follow the subheadings depending on the tool you’re using.
+
+VSCode: If you’ve already installed VSCode and told it to associate with .dm files as per the tutorial, it’ll open here and error. We need to open the main folder, by going to File, Open Folder, and then navigate to our base repository. This is where all the folders like maps, guides, etc are.
+
+Hit Select Folder. We’ll open to a blank screen. Hit Ctrl + P to open a specific file, and type in wilderness_areas, and select wilderness_areas.dm. From here, refer to the joint section below.
+
+DreamMaker: This should have opened with our filetree, as screenshotted. [https://i.imgur.com/m8FjRAs.png](https://i.imgur.com/m8FjRAs.png) If it did not, navigate to File, Open Environment, and select vorestation.dme. Then, navigate to maps, submaps, surface submaps, wilderness, and open wilderness_areas.dm.
+
+Joint (This assumes we’ve located the file as per instructions above. If you’re not using Dream Maker or VSCode, you’re expected to understand how to open the file yourself.) This section will be done in VSCode, but later iterations will screenshot the process in Dream Maker (it’s basically identical, just waiting on the wiki page to bother doing so.)
+
+Go ahead and look over the areas. We’ll notice something, even if you don’t quite know how to read code: each new area only has name + ambience changed, likely, right?
+
+Image here [https://i.imgur.com/A2pMluj.png](https://i.imgur.com/A2pMluj.png)
+
+Without getting too deep into code, BYOND uses OOP, which in layman’s terms, means every single new object created with the same path as another will inherit things. This saves us having to redefine it every time we make a new one.
+
+For YOU this means all we’re going to do is highlight an area subsection (I’ll be using Black-Op Shuttle’s area for this) [https://i.imgur.com/zCUu0R3.png](https://i.imgur.com/zCUu0R3.png), hit copy, and then scroll down to the bottom, hit enter once to generate a new line, and hit paste. You should see this, if in VSCode: [https://i.imgur.com/AtQvNV6.png](https://i.imgur.com/AtQvNV6.png)
+
+Now we’re going to change “Blackshuttledown” to “myfirstPOI”. Change it to whatever you like, but I’m simply using a tutorial name here. Then, at the “name = “POI - blahblah”, we’re going to change it to “POI - Newbie”. Leave everything else alone for now unless you want a special ambience, though you can easily just replace AMBIENCE_HIGHSEC with AMBIENCE_OTHERWORLDLY.
+
+Once we’ve done that, our new area should look like this: [https://i.imgur.com/ttVNbYq.png](https://i.imgur.com/ttVNbYq.png)
+
+With that, we save, and exit the code. We’ll come back to it at a later step to ADD our POI to the actual map template section, but for now, we need to MAKE the POI first, no?
+
+For this next step, return to the BASE folder, where the .dme and maps/etc folders are.
+
+ \
+We’re going to navigate to *tools* and then StrongDMM. This is not REQUIRED, but is heavily recommended - maintainers will ask you to run mapmerge where possible if you use DreamMaker. The rest of this guide WILL ASSUME YOU ARE USING STRONGDMM. The wiki will offer sections for DreamMaker as well as StrongDMM. \
+ \
+Run sdmmlauncher.exe. Screenshot here: \
+[https://i.imgur.com/VxvRntf.png](https://i.imgur.com/VxvRntf.png)
+
+You should be greeted with this: [https://i.imgur.com/9dhRcz3.png](https://i.imgur.com/9dhRcz3.png)
+
+We are going to do something first before opening any environments. Go to File, Preferences in the top left. Then, in Interface Options, select a style you like. Rykka (hi, the author of this) uses Dark Coast. Use whatever you like.
+
+Under Save Options, **change this to TGM.** Check Sanitize Variables. Also check Clean Unused Keys, if this is not already checked. Nudge mode should be pixel_x/pixel_y.
+
+With that done, hit Open Environment, and navigate to the folder we downloaded in the earlier step. Open vorestation.dme, for VORE + CHOMP, or Polaris.dme for Polaris.
+
+The file will load, and then you’ll still be at a blank screen, but now the Environment Tree should have 4 directories under it. \
+This is what it looks like. [https://i.imgur.com/RtURzx8.png](https://i.imgur.com/RtURzx8.png)
+
+You should also be able to see the name in the top left.
+
+Now, we are going to go to File, New Map. \
+This will open a dialogue box with the base folder of our repo. Don’t panic. \
+Go to /maps/, and then find the folder the POIs for the given map are saved. This is code-base specific, so Polaris + CHOMP use /maps/submaps/surface_submaps/ for theirs, and then each folder (mountains, wilderness, plains) is a different area. If you’re on Southern Cross, Plains is the area around the outpost, Mountains is the mines, and Wilderness is the deep wilds. Polaris, TBD.
+
+VORE has their submaps for SPECIFIC areas defined in /mapused (IE Tether)/submaps. This sub-main folder should only be used for map-specific POIs, for example, POIs that would only exist if Tether was loaded.
+
+Otherwise, refer to /submaps/ and locate the folder in question. If you’re not sure, poke around, or ask in the channel for the codebase you’re currently working on for help.
+
+Once we’ve located the folder, we’ll assume we’re doing Wilderness for this one - we’ll be in this folder, and we’ll type the name of our new map and hit Save. Image here: [https://i.imgur.com/CCIuuwy.png](https://i.imgur.com/CCIuuwy.png)
+
+Now, it is going to bring up a dialogue box on map size. ALWAYS leave the Z at 1. \
+Set the X + Y to whatever you prefer, this will be the SIZE of our POI. For example, six tiles across would be 6 X, and 5 tiles tall would be 5 Y. The layout referenced in the tutorial is here: [https://i.imgur.com/T2jQwZB.png](https://i.imgur.com/T2jQwZB.png)
+
+Hit Ok. \
+ \
+Your new map will load in the bottom-left corner, depending on SDMM. Scroll in using your mouse, and hold the middle mouse button (or whatever the hotkey is if SDMM ever changes) to pan.
+
+Once we’ve navigated and zoomed so our POI is relatively sized, we should see this: [https://i.imgur.com/e8VhPxk.png](https://i.imgur.com/e8VhPxk.png)
+
+Hit Save (Ctrl + S) now! Just in case.
+
+In the top left, where it says “Types Filter”, type the name of our new area. This will be “myfirstPOI”. Click to select. You should see this. [https://i.imgur.com/mG458sl.png](https://i.imgur.com/mG458sl.png)
+
+Go to the map editor, and drag it over the interior tiles. Then, go back to types filter (where we typed in prior), clear it, and find template. We’ll see two things come up, /turf/template_noop, and /area/template_noop. Do turf template around the outside of our new area, and then do area template around the outside of our new area. \
+ \
+We should see this: \
+[https://i.imgur.com/z722p97.png](https://i.imgur.com/z722p97.png)
+
+Now go to Options, and hit “Toggle Area”. This will turn off the area display. Clear the types filter select, and hit the big - button next to it to collapse all trees again so we just have 4, these being (area/turf/obj/mob), our base BYOND types.
+
+Go to turf, then simulated, then floor, then outdoors, then dirt. Drag it over the center tiles, so now there should only be dirt + passthrough. (the template turf is also called passthrough in coder parlance). Obviously, we can add more turfs and get more complex if you like, but you’ll need to worry about atmos composition and etc. We’re not going to stress about that for now, as we can learn about all that later.
+
+For now, collapse all trees again, and then go to “mob”, then living, then simple_mob (do not use simple_animal, it is deprecated), then select a mob from any of these subtrees. For our example, we’re going to go to animal, wolf, direwolf, and choose a regular direwolf (or Rykka, if you’re on a VORE downstream).
+
+Place it anywhere on the dirt or passthrough tiles, and hit save. I recommend NOT placing on the passthrough tiles, as they may suddenly spawn inside solid rock.
+
+Make sure to save. We’ve accomplished adding a rudimentary, if not-super-featured POI.
+
+This is what it should look like before we close the editor. [https://i.imgur.com/MU1YuKs.png](https://i.imgur.com/MU1YuKs.png)
+
+Now, we’re going to go back to our editor of choice. Refer above for instructions on how to open the codebase on each editor, but we’re going to, instead of opening wilderness_areas, open wilderness.dm.
+
+This will bring you to a bunch of new stuff. You’re going to see an #if and etc.
+
+DON’T PANIC.
+
+All we’re going to do is scroll down the list, and find where our POI would slot in alphabetically. For instance, ours, via this tutorial, is myfirstPOI.dmm. We’re going to insert this after musk.dmm.
+
+Click at the end of #include “musk.dmm” and hit enter once, then type #include “myfirstPOI.dmm”. Name will vary, of course, depending on your POI, but for this tutorial, that’s the name we used.
+
+You should see this if the step was completed successfully. [https://i.imgur.com/c686Ji4.png](https://i.imgur.com/c686Ji4.png)
+
+Now, we’re going to scroll down. Remember earlier how it was explained that you only need to change the variables that DO change on your new map?
+
+Copy line 76, or this area snippet: `/datum/map_template/surface/wilderness/deep/BSD`
+
+At the end of the file, hit paste after inserting a new line underneath the last entry, so there’s always a line of space between the end of one thing and the next.
+
+Then, as with adding the area, change the “BSD” to your name, then “name = “blah”” to whatever your name is.
+
+Change the name of the .dmm in mappath to match your .dmm, and change the cost down to 5 (this is a very tiny POI). Remove the template_group, as we don’t use it presently.
+
+It should look like this afterwards:
+
+[https://i.imgur.com/HguoHxT.png](https://i.imgur.com/HguoHxT.png)
+
+And we’ve added it! Woo!
+
+Before you go “man that was way too much work fuck this” we still need to PR it. \
+Open your git client of choice - if you’ve been following the guide up to this point, we’ll reference Gitkraken.
+
+As explained in the Guide to Opening your First PR, you’ll need to Stage + Commit these files. If you’ve followed instructions and still need help, contact maintainers or ask for help in the development channels.
+
+Commit, and then again, as per prior, we are going to start a pull request. At this point, you should be done!
+
+As with the other guides, if you run into issues, please let maintainers know and we’ll help you out. DON’T FEEL BAD FOR BEING NEW AND GOING “AAA”. \
+ \
+We all started somewhere. I hope this guide helps give you the confidence you need to contribute to this codebase and help keep our project going. Thank you for your time and effort. <3
\ No newline at end of file
diff --git a/guides/Overmap Ships and Places - What's Needed.md b/guides/Overmap Ships and Places - What's Needed.md
new file mode 100644
index 0000000000..f5795f0cbf
--- /dev/null
+++ b/guides/Overmap Ships and Places - What's Needed.md
@@ -0,0 +1,59 @@
+Overmap Ships + Places, the Guide
+This is a very basic list of just "what is needed". It is assumed you'll lookup where these go.
+Proper, full-length guide will be added later to here + the wiki.
+For now, just use this as reference for what is needed for Overmap ships + locations.
+
+**CREATED IN-EDITOR:**
+```
+/obj/effect/shuttle_landmark
+ var edits:
+ base_area: what area to replace the shuttle's area with when it's left
+ base_turf: what turf to replace the shuttle's location when it's left
+ landmark_tag: lowercase identifier. Used in current_location
+ name: the landmark's name.
+```
+
+**CREATED IN-CODE:**
+```c
+/area/shuttle/SHIPNAME
+ name = "\improper [Name]" // Just replace [Name] with whatever your want to name the ship
+ icon_state = "shuttlered"
+ requires_power = 1 // Or 0 if you don't want to have to power the ship yourself.
+//Area should probably be placed in southern-cross-areas.dm but the rest can go into some file all together.
+
+/datum/shuttle/autodock/overmap/SHIPNAME
+ name = "[Name]"
+ warmup_time = 0
+ current_location = "" // See CREATED IN-EDITOR
+ shuttle_area = /area/shuttle/SHIPNAME // See above area. Can also be list of multiple areas.
+ fuel_consumption = 1 // Typically defines how much fuel the shuttle uses per jump. 1-3 is reasonable, base it on size.
+ move_direction = NORTH / SOUTH / EAST / WEST
+
+/obj/effect/overmap/visitable/ship/landable/SHIPNAME
+ name = "[Name]" // Can be named whatever, best to keep it similar to actual ship name.
+ desc = "Some description goes here."
+ vessel_mass = 1000 // Some factor for speed. For reference, 1000 is fucking fast, 10000 is only fast when maxed on engines and very costly.
+ vessel_size = SHIP_SIZE_TINY / SHIP_SIZE_SMALL / SHIP_SIZE_LARGE
+ shuttle = "[Name]" // Direct reference to above shuttle. MUST be the same as name.
+
+/obj/machinery/computer/shuttle_control/explore/SHIPNAME
+ name = "short jump console"
+ shuttle_tag = "[Name]" // Direct reference to above shuttle. MUST be the same as name.
+ req_one_access = list(access_pilot)
+```
+
+**OVERMAP SHIP CREATION INSTRUCTIONS:**
+Build your shuttle however you'd like, though it MUST have:
+- Phoron cannister(s) hooked up to proper engines. /obj/machinery/atmospherics/unary/engine
+- Engine Control. `/obj/machinery/computer/ship/engines`
+- Helm Control. `/obj/machinery/computer/ship/helm`
+- Fuel port, for short distance jumps and docking. `/obj/structure/fuel_port`
+- Short jump console, defined in code earlier. `/obj/machinery/computer/shuttle_control/explore/SHIPNAME`
+- A spawned in effect, defined in code earlier, inside of the ship area. `/obj/effect/overmap/visitable/ship/landable/SHIPNAME`
+- A docking point, made through the map editor, mentioned earlier. `/obj/effect/ship_landmark`. Typically this is placed inside the ship, directly in front of the exterior door. This dictates where it places the shuttles so be sure to actually test how your shuttles react to landing in odd locations. The landmark's tag also needs to be added to the appropriate area in `maps/southern_cross/overmap/sectors.dm` or else ships cannot dock there.
+- The shuttle also needs to be placed entirely in the designated area that you made in the above code, since shuttles are based off of the area everything is in.
+
+It would be **RECOMMENDED** to also have:
+- Sensors, controlled by `/obj/machinery/computer/ship/sensors` and `/obj/machinery/shipsensors` (maybe the /weak variant for small ships if you add them at all?)
+- Docking Controller. Not 100% sure on how these work yet, but will be updated as needed. Not necessary, just nice to have for ease of access.
+- A pump somewhere in the fuel intake to your engines, for better fuel management.
\ No newline at end of file
diff --git a/guides/VSCode Setup Guide.md b/guides/VSCode Setup Guide.md
new file mode 100644
index 0000000000..35f298b3c2
--- /dev/null
+++ b/guides/VSCode Setup Guide.md
@@ -0,0 +1,30 @@
+This guide will simply list VSCode + the extensions needed, plus very basic instructions, as VSCode has a NUMBER of tutorials on it, and there's little need to reinvent the wheel.
+It is assumed that you can follow the VSCode walkthrough. Navigate to the Extensions tab on the left, type @recommended, and then install each extension under the "Recommended" Tab.
+Screenshot here, but don't rely on this as the workspace recommendations may change over time. https://i.imgur.com/CF0P6TI.png
+If you require assistance, don't feel stupid! Just ask a maintainer or ask in Discord for help. Be prepared to take screenshots if you need.
+
+**VSCode + All mission-critical extensions for DM Coding.**
+ VSCode, the root tool.
+ DM language support, allow autoupdates
+ DM Language client, also allows compiling. When setting it up you need to go to extension settings, then "choose folder", pick the BYOND folder that has "uninstall.exe" and "bin" folders (the root/base folder). Then, once that's done, you can literally hit ctrl+shift+b and choose the .dme, and compile inside VSCode. It's FAR faster than compiling in Dream Maker.
+Screenshot of settings:
+ Auto Comment Blocks (Allows multi-line comments easily in DM)
+ Indent Rainbow - makes your indents colorcoded by how deep they are.
+ Not adapted for our code yet, but this allows one to run compile tests the same as online does.
+
+{
+"editor.bracketPairColorization.enabled": true,
+"editor.guides.bracketPairs":"active"
+}
+
+Add this to settings.json
+If you run into issues, ask in Discord for help.
+
+**Optional.**
+ Discord rich presence, not needed, but looks pretty
+ This one is also optional, works for allowing you to gitblame and stuff. Requires setup, but will walk you through it, and ALSO links with Gitkraken. Extremely handy.
+
+**Quick Tips for VSCode**
+Highlighting a proc and right clicking, then going to "Definition" or "Implementation" will allow you to easily see/lookup wherever it's used. This is massively helpful over having to manually search it.
+CTRL+F will bring up a search, that also allows a replace line-by-line.
+CTRL+Clicking will also (usually) take you to the definition of a proc/verb/etc.
\ No newline at end of file
diff --git a/icons/inventory/suit/item.dmi b/icons/inventory/suit/item.dmi
index bf7a74c87f..018fd23935 100644
Binary files a/icons/inventory/suit/item.dmi and b/icons/inventory/suit/item.dmi differ
diff --git a/icons/inventory/suit/mob.dmi b/icons/inventory/suit/mob.dmi
index 3e0452044d..eed3749711 100644
Binary files a/icons/inventory/suit/mob.dmi and b/icons/inventory/suit/mob.dmi differ
diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi
index c7b0cc26b6..c2a93c7338 100644
Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ
diff --git a/icons/mob/items/lefthand_guns.dmi b/icons/mob/items/lefthand_guns.dmi
index 7856c5be04..adc961e7d3 100644
Binary files a/icons/mob/items/lefthand_guns.dmi and b/icons/mob/items/lefthand_guns.dmi differ
diff --git a/icons/mob/items/righthand_guns.dmi b/icons/mob/items/righthand_guns.dmi
index b1f6d51b4c..37fcde2f68 100644
Binary files a/icons/mob/items/righthand_guns.dmi and b/icons/mob/items/righthand_guns.dmi differ
diff --git a/icons/mob/taursuits_noodle.dmi b/icons/mob/taursuits_noodle.dmi
new file mode 100644
index 0000000000..0917630a46
Binary files /dev/null and b/icons/mob/taursuits_noodle.dmi differ
diff --git a/icons/mob/taursuits_noodle_vr.dmi b/icons/mob/taursuits_noodle_vr.dmi
new file mode 100644
index 0000000000..0917630a46
Binary files /dev/null and b/icons/mob/taursuits_noodle_vr.dmi differ
diff --git a/icons/mob/vore/taurs_vr.dmi b/icons/mob/vore/taurs_vr.dmi
index 791b974422..7b6f62e7f6 100644
Binary files a/icons/mob/vore/taurs_vr.dmi and b/icons/mob/vore/taurs_vr.dmi differ
diff --git a/icons/obj/artstuff.dmi b/icons/obj/artstuff.dmi
index c75a4b85ef..49efe82fb8 100644
Binary files a/icons/obj/artstuff.dmi and b/icons/obj/artstuff.dmi differ
diff --git a/icons/obj/atmos.dmi b/icons/obj/atmos.dmi
index fe5b010474..152280498c 100644
Binary files a/icons/obj/atmos.dmi and b/icons/obj/atmos.dmi differ
diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi
index ddba37210a..7c024763bf 100644
Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ
diff --git a/icons/obj/deluxemicrowave.dmi b/icons/obj/deluxemicrowave.dmi
index 636b4144e1..f67099d07f 100644
Binary files a/icons/obj/deluxemicrowave.dmi and b/icons/obj/deluxemicrowave.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 2b1f57bca5..376abe7475 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/gun64_vr.dmi b/icons/obj/gun64_vr.dmi
deleted file mode 100644
index 4e005cb700..0000000000
Binary files a/icons/obj/gun64_vr.dmi and /dev/null differ
diff --git a/icons/obj/gun_vr.dmi b/icons/obj/gun_vr.dmi
index e90a7ab7cd..f83fa09bb1 100644
Binary files a/icons/obj/gun_vr.dmi and b/icons/obj/gun_vr.dmi differ
diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi
index 432b46541b..eda319d76b 100644
Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ
diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi
index d9d7374042..2a6076147a 100644
Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ
diff --git a/icons/obj/papershredder.dmi b/icons/obj/papershredder.dmi
index 29a7b3bca1..649fcb9d2c 100644
Binary files a/icons/obj/papershredder.dmi and b/icons/obj/papershredder.dmi differ
diff --git a/icons/obj/pipes/disposal_vr.dmi b/icons/obj/pipes/disposal_vr.dmi
new file mode 100644
index 0000000000..71c05c2871
Binary files /dev/null and b/icons/obj/pipes/disposal_vr.dmi differ
diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi
index 88174d10c4..ebb5d33a61 100644
Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ
diff --git a/icons/obj/power_cells.dmi b/icons/obj/power_cells.dmi
index 463711e6a0..d17c1c39ef 100644
Binary files a/icons/obj/power_cells.dmi and b/icons/obj/power_cells.dmi differ
diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi
index 243330c332..89e51f6bf3 100644
Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ
diff --git a/maps/_templates_and_guidance/Mapping Guides/Complete Room Checklist.dmm b/maps/_templates_and_guidance/Mapping Guides/Complete Room Checklist.dmm
new file mode 100644
index 0000000000..a9f89ac5cd
--- /dev/null
+++ b/maps/_templates_and_guidance/Mapping Guides/Complete Room Checklist.dmm
@@ -0,0 +1,316 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/space,
+/area/space)
+"e" = (
+/obj/structure/window/reinforced/full,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/grille,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"f" = (
+/obj/structure/window/reinforced/full,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced,
+/obj/structure/grille,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"g" = (
+/obj/machinery/power/apc{
+ dir = 8;
+ name = "west bump";
+ pixel_x = -24
+ },
+/obj/structure/cable/green{
+ d2 = 4;
+ icon_state = "0-4"
+ },
+/obj/item/device/radio/intercom{
+ desc = "Talk... listen through this.";
+ name = "Station Intercom (Brig Radio)";
+ pixel_y = -21;
+ wires = 7
+ },
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"h" = (
+/obj/machinery/hologram/holopad,
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"m" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable/green{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"n" = (
+/obj/machinery/disposal/wall{
+ dir = 4;
+ pixel_x = -33
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"o" = (
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"r" = (
+/turf/simulated/wall,
+/area/hallway/primary/central_one)
+"u" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/hallway/primary/central_one)
+"y" = (
+/obj/machinery/light,
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"z" = (
+/obj/machinery/door/firedoor/glass,
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/door/airlock/glass,
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"A" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"B" = (
+/obj/structure/disposalpipe/segment,
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/dark,
+/area/hallway/primary/central_one)
+"D" = (
+/obj/structure/window/reinforced/full,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced,
+/obj/structure/grille,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"E" = (
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"F" = (
+/turf/simulated/wall,
+/area/library)
+"H" = (
+/obj/machinery/alarm{
+ dir = 8;
+ pixel_x = 22
+ },
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"K" = (
+/obj/structure/window/reinforced/full,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/grille,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"L" = (
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 24
+ },
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"M" = (
+/obj/structure/window/reinforced/full,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced,
+/obj/structure/grille,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"O" = (
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"T" = (
+/obj/structure/window/reinforced/full,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced,
+/obj/structure/grille,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"V" = (
+/obj/structure/window/reinforced/full,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/obj/structure/grille,
+/obj/machinery/door/firedoor,
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"W" = (
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"X" = (
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/library)
+"Y" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/dark,
+/area/hallway/primary/central_one)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+F
+F
+e
+f
+F
+F
+r
+"}
+(3,1,1) = {"
+a
+T
+n
+o
+O
+g
+F
+Y
+"}
+(4,1,1) = {"
+a
+V
+E
+W
+A
+m
+z
+B
+"}
+(5,1,1) = {"
+a
+V
+o
+h
+X
+y
+F
+u
+"}
+(6,1,1) = {"
+a
+D
+H
+o
+o
+L
+F
+r
+"}
+(7,1,1) = {"
+a
+F
+F
+K
+M
+F
+F
+a
+"}
+(8,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
diff --git a/maps/_templates_and_guidance/Mapping Templates Readme.md b/maps/_templates_and_guidance/Mapping Templates Readme.md
new file mode 100644
index 0000000000..f55e1928c7
--- /dev/null
+++ b/maps/_templates_and_guidance/Mapping Templates Readme.md
@@ -0,0 +1,17 @@
+Greetings, newbean mapper! \
+ \
+The intent of this file is to allow you to more easily be able to follow mapping standards and guidelines.
+
+The following folders will be listed here. If there’s been an update and this readme.md is out of date, let a maintainer on your codebase know. For CHOMPStation, this is a staffdev/maintainer, for VOREStation, this is a maintainer, for Polaris, this is also the maintainer role.
+
+
+
+* Additional folders TBD.
+* Mapping Guides
+ * This folder exists for newer contributors to physically pull examples from, for example; SMES Wiring.dmm would be for guidance on how to properly wire an SMES. This is not an exhaustive list, but should help the repeated/FAQ questions by allowing one to poke at it in a map editor.
+* Public Event Templates
+ * This folder exists to house templates available to the public. Bear in mind that Game Master staff will likely not house all event templates publicly for security + future events, but this should be updated once a map is done with or a GM leaves the team and wishes to leave their maps public for future use.
+* Public Ship Templates
+ * This folder exists for SHIP templates that do not normally go into the ships folder (For reference, this ship folder is maps/offmap_vr/om_ships, or overmap/ships). This is for example ships, or for EM-specific, public ships.
+* Templates
+ * This folder is specifically for pre-prepared, ready-to-place templates for things such as drop pods, small maps, etc, things GM-staff will use regularly that are not necessarily related to events.
\ No newline at end of file
diff --git a/maps/_templates_and_guidance/Public Event Templates/Maze_Reward_-_Copy.dmm b/maps/_templates_and_guidance/Public Event Templates/Maze_Reward_-_Copy.dmm
new file mode 100644
index 0000000000..3a3e647383
--- /dev/null
+++ b/maps/_templates_and_guidance/Public Event Templates/Maze_Reward_-_Copy.dmm
@@ -0,0 +1,142 @@
+"bh" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"bu" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"bG" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/structure/fans/hardlight/colorable{invisibility = 99},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"bL" = (/obj/item/weapon/bone/ribs,/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"bX" = (/obj/fire,/turf/simulated/floor/gorefloor,/area/survivalpod)
+"cb" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"cA" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb{color = #8A0808; desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; name = "Strings of distress"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"cI" = (/obj/singularity/narsie{l_move_time = 0; move_self = 0; move_speed = 0},/turf/simulated/floor/lava,/area/survivalpod)
+"cM" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb{color = #8A0808; desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; name = "Strings of distress"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"eh" = (/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"eD" = (/turf/simulated/floor/cult,/area/survivalpod)
+"fh" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb{color = #8A0808; desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; name = "Strings of distress"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"fH" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/lava,/area/survivalpod)
+"fR" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"gW" = (/obj/effect/map_effect/interval/sound_emitter/punching,/obj/effect/map_effect/interval/effect_emitter/smoke/fire,/turf/simulated/floor/lava,/area/survivalpod)
+"gZ" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"he" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"hx" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"hJ" = (/obj/effect/meteor/tunguska,/turf/simulated/floor/lava,/area/survivalpod)
+"ib" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"iK" = (/turf/simulated/floor/gorefloor,/area/survivalpod)
+"lk" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"lQ" = (/obj/item/weapon/bone/skull/unknown,/turf/simulated/floor/lava,/area/survivalpod)
+"nc" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/obj/effect/step_trigger/message{message = "Finally, you gaze upon a horror your sanity fails to understand. The numbness of your body fades as the sound of glass shattering fills your mind, the horrifying sensation of barbed wire tangling your body as every waking second you spend gazing upon this nightmare tightens those bonds. . . Is this what your mortal coil desires?. . ."; once = 0},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"nn" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"nA" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"nD" = (/obj/effect/gibspawner/human,/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"oj" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"pn" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/structure/gootrap{basecolor = #610B0B; desc = "As if you stepped on a bear trap, you can feel a chilling horror crawling up your spine, gazing upon a pond of maroon fluids you can't help but experience terror upon it"; name = "Spill of fear"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"qo" = (/obj/structure/cult/tome,/turf/simulated/floor/cult,/area/survivalpod)
+"qA" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"ry" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/effect/step_trigger/message{message = "You feel a horrible chill run up your spine. . . you really should not continue. . ."; once = 0},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"sS" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/effect/map_effect/interval/sound_emitter/geiger/high,/obj/effect/map_effect/interval/sound_emitter/thunder,/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"tf" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"tq" = (/obj/effect/simple_portal/linked{desc = "It looks like a hole that leads to somewhere, although you can't quite see through it. . . It seems dormant and sealed closed. . ."; name = "Demonic portal"; portal_id = 20},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"tt" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"tz" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"uB" = (/turf/template_noop,/area/survivalpod)
+"vf" = (/turf/simulated/wall/cult,/area/survivalpod)
+"vT" = (/turf/simulated/floor/lava,/area/survivalpod)
+"vV" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"wU" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"xC" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/effect/step_trigger/message{message = "Feels as if you are now going with the motions, your senses betray you as not only your body feels numb but your mind does so too. . ."; once = 0},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"xM" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb{color = #8A0808; desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; name = "Strings of distress"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"xV" = (/obj/fire,/turf/simulated/floor/lava,/area/survivalpod)
+"yJ" = (/obj/machinery/crystal/lava,/turf/simulated/floor/lava,/area/survivalpod)
+"zh" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/cult,/area/survivalpod)
+"zn" = (/obj/structure/fans/hardlight/colorable{invisibility = 99},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"zJ" = (/obj/structure/grille/cult,/turf/simulated/floor/cult,/area/survivalpod)
+"AB" = (/obj/structure/grille/cult,/turf/simulated/floor/lava,/area/survivalpod)
+"AL" = (/obj/structure/fans/hardlight/colorable{invisibility = 99},/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"AP" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"AR" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"Bt" = (/obj/machinery/power/supermatter/shard{color = "red"; simulated = 0},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"Bw" = (/obj/effect/spider/stickyweb{color = #8A0808; desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; name = "Strings of distress"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"Cy" = (/obj/structure/girder/cult,/turf/simulated/floor/lava,/area/survivalpod)
+"CK" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"Dn" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"DQ" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"DW" = (/obj/structure/cult/pylon,/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"El" = (/obj/structure/simple_door/cult,/turf/simulated/floor/cult,/area/survivalpod)
+"Es" = (/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"Fv" = (/obj/structure/girder/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"Fz" = (/obj/item/weapon/bone/ribs,/turf/simulated/floor/lava,/area/survivalpod)
+"FX" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"GI" = (/obj/machinery/power/supermatter/shard{color = "red"; simulated = 0},/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"Hm" = (/obj/structure/girder/cult,/turf/simulated/floor/cult,/area/survivalpod)
+"Ia" = (/mob/living/simple_mob/vore/demonAI{faction = "cult"},/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"Ib" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb{color = #8A0808; desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; name = "Strings of distress"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"In" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"Iy" = (/mob/living/simple_mob/vore/demon/wendigo{faction = "cult"},/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"Jb" = (/obj/effect/decal/remains/deer,/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"Ji" = (/obj/structure/grille/broken/cult,/obj/fire,/turf/simulated/floor/lava,/area/survivalpod)
+"Jt" = (/obj/structure/loot_pile/surface/bones,/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"JY" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/structure/gootrap{basecolor = #610B0B; desc = "As if you stepped on a bear trap, you can feel a chilling horror crawling up your spine, gazing upon a pond of maroon fluids you can't help but experience terror upon it"; name = "Spill of fear"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"Kb" = (/turf/simulated/goreeyes,/area/survivalpod)
+"Ko" = (/obj/structure/constructshell/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"KC" = (/obj/structure/barricade/cutout/cultist,/turf/simulated/floor/cult,/area/survivalpod)
+"KI" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"KR" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb{color = #8A0808; desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; name = "Strings of distress"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"Lq" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"LQ" = (/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"LY" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"Mq" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"Mv" = (/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"MT" = (/obj/effect/gateway/active/cult,/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"Nh" = (/turf/simulated/gore,/area/survivalpod)
+"NI" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"NO" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb{color = #8A0808; desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; name = "Strings of distress"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"NV" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"PU" = (/mob/living/simple_mob/vore/demon/covern{faction = "cult"},/turf/simulated/floor/cult,/area/survivalpod)
+"Qh" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"QT" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/effect/step_trigger/message{message = "There is nothing in your mind, the sensation of emptiness overwhelms you as if your body itself has been left behind. . . but you can't help but to move on. . ."; once = 0},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"RL" = (/obj/effect/decal/remains/deer,/turf/simulated/floor/cult,/area/survivalpod)
+"Sa" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"Sm" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"Sy" = (/obj/structure/grille/broken/cult,/obj/fire,/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"Td" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/structure/gootrap{basecolor = #610B0B; desc = "As if you stepped on a bear trap, you can feel a chilling horror crawling up your spine, gazing upon a pond of maroon fluids you can't help but experience terror upon it"; name = "Spill of fear"},/obj/effect/step_trigger/message{message = "Your body starts to feel numb with every step you take, there is an imposing presence you have yet to face. . . Maybe this isn't as bad."; once = 0},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"Th" = (/obj/effect/meteor/irradiated,/turf/simulated/floor/lava,/area/survivalpod)
+"TD" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"TU" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"Uc" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"Ut" = (/obj/structure/cult/talisman,/obj/effect/map_effect/interval/sound_emitter/geiger/med,/turf/simulated/floor/cult,/area/survivalpod)
+"Ux" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"UH" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"UO" = (/obj/item/weapon/bone/arm,/turf/simulated/floor/lava,/area/survivalpod)
+"Vm" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb{color = #8A0808; desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; name = "Strings of distress"},/turf/simulated/floor/gorefloor,/area/survivalpod)
+"Vn" = (/obj/structure/cult/forge,/turf/simulated/floor/cult,/area/survivalpod)
+"VA" = (/obj/structure/grille/broken/cult,/turf/simulated/floor/gorefloor,/area/survivalpod)
+"Yc" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb/dark{color = #8A0808; desc = "You gaze upon a mess of stained barbed wires, the attempt of making sense upon this scratches thoughts from your mind as it fills you with a sense of dread, it's best you don't get tangled in this mess"; name = "Wires of doubt"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"Yn" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 4; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+"Yz" = (/mob/living/simple_mob/vore/demon/engorge{faction = "cult"},/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"YJ" = (/obj/fire,/turf/simulated/floor/gorefloor2,/area/survivalpod)
+"ZZ" = (/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 8; maxhealth = 500; name = "Veil of sanity"},/obj/structure/window/phoronreinforced{desc = "You gaze upon a nightmare of your own mind as it feels as if the horrors before you can harm you, yet the thought of keeping yourself alive cracks upon the glass you gaze at. You have to keep yourself sane. . ."; dir = 1; maxhealth = 500; name = "Veil of sanity"},/obj/effect/spider/stickyweb{color = #8A0808; desc = "Like a leash you can see those strings trying to hold you back, hesitating at the thought only to exasperate the sensation of the reality you are in. . . this may not be an illusion."; name = "Strings of distress"},/turf/simulated/floor/flesh/colour{color = red},/area/survivalpod)
+
+(1,1,1) = {"
+NhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhuBuB
+NhNhNhehehehNhNhNhNhvTvTehehehehvTNhNhNhNhNhNhNhNhNhNhNhNhKbABABJivTvTxVxVxVxVxVvTvTxVxVvTvTvTNhuBuB
+NhNhehehehehehNhNhNhxVYJehDWehYJehNhNhNhNhKbehehYJYJYJehehzniKbXBtABvTvTvTyJvTvTvTvTxVxVxVxVvTNhuBuB
+NhNhehehvTvTehehehNhehehehehehehehehNhNhGIehehehiKiKiKiKiKzniKiKiKVAojNVqAvTvTvTvTvTvTvTxVxVvTNhuBuB
+NhehehvTvTvTvTYJehKbehehiKbXiKehehehnDNhehiKiKiKbhCKLYpnCKbGcMCKcAncMvMvsSvTxVvTvTvTvTvTvTvTvTNhuBuB
+NhehvTvTgWFzvTehehYJiKARJYCKUxiKJbehehKbiKbhCKLYKRehYJehiKzniKiKiKVAheFXTUvTxVvTvTvTcIvTxVxVvTNhuBuB
+NhehvTvTvThJvTehehbXARTDiKiKLqUxiKYJehYJiKQTiKehehehJtehehALbXbXBtABvTvTvTyJvTvTvTvTvTvTxVxVvTNhuBuB
+NhehehvTxVxVnDehMqojMvxMehehiKlkiKehMTehiKUciKehnDKbNhKbFvALABJifHvTxVxVxVxVvTvTvTxVxVxVvTvTvTNhuBuB
+NhYJehehehYJehJbiKYcTDiKehnDehNOUxiKehehiKlkehehehYJYJYJehALKbNhKbNhNhNhNhNhvTvTvTxVxVxVvTvTvTNhuBuB
+NhehYzehehehMqehVmMvDniKehFvehiKlkiKYJvTiKvVtfiKiKiKBtiKiKiKiKehehehNhNhNhNhvTxVvTvTvTvTxVvTvTNhuBuB
+NhNhNhNhNhKbehiKAPIniKehehKbehiKlkehMqehehehLqhxCKLYpnCKcALYUHehSyYJehvTvTNhNhNhNhNhNhNhNhNhNhNhuBuB
+NhNhNhNhNhehehiKryiKehehehVAehiKAPUHehvTyJehiKiKiKiKiKehiKehLqUHiKehYJYJThvTvTNhNhuBuBuBuBuBuBuBuBuB
+NhNhNhNhehehehARTDiKYJMTehKbehiKnATDehxVUOehehKovfzhElzJvfKoehvVLYUHYJYJvTvTvTNhuBuBuBuBuBuBuBuBuBuB
+NhNhNhehehFvehAPTUiKYJehJtNhYJehiKTdehYJehehKbvfvfRLPURLvfvfehehehYniKehehehvTNhuBuBuBuBuBuBuBuBuBuB
+NhNhYJYJehiKiKBwiKiKehehNhNhYJehiKAPtfehehbLehHmeDeDKCeDeDvfehehiKxCehehehehehNhuBuBuBuBuBuBuBuBuBuB
+NhehYJehehiKLQIniKehehehNhNhehYJiKAPcbehehYJehvfVnqoUteDeDCylQGIiKAPtfehMTehehNhuBuBuBuBuBuBuBuBuBuB
+NhehehiKiKZZTDiKiKehYJNhNhNhehehehNOMvtfiKYJehvfvfzJvfvfzhvTvTehehfhTDiKJbehehNhuBuBuBuBuBuBuBuBuBuB
+NhehiKQhtzEsEsbuiKYJYJNhNhNhehehehiKLqMvtfehehMqehehehehehYJYJehehAPTDiKYJehehNhuBuBuBuBuBuBuBuBuBuB
+NhehiKgZMvMvMvcbiKYJYJNhNhNhehehJbehiKLqFXUHiKehiKiKiKiKehehiKehSmMvKRiKYJMqNhNhuBuBuBuBuBuBuBuBuBuB
+NhehiKYcMvtqMvcbiKYJYJNhNhNhehehehMTnDehiKnACKCKNVibNVIbNVtzDQNVFXwUiKiKYJehNhNhuBuBuBuBuBuBuBuBuBuB
+NhehiKYcMvMvMvcbiKehehNhNhNhNhehehKbehehYJehiKehLqFXKINIFXFXFXnniKehehehehehNhNhuBuBuBuBuBuBuBuBuBuB
+NhehiKfRSaNINIttiKehNhNhNhNhNhehehehehehYJehehehiKiKiKehiKiKiKiKehYJehehehNhNhNhuBuBuBuBuBuBuBuBuBuB
+NhNhehiKiKiKiKiKehehNhNhNhNhNhehehehehehehNhKbNhNhehKbehehehMqehehehehKbNhNhNhNhuBuBuBuBuBuBuBuBuBuB
+NhNhNhehehehIaehehehNhNhNhNhNhIyehehehNhNhNhNhNhNhNhNhNhNhehehehehehNhNhNhNhNhNhuBuBuBuBuBuBuBuBuBuB
+NhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhNhuBuBuBuBuBuBuBuBuBuB
+"}
diff --git a/maps/_templates_and_guidance/Templates/shelter_Medical.dmm b/maps/_templates_and_guidance/Templates/shelter_Medical.dmm
new file mode 100644
index 0000000000..13f34cff4e
--- /dev/null
+++ b/maps/_templates_and_guidance/Templates/shelter_Medical.dmm
@@ -0,0 +1,59 @@
+"a" = (/turf/simulated/shuttle/wall/voidcraft/survival,/area/survivalpod)
+"b" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/structure/curtain/open/privacy,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"c" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/machinery/disposal,/obj/effect/floor_decal/industrial/warning/full,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod)
+"d" = (/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod)
+"e" = (/obj/machinery/light/small,/obj/structure/sink{dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"f" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/bed/chair/comfy/black{dir = 8},/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod)
+"g" = (/obj/structure/table/glass,/obj/structure/closet/secure_closet/guncabinet/phase{pixel_y = -32},/obj/item/weapon/gun/energy/locked/frontier/holdout,/obj/item/weapon/gun/energy/locked/frontier/holdout,/obj/item/clothing/accessory/permit/gun/planetside,/obj/item/clothing/accessory/permit/gun/planetside,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod)
+"h" = (/obj/structure/sign/mining/survival{dir = 8},/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner,/area/survivalpod)
+"i" = (/obj/effect/floor_decal/industrial/danger/full,/obj/structure/fans/tiny,/obj/machinery/door/airlock/voidcraft/survival_pod,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod)
+"j" = (/obj/structure/sign/mining/survival,/turf/simulated/shuttle/wall/voidcraft/survival,/area/survivalpod)
+"k" = (/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"l" = (/obj/machinery/sleeper/survival_pod,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"m" = (/obj/structure/disposalpipe/segment,/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner,/area/survivalpod)
+"n" = (/obj/machinery/smartfridge/survival_pod,/obj/item/weapon/storage/mre/menu10,/obj/item/weapon/storage/mre/menu10,/obj/item/weapon/storage/mre/menu10,/obj/item/weapon/storage/mre/menu10,/obj/item/weapon/storage/mre/menu11,/obj/item/weapon/storage/mre/menu11,/obj/item/weapon/storage/mre/menu11,/obj/item/weapon/storage/mre/menu11,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/device/fbp_backup_cell,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/glucose,/obj/item/weapon/storage/box/freezer,/obj/item/weapon/storage/box/freezer,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/glass/beaker,/obj/machinery/light{dir = 1},/obj/item/device/defib_kit/loaded,/obj/item/device/defib_kit/loaded,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"o" = (/obj/item/device/gps/computer,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"p" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/toilet{dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"s" = (/obj/structure/sign/mining/survival{dir = 1},/turf/simulated/shuttle/wall/voidcraft/survival,/area/survivalpod)
+"t" = (/obj/structure/window/reinforced/survival_pod{dir = 8},/obj/structure/window/reinforced/survival_pod{dir = 4},/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/window/reinforced/survival_pod,/obj/structure/grille,/obj/structure/curtain/black,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod)
+"u" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"v" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod)
+"w" = (/obj/structure/table/steel_reinforced,/obj/machinery/chemical_dispenser/full,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"x" = (/obj/structure/sign/redcross,/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner,/area/survivalpod)
+"z" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/sign/mining/survival{dir = 4},/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner,/area/survivalpod)
+"A" = (/obj/machinery/shower{dir = 8},/obj/item/weapon/soap/deluxe,/obj/structure/curtain,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"B" = (/obj/structure/table/survival_pod,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/o2{pixel_x = 5; pixel_y = 5},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"C" = (/obj/effect/floor_decal/industrial/outline,/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod)
+"D" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/structure/table/gamblingtable,/obj/item/device/starcaster_news,/obj/item/weapon/deck/cards,/obj/structure/fireaxecabinet{pixel_y = 27},/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod)
+"E" = (/obj/machinery/optable,/obj/machinery/oxygen_pump/anesthetic{pixel_x = 32},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"F" = (/obj/machinery/door/window/survival_pod{dir = 1},/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod)
+"G" = (/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner,/area/survivalpod)
+"H" = (/obj/machinery/smartfridge/survival_pod,/obj/item/weapon/storage/box/bodybags,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/mask/muzzle,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/mask/muzzle,/obj/item/device/sleevemate,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 8},/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"; pixel_x = 2; pixel_y = 2},/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"; pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/surgery,/obj/item/device/defib_kit/compact/loaded,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/extinguisher/mini,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/obj/item/device/binoculars,/obj/item/device/bluespaceradio,/obj/item/device/radio/emergency,/obj/item/device/radio/emergency,/obj/item/weapon/storage/box/survival/space,/obj/item/weapon/storage/box/survival/space,/obj/item/weapon/storage/box/survival/space,/obj/item/weapon/storage/box/survival/space,/obj/item/weapon/storage/box/survival/comp,/obj/item/weapon/storage/box/survival/comp,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/toy/crossbow,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"I" = (/obj/machinery/light,/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod)
+"J" = (/obj/machinery/sleep_console{dir = 4},/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod)
+"K" = (/obj/structure/fans,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"M" = (/obj/structure/sign/nosmoking_2,/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner,/area/survivalpod)
+"N" = (/obj/structure/sign/mining,/turf/simulated/shuttle/wall/voidcraft/survival/hard_corner,/area/survivalpod)
+"O" = (/obj/structure/disposalpipe/segment,/turf/simulated/shuttle/wall/voidcraft/survival,/area/survivalpod)
+"P" = (/obj/structure/sign/mining/survival{dir = 4},/turf/simulated/shuttle/wall/voidcraft/survival,/area/survivalpod)
+"R" = (/obj/structure/window/reinforced/survival_pod{dir = 1},/obj/machinery/vending/medical{req_access = null; req_log_access = null},/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod)
+"S" = (/obj/machinery/iv_drip,/obj/machinery/iv_drip,/obj/machinery/vending/wallmed1{dir = 8; pixel_x = 22; pixel_y = 3},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"T" = (/obj/machinery/iv_drip,/obj/effect/floor_decal/industrial/loading{dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"U" = (/obj/structure/table/survival_pod,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{pixel_x = 5; pixel_y = 5},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"V" = (/obj/structure/disposalpipe/segment,/obj/structure/sign/mining/survival{dir = 4},/turf/simulated/shuttle/wall/voidcraft/survival,/area/survivalpod)
+"W" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/masks,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/machinery/newscaster{pixel_y = -30},/turf/simulated/shuttle/floor/voidcraft/dark,/area/survivalpod)
+"X" = (/obj/structure/sign/mining/survival{dir = 8},/turf/simulated/shuttle/wall/voidcraft/survival,/area/survivalpod)
+"Y" = (/obj/structure/table/survival_pod,/obj/item/weapon/storage/firstaid/surgery,/obj/structure/sink/kitchen{dir = 4; pixel_x = -13},/obj/machinery/recharger,/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+"Z" = (/obj/machinery/door/window/survival_pod{dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/survivalpod)
+
+(1,1,1) = {"
+asGGNGtsO
+XKnoGHubV
+GlTEGBkSm
+GYkwGUkbm
+hRFvDfFcz
+idddddddi
+xCCCCMZpx
+XJIgWGeAP
+ajGGNGGja
+"}
diff --git a/maps/groundbase/gb-z1.dmm b/maps/groundbase/gb-z1.dmm
index 74e42e25de..6734dad672 100644
--- a/maps/groundbase/gb-z1.dmm
+++ b/maps/groundbase/gb-z1.dmm
@@ -574,6 +574,10 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
/area/groundbase/level1/centsquare)
"bB" = (
@@ -669,6 +673,10 @@
/obj/structure/sign/painting/library_secure{
pixel_x = 30
},
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/civilian/womensrestroom)
"bO" = (
@@ -1767,9 +1775,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- dir = 8;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/junction{
+ dir = 8
},
/turf/simulated/floor/tiled/dark,
/area/groundbase/civilian/bar)
@@ -1873,11 +1880,11 @@
/turf/simulated/floor/tiled,
/area/groundbase/engineering/eva)
"eI" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/simulated/floor/outdoors/sidewalk/side/virgo3c,
-/area/groundbase/level1/westspur)
+/turf/simulated/floor/tiled/dark,
+/area/groundbase/medical/resleeving)
"eJ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/alarm{
@@ -2283,6 +2290,10 @@
/obj/structure/cable{
icon_state = "2-4"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
/area/groundbase/level1/centsquare)
"fQ" = (
@@ -2539,6 +2550,15 @@
/obj/structure/railing/grey,
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
/area/groundbase/level1/northspur)
+"gu" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/groundbase/medical/lhallway)
"gv" = (
/turf/simulated/wall/r_wall,
/area/groundbase/security/hos)
@@ -2586,6 +2606,10 @@
/obj/structure/cable/yellow{
icon_state = "2-8"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
/area/groundbase/level1/northspur)
"gC" = (
@@ -3332,6 +3356,7 @@
/obj/structure/window/reinforced{
dir = 8
},
+/obj/machinery/atmospherics/unary/vent_scrubber/on,
/turf/simulated/floor/tiled/dark,
/area/groundbase/medical/resleeving)
"iB" = (
@@ -3587,6 +3612,10 @@
/obj/structure/cable{
icon_state = "1-8"
},
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
/area/groundbase/level1/westspur)
"jj" = (
@@ -3848,6 +3877,10 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/civilian/bar)
"jS" = (
@@ -3855,10 +3888,11 @@
/turf/simulated/floor/tiled,
/area/groundbase/civilian/apparel)
"jT" = (
-/obj/machinery/washing_machine,
+/obj/structure/disposaloutlet,
/obj/machinery/light{
dir = 1
},
+/obj/structure/disposalpipe/trunk,
/turf/simulated/floor/tiled/dark,
/area/groundbase/medical/resleeving)
"jU" = (
@@ -4114,6 +4148,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/outdoors/sidewalk/side/virgo3c{
outdoors = 0
},
@@ -4178,6 +4215,7 @@
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/dark,
/area/groundbase/medical/resleeving)
"kF" = (
@@ -4357,6 +4395,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/civilian/bar)
"kX" = (
@@ -5528,6 +5569,9 @@
/obj/structure/cable/yellow{
icon_state = "4-8"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/civilian/womensrestroom)
"nR" = (
@@ -5585,6 +5629,18 @@
},
/turf/simulated/floor/tiled/dark,
/area/groundbase/security/iaa2)
+"nZ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/dark,
+/area/groundbase/civilian/bar)
"ob" = (
/obj/effect/landmark/vines,
/turf/simulated/floor/outdoors/grass/virgo3c,
@@ -6046,9 +6102,11 @@
dir = 4
},
/obj/machinery/atmospherics/unary/vent_pump/on,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
},
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/dark,
/area/groundbase/medical/resleeving)
"ph" = (
@@ -7961,6 +8019,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/outdoors/sidewalk/side/virgo3c,
/area/groundbase/level1/centsquare)
"tQ" = (
@@ -8203,6 +8264,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
/area/groundbase/level1/northspur)
"uv" = (
@@ -8378,8 +8442,15 @@
/obj/machinery/alarm{
dir = 4
},
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
+/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{
+ external_pressure_bound = 101.3;
+ external_pressure_bound_default = 101.3;
+ pressure_checks = 1;
+ pressure_checks_default = 1
},
/turf/simulated/floor/tiled/dark,
/area/groundbase/medical/resleeving)
@@ -8840,6 +8911,10 @@
},
/turf/simulated/floor/tiled/dark,
/area/groundbase/security/halle)
+"vY" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/universal,
+/turf/simulated/wall,
+/area/groundbase/medical/resleeving)
"vZ" = (
/obj/machinery/alarm{
dir = 4
@@ -8962,6 +9037,11 @@
/obj/effect/floor_decal/corner/pink{
dir = 6
},
+/obj/structure/disposalpipe/tagger{
+ dir = 2;
+ name = "package tagger - Resleeving";
+ sort_tag = "Resleeving"
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/civilian/womensrestroom)
"wn" = (
@@ -9604,6 +9684,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c{
outdoors = 0
},
@@ -9792,6 +9875,12 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
+/obj/machinery/disposal/wall/cleaner{
+ dir = 8
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/civilian/bar)
"yi" = (
@@ -9870,6 +9959,7 @@
/obj/machinery/firealarm{
dir = 8
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/dark,
/area/groundbase/medical/resleeving)
"ys" = (
@@ -9951,6 +10041,19 @@
/obj/structure/sign/department/ass,
/turf/simulated/wall,
/area/groundbase/civilian/toolstorage)
+"yC" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/corner/pink{
+ dir = 6
+ },
+/obj/machinery/disposal/wall/cleaner{
+ dir = 8
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/groundbase/civilian/womensrestroom)
"yD" = (
/obj/structure/table/standard,
/obj/item/weapon/aiModule/oxygen,
@@ -10045,8 +10148,8 @@
/turf/simulated/floor/carpet/gaycarpet,
/area/groundbase/civilian/clown)
"yO" = (
-/obj/random/vendorall,
/obj/machinery/camera/network/civilian,
+/obj/machinery/gear_painter,
/turf/simulated/floor/tiled,
/area/groundbase/civilian/apparel)
"yP" = (
@@ -10095,6 +10198,9 @@
/obj/structure/cable/yellow{
icon_state = "4-8"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/outdoors/sidewalk/side/virgo3c,
/area/groundbase/level1/centsquare)
"yV" = (
@@ -10172,6 +10278,7 @@
/obj/effect/floor_decal/corner/pink{
dir = 6
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/groundbase/civilian/womensrestroom)
"zd" = (
@@ -10617,6 +10724,10 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/hologram/holopad,
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/dark,
/area/groundbase/medical/resleeving)
"Ab" = (
@@ -10823,6 +10934,10 @@
/obj/machinery/light{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/dark,
/area/groundbase/medical/resleeving)
"AC" = (
@@ -10913,6 +11028,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/outdoors/sidewalk/virgo3c,
/area/groundbase/level1/westspur)
"AN" = (
@@ -11009,6 +11125,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/civilian/bar)
"Bd" = (
@@ -11128,6 +11247,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/outdoors/sidewalk/side/virgo3c{
outdoors = 0
},
@@ -11985,6 +12107,18 @@
/obj/machinery/hologram/holopad,
/turf/simulated/floor/tiled/white,
/area/groundbase/medical/equipment)
+"Dy" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/groundbase/medical/lhallway)
"Dz" = (
/obj/structure/disposalpipe/segment{
dir = 8;
@@ -12514,6 +12648,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/steel_ridged,
/area/groundbase/civilian/bar)
"ET" = (
@@ -12671,6 +12808,9 @@
/obj/effect/floor_decal/corner/pink{
dir = 9
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/civilian/womensrestroom)
"Fm" = (
@@ -13011,6 +13151,22 @@
/obj/machinery/firealarm,
/turf/simulated/floor/tiled/white,
/area/groundbase/medical/office)
+"Gj" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
+/area/groundbase/level1/centsquare)
"Gk" = (
/obj/machinery/atmospherics/pipe/simple/hidden/universal,
/turf/simulated/floor/tiled/dark,
@@ -13114,6 +13270,9 @@
/obj/structure/cable/yellow{
icon_state = "4-8"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/civilian/womensrestroom)
"Gu" = (
@@ -13138,6 +13297,15 @@
/obj/item/device/geiger,
/turf/simulated/floor/tiled,
/area/groundbase/engineering/workshop)
+"Gx" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/outdoors/sidewalk/virgo3c,
+/area/groundbase/level1/centsquare)
"Gy" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -13434,9 +13602,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
- },
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/turf/simulated/floor/tiled/dark,
/area/groundbase/medical/resleeving)
"Hl" = (
@@ -13689,9 +13856,10 @@
/turf/simulated/floor/outdoors/sidewalk/side/virgo3c,
/area/groundbase/level1/centsquare)
"HN" = (
-/obj/machinery/disposal/wall{
+/obj/machinery/disposal/wall/cleaner{
+ desc = "Automatically cleans and transports items to the local auto-resleeving facilities.";
dir = 1;
- name = "Auto-Resleeving Item Deposit"
+ name = "auto-resleeving equipment deposit"
},
/obj/structure/disposalpipe/trunk,
/turf/simulated/floor/tiled/white,
@@ -14374,6 +14542,10 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
},
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/civilian/bar)
"JE" = (
@@ -14424,6 +14596,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/steel_ridged,
/area/groundbase/medical/resleeving)
"JK" = (
@@ -14565,6 +14738,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
/area/groundbase/level1/centsquare)
"JZ" = (
@@ -14786,6 +14962,7 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
/area/groundbase/level1/centsquare)
"Kv" = (
@@ -15433,9 +15610,9 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
- dir = 2;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/junction{
+ dir = 8;
+ icon_state = "pipe-j2"
},
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
/area/groundbase/level1/westspur)
@@ -15699,6 +15876,7 @@
/area/groundbase/medical/resleeving)
"MG" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/groundbase/civilian/bar)
"MI" = (
@@ -16025,6 +16203,9 @@
dir = 8
},
/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/medical/lhallway)
"NA" = (
@@ -16138,6 +16319,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/outdoors/sidewalk/side/virgo3c,
/area/groundbase/level1/northspur)
"NN" = (
@@ -16372,6 +16556,7 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
/area/groundbase/level1/centsquare)
"On" = (
@@ -17072,6 +17257,9 @@
/obj/structure/cable/yellow{
icon_state = "4-8"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/bmarble,
/area/groundbase/civilian/womensrestroom)
"Qq" = (
@@ -17124,6 +17312,21 @@
},
/turf/simulated/floor/tiled/dark,
/area/groundbase/cargo/mining)
+"Qy" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/outdoors/sidewalk/side/virgo3c,
+/area/groundbase/level1/centsquare)
"Qz" = (
/obj/machinery/gateway{
dir = 10
@@ -17149,6 +17352,10 @@
/obj/structure/cable/yellow{
icon_state = "1-4"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
/area/groundbase/level1/centsquare)
"QC" = (
@@ -17654,6 +17861,10 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
/area/groundbase/level1/centsquare)
"RR" = (
@@ -17666,6 +17877,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
/area/groundbase/level1/centsquare)
"RS" = (
@@ -18477,6 +18691,12 @@
/obj/item/weapon/circuitboard/partslathe,
/turf/simulated/floor/tiled,
/area/groundbase/engineering/techstorage)
+"TM" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
+/area/groundbase/level1/centsquare)
"TN" = (
/obj/machinery/computer/rcon{
dir = 1
@@ -18657,6 +18877,7 @@
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/outdoors/sidewalk/virgo3c,
/area/groundbase/level1/centsquare)
"Uk" = (
@@ -18772,6 +18993,10 @@
/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
/obj/machinery/hologram/holopad,
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/medical/lhallway)
"UC" = (
@@ -18996,6 +19221,12 @@
},
/turf/simulated/floor/tiled/steel_ridged,
/area/groundbase/engineering/lobby)
+"Vk" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
+/turf/simulated/wall,
+/area/groundbase/medical/resleeving)
"Vl" = (
/obj/item/weapon/book/manual/rotary_electric_generator,
/obj/structure/table/reinforced,
@@ -19146,6 +19377,17 @@
outdoors = 0
},
/area/maintenance/groundbase/level1/nwtunnel)
+"VG" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/floor_decal/corner/pink{
+ dir = 6
+ },
+/obj/structure/sign/painting/library_secure{
+ pixel_x = 30
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/groundbase/civilian/womensrestroom)
"VH" = (
/mob/living/simple_mob/vore/alienanimals/catslug/custom/gatslug{
ghostjoin = 1
@@ -19416,6 +19658,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/dark,
/area/groundbase/medical/resleeving)
"Ws" = (
@@ -19438,6 +19681,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/bmarble,
/area/groundbase/medical/lhallway)
"Wu" = (
@@ -19470,6 +19716,11 @@
dir = 8
},
/obj/machinery/light,
+/obj/structure/disposalpipe/tagger{
+ dir = 8;
+ name = "package tagger - Resleeving";
+ sort_tag = "Resleeving"
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/civilian/bar)
"WA" = (
@@ -19540,6 +19791,10 @@
/obj/structure/cable/yellow{
icon_state = "1-8"
},
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
/area/groundbase/level1/centsquare)
"WI" = (
@@ -20431,8 +20686,10 @@
"YW" = (
/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,
-/obj/structure/disposalpipe/segment{
- dir = 4
+/obj/structure/disposalpipe/sortjunction/flipped{
+ dir = 4;
+ name = "Resleeving";
+ sortType = "Resleeving"
},
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -20547,6 +20804,13 @@
},
/turf/simulated/floor/tiled,
/area/groundbase/engineering/ce)
+"Zf" = (
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c,
+/area/groundbase/level1/centsquare)
"Zg" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -20554,6 +20818,9 @@
/turf/simulated/floor/tiled/techfloor/grid,
/area/groundbase/command/ai/chamber)
"Zh" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/outdoors/sidewalk/side/virgo3c,
/area/groundbase/level1/centsquare)
"Zj" = (
@@ -20800,13 +21067,14 @@
/turf/simulated/floor,
/area/groundbase/engineering/storage)
"ZV" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/door/airlock/medical{
id_tag = "Resleeving Shower";
name = "Resleeving Lab";
req_one_access = null
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/tiled/steel_ridged,
/area/groundbase/medical/resleeving)
"ZX" = (
@@ -26697,7 +26965,7 @@ GF
ht
pJ
yI
-KR
+nZ
vE
af
pj
@@ -28158,7 +28426,7 @@ QD
QD
cB
cB
-eI
+mk
YM
cB
cB
@@ -28300,7 +28568,7 @@ QD
QD
cB
cB
-eI
+mk
cB
cB
cB
@@ -28442,7 +28710,7 @@ cB
cB
cB
YM
-eI
+mk
cB
cB
cB
@@ -30139,10 +30407,10 @@ Oz
Oz
Oz
RQ
-LA
-LA
-LA
-LA
+CH
+CH
+CH
+CH
bA
LA
LA
@@ -30816,24 +31084,24 @@ tG
gM
tG
gB
-ay
-ay
-ay
-ay
-ay
-ay
-ay
+Gx
+Gx
+Gx
+Gx
+Gx
+Gx
+Gx
Om
-ay
-ay
-ay
-ay
-ay
-ay
-ay
-ay
-ay
-ay
+Gx
+Gx
+Gx
+Gx
+Gx
+Gx
+Gx
+Gx
+Gx
+Gx
YW
ay
ay
@@ -30853,7 +31121,7 @@ Nv
Nv
Eb
Eb
-OA
+TM
Eb
eR
eR
@@ -31559,11 +31827,11 @@ ay
ay
ay
QB
-Vs
-Vs
-Vs
-Vs
-OA
+lT
+lT
+lT
+lT
+Zf
ds
eR
eR
@@ -31659,8 +31927,8 @@ qE
jn
jT
uU
-jn
-jn
+vY
+Vk
jn
jn
jn
@@ -31700,7 +31968,7 @@ Gv
Ge
Eb
Eb
-TK
+Qy
Eb
Eb
qI
@@ -31842,7 +32110,7 @@ eR
eR
eR
eR
-TK
+Qy
Eb
Eb
Eb
@@ -31946,12 +32214,12 @@ jn
jn
pP
wB
-wB
+eI
wB
Ap
jn
IY
-Gu
+Dy
qO
nb
ZG
@@ -31984,7 +32252,7 @@ eR
eR
eR
eR
-TK
+Qy
Eb
Nv
Eb
@@ -32092,7 +32360,7 @@ Aa
Wr
kE
JJ
-Fc
+gu
UA
WS
ZO
@@ -32126,7 +32394,7 @@ pc
pc
pc
eR
-TK
+Qy
Eb
Nv
Nv
@@ -32268,7 +32536,7 @@ pc
pc
eR
eR
-TK
+Qy
Eb
Nv
Nv
@@ -32410,7 +32678,7 @@ pc
eR
eR
eR
-TK
+Qy
Eb
Eb
Nv
@@ -32554,9 +32822,9 @@ Bv
Bv
WH
Ku
-ay
-ay
-QB
+Gx
+Gx
+Gj
Nv
Eb
Eb
@@ -33410,9 +33678,9 @@ bg
rg
bM
zc
-HO
+VG
wm
-HO
+yC
gy
HO
Ue
diff --git a/maps/groundbase/gb-z2.dmm b/maps/groundbase/gb-z2.dmm
index 3e9cffc768..b9e9767171 100644
--- a/maps/groundbase/gb-z2.dmm
+++ b/maps/groundbase/gb-z2.dmm
@@ -478,6 +478,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/steel_ridged,
/area/groundbase/dorms/bathroom)
"bo" = (
@@ -6354,6 +6355,10 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/dorms/bathroom)
"sK" = (
@@ -9381,6 +9386,11 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
},
+/obj/structure/disposalpipe/tagger{
+ dir = 8;
+ name = "package tagger - Resleeving";
+ sort_tag = "Resleeving"
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/dorms/bathroom)
"BV" = (
@@ -9452,10 +9462,7 @@
},
/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
-/obj/structure/disposalpipe/segment{
- dir = 2;
- icon_state = "pipe-c"
- },
+/obj/structure/disposalpipe/junction,
/turf/simulated/floor/tiled/dark,
/area/groundbase/dorms)
"Cc" = (
@@ -11885,6 +11892,12 @@
/obj/machinery/light/small{
dir = 1
},
+/obj/machinery/disposal/wall/cleaner{
+ dir = 1
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
/turf/simulated/floor/tiled/white,
/area/groundbase/dorms/bathroom)
"IX" = (
diff --git a/maps/groundbase/gb-z3.dmm b/maps/groundbase/gb-z3.dmm
index 22bcf4d214..fbd9550b5f 100644
--- a/maps/groundbase/gb-z3.dmm
+++ b/maps/groundbase/gb-z3.dmm
@@ -234,6 +234,11 @@
/obj/machinery/computer/ship/engines,
/turf/simulated/floor/tiled,
/area/shuttle/groundbase/exploration)
+"ed" = (
+/turf/simulated/floor/virgo3c{
+ edge_blending_priority = -1
+ },
+/area/groundbase/level3/nw)
"ei" = (
/obj/structure/panic_button{
pixel_x = 32;
@@ -608,6 +613,12 @@
"lk" = (
/turf/unsimulated/wall/planetary/virgo3c,
/area/groundbase/level3/ne)
+"ly" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/simulated/open/virgo3c,
+/area/groundbase/level3/nw/open)
"lz" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
@@ -1501,6 +1512,10 @@
},
/turf/simulated/floor/tiled/white,
/area/groundbase/medical/paramedic)
+"By" = (
+/obj/structure/catwalk,
+/turf/simulated/open/virgo3c,
+/area/groundbase/level3/nw/open)
"BB" = (
/turf/simulated/wall,
/area/groundbase/medical/patient1)
@@ -2139,8 +2154,11 @@
/turf/simulated/floor/tiled/white,
/area/groundbase/medical/patient3)
"Mz" = (
+/obj/structure/railing{
+ dir = 4
+ },
/turf/simulated/open/virgo3c,
-/area/groundbase/unexplored/outdoors)
+/area/groundbase/level3/nw/open)
"MF" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
@@ -2378,6 +2396,12 @@
/obj/machinery/status_display,
/turf/simulated/wall,
/area/groundbase/level3/escapepad)
+"Qq" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/open/virgo3c,
+/area/groundbase/level3/nw/open)
"Qr" = (
/obj/machinery/hologram/holopad,
/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c{
@@ -2403,6 +2427,10 @@
edge_blending_priority = -1
},
/area/groundbase/level3/nw/open)
+"QO" = (
+/obj/structure/railing,
+/turf/simulated/open/virgo3c,
+/area/groundbase/level3/nw/open)
"Rg" = (
/obj/machinery/firealarm{
dir = 4
@@ -5668,10 +5696,10 @@ Zo
vs
vs
Mz
-Kr
-Kr
-Kr
-Kr
+Mz
+Mz
+Mz
+Mz
QD
QD
QD
@@ -5809,11 +5837,11 @@ Zo
vs
vs
vs
-Kr
-Kr
-Kr
-Kr
-Kr
+By
+By
+By
+By
+By
QD
QD
QD
@@ -5951,11 +5979,11 @@ Zo
vs
vs
vs
-Kr
-Kr
-Kr
-Kr
-Kr
+By
+By
+By
+By
+By
QD
QD
QD
@@ -6093,11 +6121,11 @@ vs
vs
vs
vs
-Kr
-Kr
-Kr
-Kr
-Kr
+Qq
+Qq
+Qq
+Qq
+Qq
QD
QD
QD
@@ -6241,10 +6269,10 @@ Kr
Kr
Kr
Kr
-Kr
-Kr
-Kr
-Kr
+QO
+By
+By
+ly
Kr
Kr
Kr
@@ -6383,10 +6411,10 @@ Kr
Kr
Kr
Kr
-Kr
-Kr
-Kr
-Kr
+QO
+By
+By
+ly
Kr
Kr
Kr
@@ -6525,10 +6553,10 @@ Kr
Kr
Kr
Kr
-Kr
-Kr
-Kr
-Kr
+QO
+By
+By
+ly
Kr
Kr
Kr
@@ -8611,8 +8639,8 @@ Zo
Zo
Zo
Zo
-Kr
-Kr
+vs
+vs
qO
uG
PH
@@ -8753,8 +8781,8 @@ Zo
Zo
Zo
Zo
-Kr
-Kr
+vs
+vs
qO
uG
PH
@@ -8893,11 +8921,11 @@ Xv
Zo
Zo
Zo
-Kr
-Kr
-Kr
-Kr
-Kr
+vs
+vs
+vs
+vs
+ed
YK
VH
VH
@@ -9035,6 +9063,11 @@ Xv
Zo
Zo
Zo
+vs
+vs
+vs
+vs
+ed
Kr
Kr
Kr
@@ -9076,15 +9109,10 @@ Kr
Kr
Kr
Kr
-Kr
-Kr
-Kr
-Kr
-Kr
-Kr
-Kr
-Kr
-Kr
+QO
+By
+By
+ly
Kr
Kr
Kr
@@ -9177,6 +9205,7 @@ Zo
Zo
Zo
Zo
+vs
Kr
Kr
Kr
@@ -9222,11 +9251,10 @@ Kr
Kr
Kr
Kr
-Kr
-Kr
-Kr
-Kr
-Kr
+QO
+By
+By
+ly
Kr
Kr
Kr
@@ -9319,6 +9347,7 @@ Xv
Zo
Zo
Zo
+vs
Kr
Kr
Kr
@@ -9364,11 +9393,10 @@ Kr
Kr
Kr
Kr
-Kr
-Kr
-Kr
-Kr
-Kr
+QO
+By
+By
+ly
Kr
Kr
Kr
@@ -9507,10 +9535,10 @@ Kr
Kr
Kr
Kr
-Kr
-Kr
-Kr
-Kr
+QO
+By
+By
+ly
Kr
Kr
Kr
@@ -9649,10 +9677,10 @@ Kr
Kr
Kr
Kr
-Kr
-Kr
-Kr
-Kr
+QO
+By
+By
+ly
Kr
Kr
Kr
diff --git a/maps/stellardelight/stellar_delight1.dmm b/maps/stellardelight/stellar_delight1.dmm
index d8c8e607f1..c4e5b2dfaa 100644
--- a/maps/stellardelight/stellar_delight1.dmm
+++ b/maps/stellardelight/stellar_delight1.dmm
@@ -327,6 +327,7 @@
/obj/structure/sign/directions/evac{
pixel_x = -32
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"aO" = (
@@ -547,8 +548,11 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/machinery/firealarm/angled{
- dir = 4
+/obj/machinery/disposal/wall/cleaner{
+ dir = 8
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 8
},
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
@@ -641,6 +645,7 @@
/obj/structure/sign/painting/public{
pixel_x = -30
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/aft)
"bv" = (
@@ -986,7 +991,11 @@
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+ dir = 5
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
},
/turf/simulated/floor/tiled/dark,
/area/stellardelight/deck1/resleeving)
@@ -1074,7 +1083,10 @@
},
/obj/structure/curtain/open/shower/medical,
/obj/structure/window/reinforced{
- dir = 1
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
},
/turf/simulated/floor/tiled/dark,
/area/stellardelight/deck1/resleeving)
@@ -1756,6 +1768,10 @@
/obj/structure/cable/white{
icon_state = "1-4"
},
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/aft)
"dQ" = (
@@ -3400,6 +3416,7 @@
/obj/machinery/door/airlock/angled_bay/double/glass{
name = "glass airlock"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/steel_ridged,
/area/stellardelight/deck1/port)
"hq" = (
@@ -3720,6 +3737,7 @@
/obj/machinery/power/apc/angled{
dir = 8
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"hS" = (
@@ -3802,6 +3820,16 @@
/obj/structure/closet/bombcloset,
/turf/simulated/floor/tiled/dark,
/area/rnd/xenobiology)
+"ia" = (
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/segment,
+/obj/machinery/firealarm/angled{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/stellardelight/deck1/port)
"ib" = (
/obj/machinery/power/pointdefense{
id_tag = "sd_pd"
@@ -4151,6 +4179,7 @@
/obj/machinery/camera/network/halls{
dir = 4
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/aft)
"iK" = (
@@ -4228,6 +4257,16 @@
/obj/effect/floor_decal/steeldecal/steel_decals4,
/turf/simulated/floor/tiled/milspec,
/area/stellardelight/deck1/exploration)
+"iR" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/cable/green{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/white,
+/area/crew_quarters/toilet)
"iS" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -4809,6 +4848,7 @@
/obj/machinery/alarm/angled{
dir = 4
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"kf" = (
@@ -4974,6 +5014,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/crew_quarters/toilet)
"kz" = (
@@ -6533,6 +6574,7 @@
/obj/machinery/door/airlock/angled_bay/double/glass{
name = "glass airlock"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/steel_ridged,
/area/stellardelight/deck1/port)
"nK" = (
@@ -6684,6 +6726,12 @@
/obj/item/weapon/hand_labeler,
/turf/simulated/floor/tiled/dark,
/area/security/warden)
+"ob" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/stellardelight/deck1/port)
"oc" = (
/obj/machinery/light{
dir = 4
@@ -6726,9 +6774,6 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
/obj/machinery/button/remote/airlock{
desc = "A remote control switch for the cleaning room exit.";
dir = 4;
@@ -6743,6 +6788,10 @@
/obj/effect/floor_decal/steeldecal/steel_decals4{
dir = 1
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/universal,
/turf/simulated/floor/tiled/dark,
/area/stellardelight/deck1/resleeving)
"oi" = (
@@ -6883,6 +6932,9 @@
/obj/effect/floor_decal/steeldecal/steel_decals3{
dir = 6
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/aft)
"oz" = (
@@ -6940,6 +6992,10 @@
/obj/structure/cable/green{
icon_state = "1-8"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/white,
/area/crew_quarters/toilet)
"oD" = (
@@ -7102,6 +7158,10 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"oW" = (
@@ -7807,6 +7867,7 @@
/obj/structure/sign/deck1{
pixel_x = -32
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/aft)
"qw" = (
@@ -7982,7 +8043,9 @@
/turf/simulated/floor/carpet,
/area/chapel/main)
"qR" = (
-/obj/machinery/transhuman/autoresleever,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 9
+ },
/turf/simulated/floor/tiled/dark,
/area/stellardelight/deck1/resleeving)
"qS" = (
@@ -8100,6 +8163,7 @@
/obj/structure/sign/painting/public{
pixel_x = -30
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"rf" = (
@@ -8113,6 +8177,7 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"rh" = (
@@ -8771,6 +8836,18 @@
},
/turf/simulated/wall/bay/r_wall/steel,
/area/security/armoury)
+"sw" = (
+/obj/structure/cable/green{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/stellardelight/deck1/port)
"sx" = (
/obj/structure/cable/pink{
icon_state = "1-2"
@@ -9769,6 +9846,7 @@
dir = 8;
pixel_x = -27
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"uH" = (
@@ -10554,6 +10632,7 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"wv" = (
@@ -11068,6 +11147,16 @@
},
/turf/simulated/floor/wood,
/area/library)
+"xC" = (
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 2;
+ icon_state = "pipe-j2"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/stellardelight/deck1/port)
"xD" = (
/obj/effect/floor_decal/industrial/warning{
dir = 4
@@ -13871,6 +13960,7 @@
/obj/machinery/newscaster{
pixel_x = -29
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"Ds" = (
@@ -14445,20 +14535,9 @@
/turf/simulated/floor/tiled/eris/white/bluecorner,
/area/stellardelight/deck1/paramedic)
"EN" = (
-/obj/structure/mirror{
- pixel_y = 38
- },
-/obj/structure/sink{
- pixel_y = 20
- },
-/obj/machinery/light{
- dir = 8
- },
-/obj/structure/cable/green{
- icon_state = "4-8"
- },
-/turf/simulated/floor/tiled/white,
-/area/crew_quarters/toilet)
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/techmaint,
+/area/stellardelight/deck1/port)
"EO" = (
/obj/machinery/door/firedoor/glass/hidden/steel{
dir = 8
@@ -14512,6 +14591,7 @@
/obj/effect/floor_decal/steeldecal/steel_decals3{
dir = 5
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/aft)
"EU" = (
@@ -14767,6 +14847,9 @@
name = "Unisex Restrooms";
stripe_color = "#89bd66"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/steel_ridged,
/area/crew_quarters/toilet)
"Fv" = (
@@ -15434,6 +15517,7 @@
/obj/structure/sign/painting/library_secure{
pixel_y = 30
},
+/obj/machinery/atmospherics/unary/vent_pump/on,
/turf/simulated/floor/tiled/dark,
/area/stellardelight/deck1/resleeving)
"Ha" = (
@@ -15515,6 +15599,10 @@
/area/maintenance/stellardelight/deck1/portcent)
"Hi" = (
/obj/machinery/computer/timeclock/premade/west,
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"Hj" = (
@@ -16421,6 +16509,7 @@
pixel_x = -32;
pixel_y = 6
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/aft)
"IX" = (
@@ -16660,6 +16749,7 @@
/obj/machinery/light{
dir = 8
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"JB" = (
@@ -16888,12 +16978,17 @@
/turf/simulated/floor/tiled/eris/steel/cargo,
/area/stellardelight/deck1/oreprocessing)
"Kc" = (
-/obj/machinery/washing_machine,
-/obj/machinery/atmospherics/unary/vent_pump/on,
/obj/item/device/radio/intercom{
dir = 1;
pixel_y = 24
},
+/obj/machinery/transhuman/autoresleever,
+/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{
+ external_pressure_bound = 101.3;
+ external_pressure_bound_default = 101.3;
+ pressure_checks = 1;
+ pressure_checks_default = 1
+ },
/turf/simulated/floor/tiled/dark,
/area/stellardelight/deck1/resleeving)
"Kd" = (
@@ -16903,6 +16998,7 @@
/obj/machinery/status_display{
pixel_x = -32
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"Ke" = (
@@ -17628,6 +17724,7 @@
/obj/effect/floor_decal/steeldecal/steel_decals3{
dir = 4
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"LD" = (
@@ -17788,9 +17885,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
@@ -17798,6 +17892,11 @@
dir = 4
},
/obj/machinery/alarm/angled,
+/obj/structure/disposalpipe/sortjunction{
+ dir = 4;
+ name = "Resleeving";
+ sortType = "Resleeving"
+ },
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"LW" = (
@@ -17976,6 +18075,9 @@
"Mq" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"Mr" = (
@@ -18091,6 +18193,7 @@
/obj/effect/floor_decal/steeldecal/steel_decals6{
dir = 6
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"MJ" = (
@@ -18107,8 +18210,8 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 5
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 8
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -19577,6 +19680,15 @@
/area/crew_quarters/toilet)
"PV" = (
/obj/machinery/light/small,
+/obj/structure/disposaloutlet{
+ dir = 4
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 8
+ },
/turf/simulated/floor/tiled/dark,
/area/stellardelight/deck1/resleeving)
"PW" = (
@@ -19661,6 +19773,7 @@
/obj/machinery/light{
dir = 8
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"Qg" = (
@@ -19788,6 +19901,7 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/aft)
"Qw" = (
@@ -19979,6 +20093,7 @@
dir = 8;
pixel_x = 24
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/crew_quarters/toilet)
"QU" = (
@@ -20190,6 +20305,9 @@
req_access = list(5);
stripe_color = "#5a96bb"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/steel_ridged,
/area/stellardelight/deck1/resleeving)
"Ro" = (
@@ -20442,6 +20560,12 @@
/obj/machinery/alarm/angled{
dir = 8
},
+/obj/machinery/disposal/wall/cleaner{
+ dir = 1
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 1
+ },
/turf/simulated/floor/tiled/white,
/area/crew_quarters/toilet)
"RL" = (
@@ -20588,6 +20712,7 @@
/obj/effect/floor_decal/steeldecal/steel_decals3{
dir = 4
},
+/obj/structure/disposalpipe/junction,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"Sb" = (
@@ -20849,6 +20974,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/crew_quarters/toilet)
"SH" = (
@@ -22859,6 +22985,7 @@
/obj/machinery/camera/network/halls{
dir = 4
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"WA" = (
@@ -23475,6 +23602,9 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 4
},
+/obj/machinery/light{
+ dir = 8
+ },
/turf/simulated/floor/tiled/white,
/area/crew_quarters/toilet)
"XQ" = (
@@ -24018,6 +24148,7 @@
/obj/effect/floor_decal/steeldecal/steel_decals3{
dir = 4
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/port)
"YT" = (
@@ -24428,6 +24559,7 @@
dir = 4;
pixel_x = -32
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/stellardelight/deck1/aft)
"ZP" = (
@@ -32003,7 +32135,7 @@ Ki
IY
vd
IY
-EN
+Um
XP
NH
in
@@ -32571,7 +32703,7 @@ oC
ky
QS
SG
-LR
+iR
RK
NH
Ew
@@ -32850,9 +32982,9 @@ rg
JA
wu
Kd
-rg
+ia
Sa
-rg
+xC
hR
ke
rg
@@ -32979,7 +33111,7 @@ jJ
qm
Vw
ug
-YT
+ob
nS
Ov
zM
@@ -32994,7 +33126,7 @@ ut
WK
wW
oU
-WK
+sw
Jv
cK
qy
@@ -33121,7 +33253,7 @@ ew
AG
ms
CZ
-CZ
+ms
hk
YF
YF
@@ -33135,7 +33267,7 @@ KF
KF
KF
uk
-YT
+ob
HW
TT
Fk
@@ -33263,7 +33395,7 @@ YT
WF
Pt
SL
-YT
+ob
Je
YF
Vv
@@ -33277,7 +33409,7 @@ TN
pm
KF
kU
-YT
+ob
BI
Wf
Jt
@@ -33403,9 +33535,9 @@ Ku
hY
Ku
LV
-YT
-YT
-YT
+EN
+EN
+Pt
Sh
Wn
SY
@@ -33561,7 +33693,7 @@ Li
WW
KF
uS
-YT
+ob
YT
cO
cd
diff --git a/maps/stellardelight/stellar_delight2.dmm b/maps/stellardelight/stellar_delight2.dmm
index 885fec6121..11b77c12a5 100644
--- a/maps/stellardelight/stellar_delight2.dmm
+++ b/maps/stellardelight/stellar_delight2.dmm
@@ -3281,6 +3281,10 @@
/obj/structure/cable/green{
icon_state = "1-4"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"he" = (
@@ -3547,7 +3551,6 @@
/turf/simulated/floor,
/area/maintenance/stellardelight/deck2/portfore)
"hP" = (
-/obj/structure/closet/secure_closet/personal,
/obj/effect/floor_decal/industrial/outline,
/obj/effect/floor_decal/steeldecal/steel_decals9,
/obj/effect/floor_decal/steeldecal/steel_decals9{
@@ -3559,11 +3562,12 @@
/obj/effect/floor_decal/steeldecal/steel_decals9{
dir = 8
},
-/obj/item/clothing/shoes/black,
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
},
-/obj/item/device/communicator,
+/obj/machinery/disposal/wall/cleaner{
+ dir = 4
+ },
/turf/simulated/floor/holofloor/tiled/dark,
/area/crew_quarters/locker)
"hQ" = (
@@ -3587,6 +3591,15 @@
/obj/effect/floor_decal/milspec/cargo,
/turf/simulated/floor/tiled/eris/steel/brown_platform,
/area/quartermaster/storage)
+"hT" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/tagger{
+ dir = 2;
+ name = "package tagger - Resleeving";
+ sort_tag = "Resleeving"
+ },
+/turf/simulated/floor/tiled,
+/area/crew_quarters/locker)
"hU" = (
/obj/structure/disposalpipe/tagger/partial{
dir = 8;
@@ -4213,6 +4226,14 @@
},
/turf/simulated/floor/tiled/eris/dark/cargo,
/area/crew_quarters/recreation_area)
+"jw" = (
+/obj/machinery/door/firedoor/glass,
+/obj/machinery/door/airlock/angled_bay/standard/glass{
+ name = "glass airlock"
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/steel_ridged,
+/area/stellardelight/deck2/port)
"jx" = (
/obj/structure/cable/green{
icon_state = "4-8"
@@ -4334,6 +4355,12 @@
},
/turf/simulated/floor/wood,
/area/medical/psych)
+"jJ" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/stellardelight/deck2/fore)
"jK" = (
/obj/structure/table/glass,
/obj/machinery/camera/network/medbay{
@@ -4492,6 +4519,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"ke" = (
@@ -5072,6 +5100,10 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"lk" = (
@@ -7826,6 +7858,9 @@
/obj/effect/floor_decal/emblem/stellardelight{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"rk" = (
@@ -8126,6 +8161,10 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"rR" = (
@@ -8166,6 +8205,9 @@
name = "Laundry";
stripe_color = "#89bd66"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/steel_ridged,
/area/crew_quarters/locker)
"rY" = (
@@ -9312,6 +9354,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"uF" = (
@@ -9423,6 +9468,10 @@
},
/turf/simulated/floor,
/area/maintenance/stellardelight/deck2/atmos)
+"uT" = (
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/stellardelight/deck2/fore)
"uU" = (
/obj/structure/disposalpipe/trunk{
dir = 8
@@ -10020,6 +10069,7 @@
/obj/effect/floor_decal/steeldecal/steel_decals5{
dir = 8
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/crew_quarters/locker)
"wu" = (
@@ -10158,6 +10208,9 @@
/obj/effect/floor_decal/emblem/stellardelight{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"wL" = (
@@ -10325,6 +10378,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"xh" = (
@@ -10662,6 +10716,15 @@
/obj/structure/low_wall/bay/reinforced/steel,
/turf/simulated/floor,
/area/stellardelight/deck2/combustionworkshop)
+"xT" = (
+/obj/structure/cable/green{
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/stellardelight/deck2/fore)
"xU" = (
/obj/machinery/atmospherics/pipe/simple/hidden/fuel{
dir = 4
@@ -11497,6 +11560,18 @@
},
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
+"zP" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/effect/floor_decal/steeldecal/steel_decals5{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/stellardelight/deck2/port)
"zQ" = (
/obj/machinery/door/firedoor/glass,
/obj/machinery/atmospherics/pipe/simple/hidden/cyan,
@@ -12685,6 +12760,10 @@
/obj/effect/floor_decal/steeldecal/steel_decals5{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled,
/area/crew_quarters/locker)
"CG" = (
@@ -14240,6 +14319,9 @@
/obj/effect/floor_decal/steeldecal/steel_decals_central5{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"FV" = (
@@ -14618,6 +14700,9 @@
dir = 8
},
/obj/effect/floor_decal/emblem/stellardelight/center,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"GJ" = (
@@ -14981,8 +15066,27 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
+"Hz" = (
+/obj/machinery/door/firedoor/glass,
+/obj/structure/cable/green{
+ icon_state = "1-2"
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/door/airlock/angled_bay/hatch{
+ name = "maintenance access";
+ stripe_color = "#454545"
+ },
+/turf/simulated/floor/tiled/steel_ridged,
+/area/stellardelight/deck2/port)
"HA" = (
/obj/item/device/radio/intercom{
dir = 1;
@@ -15599,6 +15703,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"IL" = (
@@ -17125,6 +17232,9 @@
/obj/structure/cable/green{
icon_state = "1-8"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"Mj" = (
@@ -19348,6 +19458,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"QY" = (
@@ -19699,6 +19812,10 @@
},
/turf/simulated/floor/tiled/eris/white/cargo,
/area/stellardelight/deck2/triage)
+"RR" = (
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled,
+/area/stellardelight/deck2/port)
"RS" = (
/obj/structure/cable/blue{
icon_state = "1-8"
@@ -20135,6 +20252,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"SV" = (
@@ -20978,6 +21096,12 @@
},
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
+"UR" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/simulated/wall/bay/r_wall/steel,
+/area/stellardelight/deck2/port)
"US" = (
/obj/machinery/door/firedoor/glass/hidden/steel,
/obj/structure/sign/directions/bar{
@@ -21775,6 +21899,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"WI" = (
@@ -21995,6 +22120,9 @@
/obj/structure/cable/green{
icon_state = "4-8"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/stellardelight/deck2/fore)
"Xj" = (
@@ -22763,6 +22891,13 @@
"YU" = (
/turf/simulated/floor/tiled/eris/steel/brown_platform,
/area/crew_quarters/bar)
+"YV" = (
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
+/turf/simulated/floor/tiled,
+/area/stellardelight/deck2/port)
"YW" = (
/obj/random/vendordrink,
/obj/machinery/atmospherics/unary/vent_pump/on,
@@ -31129,7 +31264,7 @@ AR
KK
bP
kK
-Rp
+Hz
gm
PG
PG
@@ -31271,7 +31406,7 @@ mS
KK
mY
qy
-Bw
+UR
Aa
sg
sg
@@ -31413,7 +31548,7 @@ jo
KK
Bw
Bw
-Bw
+UR
pw
Yk
Ce
@@ -31555,7 +31690,7 @@ Qe
nS
Vw
eL
-pA
+zP
VP
VP
VP
@@ -31693,11 +31828,11 @@ XO
XO
XO
hd
-sO
-sO
-Vw
-Ve
-Ve
+uT
+uT
+jw
+RR
+YV
VP
VP
VP
@@ -34518,20 +34653,20 @@ iy
mV
XC
rQ
-ZM
-ZM
-ZM
-ZM
-ZM
+xT
+xT
+xT
+xT
+xT
kd
SU
-ZM
+xT
WH
-ZM
-ZM
-ZM
+xT
+xT
+xT
xg
-ji
+jJ
lj
ji
ji
@@ -34945,7 +35080,7 @@ Rm
WZ
CF
wt
-eM
+hT
hP
fl
ZA
diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm
index 841506ae97..9cd83ea37d 100644
--- a/maps/tether/tether-01-surface1.dmm
+++ b/maps/tether/tether-01-surface1.dmm
@@ -2847,7 +2847,8 @@
/obj/structure/disposalpipe/trunk{
dir = 4
},
-/obj/machinery/disposal/wall{
+/obj/machinery/disposal/wall/cleaner{
+ desc = "Automatically cleans and transports items to the local auto-resleeving facilities.";
dir = 8;
name = "auto-resleeving equipment deposit"
},
@@ -27305,6 +27306,10 @@
/obj/effect/floor_decal/corner/blue/border{
dir = 4
},
+/obj/machinery/disposal/wall/cleaner{
+ dir = 8
+ },
+/obj/structure/disposalpipe/trunk,
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_lodging)
"aUm" = (
@@ -27408,6 +27413,10 @@
d2 = 8;
icon_state = "2-8"
},
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_laundry)
"aUt" = (
@@ -27444,6 +27453,7 @@
d2 = 2;
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_laundry)
"aUv" = (
@@ -27632,6 +27642,11 @@
/obj/effect/floor_decal/corner/white/bordercorner2{
dir = 5
},
+/obj/structure/disposalpipe/tagger{
+ dir = 2;
+ name = "package tagger - Resleeving";
+ sort_tag = "Resleeving"
+ },
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_lodging)
"aUP" = (
@@ -27756,7 +27771,9 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/junction{
+ dir = 1
+ },
/obj/effect/floor_decal/borderfloor/corner2{
dir = 10
},
@@ -27776,6 +27793,10 @@
dir = 9
},
/obj/effect/landmark/vines,
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_lodging)
"aVd" = (
@@ -28049,9 +28070,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/structure/disposalpipe/segment{
- dir = 2;
- icon_state = "pipe-c"
+/obj/structure/disposalpipe/junction{
+ dir = 8;
+ icon_state = "pipe-j2"
},
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_laundry)
@@ -28071,6 +28092,9 @@
/obj/effect/floor_decal/corner/grey/border{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_laundry)
"aVB" = (
@@ -28091,6 +28115,9 @@
/obj/effect/floor_decal/corner/grey{
dir = 10
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_laundry)
"aVC" = (
@@ -28276,6 +28303,7 @@
d2 = 2;
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_laundry)
"aVQ" = (
@@ -28815,6 +28843,7 @@
d2 = 2;
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_laundry)
"aXa" = (
@@ -30797,6 +30826,7 @@
d2 = 2;
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_laundry)
"bcl" = (
@@ -30945,6 +30975,7 @@
d2 = 2;
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_laundry)
"bcG" = (
@@ -33259,6 +33290,10 @@
d2 = 4;
icon_state = "1-4"
},
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_laundry)
"gAn" = (
@@ -33920,6 +33955,7 @@
d2 = 2;
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_laundry)
"igw" = (
@@ -34640,6 +34676,11 @@
d2 = 8;
icon_state = "2-8"
},
+/obj/structure/disposalpipe/tagger{
+ dir = 4;
+ name = "package tagger - Resleeving";
+ sort_tag = "Resleeving"
+ },
/turf/simulated/floor/tiled,
/area/crew_quarters/visitor_laundry)
"kuB" = (
@@ -39025,6 +39066,21 @@
},
/turf/simulated/floor/plating,
/area/maintenance/engineering/atmos/airlock/gas)
+"wxO" = (
+/obj/effect/floor_decal/borderfloor{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/grey/border{
+ dir = 4
+ },
+/obj/machinery/disposal/wall/cleaner{
+ dir = 8
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/crew_quarters/visitor_laundry)
"wzA" = (
/obj/structure/catwalk,
/obj/machinery/alarm{
@@ -55319,7 +55375,7 @@ aUP
aXb
aUm
bcH
-bcJ
+wxO
bcN
aUm
aUm
diff --git a/maps/tether/tether-02-surface2.dmm b/maps/tether/tether-02-surface2.dmm
index 35d25f9501..f67738972f 100644
--- a/maps/tether/tether-02-surface2.dmm
+++ b/maps/tether/tether-02-surface2.dmm
@@ -84,6 +84,9 @@
/obj/effect/floor_decal/steeldecal/steel_decals4{
dir = 6
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/resleeving)
"aah" = (
@@ -183,6 +186,9 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/centralhall)
"aap" = (
@@ -197,6 +203,10 @@
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/centralhall)
"aaq" = (
@@ -313,6 +323,7 @@
/obj/structure/cable/green{
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/centralhall)
"aaA" = (
@@ -375,6 +386,7 @@
/obj/machinery/door/firedoor/glass/hidden/steel{
dir = 2
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/centralhall)
"aaF" = (
@@ -463,6 +475,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 1
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/centralhall)
"aaM" = (
@@ -878,6 +891,7 @@
"abj" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/breakroom)
"abk" = (
@@ -1221,10 +1235,11 @@
/turf/simulated/floor/plating,
/area/tether/surfacebase/medical/cmo)
"abK" = (
-/obj/machinery/washing_machine,
/obj/effect/floor_decal/techfloor{
dir = 9
},
+/obj/structure/disposaloutlet,
+/obj/structure/disposalpipe/trunk,
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/medical/resleeving)
"abL" = (
@@ -1372,6 +1387,13 @@
/obj/effect/floor_decal/techfloor{
dir = 8
},
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{
+ external_pressure_bound = 101.3;
+ external_pressure_bound_default = 101.3;
+ pressure_checks = 1;
+ pressure_checks_default = 1
+ },
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/medical/resleeving)
"abV" = (
@@ -1744,6 +1766,10 @@
/obj/effect/floor_decal/techfloor{
dir = 10
},
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 5
+ },
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/medical/resleeving)
"acF" = (
@@ -1756,7 +1782,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 1
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/medical/resleeving)
"acG" = (
@@ -1818,6 +1846,10 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/resleeving)
"acK" = (
@@ -1827,6 +1859,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/resleeving)
"acL" = (
@@ -1994,6 +2029,9 @@
/obj/structure/cable/green{
icon_state = "2-4"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/resleeving)
"acY" = (
@@ -2012,6 +2050,9 @@
name = "Resleeving Lab";
req_access = list(5)
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/resleeving)
"acZ" = (
@@ -2155,6 +2196,10 @@
/obj/machinery/shower{
dir = 1
},
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/medical/resleeving)
"adk" = (
@@ -2169,6 +2214,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 5
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/medical/resleeving)
"adl" = (
@@ -2181,6 +2229,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/dark,
/area/tether/surfacebase/medical/resleeving)
"adm" = (
@@ -2263,6 +2314,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/resleeving)
"ads" = (
@@ -2270,6 +2324,10 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/resleeving)
"adt" = (
@@ -2414,6 +2472,7 @@
/obj/structure/flora/skeleton{
name = "\proper Sheb"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/breakroom)
"adK" = (
@@ -2850,6 +2909,7 @@
"aes" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/centralhall)
"aet" = (
@@ -3304,6 +3364,9 @@
dir = 4
},
/obj/machinery/door/firedoor/glass,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/resleeving)
"afh" = (
@@ -4502,6 +4565,7 @@
/obj/machinery/door/firedoor/glass/hidden/steel{
dir = 1
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/breakroom)
"agY" = (
@@ -4534,6 +4598,7 @@
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/centralhall)
"ahb" = (
@@ -14447,6 +14512,7 @@
pixel_x = 5;
pixel_y = 29
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/breakroom)
"axw" = (
@@ -32800,6 +32866,7 @@
/obj/effect/floor_decal/corner/paleblue/diagonal,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/breakroom)
"cMd" = (
@@ -33044,6 +33111,10 @@
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/ai)
+"fDK" = (
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/techfloor,
+/area/maintenance/lower/north)
"fIS" = (
/obj/effect/floor_decal/corner/paleblue/diagonal,
/obj/structure/table/glass,
@@ -33532,6 +33603,21 @@
},
/turf/simulated/floor/tiled/techfloor,
/area/ai_upload_foyer)
+"kvN" = (
+/obj/effect/floor_decal/borderfloor{
+ dir = 1
+ },
+/obj/structure/cable{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/turf/simulated/floor/tiled/techmaint,
+/area/tether/surfacebase/surface_two_hall)
"kAa" = (
/obj/machinery/porta_turret/ai_defense,
/obj/effect/floor_decal/techfloor{
@@ -33844,6 +33930,10 @@
},
/turf/simulated/floor/plating,
/area/maintenance/lower/atmos)
+"nyJ" = (
+/obj/structure/disposalpipe/segment,
+/turf/simulated/wall,
+/area/tether/surfacebase/medical/breakroom)
"nAh" = (
/obj/structure/table/standard,
/obj/item/weapon/aiModule/asimov,
@@ -33893,6 +33983,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/table/glass,
/obj/item/weapon/deck/cah,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/breakroom)
"nSl" = (
@@ -34184,6 +34275,16 @@
"rlN" = (
/turf/simulated/floor/tiled/techfloor/grid,
/area/ai)
+"rnx" = (
+/obj/effect/floor_decal/borderfloor,
+/obj/effect/floor_decal/corner/green/border,
+/obj/structure/disposalpipe/sortjunction/flipped{
+ dir = 4;
+ name = "Resleeving";
+ sortType = "Resleeving"
+ },
+/turf/simulated/floor/tiled/techmaint,
+/area/tether/surfacebase/surface_two_hall)
"roB" = (
/obj/structure/cable{
d1 = 1;
@@ -34448,6 +34549,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techfloor,
/area/maintenance/lower/north)
"tfK" = (
@@ -34605,6 +34707,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/table/glass,
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/breakroom)
"usS" = (
@@ -34645,6 +34748,11 @@
},
/turf/simulated/floor/bluegrid,
/area/ai)
+"uDI" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/hidden/universal,
+/turf/simulated/wall,
+/area/tether/surfacebase/medical/resleeving)
"uFL" = (
/obj/structure/railing{
dir = 1
@@ -35049,6 +35157,7 @@
/obj/machinery/light{
dir = 4
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techfloor,
/area/maintenance/lower/north)
"xWd" = (
@@ -45874,7 +45983,7 @@ aab
ahc
abK
abU
-abU
+uDI
acE
adj
adX
@@ -47452,17 +47561,17 @@ unM
nPO
axv
adJ
-ajG
-anC
+nyJ
+fDK
sZp
-anC
-anC
+fDK
+fDK
xSO
-anC
-anC
-axp
-ayd
-ayI
+fDK
+fDK
+kvN
+azC
+rnx
azc
azI
aAk
diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm
index d8479775f4..be5642fd3b 100644
--- a/maps/tether/tether-03-surface3.dmm
+++ b/maps/tether/tether-03-surface3.dmm
@@ -5858,6 +5858,10 @@
},
/obj/effect/floor_decal/borderfloor/corner2,
/obj/effect/floor_decal/corner/lightgrey/bordercorner2,
+/obj/structure/disposalpipe/segment{
+ dir = 8;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled,
/area/tether/surfacebase/surface_three_hall)
"aiH" = (
@@ -5872,6 +5876,11 @@
d2 = 2;
icon_state = "1-2"
},
+/obj/structure/disposalpipe/tagger{
+ dir = 2;
+ name = "package tagger - Resleeving";
+ sort_tag = "Resleeving"
+ },
/turf/simulated/floor/tiled,
/area/crew_quarters/recreation_area_restroom)
"aiI" = (
@@ -10493,6 +10502,10 @@
d2 = 8;
icon_state = "0-8"
},
+/obj/machinery/disposal/wall/cleaner,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
/turf/simulated/floor/tiled/white,
/area/crew_quarters/recreation_area_restroom)
"aqE" = (
@@ -13048,6 +13061,10 @@
d2 = 2;
icon_state = "1-2"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled,
/area/tether/surfacebase/surface_three_hall)
"avk" = (
@@ -16464,6 +16481,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/wood,
/area/crew_quarters/bar)
"aAG" = (
@@ -16473,6 +16493,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/wood,
/area/crew_quarters/bar)
"aAH" = (
@@ -21035,6 +21058,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/wood,
/area/crew_quarters/bar)
"aIg" = (
@@ -22194,6 +22220,9 @@
icon_state = "1-2"
},
/obj/structure/disposalpipe/segment,
+/obj/machinery/light{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/tether/surfacebase/shuttle_pad)
"aKj" = (
@@ -22265,7 +22294,9 @@
/turf/simulated/floor/carpet/turcarpet,
/area/crew_quarters/bar)
"aKr" = (
-/obj/structure/disposalpipe/segment,
+/obj/structure/disposalpipe/junction{
+ dir = 1
+ },
/turf/simulated/floor/wood,
/area/crew_quarters/bar)
"aKs" = (
@@ -27946,6 +27977,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 1
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/wood,
/area/crew_quarters/bar)
"aVx" = (
@@ -32910,6 +32942,11 @@
pixel_x = -28;
pixel_y = 29
},
+/obj/structure/disposalpipe/tagger{
+ dir = 2;
+ name = "package tagger - Resleeving";
+ sort_tag = "Resleeving"
+ },
/turf/simulated/floor/tiled/white,
/area/crew_quarters/barrestroom)
"beh" = (
@@ -33532,6 +33569,9 @@
"bfl" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/manifold/hidden/supply,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/wood,
/area/crew_quarters/bar)
"bfn" = (
@@ -33616,6 +33656,9 @@
d2 = 4;
icon_state = "1-4"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/wood,
/area/crew_quarters/bar)
"bfu" = (
@@ -34021,6 +34064,10 @@
name = "north bump";
pixel_y = 24
},
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/wood,
/area/crew_quarters/bar)
"bgk" = (
@@ -34384,6 +34431,9 @@
d2 = 8;
icon_state = "4-8"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/wood,
/area/crew_quarters/bar)
"bgS" = (
@@ -34476,6 +34526,7 @@
dir = 4
},
/obj/effect/floor_decal/techfloor,
+/obj/machinery/light,
/turf/simulated/floor/tiled/techfloor,
/area/crew_quarters/sleep/cryo)
"bhc" = (
@@ -34609,11 +34660,9 @@
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/surgery2)
"bhp" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 4
- },
+/obj/structure/disposalpipe/segment,
/obj/machinery/light{
- dir = 8
+ dir = 4
},
/turf/simulated/floor/tiled,
/area/tether/surfacebase/southhall)
@@ -37171,6 +37220,10 @@
d2 = 8;
icon_state = "1-8"
},
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/white,
/area/crew_quarters/barrestroom)
"bnF" = (
@@ -39686,6 +39739,7 @@
/obj/machinery/door/airlock{
name = "Unisex Restrooms"
},
+/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/techmaint,
/area/crew_quarters/barrestroom)
"ioG" = (
@@ -41397,6 +41451,12 @@
},
/turf/simulated/floor/wood,
/area/crew_quarters/recreation_area)
+"ome" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/simulated/floor/tiled,
+/area/tether/surfacebase/southhall)
"ooM" = (
/obj/effect/floor_decal/steeldecal/monofloor{
dir = 1
@@ -41429,6 +41489,10 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9
},
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/white,
/area/crew_quarters/recreation_area_restroom)
"oqz" = (
@@ -42132,6 +42196,9 @@
icon_state = "1-2"
},
/obj/structure/disposalpipe/segment,
+/obj/machinery/light{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/tether/surfacebase/shuttle_pad)
"qze" = (
@@ -42754,6 +42821,18 @@
},
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/triage)
+"sJY" = (
+/obj/effect/floor_decal/fancy_shuttle{
+ fancy_shuttle_tag = "tourbus";
+ name = "tourbus"
+ },
+/obj/structure/cable/green{
+ dir = 1;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/yellow,
+/turf/simulated/floor/tiled,
+/area/shuttle/tourbus/general)
"sLa" = (
/obj/machinery/firealarm{
layer = 3.3;
@@ -42837,6 +42916,15 @@
},
/turf/simulated/floor/tiled,
/area/tether/surfacebase/public_garden_three)
+"sUg" = (
+/obj/machinery/disposal/wall/cleaner{
+ dir = 1
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/turf/simulated/floor/tiled/white,
+/area/crew_quarters/barrestroom)
"sVC" = (
/obj/machinery/door/firedoor/glass/hidden/shuttle,
/obj/machinery/door/blast/shuttle/open{
@@ -42936,6 +43024,23 @@
},
/turf/simulated/floor/tiled,
/area/rnd/research/researchdivision)
+"twM" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/disposalpipe/junction{
+ dir = 4
+ },
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/tiled,
+/area/tether/surfacebase/surface_three_hall)
"txo" = (
/obj/structure/cable/green{
d1 = 2;
@@ -53287,7 +53392,7 @@ amw
amw
akZ
apr
-apQ
+twM
aiG
afj
aqD
@@ -55885,7 +55990,7 @@ aXa
aXa
kcC
eGv
-aXa
+sJY
fEX
gCZ
ykY
@@ -57178,8 +57283,8 @@ qbo
bhi
bhm
fsd
-bhp
-beU
+qbo
+ome
beU
gRG
laB
@@ -57459,7 +57564,7 @@ qvs
bgm
aPM
ely
-hId
+bhp
jCE
hId
bhq
@@ -60845,7 +60950,7 @@ bgH
asX
aGK
qum
-aTE
+sUg
aGK
bfM
aGK
diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm
index 91ffee3d58..749e3f0c21 100644
--- a/maps/tether/tether-05-station1.dmm
+++ b/maps/tether/tether-05-station1.dmm
@@ -1891,6 +1891,9 @@
/obj/structure/cable/green{
icon_state = "2-4"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/tether/station/restroom)
"adk" = (
@@ -1999,6 +2002,9 @@
d2 = 8;
icon_state = "4-8"
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/tether/station/restroom)
"adr" = (
@@ -2366,6 +2372,26 @@
},
/turf/simulated/floor/tiled/white,
/area/tether/station/dock_two)
+"adP" = (
+/obj/effect/floor_decal/corner/lightgrey{
+ dir = 9
+ },
+/obj/effect/floor_decal/corner/lightgrey{
+ dir = 6
+ },
+/obj/effect/floor_decal/steeldecal/steel_decals9,
+/obj/effect/floor_decal/steeldecal/steel_decals9{
+ dir = 4
+ },
+/obj/effect/floor_decal/steeldecal/steel_decals9{
+ dir = 1
+ },
+/obj/effect/floor_decal/steeldecal/steel_decals9{
+ dir = 8
+ },
+/obj/machinery/vending/fitness,
+/turf/simulated/floor/tiled/monotile,
+/area/quartermaster/foyer)
"adQ" = (
/obj/machinery/computer/power_monitor{
dir = 4;
@@ -2394,6 +2420,24 @@
},
/turf/simulated/floor/tiled,
/area/engineering/atmos/backup)
+"adT" = (
+/obj/effect/floor_decal/borderfloor{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/lightgrey/border{
+ dir = 8
+ },
+/obj/effect/floor_decal/steeldecal/steel_decals7{
+ dir = 5
+ },
+/obj/effect/floor_decal/steeldecal/steel_decals7{
+ dir = 6
+ },
+/obj/machinery/camera/network/tether{
+ dir = 4
+ },
+/turf/simulated/floor/tiled,
+/area/quartermaster/foyer)
"adU" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
@@ -2465,6 +2509,16 @@
/obj/machinery/atmospherics/unary/vent_pump/on,
/turf/simulated/floor/tiled/techmaint,
/area/engineering/engine_smes)
+"aec" = (
+/obj/effect/floor_decal/borderfloor{
+ dir = 10
+ },
+/obj/effect/floor_decal/corner/lightgrey/border{
+ dir = 10
+ },
+/obj/structure/closet/emcloset,
+/turf/simulated/floor/tiled,
+/area/quartermaster/foyer)
"aee" = (
/obj/machinery/atmospherics/pipe/simple/hidden/universal,
/obj/structure/railing{
@@ -5854,6 +5908,12 @@
/obj/structure/sink{
pixel_y = 20
},
+/obj/machinery/disposal/wall/cleaner{
+ dir = 8
+ },
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
/turf/simulated/floor/tiled/white,
/area/tether/station/restroom)
"amJ" = (
@@ -11273,6 +11333,11 @@
/obj/structure/sink{
pixel_y = 20
},
+/obj/structure/disposalpipe/tagger{
+ dir = 4;
+ name = "package tagger - Resleeving";
+ sort_tag = "Resleeving"
+ },
/turf/simulated/floor/tiled/white,
/area/tether/station/restroom)
"aDR" = (
@@ -11633,6 +11698,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled/white,
/area/tether/station/restroom)
"aFJ" = (
@@ -17393,7 +17461,6 @@
/obj/effect/floor_decal/steeldecal/steel_decals7{
dir = 6
},
-/obj/structure/disposalpipe/segment,
/obj/structure/cable/green{
d1 = 4;
d2 = 8;
@@ -17405,6 +17472,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
+/obj/structure/disposalpipe/junction,
/turf/simulated/floor/tiled,
/area/hallway/station/atrium)
"dzT" = (
@@ -18870,24 +18938,6 @@
},
/turf/simulated/floor/tiled/steel,
/area/shuttle/excursion/cargo)
-"fmg" = (
-/obj/effect/floor_decal/borderfloor{
- dir = 8
- },
-/obj/effect/floor_decal/corner/lightgrey/border{
- dir = 8
- },
-/obj/effect/floor_decal/steeldecal/steel_decals7{
- dir = 5
- },
-/obj/effect/floor_decal/steeldecal/steel_decals7{
- dir = 6
- },
-/obj/machinery/camera/network/tether{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/maintenance/cargo)
"fpk" = (
/turf/simulated/floor/airless,
/area/tether/outpost/solars_outside{
@@ -29112,6 +29162,10 @@
/obj/machinery/light/small{
dir = 8
},
+/obj/structure/disposalpipe/segment{
+ dir = 1;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/white,
/area/tether/station/restroom)
"oRO" = (
@@ -29789,6 +29843,10 @@
/obj/machinery/vending/wallmed1/public{
pixel_y = 28
},
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
/turf/simulated/floor/tiled/white,
/area/tether/station/restroom)
"pOc" = (
@@ -30051,16 +30109,6 @@
/obj/machinery/atmospherics/unary/vent_pump/on,
/turf/simulated/floor/tiled,
/area/quartermaster/belterdock/gear)
-"qfK" = (
-/obj/effect/floor_decal/borderfloor{
- dir = 10
- },
-/obj/effect/floor_decal/corner/lightgrey/border{
- dir = 10
- },
-/obj/structure/closet/emcloset,
-/turf/simulated/floor/tiled,
-/area/maintenance/cargo)
"qgR" = (
/obj/machinery/access_button{
command = "cycle_interior";
@@ -33068,26 +33116,6 @@
},
/turf/simulated/floor/tiled,
/area/hallway/station/atrium)
-"tvd" = (
-/obj/effect/floor_decal/corner/lightgrey{
- dir = 9
- },
-/obj/effect/floor_decal/corner/lightgrey{
- dir = 6
- },
-/obj/effect/floor_decal/steeldecal/steel_decals9,
-/obj/effect/floor_decal/steeldecal/steel_decals9{
- dir = 4
- },
-/obj/effect/floor_decal/steeldecal/steel_decals9{
- dir = 1
- },
-/obj/effect/floor_decal/steeldecal/steel_decals9{
- dir = 8
- },
-/obj/machinery/vending/fitness,
-/turf/simulated/floor/tiled/monotile,
-/area/maintenance/cargo)
"txf" = (
/obj/effect/floor_decal/industrial/warning{
dir = 4
@@ -46888,10 +46916,10 @@ aYt
agw
air
aAw
-tUh
-tvd
-fmg
-qfK
+bZv
+adP
+adT
+aec
aAD
oUP
mFS
diff --git a/sound/effects/chop.ogg b/sound/effects/chop.ogg
new file mode 100644
index 0000000000..59c6d99267
Binary files /dev/null and b/sound/effects/chop.ogg differ
diff --git a/sound/effects/snort.ogg b/sound/effects/snort.ogg
new file mode 100644
index 0000000000..6cb5de712a
Binary files /dev/null and b/sound/effects/snort.ogg differ
diff --git a/tgui/packages/tgui/interfaces/VorePanel.js b/tgui/packages/tgui/interfaces/VorePanel.js
index 1334e93374..ebb03d86b3 100644
--- a/tgui/packages/tgui/interfaces/VorePanel.js
+++ b/tgui/packages/tgui/interfaces/VorePanel.js
@@ -430,7 +430,7 @@ const VoreSelectedBellyOptions = (props, context) => {