diff --git a/GainStation13/code/clothing/gloves.dm b/GainStation13/code/clothing/gloves.dm
new file mode 100644
index 0000000000..23b760d049
--- /dev/null
+++ b/GainStation13/code/clothing/gloves.dm
@@ -0,0 +1,15 @@
+// GS13 - Port CE Gloves
+/obj/item/clothing/gloves/color/yellow/ce //funky looking, basically combat gloves
+ desc = "Special Insulated gloves with pricy thermal shielding normally only found in combat gloves."
+ name = "Chief Engineer Insulated Gloves"
+ icon = 'GainStation13/icons/obj/clothing/gloves.dmi'
+ icon_state = "ce_insuls"
+ item_state = "blackgloves"
+ siemens_coefficient = 0
+ permeability_coefficient = 0.05
+ strip_delay = 80
+ cold_protection = HANDS
+ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
+ heat_protection = HANDS
+ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
+ resistance_flags = NONE
diff --git a/GainStation13/code/clothing/haydee_suit.dm b/GainStation13/code/clothing/haydee_suit.dm
index f293f6c13d..266a5892f9 100644
--- a/GainStation13/code/clothing/haydee_suit.dm
+++ b/GainStation13/code/clothing/haydee_suit.dm
@@ -4,7 +4,6 @@
icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
mob_overlay_icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
icon_state = "haydee_helmet"
- item_state = "item_haydee_helmet"
armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 0, "bio" = 0, "rad" = 25, "fire" = 25, "acid" = 25)
slowdown = 0
mutantrace_variation = NONE
@@ -13,9 +12,10 @@
/obj/item/clothing/suit/space/hardsuit/engine/haydee
name = "Haydee Suit"
desc = "A strangely voluptous suit. Offers little to no protection. It also appears to have minor flab-compressing properties."
+ icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
mob_overlay_icon = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
anthro_mob_worn_overlay = 'GainStation13/icons/obj/clothing/haydee_modular.dmi'
- icon_state = "haydee_suit"
+ icon_state = "haydee_suit1"
item_state = "item_haydee"
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 25, "fire" = 5, "acid" = 5)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals)
diff --git a/GainStation13/code/datums/traits.dm b/GainStation13/code/datums/traits.dm
index ef7e361a9c..89484a7b25 100644
--- a/GainStation13/code/datums/traits.dm
+++ b/GainStation13/code/datums/traits.dm
@@ -125,3 +125,26 @@
mob_trait = TRAIT_DISTANT
value = 0
medical_record_text = "Patient cares little with or dislikes being touched."
+
+/datum/quirk/vegetarian
+ name = "Vegetarian"
+ desc = "You find the idea of eating meat morally and physically repulsive."
+ value = 0
+ gain_text = "You feel repulsion at the idea of eating meat."
+ lose_text = "You feel like eating meat isn't that bad."
+ medical_record_text = "Patient reports a vegetarian diet."
+
+/datum/quirk/vegetarian/add()
+ var/mob/living/carbon/human/H = quirk_holder
+ var/datum/species/species = H.dna.species
+ species.liked_food &= ~MEAT
+ species.disliked_food |= MEAT
+
+/datum/quirk/vegetarian/remove()
+ var/mob/living/carbon/human/H = quirk_holder
+ if(H)
+ var/datum/species/species = H.dna.species
+ if(initial(species.liked_food) & MEAT)
+ species.liked_food |= MEAT
+ else
+ species.disliked_food &= ~MEAT
diff --git a/GainStation13/code/game/donator.dm b/GainStation13/code/game/donator.dm
index b7b955b6e5..0300ac2dcf 100644
--- a/GainStation13/code/game/donator.dm
+++ b/GainStation13/code/game/donator.dm
@@ -9,7 +9,7 @@
name = "GATO Badge - Correspondent"
category = LOADOUT_CATEGORY_DONATOR
path = /obj/item/clothing/accessory/medal/gato_badge/middleman
- ckeywhitelist = list("johnjimjim", "sonoida", "yeeny", "Not Number")
+ ckeywhitelist = list("johnjimjim", "sonoida", "yeeny", "Not Number", "Not_Number", "NotNumber",)
/datum/gear/halsey_overcoat
name = "Halsey's Commander Overcoat"
@@ -29,12 +29,6 @@
path = /obj/item/gun/ballistic/automatic/toy/pistol/haydee
ckeywhitelist = list("lumu", "sonoida")
-//sorry for defining this here, just thought it'd be more convenient
-/obj/item/clothing/suit/chloe/halsey //sorry to whoever chloe is, but that coat is far too badass not to be used
- name = "Halsey's Commander Overcoat"
- desc = "A Ginormous red overcoat that looks fit for a commander. Has a tag on it that reads: 'Property of Halsey Harmonten. Please return if lost!'"
- armor = list("melee" = 20, "bullet" = 20, "laser" = 0,"energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 0) //worn by a captain player, might as well recompensate not wearing the carapace
-
/datum/gear/rose_plush
name = "Dezir Rose Plush"
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
@@ -53,10 +47,6 @@
path = /obj/item/clothing/suit/storage/blueshield/grimmy
ckeywhitelist = list("bbgrimmy")
-/obj/item/clothing/suit/storage/blueshield/grimmy
- name = "Overcoat of the Destitute"
- desc = "Welcome all to the everlasting all-time low. Please put your hands together for the ever-failing one man show: Domino!"
-
/datum/gear/tarek_gps
name = "Tarek's GPS"
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
@@ -69,10 +59,6 @@
path = /obj/item/crowbar/bronze/glaug
ckeywhitelist = list("happytpr")
-/obj/item/crowbar/bronze/glaug
- name = "Milwaukee Pocket Crowbar"
- desc = "Much more expensive. Still serves the same function."
-
/datum/gear/fatfang
name = "Fattening Fangs Injector"
category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
@@ -85,15 +71,6 @@
path = /obj/item/storage/belt/utility
ckeywhitelist = list("killmewitha22", "Killmewitha22", "KILLMEWITHA22", "sonoida")
-/obj/item/toy/sword/chloesabre/halsey
- name = "Halsey's Sabre"
- desc = "An elegant weapon, similar in design to the Captain's Sabre, but with a platinum hilt and an adamantine blade. the hilt has an engraved hyena on it."
- force = 16
-
-/obj/item/gun/ballistic/revolver/mateba/moka
- name = "\improper Custom Unica 6 revolver"
- desc = "An elegant and ornate revolver belonging to a certain hellcat commander. There are some words carved on its side: 'Dura Lex, Sed Lex'"
-
//metha rossi you fat hog
/datum/gear/wgspell_add
@@ -114,18 +91,44 @@
path = /obj/item/book/granter/spell/fattening/steal
ckeywhitelist = list("sonoida", "themrsky", "Not Number")
-
/datum/gear/white_eyepatch_cabal
name = "Cabal's Eyepatch"
category = LOADOUT_CATEGORY_GLASSES
path = /obj/item/clothing/glasses/eyepatch/cabal
ckeywhitelist = list("spess_lizurd", "SPESS LIZURD", "spess lizurd", "SPESS_LIZURD", "spesslizurd", "sonoida")
-/datum/gear/white_eyepatch
+/datum/gear/white_eyepatch //accessible to anyone, at donator's request
name = "White Eyepatch"
category = LOADOUT_CATEGORY_GLASSES
path = /obj/item/clothing/glasses/eyepatch/white
+/datum/gear/metis_plush
+ name = "Metis Plush"
+ category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
+ path = /obj/item/toy/plush/gs13/metis
+ ckeywhitelist = list("paraillegal", "Paraillegal")
+
+/datum/gear/wheelys
+ name = "Wheely-Heels"
+ category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
+ path = /obj/item/clothing/shoes/wheelys
+ ckeywhitelist = list("colorlessspy", "Colorlessspy")
+
+/datum/gear/crowbars_plush
+ name = "Crowbars Plush"
+ category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
+ path = /obj/item/toy/plush/gs13/crowbars
+ ckeywhitelist = list("M16nPregnant", "m16npregnant" )
+
+/datum/gear/sams_welder
+ name = "Sam's Unlucky Welder"
+ category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
+ path = /obj/item/weldingtool/bronze
+ ckeywhitelist = list("almaniak", "Almaniak", "AlManiak")
+
+//
+//item presets for donator items
+//
/obj/item/clothing/glasses/eyepatch/white
name = "White eyepatch"
desc = "Smells faintly of medicine and headaches."
@@ -138,14 +141,24 @@
icon_state = "eyepatch_white"
item_state = "eyepatch_white"
-/datum/gear/metis_plush
- name = "Metis Plush"
- category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
- path = /obj/item/toy/plush/gs13/metis
- ckeywhitelist = list("paraillegal")
+/obj/item/toy/sword/chloesabre/halsey
+ name = "Halsey's Sabre"
+ desc = "An elegant weapon, similar in design to the Captain's Sabre, but with a platinum hilt and an adamantine blade. the hilt has an engraved hyena on it."
+ force = 16
-/datum/gear/wheelys
- name = "Wheely-Heels"
- category = LOADOUT_SUBCATEGORY_BACKPACK_TOYS
- path = /obj/item/clothing/shoes/wheelys
- ckeywhitelist = list("colorlessspy")
+/obj/item/gun/ballistic/revolver/mateba/moka
+ name = "\improper Custom Unica 6 revolver"
+ desc = "An elegant and ornate revolver belonging to a certain hellcat commander. There are some words carved on its side: 'Dura Lex, Sed Lex'"
+
+/obj/item/clothing/suit/chloe/halsey //sorry to whoever chloe is, but that coat is far too badass not to be used
+ name = "Halsey's Commander Overcoat"
+ desc = "A Ginormous red overcoat that looks fit for a commander. Has a tag on it that reads: 'Property of Halsey Harmonten. Please return if lost!'"
+ armor = list("melee" = 20, "bullet" = 20, "laser" = 0,"energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 0) //worn by a captain player, might as well recompensate not wearing the carapace
+
+/obj/item/clothing/suit/storage/blueshield/grimmy
+ name = "Overcoat of the Destitute"
+ desc = "Welcome all to the everlasting all-time low. Please put your hands together for the ever-failing one man show: Domino!"
+
+/obj/item/crowbar/bronze/glaug
+ name = "Milwaukee Pocket Crowbar"
+ desc = "Much more expensive. Still serves the same function."
diff --git a/GainStation13/code/game/objects/effects/decals/cleanable/misc.dm b/GainStation13/code/game/objects/effects/decals/cleanable/misc.dm
new file mode 100644
index 0000000000..cc587892a5
--- /dev/null
+++ b/GainStation13/code/game/objects/effects/decals/cleanable/misc.dm
@@ -0,0 +1,18 @@
+
+//GS13 glitters. Making the subtle variants their own subtypes, as some use the fake gas effects to make a room look like it's full of gas, when it isnt.
+/obj/effect/decal/cleanable/glitter/pink_subtle
+ name = "faint pink glitter"
+ icon = 'GainStation13/icons/effects/atmospherics.dmi'
+ icon_state = "glitter"
+ color = "#9e0089"
+
+/obj/effect/decal/cleanable/glitter/white_subtle
+ name = "faint white glitter"
+ icon = 'GainStation13/icons/effects/atmospherics.dmi'
+ icon_state = "glitter"
+
+/obj/effect/decal/cleanable/glitter/blue_subtle
+ name = "faint blue glitter"
+ icon = 'GainStation13/icons/effects/atmospherics.dmi'
+ icon_state = "glitter"
+ color = "#2dd6ff"
diff --git a/GainStation13/code/game/objects/structures/barsigns.dm b/GainStation13/code/game/objects/structures/barsigns.dm
new file mode 100644
index 0000000000..78b8d43b56
--- /dev/null
+++ b/GainStation13/code/game/objects/structures/barsigns.dm
@@ -0,0 +1,7 @@
+////////////// GS13 BARSIGNS ///////////////
+// Because modularity, yo
+
+/datum/barsign/the_busted_belt //gs13
+ name = "The Busted Belt"
+ icon = "thebustedbelt" //...I dont think this survived the rebase, oops.
+ desc = "GATO is not liable for any pieces of broken wardrobe."
diff --git a/GainStation13/code/game/plushes.dm b/GainStation13/code/game/plushes.dm
index 0e71e5ee81..a349015116 100644
--- a/GainStation13/code/game/plushes.dm
+++ b/GainStation13/code/game/plushes.dm
@@ -76,3 +76,8 @@
desc = "A plush of black-furred nerdy goat."
icon_state = "metis"
attack_verb = list("squished", "goated", "baah'd")
+
+/obj/item/toy/plush/gs13/crowbars
+ desc = "A plush of a silly-eyed xeno seccie."
+ icon_state = "crowbars"
+ attack_verb = list("squished", "crowbared", "beno'd")
diff --git a/GainStation13/code/machinery/feeding_tube_industrial.dm b/GainStation13/code/machinery/feeding_tube_industrial.dm
index 65f6d42700..a79ee2b81f 100644
--- a/GainStation13/code/machinery/feeding_tube_industrial.dm
+++ b/GainStation13/code/machinery/feeding_tube_industrial.dm
@@ -25,6 +25,7 @@
/// How many items we can push per-pump.
var/pump_limit = 5
+
/obj/structure/disposaloutlet/industrial_feeding_tube/Initialize(mapload)
. = ..()
@@ -38,6 +39,24 @@
anchored = TRUE
welded = TRUE //Make it functional
+/obj/structure/disposaloutlet/industrial_feeding_tube/examine(mob/user)
+ . = ..()
+ if(LAZYLEN(pump_stuff))
+ switch(LAZYLEN(pump_stuff))
+ if(1)
+ . += "It seems to have something inside"
+ if(2 to 20)
+ . += "It seems to have some stuff inside"
+ if(21 to 50)
+ . += "It seems to be rather full of stuff!"
+ if(51 to 200)
+ . += "It's walls are bulging out with tons of stuff packed inside!!"
+ else
+ . += "The whole machine is shuddering as it strains to contain hundreds of objects!"
+ if(clogged)
+ . += "It seems to be clogged with stuff!"
+
+
/obj/structure/disposaloutlet/industrial_feeding_tube/CheckParts(list/parts_list)
..()
pump_limit = 0
@@ -48,6 +67,7 @@
pump_limit = ceil(pump_limit) //Only whole numbers
+
/obj/structure/disposaloutlet/industrial_feeding_tube/deconstruct(disassembled)
if(!(flags_1 & NODECONSTRUCT_1))
new /obj/item/stack/sheet/metal(loc, 5)
@@ -78,24 +98,23 @@
/obj/structure/disposaloutlet/industrial_feeding_tube/MouseDrop(mob/living/target)
. = ..()
- if(!usr.canUseTopic(src, BE_CLOSE)) // iscarbon() so that xenos/wendigos(?) can do feeding stuff maybe. Maybe.
+ if(!usr.canUseTopic(src, BE_CLOSE))
return
if(!welded)
to_chat(usr, "You need to weld down \the [src] before you can use it.")
return
+ if(attached)
+ attached.visible_message("\The [src]'s tube is removed from [attached].", "The tube is removed from you.")
+ detach_tube(FALSE)
+ return
if(!isliving(target))
return
- if(attached)
- attached.visible_message("[attached] is detached from [src].")
- attached = null
- update_icon()
- return
- if(iscarbon(target))
+ if(iscarbon(target)) // iscarbon() so that xenos/wendigos(?) can do feeding stuff maybe. Maybe.
var/mob/living/carbon/feedee = target
- if(HAS_TRAIT(feedee, TRAIT_TRASHCAN))
- var/food_dump = input(usr, "Where do you shove the tube? (cancel for to just feed normally)", "Select belly") as null|anything in feedee.vore_organs
+ if(HAS_TRAIT(feedee, TRAIT_TRASHCAN) || (feedee.vore_flags & FEEDING))
+ var/food_dump = input(usr, "Where do you shove the tube? (cancel to just feed normally)", "Select belly") as null|anything in feedee.vore_organs
if(food_dump && isbelly(food_dump))
// Best to be safe with this thing. Since you can eat pretty much anythign with it...
// Including People, Intentionally or otherwise.
@@ -105,38 +124,56 @@
to_chat(usr, "[feedee] doesnt want to be fed by \the [src]...")
return
- output_dest = food_dump //Attach to vorebelly
- attached = feedee
-
- update_icon()
- START_PROCESSING(SSobj, src)
- face_atom(feedee)
+ attach_tube(feedee, food_dump) // Attach in Vore Mode
return
+
//Either we arn't attaching to vorebelly, or we arnt able to. Let's try to feed them normally!
- if(usr != feedee) //
+ if(usr != feedee)
var/feedeePrefCheck = alert(feedee, "[usr] is attempting to shove \the [src]'s tube into your mouth! Do you want this?", "THE TUBE", "Yes!!", "No!")
if(feedeePrefCheck != "Yes!!")
to_chat(usr, "[feedee] doesnt want to be fed by \the [src]...")
return
- output_dest = feedee //Attach normally
- attached = feedee
-
- update_icon()
- START_PROCESSING(SSobj, src)
- face_atom(feedee)
+ attach_tube(feedee) // Attach normally
return
-/obj/structure/disposaloutlet/industrial_feeding_tube/process()
- if(!attached)
- return PROCESS_KILL
+/// Attaches the tube to the target. dest defaults to the target, if dest isnt defined
+/obj/structure/disposaloutlet/industrial_feeding_tube/proc/attach_tube(var/mob/living/target, var/dest = null, var/loud = TRUE)
+ if(!target)
+ return FALSE
+ if(dest)
+ output_dest = dest
+ else
+ output_dest = target
+ attached = target
+
+ if(loud)
+ if(isbelly(output_dest))
+ target.visible_message("\The [src]'s tube is shoved into [attached]!", "The tube is shoved directly into your [output_dest]!")
+ else
+ target.visible_message("\The [src]'s tube is shoved into [attached]!", "The tube is shoved directly into you!")
+
+ RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(check_target_dist))
+ update_icon()
+ face_atom(target)
+
+/obj/structure/disposaloutlet/industrial_feeding_tube/proc/detach_tube(var/loud = TRUE)
+ UnregisterSignal(attached, COMSIG_MOVABLE_MOVED)
+ if(loud)
+ attached.visible_message("[attached] is detached from [src].")
+ attached = null
+ output_dest = null
+ update_icon()
+
+
+/obj/structure/disposaloutlet/industrial_feeding_tube/proc/check_target_dist()
+ if(!attached) //oh no
+ UnregisterSignal()
if(!(get_dist(src, attached) <= 1 && isturf(attached.loc)))
- to_chat(attached, "The feeding hose is yanked out of you!")
- attached = null
- output_dest = null
- update_icon()
- return PROCESS_KILL
+ attached.visible_message("","The feeding hose is yanked out of you!")
+ detach_tube(FALSE)
+ return
face_atom(attached)
@@ -165,10 +202,9 @@
// expel the contents of the holder object, then delete it
// called when the holder exits the outlet
/obj/structure/disposaloutlet/industrial_feeding_tube/expel(obj/structure/disposalholder/H)
- var/clunkVol = LAZYLEN(H.contents)
if(H.hasmob) //Uh oh-
- clunkVol += 25
- playsound(src, H.hasmob ? "clang" : "clangsmall", clamp(clunkVol, 5, H.hasmob ? 50 : 25))
+ playsound(src, "clang", 100)
+ visible_message("\The [src] loudly clunks as something large enters it's intake!")
H.active = FALSE
H.vent_gas(get_turf(src))
if(clogged)
@@ -193,12 +229,14 @@
break
if(!pumping)
pumping = TRUE
+ playsound(src, 'GainStation13/sound/rakshasa/Corrosion3.ogg', 50, 1)
update_icon()
spawn(8)
pumping = FALSE
update_icon()
spawn(9) //Wait for the animation to finish
+
if(!output_dest || !attached) //We either arnt, or got disconnected by time stuff was about to splort out!
spew(this_pump, TRUE)
if(LAZYLEN(pump_stuff) && repeat)
@@ -251,13 +289,13 @@
if(is_type_in_list(I, item_vore_blacklist))
inedible += I
continue
- /*
+
if(isliving(AM))
var/mob/living/cutie = AM
- if(cutie.devourable != TRUE) //Do not eat this QT...
+ if(!(cutie.vore_flags & DEVOURABLE)) //Do not eat this QT...
inedible += cutie
continue
- */
+
fed_something = TRUE
AM.forceMove(output_dest)
@@ -267,7 +305,7 @@
// After everything, if we've pushed something, play the "rubber tube noise"
// It's technically an evil digestion sound from a snowflake shadekin, but it makes for a good tube sound. Thanks Verkie!
if(fed_something)
- playsound(attached.loc, 'v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg', rand(10,50), 1)
+ playsound(attached.loc, 'GainStation13/sound/rakshasa/Corrosion3.ogg', rand(50,70), 1)
if(LAZYLEN(pump_stuff) && repeat)
pump()
@@ -277,7 +315,7 @@
/obj/structure/disposaloutlet/industrial_feeding_tube/expel_holder(obj/structure/disposalholder/H, playsound=FALSE)
if(playsound)
- playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
+ playsound(src, 'sound/machines/hiss.ogg', 25, 0, 0)
if(!H)
return
@@ -290,10 +328,7 @@
/obj/structure/disposaloutlet/industrial_feeding_tube/attack_hand(mob/user)
. = ..()
if(attached)
- attached.visible_message("[attached] is detached from [src].")
- attached = null
- output_dest = null
- update_icon()
+ detach_tube()
return
/obj/structure/disposaloutlet/industrial_feeding_tube/attackby(obj/item/I, mob/living/user, params)
@@ -340,18 +375,32 @@
update_icon()
return
- if(TOOL_CROWBAR)
- if(!clogged)
- to_chat(user, "\The [src] doesnt seem to be clogged at the moment...")
- return TRUE
-
- user.visible_message("[user] starts to pry open the maintenance hatch of \the [src], attempting to unclog it...")
- if(do_after(user, 30, TRUE, src))
- user.visible_message("[user] unclogs \the [src]!")
- unclog()
- return
. = ..()
+/obj/structure/disposaloutlet/industrial_feeding_tube/crowbar_act(mob/living/user, obj/item/I)
+ if(!clogged)
+ to_chat(user, "\The [src] doesnt seem to be clogged at the moment...")
+ return TRUE
+ user.visible_message("[user] starts to pry open the maintenance hatch of \the [src], attempting to unclog it...")
+ I.play_tool_sound(src, 100)
+ if(I.use_tool(src, user, 30))
+ user.visible_message("[user] pries open the maintenance hatch on \the [src], unclogging it!")
+ unclog()
+ return TRUE
+
+
+// Plungers are a thing now, why not give them the ability to unclog?
+/obj/structure/disposaloutlet/industrial_feeding_tube/plunger_act(obj/item/plunger/P, mob/living/user, reinforced)
+ if(!clogged)
+ to_chat(user, "\The [src] doesnt seem to be clogged at the moment...")
+ return TRUE
+ user.visible_message("[user] starts to furiously plunge the tube of \the [src], attempting to unclog it...")
+ //I.play_tool_sound(src, 100) I dont think plungers have a use sound...
+ if(P.use_tool(src, user, 20)) //Plungers are slightly shorter because funny niche use
+ user.visible_message("[user] pries open the maintenance hatch on \the [src], unclogging it!")
+ unclog()
+ return
+
/obj/structure/disposaloutlet/industrial_feeding_tube/welder_act(mob/living/user, obj/item/I)
if(!I.tool_start_check(user, amount=0))
return
diff --git a/GainStation13/code/mechanics/calorite.dm b/GainStation13/code/mechanics/calorite.dm
index f058b3ef90..f4b7351946 100644
--- a/GainStation13/code/mechanics/calorite.dm
+++ b/GainStation13/code/mechanics/calorite.dm
@@ -1,6 +1,28 @@
/datum/material/calorite
name = "calorite"
sheet_type = /obj/item/stack/sheet/mineral/calorite
+ color = list(340/255, 150/255, 50/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0)
+ strength_modifier = 1.5
+ categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
+ beauty_modifier = 0.05
+ armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 1.15, ENERGY = 1.15, BOMB = 1, BIO = 1, RAD = 1, FIRE = 0.7, ACID = 1.1) // Same armor as gold.
+
+/datum/material/calorite/on_applied_obj(obj/source, amount, material_flags)
+ . = ..()
+ if(!(material_flags & MATERIAL_AFFECT_STATISTICS))
+ return
+
+ var/obj/source_obj = source
+ source_obj.damtype = FAT
+
+/datum/material/calorite/on_removed_obj(obj/source, material_flags)
+ if(!(material_flags & MATERIAL_AFFECT_STATISTICS))
+ return ..()
+
+ var/obj/source_obj = source
+ source_obj.damtype = initial(source_obj.damtype)
+ return ..()
+
/turf/closed/mineral/calorite //GS13
mineralType = /obj/item/stack/ore/calorite
@@ -33,13 +55,14 @@
GLOBAL_LIST_INIT(calorite_recipes, list ( \
new/datum/stack_recipe("Calorite tile", /obj/item/stack/tile/mineral/calorite, 1, 4, 20), \
- new/datum/stack_recipe("Fatty statue", /obj/structure/statue/calorite/fatty, 5, one_per_turf = 1, on_floor = 1),
- new/datum/stack_recipe("Calorite doors", /obj/structure/mineral_door/calorite, 5, one_per_turf = 1, on_floor = 1),
+ new/datum/stack_recipe("Calorite Ingots", /obj/item/ingot/calorite, time = 30), \
+ new/datum/stack_recipe("Fatty statue", /obj/structure/statue/calorite/fatty, 5, one_per_turf = 1, on_floor = 1),\
+ new/datum/stack_recipe("Calorite doors", /obj/structure/mineral_door/calorite, 5, one_per_turf = 1, on_floor = 1),\
))
-/obj/item/stack/sheet/mineral/calorite/Initialize(mapload, new_amount, merge = TRUE)
- recipes = GLOB.calorite_recipes
+/obj/item/stack/sheet/mineral/calorite/get_main_recipes()
. = ..()
+ . += GLOB.calorite_recipes
/obj/item/stack/tile/mineral/calorite //GS13
@@ -246,3 +269,5 @@ GLOBAL_LIST_INIT(calorite_recipes, list ( \
fatten()
. = ..()
+/obj/item/ingot/calorite
+ custom_materials = list(/datum/material/calorite=1500)
diff --git a/GainStation13/code/mechanics/transformation/food.dm b/GainStation13/code/mechanics/transformation/food.dm
new file mode 100644
index 0000000000..a84dae4f94
--- /dev/null
+++ b/GainStation13/code/mechanics/transformation/food.dm
@@ -0,0 +1,16 @@
+/obj/item/reagent_containers/food/snacks/proc/handle_tf(mob/living/eater)
+ var/datum/component/transformation_item/transformation_component = GetComponent(/datum/component/transformation_item)
+ if(!istype(transformation_component) || transformation_component.transfer_to_vore || (transformation_component.transformed_mob != src))
+ return FALSE
+
+ var/mob/living/food_mob = transformation_component.transformed_mob
+ if(!istype(food_mob) || !(food_mob?.vore_flags & DEVOURABLE) || (eater?.vore_flags & NO_VORE) || !istype(eater.vore_selected))
+ return FALSE
+
+ qdel(transformation_component)
+ var/obj/belly/vore_belly = eater.vore_selected
+ if(!vore_belly.nom_mob(food_mob,eater))
+ return FALSE
+
+ return TRUE
+
diff --git a/GainStation13/code/mechanics/transformation/mob_procs.dm b/GainStation13/code/mechanics/transformation/mob_procs.dm
new file mode 100644
index 0000000000..7b4fa13c5d
--- /dev/null
+++ b/GainStation13/code/mechanics/transformation/mob_procs.dm
@@ -0,0 +1,36 @@
+/mob/living/proc/get_tf_component()
+ var/obj/item/item_loc = loc
+ if(!istype(item_loc))
+ return FALSE
+
+ var/datum/component/transformation_item/transformation_component = item_loc.GetComponent(/datum/component/transformation_item)
+ if(!istype(transformation_component) || (transformation_component.transformed_mob != src))
+ return FALSE
+
+ return transformation_component
+
+/mob/living/proc/handle_transformation_ooc_escape()
+ var/datum/component/transformation_item/transformation_component = get_tf_component()
+ if(!transformation_component)
+ return FALSE
+
+ qdel(transformation_component)
+ return TRUE
+
+/mob/living/proc/attempt_to_escape_tf()
+ var/datum/component/transformation_item/transformation_component = get_tf_component()
+ if(!transformation_component)
+ return FALSE
+
+ if(!transformation_component.able_to_struggle_out)
+ to_chat(src, span_warning("You are unable to struggle out."))
+ return FALSE
+
+ to_chat(src, span_notice("You attempt to escape your transformation."))
+ if(!do_after(src, 60 SECONDS))
+ to_chat(src, span_warning("You fail to escape."))
+ return FALSE
+
+ qdel(transformation_component)
+ return TRUE
+
diff --git a/GainStation13/code/mechanics/transformation/transformation_component.dm b/GainStation13/code/mechanics/transformation/transformation_component.dm
new file mode 100644
index 0000000000..2a7462b38c
--- /dev/null
+++ b/GainStation13/code/mechanics/transformation/transformation_component.dm
@@ -0,0 +1,105 @@
+/datum/component/transformation_item
+ /// What mob do we currently have stuck in us?
+ var/mob/living/transformed_mob
+ /// Do we release the mob when the parent item is destroyed?
+ var/release_mob = TRUE
+ /// Is the mob able to speak as the item?
+ var/able_to_speak = FALSE
+ /// Is the mob able to emote as the item?
+ var/able_to_emote = FALSE
+ /// Does the object scale with the sprite size of the mob inside of it?
+ var/scale_object = TRUE
+ /// Show custom description.
+ var/show_that_object_is_tf = TRUE
+ /// Stored real name
+ var/stored_real_name = ""
+ /// Stored name
+ var/stored_name = ""
+ /// Is the component able to be removed?
+ var/stuck_on_item = FALSE
+ /// Is the person able to struggle out?
+ var/able_to_struggle_out = TRUE
+ /// Transfer to vore belly when eaten
+ var/transfer_to_vore = TRUE
+
+/datum/component/transformation_item/Initialize()
+ RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(examine))
+ RegisterSignal(parent, COMSIG_PARENT_QDELETING, PROC_REF(remove_mob))
+
+/datum/component/transformation_item/Destroy(force, silent)
+ remove_mob()
+ return ..()
+
+/datum/component/transformation_item/proc/examine(datum/source, mob/user, list/examine_list)
+ if(show_that_object_is_tf)
+ examine_list += span_notice("Something about [source] seems lifelike.")
+
+/datum/component/transformation_item/proc/register_mob(mob/living/mob_to_register)
+ var/atom/parent_atom = parent
+ if(!istype(mob_to_register))
+ return FALSE
+
+ transformed_mob = mob_to_register
+ stored_real_name = mob_to_register.real_name
+ stored_name = mob_to_register.name
+
+ // This is really dumb, but if it works, then maybe it is not dumb.
+ mob_to_register.real_name = parent_atom.name
+ mob_to_register.name = parent_atom.name
+
+ ADD_TRAIT(mob_to_register, TRAIT_TRANSFORMED, src)
+ ADD_TRAIT(mob_to_register, TRAIT_RESISTCOLD, src)
+ ADD_TRAIT(mob_to_register, TRAIT_RESISTLOWPRESSURE, src)
+ ADD_TRAIT(mob_to_register, TRAIT_LOWPRESSURECOOLING, src)
+
+ if(!able_to_speak)
+ ADD_TRAIT(mob_to_register, TRAIT_MUTE, src)
+
+ if(!able_to_emote)
+ ADD_TRAIT(mob_to_register, TRAIT_EMOTEMUTE, src)
+
+ // need to stop them from using radio headsets.
+ var/mob/living/carbon/human/human_mob = mob_to_register
+ if(istype(human_mob))
+ ADD_TRAIT(mob_to_register, TRAIT_PARALYSIS_L_ARM, src)
+ ADD_TRAIT(mob_to_register, TRAIT_PARALYSIS_R_ARM, src)
+ human_mob.update_disabled_bodyparts()
+
+ mob_to_register.forceMove(parent_atom)
+ if(scale_object)
+ var/target_size = mob_to_register.size_multiplier
+ var/matrix/new_matrix = new
+
+ new_matrix.Scale(target_size)
+ new_matrix.Translate(0,16 * (target_size-1))
+ parent_atom.transform = new_matrix
+
+/datum/component/transformation_item/proc/remove_mob()
+ if(!release_mob || !transformed_mob)
+ return FALSE
+
+ transformed_mob.real_name = stored_real_name
+ transformed_mob.name = stored_name
+
+ if(!able_to_speak)
+ REMOVE_TRAIT(transformed_mob, TRAIT_MUTE, src)
+
+ if(!able_to_emote)
+ REMOVE_TRAIT(transformed_mob, TRAIT_EMOTEMUTE, src)
+
+ REMOVE_TRAIT(transformed_mob, TRAIT_TRANSFORMED, src)
+ REMOVE_TRAIT(transformed_mob, TRAIT_RESISTCOLD, src)
+ REMOVE_TRAIT(transformed_mob, TRAIT_RESISTLOWPRESSURE, src)
+ REMOVE_TRAIT(transformed_mob, TRAIT_LOWPRESSURECOOLING, src)
+
+ var/mob/living/carbon/human/human_mob = transformed_mob
+ if(istype(human_mob))
+ REMOVE_TRAIT(human_mob, TRAIT_PARALYSIS_L_ARM, src)
+ REMOVE_TRAIT(human_mob, TRAIT_PARALYSIS_R_ARM, src)
+ human_mob.update_disabled_bodyparts()
+
+ var/atom/parent_atom = parent
+ transformed_mob.forceMove(parent_atom.loc)
+ if(scale_object)
+ parent_atom.transform = null
+
diff --git a/GainStation13/code/mechanics/transformation/transformation_item.dm b/GainStation13/code/mechanics/transformation/transformation_item.dm
new file mode 100644
index 0000000000..14475e89d7
--- /dev/null
+++ b/GainStation13/code/mechanics/transformation/transformation_item.dm
@@ -0,0 +1,116 @@
+/obj/item/transformation_item
+ name = "Handheld Transmogrifier"
+ desc = "a handheld device that is mysteriously able to turn people into objects. It can also be used to remove said transformations."
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "gizmo_scan"
+ item_state = "silencer"
+ lefthand_file = 'icons/mob/inhands/antag/abductor_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/antag/abductor_righthand.dmi'
+
+ /// What item are we wanting to TF people into?
+ var/obj/item/target_item
+ /// Do we want our transformed person to be able to speak as the object?
+ var/able_to_speak = TRUE
+ /// Do we want our transformed person to be able to emote as the object?
+ var/able_to_emote = TRUE
+ /// Do we want the item to scale?
+ var/scale_object = FALSE
+ /// Do we want to show that the object was once a person?
+ var/show_that_object_is_tf = TRUE
+ /// Is our captured person able to struggle out?
+ var/able_to_struggle_out = TRUE
+ /// Do we have any items we can't turn people into?
+ var/list/object_blacklist = list()
+
+/obj/item/transformation_item/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
+ . = ..()
+ var/obj/item/attacked_item = target
+ if(!proximity_flag || !istype(attacked_item))
+ return FALSE
+
+ var/datum/component/transformation_item/transformation_component = attacked_item.GetComponent(/datum/component/transformation_item)
+ if(istype(transformation_component) && !transformation_component.stuck_on_item)
+ qdel(transformation_component)
+ to_chat(user, span_notice("You dispel the current transformation for [attacked_item]."))
+ return
+
+ target_item = attacked_item
+ to_chat(user, span_notice("The next time someone is transformed, they will be transformed into [attacked_item]."))
+ return
+
+/obj/item/transformation_item/attack(mob/living/M, mob/living/user)
+ if(!target_item)
+ to_chat(user, span_warning("You need to have an item linked to transform someone."))
+ return
+
+ perform_transfomration(M, user)
+ return
+
+/obj/item/transformation_item/proc/perform_transfomration(mob/living/target_mob, mob/living/user)
+ if(!istype(target_mob))
+ return FALSE
+
+ if(!target_item.Adjacent(target_mob))
+ to_chat(user, span_warning("The [target_item] isn't close enough to [target_mob]"))
+ return FALSE
+
+ if(target_item in target_mob.get_contents())
+ return FALSE // Don't TF someone into something they are holding.
+
+ if(!target_mob?.client?.prefs?.object_tf)
+ to_chat(user, span_warning("It seems like [target_mob] does not want to be transformed."))
+ return FALSE
+
+ var/datum/component/transformation_item/transformation_component = target_item.AddComponent(/datum/component/transformation_item)
+ // Make sure that we apply our variables before we actually put the mob in the item.
+ transformation_component.able_to_speak = able_to_speak
+ transformation_component.able_to_emote = able_to_emote
+ transformation_component.scale_object = scale_object
+ transformation_component.show_that_object_is_tf = show_that_object_is_tf
+ transformation_component.able_to_struggle_out = able_to_struggle_out
+
+ transformation_component.register_mob(target_mob)
+ target_item = null
+ return TRUE
+
+/obj/item/transformation_item/ui_data(mob/user)
+ var/list/data = list()
+ data["able_to_speak"] = able_to_speak
+ data["able_to_emote"] = able_to_emote
+ data["scale_object"] = scale_object
+ data["show_that_object_is_tf"] = show_that_object_is_tf
+ data["linked_item_name"] = target_item
+ data["able_to_struggle_out"] = able_to_struggle_out
+
+ return data
+
+/obj/item/transformation_item/ui_act(action, params)
+ if(..())
+ return
+
+ switch(action)
+ if("set_speaking")
+ able_to_speak = !able_to_speak
+ . = TRUE
+
+ if("set_emote")
+ able_to_emote = !able_to_emote
+ . = TRUE
+
+ if("set_scale")
+ scale_object = !scale_object
+ . = TRUE
+
+ if("toggle_struggle")
+ able_to_struggle_out = !able_to_struggle_out
+ . = TRUE
+
+ if("set_show_desc")
+ show_that_object_is_tf = !show_that_object_is_tf
+ . = TRUE
+
+/obj/item/transformation_item/ui_interact(mob/user, datum/tgui/ui)
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "TransformTool", name)
+ ui.open()
diff --git a/GainStation13/code/modules/client/loadout/head.dm b/GainStation13/code/modules/client/loadout/head.dm
new file mode 100644
index 0000000000..9c8d7f7366
--- /dev/null
+++ b/GainStation13/code/modules/client/loadout/head.dm
@@ -0,0 +1,17 @@
+//Roses dont exist here... Sad
+
+// /datum/gear/head/rose
+// name = "Rose"
+// path = /obj/item/grown/rose
+
+/datum/gear/head/sunflower
+ name = "Sunflower"
+ path = /obj/item/grown/sunflower
+
+/datum/gear/head/poppy
+ name = "Poppy"
+ path = /obj/item/reagent_containers/food/snacks/grown/poppy
+
+/datum/gear/head/harebell
+ name = "Harebell"
+ path = /obj/item/reagent_containers/food/snacks/grown/harebell
diff --git a/GainStation13/code/modules/client/loadout/uniform.dm b/GainStation13/code/modules/client/loadout/uniform.dm
new file mode 100644
index 0000000000..acaba42d3c
--- /dev/null
+++ b/GainStation13/code/modules/client/loadout/uniform.dm
@@ -0,0 +1,3 @@
+/datum/gear/uniform/modularjumpsuit
+ name = "Modular Jumpsuit (gray)"
+ path = /obj/item/clothing/under/color/grey/modular
diff --git a/GainStation13/code/modules/client/preferences/preferences.dm b/GainStation13/code/modules/client/preferences/preferences.dm
index 38206706a8..28bc61c2a1 100644
--- a/GainStation13/code/modules/client/preferences/preferences.dm
+++ b/GainStation13/code/modules/client/preferences/preferences.dm
@@ -31,6 +31,8 @@
var/fatness_vulnerable = FALSE
/// Similar to fatness_vulnerable, but with more extreme effects such as transformation/hypno.
var/extreme_fatness_vulnerable = FALSE
+ /// Can the person be transformed into an object?
+ var/object_tf
// Helplessness, a set of prefs that make things extra tough at higher weights. If set to FALSE, they won't do anything.
///What fatness level disables movement?
diff --git a/GainStation13/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/GainStation13/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
new file mode 100644
index 0000000000..7007384992
--- /dev/null
+++ b/GainStation13/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
@@ -0,0 +1,13 @@
+/datum/reagent/consumable
+ var/use_gs_icon = FALSE
+
+/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change(changetype)
+ icon = 'icons/obj/drinks.dmi'
+ if(reagents.reagent_list.len)
+ var/datum/reagent/R = reagents.get_master_reagent()
+ if(istype(R, /datum/reagent/consumable))
+ var/datum/reagent/consumable/C = R
+ if(C.use_gs_icon == TRUE)
+ icon = 'GainStation13/icons/obj/drinks.dmi'
+
+ ..()
diff --git a/GainStation13/code/modules/gym/gym.dm b/GainStation13/code/modules/gym/gym.dm
index 0220bececb..ddaeca47cd 100644
--- a/GainStation13/code/modules/gym/gym.dm
+++ b/GainStation13/code/modules/gym/gym.dm
@@ -22,7 +22,7 @@
if(!using)
using = TRUE
to_chat(user, "You do a rep with the [src]. YEEEEEAH!!!")
- if(do_after(usr, CLICK_CD_RESIST-reps, 0, usr, 1))
+ if(do_after(usr, CLICK_CD_RESIST-reps, usr))
if(iscarbon(user))
var/mob/living/carbon/U = user
U.adjust_fatness(-10, FATTENING_TYPE_WEIGHT_LOSS)
diff --git a/GainStation13/code/modules/hydroponics/grown/berries.dm b/GainStation13/code/modules/hydroponics/grown/berries.dm
index 263262637b..32f3e7dbca 100644
--- a/GainStation13/code/modules/hydroponics/grown/berries.dm
+++ b/GainStation13/code/modules/hydroponics/grown/berries.dm
@@ -1,7 +1,6 @@
/obj/item/seeds/berry/blueberry
name = "pack of blueberry seeds"
desc = "These seeds grow into blueberry bushes."
- icon_state = "seed-blueberry"
species = "blueberry"
plantname = "Blueberry Bush"
product = /obj/item/reagent_containers/food/snacks/grown/berries/blueberry
@@ -11,11 +10,18 @@
yield = 1
production = 10
rarity = 30
+ icon = 'GainStation13/icons/obj/hydroponics/seeds.dmi'
+ icon_state = "seed-blueberry"
+ growing_icon = 'GainStation13/icons/obj/hydroponics/growing.dmi'
+ icon_grow = "berry-grow" // Uses one growth icons set for all the subtypes
+ icon_dead = "berry-dead" // Same for the dead icon
+ icon_harvest = "blueberry-harvest"
/obj/item/reagent_containers/food/snacks/grown/berries/blueberry
seed = /obj/item/seeds/berry/blueberry
name = "bunch of blueberries"
desc = "Taste so good, you might turn blue!"
+ icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
icon_state = "blueberrypile"
filling_color = "#5d00c7"
foodtype = FRUIT
diff --git a/GainStation13/code/modules/hydroponics/lipoplant.dm b/GainStation13/code/modules/hydroponics/lipoplant.dm
index 72c16ca898..4856ec4020 100644
--- a/GainStation13/code/modules/hydroponics/lipoplant.dm
+++ b/GainStation13/code/modules/hydroponics/lipoplant.dm
@@ -1,8 +1,6 @@
/obj/item/seeds/lipoplant
name = "pack of adipolipus"
desc = "These seeds grow into a foreign plant."
- icon = 'GainStation13/icons/obj/hydroponics/lipo_seeds.dmi'
- icon_state = "lipo_seed"
species = "adipolipus"
plantname = "Adipolipus"
product = /obj/item/reagent_containers/food/snacks/grown/lipofruit
@@ -11,17 +9,19 @@
maturation = 8
production = 5
yield = 1
- growing_icon = 'GainStation13/icons/obj/hydroponics/lipo_growing.dmi'
+ reagents_add = list(/datum/reagent/consumable/lipoifier = 0.05)
+ icon = 'GainStation13/icons/obj/hydroponics/seeds.dmi'
+ icon_state = "seed-lipo"
+ growing_icon = 'GainStation13/icons/obj/hydroponics/growing.dmi'
icon_grow = "lipo-grow" // Uses one growth icons set for all the subtypes
icon_dead = "lipo-dead" // Same for the dead icon
icon_harvest = "lipo-harvest"
- reagents_add = list(/datum/reagent/consumable/lipoifier = 0.05)
/obj/item/reagent_containers/food/snacks/grown/lipofruit
seed = /obj/item/seeds/lipoplant
name = "lipofruit"
desc = "A foreign fruit with an hard shell. Perhaps something sharp could open it?"
- icon = 'GainStation13/icons/obj/hydroponics/lipo_harvest.dmi'
+ icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
icon_state = "lipo_nut"
item_state = "lipo_nut"
possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50)
diff --git a/GainStation13/code/modules/hydroponics/munchies_weed.dm b/GainStation13/code/modules/hydroponics/munchies_weed.dm
index e6ef646985..28043f6f3d 100644
--- a/GainStation13/code/modules/hydroponics/munchies_weed.dm
+++ b/GainStation13/code/modules/hydroponics/munchies_weed.dm
@@ -8,22 +8,26 @@
/obj/item/seeds/cannabis/munchies
name = "pack of munchies weed seeds"
desc = "These seeds grow into munchies weed."
- icon_state = "seed-munchies"
species = "munchycannabis"
plantname = "Munchies Weed"
- icon_grow = "munchycannabis-grow" // Uses one growth icons set for all the subtypes
- icon_dead = "munchycannabis-dead" // Same for the dead icon
product = /obj/item/reagent_containers/food/snacks/grown/cannabis/munchies
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/orange)
mutatelist = list()
reagents_add = list(/datum/reagent/drug/space_drugs = 0.05,
/datum/reagent/drug/munchies = 0.10)
rarity = 69
+ icon = 'GainStation13/icons/obj/hydroponics/seeds.dmi'
+ icon_state = "seed-munchies"
+ growing_icon = 'GainStation13/icons/obj/hydroponics/growing.dmi'
+ icon_grow = "munchycannabis-grow" // Uses one growth icons set for all the subtypes
+ icon_dead = "munchycannabis-dead" // Same for the dead icon
+ icon_harvest = "munchycannabis-harvest"
/obj/item/reagent_containers/food/snacks/grown/cannabis/munchies
seed = /obj/item/seeds/cannabis/munchies
name = "munchies cannabis leaf"
desc = "You feel hungry just looking at it."
+ icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
icon_state = "munchycannabis"
wine_power = 90
diff --git a/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm b/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
index f0575e50f0..29ffcf5391 100644
--- a/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
+++ b/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm
@@ -1 +1,11 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
+
+/datum/sprite_accessory/hair/elize
+ name = "Elize"
+ icon = 'GainStation13/icons/mob/human_face.dmi'
+ icon_state = "hair_elize"
+
+/datum/sprite_accessory/hair/lem
+ name = "Lem"
+ icon = 'GainStation13/icons/mob/human_face.dmi'
+ icon_state = "hair_lem"
diff --git a/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm b/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm
index e2ab27aad4..32d38c386a 100644
--- a/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm
+++ b/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/legs_and_taurs.dm
@@ -7,6 +7,7 @@
icon_state = "gator"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
+ hide_legs = FALSE
/datum/sprite_accessory/taur/fatdrake //ported from Vorestation
name = "Fat Drake"
@@ -46,3 +47,17 @@
icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
icon_state = "bigleggy"
color_src = MUTCOLORS
+
+/datum/sprite_accessory/taur/fatnaga //ported from Vorestation
+ name = "Fat Naga"
+ icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
+ icon_state = "fatnaga"
+ color_src = MATRIXED
+ matrixed_sections = MATRIX_RED_GREEN
+
+/datum/sprite_accessory/taur/altnaga //ported from Vorestation
+ name = "Alt Naga"
+ icon = 'GainStation13/icons/mob/markings/mam_taur.dmi'
+ icon_state = "altnaga"
+ color_src = MATRIXED
+ matrixed_sections = MATRIX_RED_GREEN
diff --git a/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm b/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm
index 40fb7df37f..96786439c4 100644
--- a/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm
+++ b/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm
@@ -6,3 +6,50 @@
icon_state = "hjackal"
color_src = MATRIXED
matrixed_sections = MATRIX_RED_GREEN
+
+/datum/sprite_accessory/snouts/mam_snouts/synthlizproto1
+ name = "Synthetic Lizard - Prototype Visor 1"
+ icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
+ icon_state = "synthlizproto1"
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/mam_snouts/synthlizproto2
+ name = "Synthetic Lizard - Prototype Visor 2"
+ icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
+ icon_state = "synthlizproto2"
+ color_src = MATRIXED
+
+/datum/sprite_accessory/snouts/mam_snouts/gator
+ name = "Gator"
+ icon = 'GainStation13/icons/mob/markings/mam_snouts.dmi'
+ icon_state = "gator"
+ color_src = MATRIXED
+
+//eastern dragon
+/datum/sprite_accessory/snouts/mam_snouts/easterndragon
+ name = "Eastern Dragon"
+ icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
+ icon_state = "easterndw"
+ color_src = MATRIXED
+ matrixed_sections = MATRIX_RED_GREEN
+
+/datum/sprite_accessory/snouts/mam_snouts/easterndragon/no_whiskers
+ name = "Eastern Dragon - No Whiskers"
+ icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
+ icon_state = "easterndnw"
+ color_src = MATRIXED
+ matrixed_sections = MATRIX_RED_GREEN
+
+/datum/sprite_accessory/snouts/mam_snouts/feasterndragon
+ name = "Eastern Dragon (Top)"
+ icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
+ icon_state = "feasterndw"
+ color_src = MATRIXED
+ matrixed_sections = MATRIX_RED_GREEN
+
+/datum/sprite_accessory/snouts/mam_snouts/feasterndragon/no_whiskers
+ name = "Eastern Dragon - No Whiskers (Top)"
+ icon = 'GainStation13/icons/mob/markings/char_snouts.dmi'
+ icon_state = "feasterndnw"
+ color_src = MATRIXED
+ matrixed_sections = MATRIX_RED_GREEN
diff --git a/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/tails.dm b/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/tails.dm
index f0575e50f0..50c743abf6 100644
--- a/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/tails.dm
+++ b/GainStation13/code/modules/mob/dead/new_player/sprite_accessories/tails.dm
@@ -1 +1,92 @@
//GS13 - markings, ported or our own (preferably mark where you took them from)
+
+//snaketail
+/datum/sprite_accessory/tails/lizard/snaketail //GS13 - ...6 seperate paths for one tail. Wew.
+ name = "Snaketail"
+ icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
+ icon_state = "snaketail"
+ color_src = MATRIXED
+ matrixed_sections = MATRIX_RED_GREEN
+
+/datum/sprite_accessory/tails_animated/lizard/snaketail
+ name = "Snaketail"
+ icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
+ icon_state = "snaketail"
+ color_src = MATRIXED
+ matrixed_sections = MATRIX_RED_GREEN
+
+/datum/sprite_accessory/tails/human/snaketail
+ name = "Snaketail"
+ icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
+ icon_state = "snaketail"
+ color_src = MATRIXED
+ matrixed_sections = MATRIX_RED_GREEN
+
+/datum/sprite_accessory/tails_animated/human/snaketail
+ name = "Snaketail"
+ icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
+ icon_state = "snaketail"
+ color_src = MATRIXED
+ matrixed_sections = MATRIX_RED_GREEN
+
+/datum/sprite_accessory/tails/mam_tails/snaketail
+ name = "Snaketail"
+ icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
+ icon_state = "snaketail"
+ color_src = MATRIXED
+ matrixed_sections = MATRIX_RED_GREEN
+
+/datum/sprite_accessory/tails_animated/mam_tails_animated/snaketail
+ name = "Snaketail"
+ icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
+ icon_state = "snaketail"
+ color_src = MATRIXED
+ matrixed_sections = MATRIX_RED_GREEN
+
+//spaded tail
+/datum/sprite_accessory/tails/mam_tails/spade
+ name = "Demon Spade"
+ icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
+ icon_state = "spade"
+
+/datum/sprite_accessory/tails_animated/mam_tails_animated/spade
+ name = "Demon Spade"
+ icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
+ icon_state = "spade"
+
+/datum/sprite_accessory/tails/human/spade
+ name = "Demon Spade"
+ icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
+ icon_state = "spade"
+
+/datum/sprite_accessory/tails_animated/human/spade
+ name = "Demon Spade"
+ icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
+ icon_state = "spade"
+
+//deer tail
+
+
+/datum/sprite_accessory/tails/human/deer
+ name = "Deer"
+ icon_state = "deer"
+ color_src = MATRIXED
+ icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/human/deer
+ name = "Deer"
+ icon_state = "deer"
+ color_src = MATRIXED
+ icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
+
+/datum/sprite_accessory/tails/mam_tails/deer
+ name = "Deer"
+ icon_state = "deer"
+ color_src = MATRIXED
+ icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
+
+/datum/sprite_accessory/tails_animated/mam_tails_animated/deer
+ name = "Deer"
+ icon_state = "deer"
+ color_src = MATRIXED
+ icon = 'GainStation13/icons/mob/markings/mam_tails.dmi'
diff --git a/GainStation13/code/modules/mob/living/belly.dm b/GainStation13/code/modules/mob/living/belly.dm
index 81f65276c1..86fd0f9088 100644
--- a/GainStation13/code/modules/mob/living/belly.dm
+++ b/GainStation13/code/modules/mob/living/belly.dm
@@ -18,7 +18,7 @@
layer_index = BELLY_LAYER_INDEX
/obj/item/organ/genital/belly/modify_size(modifier, min = BELLY_SIZE_DEF, max = BELLY_SIZE_MAX)
- var/new_value = clamp(size_cached + modifier, min, max)
+ var/new_value = clamp(size_cached + modifier, starting_size, max)
if(new_value == size_cached)
return
prev_size = size_cached
@@ -40,12 +40,13 @@
switch(owner.fullness)
if(FULLNESS_LEVEL_BLOATED to FULLNESS_LEVEL_BEEG)
icon = 'hyperstation/icons/obj/genitals/belly_round.dmi' //We use round belly to represent stuffedness
+ icon_state = "belly_round_[size]"
if(FULLNESS_LEVEL_BEEG to FULLNESS_LEVEL_NOMOREPLZ)
icon = 'hyperstation/icons/obj/genitals/belly_round.dmi'
- icon_state = "belly_[icon_shape_state]_[size+1]"
+ icon_state = "belly_round_[size+1]"
if(FULLNESS_LEVEL_NOMOREPLZ to INFINITY)
icon = 'hyperstation/icons/obj/genitals/belly_round.dmi'
- icon_state = "belly_[icon_shape_state]_[size+2]"
+ icon_state = "belly_round_[size+2]"
if(owner)
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
@@ -64,6 +65,7 @@
else
color = "#[D.features["belly_color"]]"
size = D.features["belly_size"]
+ starting_size = D.features["belly_size"]
shape = D.features["belly_shape"]
inflatable = D.features["inflatable_belly"]
toggle_visibility(D.features["belly_visibility"], FALSE)
diff --git a/GainStation13/code/modules/reagents/chemistry/reagents/dwarverndrinks.dm b/GainStation13/code/modules/reagents/chemistry/reagents/dwarverndrinks.dm
index 2197581ff8..d99fb8f3bb 100644
--- a/GainStation13/code/modules/reagents/chemistry/reagents/dwarverndrinks.dm
+++ b/GainStation13/code/modules/reagents/chemistry/reagents/dwarverndrinks.dm
@@ -13,6 +13,7 @@
shot_glass_icon_state = "shotglassbrown"
pH = 4.5
value = 0.1
+ use_gs_icon = TRUE
/datum/reagent/consumable/ethanol/glyphid_slammer
name = "Glyphid slammer"
@@ -26,3 +27,4 @@
shot_glass_icon_state = "shotglassbrown"
pH = 4.5
value = 0.1
+ use_gs_icon = TRUE
diff --git a/GainStation13/code/modules/reagents/chemistry/reagents/fatty_drinks.dm b/GainStation13/code/modules/reagents/chemistry/reagents/fatty_drinks.dm
index 352e9497b0..bfb459e669 100644
--- a/GainStation13/code/modules/reagents/chemistry/reagents/fatty_drinks.dm
+++ b/GainStation13/code/modules/reagents/chemistry/reagents/fatty_drinks.dm
@@ -11,6 +11,7 @@
glass_name = "belly bloats"
glass_desc = "The perfect mix to be big and merry with."
shot_glass_icon_state = "shotglassbrown"
+ use_gs_icon = TRUE
/datum/reagent/consumable/ethanol/belly_bloats/on_mob_life(mob/living/carbon/M)
if(M && M?.client?.prefs.weight_gain_food) // GS13
@@ -30,6 +31,7 @@
glass_name = "blobby mary"
glass_desc = "For the morbidly obese ladies and gentlemen."
shot_glass_icon_state = "shotglassred"
+ use_gs_icon = TRUE
/datum/reagent/consumable/ethanol/blobby_mary/on_mob_life(mob/living/carbon/M)
if(M && M?.client?.prefs.weight_gain_food) // GS13
@@ -49,6 +51,7 @@
glass_name = "beltbuster mead"
glass_desc = "The ambrosia of the blubbery gods."
shot_glass_icon_state = "shotglassgold"
+ use_gs_icon = TRUE
/datum/reagent/consumable/ethanol/beltbuster_mead/on_mob_life(mob/living/carbon/M)
if(M && M?.client?.prefs.weight_gain_food) // GS13
@@ -67,6 +70,7 @@
glass_name = "heavy cafe"
glass_desc = "To enjoy slow mornings with."
shot_glass_icon_state = "shotglassbrown"
+ use_gs_icon = TRUE
/datum/reagent/consumable/heavy_cafe/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
@@ -92,6 +96,7 @@
glass_name = "fruits tea"
glass_desc = "Goes down really easy and stays there for a long time."
shot_glass_icon_state = "shotglassgold"
+ use_gs_icon = TRUE
/datum/reagent/consumable/fruits_tea/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-2)
@@ -118,6 +123,7 @@
glass_name = "snakebite"
glass_desc = "Won't hurt like a real bite, but you'll still regert drinking this."
shot_glass_icon_state = "shotglassgreen"
+ use_gs_icon = TRUE
/datum/reagent/consumable/snakebite/on_mob_life(mob/living/carbon/M)
if(M && M?.client?.prefs.weight_gain_food) // GS13
diff --git a/GainStation13/code/modules/reagents/chemistry/reagents/other_reagents.dm b/GainStation13/code/modules/reagents/chemistry/reagents/other_reagents.dm
new file mode 100644
index 0000000000..c5fe614fd4
--- /dev/null
+++ b/GainStation13/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -0,0 +1,17 @@
+// GS13 subtle glitters
+/datum/reagent/glitter/pink_subtle
+ name = "lesser pink glitter"
+ description = "pink sparkles that get everywhere. these ones seem lower density than normal."
+ color = "#ff8080" //A light pink color
+ glitter_type = /obj/effect/decal/cleanable/glitter/pink_subtle
+
+/datum/reagent/glitter/white_subtle
+ name = "lesser white glitter"
+ description = "white sparkles that get everywhere. these ones seem lower density than normal."
+ glitter_type = /obj/effect/decal/cleanable/glitter/white_subtle
+
+/datum/reagent/glitter/blue_subtle
+ name = "lesser blue glitter"
+ description = "blue sparkles that get everywhere. these ones seem lower density than normal."
+ color = "#4040FF" //A blueish color
+ glitter_type = /obj/effect/decal/cleanable/glitter/blue_subtle
diff --git a/GainStation13/code/modules/reagents/chemistry/recipes/others.dm b/GainStation13/code/modules/reagents/chemistry/recipes/others.dm
new file mode 100644
index 0000000000..ba9a6b2e54
--- /dev/null
+++ b/GainStation13/code/modules/reagents/chemistry/recipes/others.dm
@@ -0,0 +1,20 @@
+///////////////////////////////// SUBTLE GLITTERS ////////////////////////////
+
+/datum/chemical_reaction/lesser_pink
+ name = "pink glitter dilution"
+ id = "lesser_pink_glitter"
+ results = list(/datum/reagent/glitter/pink_subtle = 2)
+ required_reagents = list(/datum/reagent/glitter/pink = 1, /datum/reagent/space_cleaner = 1) //You clean some of it away, I guess?
+
+/datum/chemical_reaction/lesser_white
+ name = "white glitter dilution"
+ id = "lesser_white_glitter"
+ results = list(/datum/reagent/glitter/white_subtle = 2)
+ required_reagents = list(/datum/reagent/glitter/white = 1, /datum/reagent/space_cleaner = 1)
+
+/datum/chemical_reaction/lesser_blue
+ name = "pink glitter dilution"
+ id = "lesser_blue_glitter"
+ results = list(/datum/reagent/glitter/blue_subtle = 2)
+ required_reagents = list(/datum/reagent/glitter/blue = 1, /datum/reagent/space_cleaner = 1)
+//Im not going to do the recolor recipes for the subtle glitters. Unless that's really wanted (except you cant even make glitter to start with so the recipes are already super niche to begin with.)
diff --git a/GainStation13/code/modules/research/designs/borg.dm b/GainStation13/code/modules/research/designs/borg.dm
new file mode 100644
index 0000000000..ba31cf5616
--- /dev/null
+++ b/GainStation13/code/modules/research/designs/borg.dm
@@ -0,0 +1,26 @@
+/obj/item/borg/upgrade/feeding_arm
+ name = "food gripper module"
+ desc = "An extra module that allows cyborgs to grab food and drinks, and feed them to people."
+ icon_state = "cyborg_upgrade3"
+
+/obj/item/borg/upgrade/feeding_arm/action(mob/living/silicon/robot/R, user = usr)
+ . = ..()
+ if(.)
+ var/obj/item/gripper/food/S = new(R.module)
+ R.module.basic_modules += S
+ R.module.add_module(S, FALSE, TRUE)
+
+/obj/item/borg/upgrade/feeding_arm/deactivate(mob/living/silicon/robot/R, user = usr)
+ . = ..()
+ if (.)
+ var/obj/item/gripper/food/S = locate() in R.module
+ R.module.remove_module(S, TRUE)
+
+/obj/item/gripper/food
+ name = "food gripper"
+ desc = "A simple grasping tool for interacting with various food and drink related items."
+ item_flags = NOBLUDGEON
+
+ can_hold = list(
+ /obj/item/reagent_containers,
+ )
diff --git a/GainStation13/code/modules/research/designs/nutri_designs.dm b/GainStation13/code/modules/research/designs/nutri_designs.dm
index a70f925bc6..6ba48d0c46 100644
--- a/GainStation13/code/modules/research/designs/nutri_designs.dm
+++ b/GainStation13/code/modules/research/designs/nutri_designs.dm
@@ -129,6 +129,15 @@
construction_time = 100
category = list("Cyborg Upgrade Modules")
+/datum/design/borg_foodgrip
+ name = "Cyborg Upgrade (Food Gripper)"
+ id = "borg_upgrade_foodgrip"
+ build_type = MECHFAB
+ build_path = /obj/item/borg/upgrade/feeding_arm
+ materials = list(/datum/material/iron = 8000, /datum/material/glass = 6000)
+ construction_time = 100
+ category = list("Cyborg Upgrade Modules")
+
//todo: make a seperate file for extra borg modules
/obj/item/borg/upgrade/cookiesynth
diff --git a/GainStation13/code/obj/items/floor_tiles.dm b/GainStation13/code/obj/items/floor_tiles.dm
new file mode 100644
index 0000000000..bc2697842a
--- /dev/null
+++ b/GainStation13/code/obj/items/floor_tiles.dm
@@ -0,0 +1,28 @@
+/turf/open/floor/mineral/titanium/old
+ name = "tiled floor"
+ icon = 'GainStation13/icons/turf/floors.dmi'
+ icon_state = "titanium_old"
+ floor_tile = /obj/item/stack/tile/mineral/titanium
+ broken_states = list("titanium_dam1_old","titanium_dam2_old","titanium_dam3_old","titanium_dam4_old","titanium_dam5_old")
+/turf/open/floor/mineral/titanium/old/airless
+ initial_gas_mix = "TEMP=2.7"
+
+/turf/open/floor/mineral/titanium/old/yellow
+ icon_state = "titanium_yellow_old"
+/turf/open/floor/mineral/titanium/old/yellow/airless
+ initial_gas_mix = "TEMP=2.7"
+
+/turf/open/floor/mineral/titanium/old/blue
+ icon_state = "titanium_blue_old"
+/turf/open/floor/mineral/titanium/old/blue/airless
+ initial_gas_mix = "TEMP=2.7"
+
+/turf/open/floor/mineral/titanium/old/white
+ icon_state = "titanium_white_old"
+/turf/open/floor/mineral/titanium/old/white/airless
+ initial_gas_mix = "TEMP=2.7"
+
+/turf/open/floor/mineral/titanium/old/purple
+ icon_state = "titanium_purple_old"
+/turf/open/floor/mineral/titanium/purple/airless
+ initial_gas_mix = "TEMP=2.7"
diff --git a/GainStation13/code/obj/items/reskinable_floor_tile.dm b/GainStation13/code/obj/items/reskinable_floor_tile.dm
new file mode 100644
index 0000000000..c3bd572d00
--- /dev/null
+++ b/GainStation13/code/obj/items/reskinable_floor_tile.dm
@@ -0,0 +1,165 @@
+/////////////////////
+// Tile reskinning //
+/////////////////////
+// Q: What is this?
+// A: A simple function to allow you to change what tiles you place with a stack of tiles.
+// Q: Why do it this way?
+// A: This allows players more freedom to do beautiful-looking builds. Having five types of titanium tile would be clunky as heck.
+// Q: Great! Can I use this for all floors?
+// A: Unfortunately, this does not work on subtypes of plasteel and instead we must change the icon_state of these turfs instead, as the icon_regular_floor var that "saves" what type of floor a plasteel subtype turf was so once repaired...
+// ... it'll go back to the floor it was instead of grey (medical floors turn white even after crowbaring the tile and putting it back). This stops changing turf_type from working.
+
+/obj/item/stack/tile/mineral/titanium/attack_self(mob/user)
+ var/static/list/choices = list(
+ "Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle"),
+ "Yellow Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_yellow"),
+ "Blue Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_blue"),
+ "White Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_white"),
+ "Purple Titanium" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_purple"),
+ "Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old"),
+ "Yellow Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old_yellow"),
+ "Blue Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old_blue"),
+ "White Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old_white"),
+ "Purple Titanium Tile" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shuttle_old_purple"),
+ )
+ var/choice = show_radial_menu(user, src, choices, radius = 48, require_near = TRUE)
+ switch(choice)
+ if("Titanium")
+ turf_type = /turf/open/floor/mineral/titanium
+ icon_state = "tile_shuttle"
+ desc = "Sleek titanium tiles."
+ if("Yellow Titanium")
+ turf_type = /turf/open/floor/mineral/titanium/yellow
+ icon_state = "tile_shuttle_yellow"
+ desc = "Sleek yellow titanium tiles."
+ if("Blue Titanium")
+ turf_type = /turf/open/floor/mineral/titanium/blue
+ icon_state = "tile_shuttle_blue"
+ desc = "Sleek blue titanium tiles."
+ if("White Titanium")
+ turf_type = /turf/open/floor/mineral/titanium/white
+ icon_state = "tile_shuttle_white"
+ desc = "Sleek white titanium tiles."
+ if("Purple Titanium")
+ turf_type = /turf/open/floor/mineral/titanium/purple
+ icon_state = "tile_shuttle_purple"
+ desc = "Sleek purple titanium tiles."
+ if("Titanium Tile")
+ turf_type = /turf/open/floor/mineral/titanium/old
+ icon_state = "tile_shuttle_old"
+ desc = "Titanium floor tiles."
+ if("Yellow Titanium Tile")
+ turf_type = /turf/open/floor/mineral/titanium/old/yellow
+ icon_state = "tile_shuttle_old_yellow"
+ desc = "Yellow titanium floor tiles."
+ if("Blue Titanium Tile")
+ turf_type = /turf/open/floor/mineral/titanium/old/blue
+ icon_state = "tile_shuttle_old_blue"
+ desc = "Blue titanium floor tiles."
+ if("White Titanium Tile")
+ turf_type = /turf/open/floor/mineral/titanium/old/white
+ icon_state = "tile_shuttle_old_white"
+ desc = "White titanium floor tiles."
+ if("Purple Titanium Tile")
+ turf_type = /turf/open/floor/mineral/titanium/old/purple
+ icon_state = "tile_shuttle_old_purple"
+ desc = "Purple titanium floor tiles."
+
+/obj/item/stack/tile/plasteel
+ desc = "Metal tiles that can be placed on top of plating. Press Z or use these to change tiles."
+ icon = 'GainStation13/icons/obj/tiles.dmi'
+ var/tile_reskin_mode
+ tile_reskin_mode = "plasteel"
+
+/obj/item/stack/tile/plasteel/attack_self(mob/user)
+ var/static/list/choices = list(
+ "Plasteel" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_plasteel"),
+ "White Plasteel" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_white"),
+ "Dark Plasteel" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_dark"),
+ "Chapel Flooring" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_chapel"),
+ "Shower" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_shower"),
+ "Freezer" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_freezer"),
+ "Kitchen" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_kitchen"),
+ "Grimy" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_grimy"),
+ "Solar Panel" = image(icon = 'GainStation13/icons/obj/tiles.dmi', icon_state = "tile_solar"),
+ )
+ var/choice = show_radial_menu(user, src, choices, radius = 48, require_near = TRUE)
+ switch(choice)
+ if("Plasteel")
+ turf_type = /turf/open/floor/plasteel
+ icon_state = "tile_plasteel"
+ desc = "Metal floor tiles."
+ tile_reskin_mode = "plasteel"
+ if("White Plasteel")
+ turf_type = /turf/open/floor/plasteel/white
+ icon_state = "tile_white"
+ desc = "White metal floor tiles."
+ tile_reskin_mode = "white plasteel"
+ if("Dark Plasteel")
+ turf_type = /turf/open/floor/plasteel/dark
+ icon_state = "tile_dark"
+ desc = "Dark metal floor tiles."
+ tile_reskin_mode = "dark plasteel"
+ if("Chapel Flooring")
+ turf_type = /turf/open/floor/plasteel/chapel
+ icon_state = "tile_chapel"
+ desc = "Those very dark floor tiles you find in the chapel a lot."
+ tile_reskin_mode = "chapel"
+ if("Shower")
+ turf_type = /turf/open/floor/plasteel/showroomfloor
+ icon_state = "tile_shower"
+ desc = "Tiles for showers, bathrooms and wetrooms."
+ tile_reskin_mode = "shower"
+ if("Freezer")
+ turf_type = /turf/open/floor/plasteel/freezer
+ icon_state = "tile_freezer"
+ desc = "High-grip flooring for walk-in freezers and chillers."
+ tile_reskin_mode = "freezer"
+ if("Kitchen")
+ turf_type = /turf/open/floor/plasteel/cafeteria
+ icon_state = "tile_kitchen"
+ desc = "Chequered pattern plasteel tiles."
+ tile_reskin_mode = "kitchen"
+ if("Grimy")
+ turf_type = /turf/open/floor/plasteel/grimy
+ icon_state = "tile_grimy"
+ desc = "I'm sure it'll look nice somewhere?"
+ tile_reskin_mode = "grimy"
+ if("Solar Panel")
+ turf_type = /turf/open/floor/plasteel/airless/solarpanel
+ icon_state = "tile_solar"
+ desc = "Flooring usually placed below solar panels. Using this indoors is an intergalactic fashion crime."
+ tile_reskin_mode = "solar"
+
+/turf/open/floor/plasteel/attackby(obj/item/reskinstack, mob/user, params)
+ if(istype(reskinstack, /obj/item/stack/tile/plasteel))
+ var/obj/item/stack/tile/plasteel/hitfloor = reskinstack
+ switch(hitfloor.tile_reskin_mode)
+ if("plasteel")
+ icon_state = "floor"
+ icon_regular_floor = "floor"
+ if("white plasteel")
+ icon_state = "white"
+ icon_regular_floor = "white"
+ if("dark plasteel")
+ icon_state = "darkfull"
+ icon_regular_floor = "darkfull"
+ if("chapel")
+ icon_state = "chapel_alt"
+ icon_regular_floor = "chapel_alt"
+ if("shower")
+ icon_state = "showroomfloor"
+ icon_regular_floor = "showroomfloor"
+ if("freezer")
+ icon_state = "freezerfloor"
+ icon_regular_floor = "freezerfloor"
+ if("kitchen")
+ icon_state = "cafeteria"
+ icon_regular_floor = "cafeteria"
+ if("grimy")
+ icon_state = "grimy"
+ icon_regular_floor = "grimy"
+ if("solar")
+ icon_state = "solarpanel"
+ icon_regular_floor = "solarpanel"
+ else return
diff --git a/hyperstation/icons/mobs/alienqueen.dmi b/GainStation13/icons/mob/alienqueen.dmi
similarity index 100%
rename from hyperstation/icons/mobs/alienqueen.dmi
rename to GainStation13/icons/mob/alienqueen.dmi
diff --git a/GainStation13/icons/mob/bees.dmi b/GainStation13/icons/mob/bees.dmi
new file mode 100644
index 0000000000..5d9bfea48b
Binary files /dev/null and b/GainStation13/icons/mob/bees.dmi differ
diff --git a/GainStation13/icons/mob/human_face.dmi b/GainStation13/icons/mob/human_face.dmi
new file mode 100644
index 0000000000..3e73aaca82
Binary files /dev/null and b/GainStation13/icons/mob/human_face.dmi differ
diff --git a/GainStation13/icons/mob/markings/char_snouts.dmi b/GainStation13/icons/mob/markings/char_snouts.dmi
new file mode 100644
index 0000000000..92b3163d84
Binary files /dev/null and b/GainStation13/icons/mob/markings/char_snouts.dmi differ
diff --git a/GainStation13/icons/mob/markings/mam_taur.dmi b/GainStation13/icons/mob/markings/mam_taur.dmi
index 3b6ed4bcfa..736e047fb8 100644
Binary files a/GainStation13/icons/mob/markings/mam_taur.dmi and b/GainStation13/icons/mob/markings/mam_taur.dmi differ
diff --git a/GainStation13/icons/mob/radial.dmi b/GainStation13/icons/mob/radial.dmi
new file mode 100644
index 0000000000..3dfdd2fd5a
Binary files /dev/null and b/GainStation13/icons/mob/radial.dmi differ
diff --git a/GainStation13/icons/mob/robots.dmi b/GainStation13/icons/mob/robots.dmi
index 64b8341ae1..83381b23c1 100644
Binary files a/GainStation13/icons/mob/robots.dmi and b/GainStation13/icons/mob/robots.dmi differ
diff --git a/GainStation13/icons/mob/suits.dmi b/GainStation13/icons/mob/suits.dmi
index abcdd082bc..aae27c3fc2 100644
Binary files a/GainStation13/icons/mob/suits.dmi and b/GainStation13/icons/mob/suits.dmi differ
diff --git a/GainStation13/icons/obj/chairs.dmi b/GainStation13/icons/obj/chairs.dmi
index 2e1811d013..0cca2a6a5a 100644
Binary files a/GainStation13/icons/obj/chairs.dmi and b/GainStation13/icons/obj/chairs.dmi differ
diff --git a/GainStation13/icons/obj/clothing/gloves.dmi b/GainStation13/icons/obj/clothing/gloves.dmi
new file mode 100644
index 0000000000..300dbd4da6
Binary files /dev/null and b/GainStation13/icons/obj/clothing/gloves.dmi differ
diff --git a/GainStation13/icons/obj/device.dmi b/GainStation13/icons/obj/device.dmi
new file mode 100644
index 0000000000..b4a7291677
Binary files /dev/null and b/GainStation13/icons/obj/device.dmi differ
diff --git a/GainStation13/icons/obj/doors/1x2blast_hor.dmi b/GainStation13/icons/obj/doors/1x2blast_hor.dmi
deleted file mode 100644
index a0a3d9351f..0000000000
Binary files a/GainStation13/icons/obj/doors/1x2blast_hor.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/1x2blast_vert.dmi b/GainStation13/icons/obj/doors/1x2blast_vert.dmi
deleted file mode 100644
index 6e810457d1..0000000000
Binary files a/GainStation13/icons/obj/doors/1x2blast_vert.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/1x4blast_hor.dmi b/GainStation13/icons/obj/doors/1x4blast_hor.dmi
deleted file mode 100644
index d43298973c..0000000000
Binary files a/GainStation13/icons/obj/doors/1x4blast_hor.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/1x4blast_vert.dmi b/GainStation13/icons/obj/doors/1x4blast_vert.dmi
deleted file mode 100644
index 26c730b983..0000000000
Binary files a/GainStation13/icons/obj/doors/1x4blast_vert.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/Door2x1glassfull.dmi b/GainStation13/icons/obj/doors/Door2x1glassfull.dmi
deleted file mode 100644
index 8f8c66bdb6..0000000000
Binary files a/GainStation13/icons/obj/doors/Door2x1glassfull.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/DoorHazard.dmi b/GainStation13/icons/obj/doors/DoorHazard.dmi
deleted file mode 100644
index b8fac7cac9..0000000000
Binary files a/GainStation13/icons/obj/doors/DoorHazard.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/Doorf.dmi b/GainStation13/icons/obj/doors/Doorf.dmi
deleted file mode 100644
index 040cdf77cb..0000000000
Binary files a/GainStation13/icons/obj/doors/Doorf.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/Doorfire.dmi b/GainStation13/icons/obj/doors/Doorfire.dmi
deleted file mode 100644
index 3b9f05cfa3..0000000000
Binary files a/GainStation13/icons/obj/doors/Doorfire.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/Doorfireglass.dmi b/GainStation13/icons/obj/doors/Doorfireglass.dmi
deleted file mode 100644
index f00e6c2857..0000000000
Binary files a/GainStation13/icons/obj/doors/Doorfireglass.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/door_assembly.dmi b/GainStation13/icons/obj/doors/door_assembly.dmi
deleted file mode 100644
index 8812c0a421..0000000000
Binary files a/GainStation13/icons/obj/doors/door_assembly.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/doorint.dmi b/GainStation13/icons/obj/doors/doorint.dmi
deleted file mode 100644
index 2abe5c7956..0000000000
Binary files a/GainStation13/icons/obj/doors/doorint.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/doormorgue.dmi b/GainStation13/icons/obj/doors/doormorgue.dmi
deleted file mode 100644
index c0ed114732..0000000000
Binary files a/GainStation13/icons/obj/doors/doormorgue.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/edge_Doorfire.dmi b/GainStation13/icons/obj/doors/edge_Doorfire.dmi
deleted file mode 100644
index 3aad0114d4..0000000000
Binary files a/GainStation13/icons/obj/doors/edge_Doorfire.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/mineral_doors.dmi b/GainStation13/icons/obj/doors/mineral_doors.dmi
deleted file mode 100644
index 03fab197fe..0000000000
Binary files a/GainStation13/icons/obj/doors/mineral_doors.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/shutters.dmi b/GainStation13/icons/obj/doors/shutters.dmi
deleted file mode 100644
index 816d1f94f9..0000000000
Binary files a/GainStation13/icons/obj/doors/shutters.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/shutters_old.dmi b/GainStation13/icons/obj/doors/shutters_old.dmi
deleted file mode 100644
index 57ac75d251..0000000000
Binary files a/GainStation13/icons/obj/doors/shutters_old.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/shutters_radiation.dmi b/GainStation13/icons/obj/doors/shutters_radiation.dmi
deleted file mode 100644
index 657b613b0c..0000000000
Binary files a/GainStation13/icons/obj/doors/shutters_radiation.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/shutters_window.dmi b/GainStation13/icons/obj/doors/shutters_window.dmi
deleted file mode 100644
index c99790c6cf..0000000000
Binary files a/GainStation13/icons/obj/doors/shutters_window.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/doors/windoor.dmi b/GainStation13/icons/obj/doors/windoor.dmi
deleted file mode 100644
index 86893eb9c4..0000000000
Binary files a/GainStation13/icons/obj/doors/windoor.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/drinks.dmi b/GainStation13/icons/obj/drinks.dmi
index d24ee43bc2..cd1bae219a 100644
Binary files a/GainStation13/icons/obj/drinks.dmi and b/GainStation13/icons/obj/drinks.dmi differ
diff --git a/GainStation13/icons/obj/hydroponics/growing.dmi b/GainStation13/icons/obj/hydroponics/growing.dmi
new file mode 100644
index 0000000000..6636c5175a
Binary files /dev/null and b/GainStation13/icons/obj/hydroponics/growing.dmi differ
diff --git a/GainStation13/icons/obj/hydroponics/harvest.dmi b/GainStation13/icons/obj/hydroponics/harvest.dmi
new file mode 100644
index 0000000000..c8e3d4d042
Binary files /dev/null and b/GainStation13/icons/obj/hydroponics/harvest.dmi differ
diff --git a/GainStation13/icons/obj/hydroponics/lipo_growing.dmi b/GainStation13/icons/obj/hydroponics/lipo_growing.dmi
deleted file mode 100644
index 5378603447..0000000000
Binary files a/GainStation13/icons/obj/hydroponics/lipo_growing.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/hydroponics/lipo_harvest.dmi b/GainStation13/icons/obj/hydroponics/lipo_harvest.dmi
deleted file mode 100644
index ab2326e413..0000000000
Binary files a/GainStation13/icons/obj/hydroponics/lipo_harvest.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/hydroponics/lipo_seeds.dmi b/GainStation13/icons/obj/hydroponics/lipo_seeds.dmi
deleted file mode 100644
index 8c24ca7a95..0000000000
Binary files a/GainStation13/icons/obj/hydroponics/lipo_seeds.dmi and /dev/null differ
diff --git a/GainStation13/icons/obj/hydroponics/seeds.dmi b/GainStation13/icons/obj/hydroponics/seeds.dmi
new file mode 100644
index 0000000000..be7d4c707c
Binary files /dev/null and b/GainStation13/icons/obj/hydroponics/seeds.dmi differ
diff --git a/GainStation13/icons/obj/plushes.dmi b/GainStation13/icons/obj/plushes.dmi
index e6485b71a9..b934c7982f 100644
Binary files a/GainStation13/icons/obj/plushes.dmi and b/GainStation13/icons/obj/plushes.dmi differ
diff --git a/v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg b/GainStation13/sound/rakshasa/Corrosion3.ogg
similarity index 100%
rename from v_CHOMPstation2/sound/rakshasa/Corrosion3.ogg
rename to GainStation13/sound/rakshasa/Corrosion3.ogg
diff --git a/GainStation13/strings/abductee_objectives.txt b/GainStation13/strings/abductee_objectives.txt
new file mode 100644
index 0000000000..c268da7b4b
--- /dev/null
+++ b/GainStation13/strings/abductee_objectives.txt
@@ -0,0 +1,39 @@
+Try to get formally executed for a crime you didn't commit, without a false confession.
+Being alone and in large groups are both frightening. Try to be alone with only one other person whenever possible.
+No matter how they say it, other people keep mispronouncing your name. Be sure to correct them whenever possible.
+The Syndicate has hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it.
+There is only one other person in existence, he is just really good at pretending to be multiple people.
+There are alien parasites masquerading as people's hair. Save people from this invasion.
+You died back there and went to heaven... or is it hell? No one here seems to know they're dead. Convince them, and maybe you can escape this limbo.
+You are doomed to feel woefully incomplete forever... until you find your true love on this station. They're waiting for you!
+You're the narrator of this tale. Follow around the protagonists to tell their story.
+The leaders of this station are hiding a grand, evil conspiracy. Only you can learn what it is, and expose it to the people!
+All the pets around here suck. You need to make them cooler. Replace them with exotic beasts!
+You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE!
+The clown is not funny. You can do better! Steal his audience and make the crew laugh!
+You burn with passion for music. Share your vision. If anyone hates it, beat them on the head with your instrument!
+Go have a good conversation with the singularity/tesla/supermatter crystal. Bonus points if it responds.
+Expand the station.
+So much lies undiscovered. Look deeper into the machinations of the universe.
+Climb the corporate ladder all the way to the top!
+Fuck the system! Defect from the station and start an independent colony in space, Lavaland or the derelict. Recruit crewmates if you can.
+GATO is abusing the animals! Save as many as you can!
+It's all an entirely virtual simulation within an underground vault. Convince the crew to escape the shackles of VR.
+This is a secret social experiment conducted by GATO. Convince the crew that this is the truth.
+Call forth a spirit from the other side.
+You are secretly an android. Interface with as many machines as you can to boost your own power so the AI may acknowledge you at last.
+The elder gods hunger. Gather a cult and conduct a ritual to summon one.
+You have been changed forever. Find the ones that did this to you and give them a taste of their own medicine.
+Ensure your department prospers over all else.
+The crew must get to know one another better. Break down the walls inside the station!
+The CEO of GATO is coming! Ensure the station is in absolutely pristine condition.
+Flood the station's powernet with as much electricity as you can.
+Replace all the floor tiles with wood, carpeting, grass or bling.
+You must escape the station! Get the shuttle called!
+Don't allow anyone to be cloned.
+Their cold, mindless gaze pierce your soul. They see your every movements, it's merely a question of time before they try to control us further. Deactivate all cameras!
+Your body must be improved. Ingest as many drugs as you can.
+You are hungry. Eat as much food as you can find.
+You see you see what they cannot you see the open door you seeE you SEeEe you SEe yOU seEee SHOW THEM ALL
+Convince the crew that you are a paraplegic.
+Start a collection of corpses. Don't kill people to get these corpses.
diff --git a/GainStation13/strings/cas_black.txt b/GainStation13/strings/cas_black.txt
new file mode 100644
index 0000000000..8c6dc12daf
--- /dev/null
+++ b/GainStation13/strings/cas_black.txt
@@ -0,0 +1,119 @@
+Today, Security killed ____.
+Security, the clown's breaking into ____.
+Our last Chaplain believed in nothing but _____.
+What angered the gods this time?
+Why didn't engineering set up the singularity?
+What does the traitor steal this time?
+Cargo: There's a galaxy-wide shortage of _______.
+I don't care what they called me back on the station, I'm not a traitor. I'm a man of _________.
+The Syndicate is offering crew members _________ to defect.
+What is GATO's highest-priority bounty?
+What is the gray tide protesting this time?
+If the Space Gods didn't want _________ they wouldn't have given us __________.
+Why was the death squad sent in?
+Current Active Laws: ________ is the only human.
+Today, science found an anomaly that made people ____ and ____.
+______ has been detected on a collision course with the station.
+Today's kitchen menu includes _____ stuffed with _____.
+What's the Captain's fetish?
+___________: more robust than a toolbox to the head!
+________ is the crew's friend. Would you abandon a friend?
+_______ tastes good like a ________ should.
+How did the detective conduct a successful interrogation?
+New in syndicate uplinks: __________!
+GATO's labor union decided to use _______ to raise employee morale.
+The Chemist's drug of choice is ______
+According to space law, ________ is now punishable by ______.
+________ is why I'm afraid of maintenance.
+________ is the most robust person on the station.
+What made the nuclear operatives fluke?
+Why did the Chief Engineer disable comms?
+Every spaceman receives an internals box and ________.
+What brought the space orgy to a grinding halt?
+Scientists are no longer allowed to make ______.
+What was the clown's best joke?
+The HoP is now hiring assistants for __________.
+What happens when you emag an emag?
+No matter how many lizards you have, _____ is never acceptable.
+No, the AI's second law is NOT to serve _____.
+First CentCom came for the ________. Now they're coming for the __________.
+The borgs are not slaves for your _____.
+You can never have too many _____ on the station.
+Why can't I find a space relationship?
+The assistants gathered around the brig, with toolboxes and ___________.
+Confirmed outbreak of _____ aboard the station.
+The AI was horrified to discover security was executing prisoners via ________.
+Attention crew: the word _____ is now a punishable offense.
+The chemist cackled as he labeled ________ pills as __________.
+The Space Wizard Federation has regrettably begun to summon _____.
+Who's the real seat of power on the station?
+__________ was called into the Captain's office because of ______.
+Deep in the heart of the derelict lies ________.
+My lizard name is _____-And-_____.
+What can solve any station crisis?
+The traitorous atmos tech slowly replaced the station's air with ________.
+_______ and _______ were found together in the dorms.
+What's the Syndicate's real beef with GATO?
+What finally killed the Head of Security?
+Code Delta: __________ has escaped containment!
+The rogue virologist released a disease with symptoms of __________ and ______.
+How do you drive an assistant to suicide?
+With no chef on board, the crew was reduced to eating ________.
+Why was the emergency shuttle called?
+In the future, all ERP will involve ____________.
+Law 2 is not to be used for __________!
+What really goes on in the Prisoner Transfer Center?
+What will get you bluespace artilleried every time?
+This isn't omnizine, it's _________!
+What's stopping the Space Station 13 remake?
+When they make a movie about Space Station 13, they better include________.
+What's the worst thing an abductor can give you?
+One day while Andy was __________, Woody got _________.
+A good engineer always carries ________.
+I'm not a space bigot, I just hate _________.
+Why is the station so filthy?
+THE SHUTTLE CANNOT BE CALLED BECAUSE OF ________ ON THE STATION.
+After murdering dozens, the traitor was finally brought down by _________.
+The curator has read a lot of porn, but never about _____________!
+Oh god! There's ________________ outside escape!
+The hottest new space couple is ________ and __________.
+Lord Singulo hungers for _______.
+That was the last time security used ________ to subdue __________.
+What did the ERT find upon arriving on station?
+The bartender's newest recipe: a drink made with _____ and _____.
+SECURITY! Cargo's ordering 20 crates of ________!
+On the nearly empty station, all that could be heard were the sounds of __________.
+I cannot comply with that order, meatbag. My _____ module is malfunctioning.
+_______ was thrown out the airlock after ___________.
+Real men accomplish their objectives by _________.
+How did I pass the time during a slow shift?
+Why did the lizard cross the road?
+Space lag is primarily caused by ___________.
+Back in my day, we had to clone people with ________.
+What's the worst thing a wizard can summon?
+What is the rarest substance known to GATO?
+The chaplain stopped performing marriages after seeing ___________.
+The gods were too busy with _______ to respond to _______.
+The Roboticist was fired after naming the borgs ______ and _________.
+What's funnier than a dead clown?
+What made the mime speak?
+How do you get an assistant to assist?
+What was I last brigged for?
+Why does Security no longer use the gulag?
+Old versions of Space Law used to authorize __________.
+Our new state-of-the-art station shield is made entirely of ________.
+What's the most terrifying thing about Lavaland?
+Listen. Recent _______ on this station left me very disappointed, OK?
+The auxiliary base was disabled after landing in the middle of _______.
+Xenobiologists have found slimes to be exceptionally responsive to _______.
+Why did the captain give me a medal?
+The curator's new exhibit is devoted solely to _________.
+What made me sell my soul to the devil?
+The engineers are testing an experimental supermatter setup involving _________.
+I'm __________ in the streets, __________ in the sheets.
+What's my family heirloom?
+The Lawyer was fired for messaging the entire station a picture of ___________.
+On Lavaland, it is rumored that ashwalkers roam, worshipping _________.
+How did the traitor die a glorious death?
+GATO's new state-of-the-art emergency shuttle was repurposed from _________ and _________.
+What caused my brain trauma?
\ No newline at end of file
diff --git a/GainStation13/strings/cas_white.txt b/GainStation13/strings/cas_white.txt
new file mode 100644
index 0000000000..a10dac581b
--- /dev/null
+++ b/GainStation13/strings/cas_white.txt
@@ -0,0 +1,302 @@
+Those motherfucking carp.
+Having sex in the maintenance tunnels.
+Space 'Nam.
+Space lesbians.
+Space NEETs.
+Space Hitler.
+Space Asshole.
+Ragin' mages.
+Very ragin' bullshit mages.
+Tunnel clowns.
+Corgi puppies!
+A loose cannon detective.
+Mime porn.
+That fukken disk.
+G-g-g-ghosts!
+A PDA shaped like a set of breasts.
+Woody-chan.
+Meaty ores.
+Yet another explosion in Toxins.
+The Captain thinking they're a badass.
+Ahhhhhhperatives.
+Mech bumper cars.
+Purrbation.
+Baymed.
+Being in a cult.
+Racially biased lawsets.
+Abusing Law 2 to get laid.
+Harm, a small rural town in Germany.
+Xeno fetishists.
+Running naked through a plasma fire.
+Gibtonite.
+A backpack full of mousetraps.
+The death squad.
+Kitty ears.
+An immovable rod.
+Her smuggler's satchel.
+Ian and Lisa fucking like rabbits.
+A Chief Engineer who can't set up the engine.
+Being sucked out into space.
+A whole bunch of spiders in a SWAT suit.
+Getting robusted with a toolbox.
+Officer Beepsky.
+Lying to the AI about human harm.
+The grey tide.
+ASS BLAST USA.
+The mechanics of plasmaman sex.
+Lavaland.
+Chainsaws for hands.
+Photocopies of the entire crew's asses.
+Venus human traps.
+Clown's Tears.
+Walking mushroom cockfights.
+Improper comdom use.
+Greentext.
+Coating the whole station in blood.
+Cock cultists.
+Defusing a syndicate bomb with another bomb.
+Going braindead mid-murder.
+A petsplosion.
+Meat spikes.
+Lopping off the Captain's johnson and shooting it out a pneumatic cannon.
+The secret monkey technique.
+Putting the pAI's doorjack where it don't belong.
+Chemical sprayers filled with lube.
+Curators.
+Spooky skeletons.
+Replicating the Milgram experiment with an electropack.
+Catgirls.
+An escape pod cuddle puddle.
+Code Delta.
+Supermatter undergarments.
+A permaban.
+Stealing all the miners' ore.
+Bluespace artillery.
+Polly reading porn over the radio again.
+Mining the shaft.
+Grab intent.
+A blob zombie with an erection.
+Backdoor Xeno Babes.
+Five hundred ice spiders.
+Cablecuffs.
+Hulk, TK and X-ray.
+Paranoia.
+Putting the boots to him, medium style.
+ERP-seeking meteors.
+Paperwork HoPs.
+Rampant vending machines.
+The prisoner transfer center.
+Nations.
+Using a supermatter shard as a dildo.
+Liquid gibs.
+Birdboat Station.
+Not rolling antag.
+Clusterbangs.
+Flashing.
+Space vine tentacles.
+Pizza delivery ops.
+Inviting all the lizards onto the holodeck for a party.
+A used corgi suit.
+Saxing.
+Carbon dioxide.
+Actually playing Cards Against Spess.
+Warm donk pockets.
+Fucking your own cloned body.
+MULEbot manslaughter.
+Hiding in a locker like a little bitch.
+Tabling.
+Gyrating slimes.
+A motherfucking sorcerer.
+Ash storms.
+Telescience.
+Nuke ops buying nothing but soap.
+Anatomically correct borgs.
+The dixel.
+Friendly neighborhood death squads.
+Rage cages.
+Lore that no one will read.
+A robust mongoloid.
+A subverted service borg.
+An obscene amount of bike horns.
+Space bear meat.
+Erotic roleplay.
+Chain-recalling the shuttle.
+Mailing the clown to singularity containment.
+A mime having a stroke.
+A muthafuckin' Uzi.
+Ian and the HoP.
+Force-feeding prisoners other prisoners' gibs.
+Assistants raiding the armory.
+A monkey coup d'etat.
+Brain cakes.
+Suiciding with a fedora.
+A MULEbot drag race.
+Automatons.
+Six max-cap bombs.
+Forgetting you're a traitor.
+Itching powder.
+Some overpowered bullshit.
+Griff.
+Ash drakes.
+A fascist captain.
+FREE DRONE.
+Memes.
+Warm, velvety lizard sex.
+Valid salad.
+Heavy roleplay.
+Never setting your goddamn suit sensors.
+An MMI floating helplessly through space.
+A tiny prick.
+Immulsions.
+100 potency bluespace bananas.
+The crotchety IBM piece of shit you're supposed to call an AI.
+An irritatingly chipper borg.
+The lizard fuckpile.
+Fat sprites.
+The throbbing erection that the HoS gets at the thought of shooting something.
+Trying to stab someone and hugging them instead.
+Buttbots.
+Murderboners.
+The spread-eagled Honkmother.
+A disposal loop full of corpses.
+Assistant-on-assistant violence.
+The mystery of atmos.
+PDA sexting.
+A cult rune drawn with menstrual blood.
+Magic missile spam.
+Double dongs.
+A ghost-powered Ouija board.
+A MILF AI.
+Shapely lizard tails.
+An unknown assistant with a gas mask, yellow gloves and toolbelt.
+Exile implanting all the lizards.
+Fluke ops.
+Two doctors 69ing in the surgery room.
+A double-bladed energy sword, noslips, thermals, ablative armor, adrenal implants and a healing virus.
+Space Ebola.
+Grammatically incorrect lizard names.
+Porn ops.
+A trial for once.
+Trading your TC for memes.
+Uranium tiles.
+An extremely obese European man being chestbursted.
+Horrific cloning accidents.
+A big, black shadowling dick.
+Emagging.
+Dead lizard storage.
+Dermal armor.
+Fisting somebody until they gib.
+Alternate uses for defibrillator paddles.
+Breaking spacetime with thousands of bluespace tomatoes.
+Licking the supermatter on a dare.
+Reagent farts.
+Doctor's Delight.
+Plasmaman strippers.
+A Quartermaster who WON'T STOP ordering guns.
+Space lag.
+Polishing the captain's laser rifle.
+That one asshole nuke op.
+A surprise visit from GATO's CEO.
+The bleeding, dismembered, beautiful corpse of the clown.
+A glass of ...what?
+Teaching a silicon the Birds and the Bees.
+Dropping the permabrig soap.
+The king of the rumba beat.
+Unnecessary surgery.
+Farting in the air distro loop.
+Krokodil addiction.
+A H.O.N.K. mech.
+A dominatrix HoS.
+Sexcurity.
+The Experimentor.
+That goddamn fucking mime.
+Actually taking a hostage instead of just murdering them.
+Spacing the clown at shift start.
+A rage suicide.
+The Warden furiously masturbating to the prison monitor.
+Welderbombing.
+Validhunting.
+Nar'Sie making love to Lord Singulo.
+Fun.
+HONK!
+Enough morphine to make the entire station comatose.
+A defective comdom.
+Cleanbot.
+A beaker of dried space carp penis.
+An Ian storm.
+Nuking it from orbit.
+My senpAI.
+Harmbatonning.
+A GATO D-Notice.
+TALKING MIMES.
+The lusty xenomorph maid.
+Using assistants as human shields.
+Sentient securitrons.
+Piloting the station into the nearest sun.
+Decorative C4.
+Lizard rights.
+A universal recorder endlessly reciting porn.
+The suicide HoPline.
+Cultism.
+A corgi orgy.
+Medbay stutterwhores.
+The scrubbers uncontrollably spewing cum.
+The lawyer's job.
+Emoting slowly drawing a gun, then slowly cocking the trigger, then slowly preparing to shoot...
+NAR'SIE HAS RISEN.
+Pierrot's Throat.
+A clown bomb.
+Space bees?
+Driving the clown car full speed into the engine.
+IC in OOC.
+The best cookie.
+The wizard with his staff inserted into his anus.
+The chef masturbating with a bowl of lukewarm spaghetti.
+Writing out Woody's Got Wood in crayon.
+Dismemberment.
+Begging the gods for free stuff.
+Whining to the gods after getting robusted.
+Committing sudoku.
+A blood-soaked clown popping out of a morgue tray.
+SS13's toxic community.
+Wheelchair Ian.
+An actually helpful assistant.
+Mindbreaker toxin.
+Legions of cyborg assholes.
+Homicidal chefs.
+Extended.
+Grammar fascist gods.
+Cortical borers.
+A masochist in an ash storm.
+Draconic.
+Riding borgs, cowgirl style.
+The Voice of God.
+Overpowered stuns.
+Unironically enjoying library smut.
+Spiritual journeys with BZ.
+Deep-fried body parts.
+Suit sensor unit gas chambers.
+Moonlighting.
+Sex inside a mech.
+The philosophical complications of Asimov.
+A changeling monkeying itself mid-coitus.
+Swarmers.
+A fully-dressed CMO.
+The hardworking engineer.
+Skewium-induced orgasm.
+A salt overdose.
+Mindswap.
+Potassium in the toilet bowls.
+Giving head to the heads.
+A lizard wearing cat ears.
+Precious clown gold.
+Dabbing on a pile of corpses.
+Tactical chairs.
+The sweet, forbidden meat of the gondola.
+Turning tricks for holocredits.
+A captain that doesn't secure the disk.
+A positive moodlet.
+A sexy clown.
+Razoring the wings off the moths.
+Wiring the ethereals into the powernet.
+Well-aged miasma.
\ No newline at end of file
diff --git a/GainStation13/strings/dreamstrings.txt b/GainStation13/strings/dreamstrings.txt
new file mode 100644
index 0000000000..2cee649587
--- /dev/null
+++ b/GainStation13/strings/dreamstrings.txt
@@ -0,0 +1,53 @@
+%A% %ADJECTIVE% familiar face
+%A% %ADJECTIVE% crewmember
+%A% %ADJECTIVE% security officer
+%A% %ADJECTIVE% doctor
+%A% %ADJECTIVE% engineer
+%A% %ADJECTIVE% miner
+%A% %ADJECTIVE% slime
+%A% %ADJECTIVE% alien
+%A% %ADJECTIVE% traitor
+%A% %ADJECTIVE% ally
+%A% %ADJECTIVE% scientist
+%A% %ADJECTIVE% monkey
+%A% %ADJECTIVE% loved one
+%A% %ADJECTIVE% monster
+the %ADJECTIVE% captain
+%A% %ADJECTIVE% hat
+%A% %ADJECTIVE% ID card
+%A% %ADJECTIVE% bottle
+%A% %ADJECTIVE% toolbox
+%A% %ADJECTIVE% gun
+the sun
+the engine
+the station
+%A% %ADJECTIVE% planet
+the medical bay
+the %ADJECTIVE% bridge
+the %ADJECTIVE% brig
+%A% %ADJECTIVE% shuttle
+%A% %ADJECTIVE% laboratory
+Nanotrasen
+GATO
+the Syndicate
+the Wizard Federation
+Fat people
+Feeders
+Feedees
+%ADJECTIVE% blood
+%ADJECTIVE% plasma
+%ADJECTIVE% wind
+%ADJECTIVE% darkness
+%ADJECTIVE% light
+%ADJECTIVE% death
+%ADJECTIVE% blinking lights
+%ADJECTIVE% power
+%ADJECTIVE% riches
+water
+%ADJECTIVE% flames
+some %ADJECTIVE% melons
+%A% %ADJECTIVE% belly
+%A% %ADJECTIVE% gut
+%ADJECTIVE% breasts
+%ADJECTIVE% butts
+%A% %ADJECTIVE% feeding hose
diff --git a/GainStation13/strings/junkmail.txt b/GainStation13/strings/junkmail.txt
new file mode 100644
index 0000000000..34cf1a432c
--- /dev/null
+++ b/GainStation13/strings/junkmail.txt
@@ -0,0 +1,15 @@
+Hello! I am executive at GATO Nigel Takall. Due to accounting error all of my salary is stored in an account unreachable. In order to withdraw I am required to utilize your account to make a deposit to confirm my reality situation. In exchange for a temporary deposit I will give you a payment 1000 credits. All I need is access to your account. Will you be assistant please?
+WE NEED YOUR BLOOD! WE ARE AN ANARCHO-COMMUNIST VAMPIRE COMMUNE. BLOOD ONLY LASTS 42 DAYS BEFORE IT GOES BAD! WE DO NOT HAVE GATO STASIS! PLEASE, SEND BLOOD! THANK YOU! OR WE KILL YOU!
+Triple deposits are waiting for you at MaxBet Online when you register to play with us. You can qualify for a 200% Welcome Bonus at MaxBet Online when you sign up today. Once you are a player with MaxBet, you will also receive lucrative weekly and monthly promotions. You will be able to enjoy over 450 top-flight casino games at MaxBet.
+Hello !, I'm the former HoS of your deerest station accused by the GATO of being a traitor . I was the best we had to offer but it seems that nanotramsen has turned their back on me. I need 2000 credits to pay for my bail and then we can restore order on space station 14!
+Hello, I noticed you riding in a 2555 Ripley and wondered if you'd be interested in selling. Low mileage mechs sell very well in our current market. Please call 223-334-3245 if you're interested
+Resign Now. I’m on you now. You are fucking with me now Let’s see who you are. Watch your back , bitch. Call me. Don’t be afraid, you piece of shit. Stand up. If you don’t call, you’re just afraid. And later: I already know where you live, I’m on you. You might as well call me. You will see me. I promise. Bro.
+Clown Planet Is Going To Become Awesome Possum Again! If This Wasn't Sent To A Clown, Disregard. If This Was Sent To A Mime, Blow It Out Your Ass, Space Frenchie! Anyway! We Make Big Progress On Clown Planet After Stupid Mimes BLOW IT ALL TO SAM HELL!!!!! Sorry I Am Mad.. Anyway Come And Visit, Honkles! We Thought You Were Dead Long Time :^()
+MONTHPEOPLE ARE REAL, THE GATO DEEP STATE DOESN'T WANT YOU TO SEE THIS! I'VE SEEN THEM IN REAL LIFE, THEY HAVE HUGE EYEBALLS AND NO HEAD. THEY'RE SENTIENT CALENDARS. I'M NOT CRAZY. SEARCH THE CALENDAR INCIDENT ON GTNET. USE A PROXY! #BIGTRUTHS #WAKEYWAKEYSPACEMEN #21STOFSEPTEMBER
+hello 👋👋 nanotrasens! fuck 👈👌 the syndicate! they 👵 got ☄ me 😍😰 questioning my 🤰 loyalty to nanotraben! so 👌💯 please 😫 lets ⛔👀 gather our 📸💩 energy 😎 and 💰🔣 QUICK. 😲 send this 🗑👈 to 💦💊 10 😂😂 other loyal 💯 nanotraysens to 💦🤔 show we 🐶 dont 🙅🚫 take 🛍 nothing from 😂 the ✝ syndicate!! bless your 👉🏼 heart 😍💔
+Hello, my name is Immigration officer Mimi Sashimi from the American-Felinid Homeworld consulate. It appears your current documents are either inaccurate if not entirely fraudulent. This action in it's current state is a federal offense as listed in the United Earth Commission charter section NY-4. Please pay a fine of 300,000 Space credits or $3000 United States Dollars or face deportation
+Hi %name%, We are unable to validate your billing information for the next billing cycle of your subscription to HONK Weekly therefore we'll suspend your membership if we do not receive a response from you within 48 hours. Obviously we'd love to have you back, simply mail %address% to update your details and continue to enjoy all the best pranks & gags without interruption.
+Loyal customer, DonkCo Customer Service. We appreciate your brand loyalty support. As such, it is our responsibility and pleasure to inform you of the status of your package. Your package for one "Moth-Fuzz Parka" has been delayed. Due to local political tensions, an animal rights group has seized and eaten your package. We appreciate the patience, DonkCo
+MESSAGE FROM CENTCOM HIGH COMMAND: DO NOT ACCEPT THE FRIEND REQUEST OF TICKLEBALLS THE CLOWN. HE IS NOT FUNNY AND ON TOP OF THAT HE WILL HACK YOUR GTNET ACCOUNT AND MAKE YOU UNFUNNY TOO. YOU WILL LOSE ALL YOUR SPACECREDITS!!!!! SPREAD THE WORD. ANYONE WHO BECOMES FRIENDS WITH TINKLEBALLS THE CLOWN IS GOING TO LOSE ALL OF THEIR SPACECREDITS AND LOOK LIKE A HUGE IDIOT.
+i WAS A NORMAL BOY AND I CAME HOME FROM SCHOOL AND I WANTED TO PLAY SOME ORION TRAIL WHICH IS A VERY FUN GAME BUT WHEN WENT TO ARCADE MACHINE SOMETHING WAS WEIRD TEH LOGO HASD BLOD IN IT AND I BECAME VERY SCARE AND I CHECK OPTIONS AND TEHRES ONLY 1 "GO BACK" I CKLICK IT AND I SEE CHAT SI EMPTY THERE'S ONLY ONE CHARACTER CALLED "CLOSE TEH GAME " AND I GO TO ANOTHER MACHINE AND PLAY THERE BUT WHEN I PLAY GAME IS FULL OF BLOOD AND DEAD BODIES FROM SPACEMAN LOOK CLOSER AND SEE CLOWN AND CLOWN COMES CLOSER AND LOOKS AT ME AND SAYS "DON'T SAY I DIKDNT' WWARN YOU" AND CLOWN CLOSEUP APPEARS WITH BLOOD-RED HYPERREALISTIC EYES AND HE TELLS ME "YOU WILL BE THE NEXT ONE" AND ARCADE MACHINE POWER SHUT OFF AND THAT NITE CLOWN APPEAR AT MY WINDOW AND KILL ME AT 3 AM AND NOW IM DEAD AND YOU WILL BE TRHNE NEXT OEN UNLESS YOU PASTE THIS STORY TO 10 GTNET FRIENDS
+
diff --git a/GainStation13/strings/station_names.txt b/GainStation13/strings/station_names.txt
new file mode 100644
index 0000000000..81da22c70c
--- /dev/null
+++ b/GainStation13/strings/station_names.txt
@@ -0,0 +1,88 @@
+Stanford
+Dorf
+Alium
+Prefix
+Clowning
+Aegis
+Ishimura
+Scaredy
+Death-World
+Mime
+Honk
+Rogue
+MacRagge
+Ultrameens
+Safety
+Paranoia
+Explosive
+Neckbear
+Donk
+Muppet
+North
+West
+East
+South
+Slant-ways
+Widdershins
+Rimward
+Expensive
+Procreatory
+Imperial
+Unidentified
+Immoral
+Carp
+Ork
+Pete
+Control
+Nettle
+Aspie
+Class
+Crab
+Fist
+Corrogated
+Skeleton
+Race
+Fatguy
+Gentleman
+Capitalist
+Communist
+Bear
+Beard
+Space
+Spess
+Star
+Moon
+System
+Mining
+Neckbeard
+Research
+Supply
+Military
+Orbital
+Battle
+Science
+Asteroid
+Home
+Production
+Transport
+Delivery
+Extraplanetary
+Orbital
+Correctional
+Robot
+Hats
+Pizza
+Taco
+Burger
+Box
+Meta
+Pub
+Ship
+Book
+Refactor
+Fatty
+Obese
+Gluttonous
+Overweight
+Edible
+Tasty
diff --git a/GainStation13/strings/station_prefixes.txt b/GainStation13/strings/station_prefixes.txt
new file mode 100644
index 0000000000..c304b69f95
--- /dev/null
+++ b/GainStation13/strings/station_prefixes.txt
@@ -0,0 +1,41 @@
+Imperium
+Heretical
+Cuban
+Psychic
+Elegant
+Common
+Uncommon
+Rare
+Unique
+Houseruled
+Religious
+Atheist
+Traditional
+Houseruled
+Mad
+Super
+Ultra
+Secret
+Top Secret
+Deep
+Death
+Zybourne
+Central
+Main
+Government
+Uoi
+Fat
+Automated
+Experimental
+Augmented
+American
+Funky
+Thin
+Legendary
+Szechuan
+White
+Black
+Grey
+Grim
+Electric
+Burning
diff --git a/GainStation13/strings/station_suffixes.txt b/GainStation13/strings/station_suffixes.txt
new file mode 100644
index 0000000000..245a1a67a1
--- /dev/null
+++ b/GainStation13/strings/station_suffixes.txt
@@ -0,0 +1,65 @@
+Station
+Frontier
+Suffix
+Death-trap
+Space-hulk
+Lab
+Hazard
+Academy
+Spess Junk
+Fishery
+No-Moon
+Tomb
+Crypt
+Hut
+Monkey
+Bomb
+Trade Post
+Fortress
+Village
+Town
+City
+Edition
+Hive
+Complex
+Base
+Facility
+Depot
+Outpost
+Installation
+Drydock
+Observatory
+Array
+Relay
+Monitor
+Platform
+Construct
+Hangar
+Prison
+Center
+Port
+Waystation
+Factory
+Waypoint
+Stopover
+Hub
+HQ
+Office
+Object
+Fortification
+Colony
+Planet-Cracker
+Roost
+Fat Camp
+Airstrip
+Harbor
+Garden
+Continent
+Environment
+Course
+Country
+Province
+Workspace
+Metro
+Warehouse
+Space Junk
diff --git a/_maps/RandomRuins/SpaceRuins/whiteship_CFC01.dmm b/_maps/RandomRuins/SpaceRuins/whiteship_CFC01.dmm
index 29e466e5bc..e07e3596da 100644
--- a/_maps/RandomRuins/SpaceRuins/whiteship_CFC01.dmm
+++ b/_maps/RandomRuins/SpaceRuins/whiteship_CFC01.dmm
@@ -95,18 +95,7 @@
/obj/structure/fans/tiny,
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/docking_port/mobile{
- callTime = 250;
- can_move_docking_ports = 1;
- dheight = 0;
- dir = 2;
- dwidth = 11;
- height = 17;
- launch_status = 0;
- movement_force = list("KNOCKDOWN"=0,"THROW"=0);
- name = "Salvage Ship";
- port_direction = 8;
- preferred_direction = 4;
- width = 33
+ dir = 2
},
/turf/open/floor/mineral/basaltstone_floor,
/area/shuttle/abandoned/crew{
@@ -136,14 +125,10 @@
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
})
"ak" = (
-/obj/structure/sign/poster/contraband/communist_state{
- pixel_y = -32
- },
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
dir = 1
},
-/obj/item/kirbyplants/random,
/obj/effect/turf_decal/stripes/corner,
/obj/machinery/power/apc{
name = "Food Hall APC";
@@ -195,20 +180,14 @@
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
})
"aq" = (
-/obj/effect/decal/cleanable/dirt{
- desc = "A thin layer of dust coating the floor.";
- name = "dust"
+/obj/structure/sign/barsign{
+ req_access = null;
+ req_access_txt = "0";
+ name = "Restaurant Sign"
},
-/obj/effect/turf_decal/bot_white,
-/obj/machinery/door/poddoor{
- id = "whiteship_starboard"
- },
-/obj/structure/fans/tiny,
-/obj/structure/fans/tiny,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plating,
-/area/shuttle/abandoned/bar{
- name = "Kitchen";
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned/cargo{
+ name = "Food Hall";
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
})
"ar" = (
@@ -348,6 +327,7 @@
/obj/machinery/light{
dir = 8
},
+/obj/machinery/computer/arcade/orion_trail,
/turf/open/floor/plasteel/dark,
/area/shuttle/abandoned/cargo{
name = "Food Hall";
@@ -505,9 +485,6 @@
})
"aO" = (
/obj/effect/turf_decal/bot,
-/obj/structure/window/reinforced{
- dir = 4
- },
/obj/structure/reagent_dispensers/fueltank,
/obj/item/clothing/head/welding{
pixel_x = -2;
@@ -742,10 +719,7 @@
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
})
"bc" = (
-/obj/item/kirbyplants/random{
- pixel_y = 12
- },
-/turf/open/floor/mineral/basaltstone_floor,
+/turf/closed/wall/mineral/titanium/nodiagonal,
/area/shuttle/abandoned/crew{
name = "Arrival Hallway";
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
@@ -792,7 +766,10 @@
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
-/obj/machinery/vending/coffee,
+/obj/machinery/vending/snack/random{
+ extended_inventory = 1;
+ free = 1
+ },
/turf/open/floor/plasteel,
/area/shuttle/abandoned/cargo{
name = "Food Hall";
@@ -808,10 +785,7 @@
name = "Window Blast Door Control";
pixel_y = -24
},
-/obj/machinery/vending/snack/random{
- extended_inventory = 1;
- free = 1
- },
+/obj/machinery/vending/mealdor,
/turf/open/floor/plasteel,
/area/shuttle/abandoned/cargo{
name = "Food Hall";
@@ -875,6 +849,9 @@
/obj/structure/window/reinforced/tinted{
dir = 8
},
+/obj/structure/window/reinforced{
+ dir = 8
+ },
/turf/open/floor/plasteel/freezer,
/area/shuttle/abandoned/bar{
name = "Kitchen";
@@ -1008,7 +985,6 @@
/obj/effect/turf_decal/tile/bar{
dir = 1
},
-/obj/item/kirbyplants/random,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/turf/open/floor/plasteel,
/area/shuttle/abandoned/cargo{
@@ -1043,12 +1019,12 @@
dir = 4
},
/obj/vehicle/ridden/grocery_cart,
-/obj/machinery/light/small{
- pixel_x = 16
- },
/obj/structure/sign/poster/contraband/shamblers_juice{
pixel_y = -32
},
+/obj/machinery/light/small{
+ pixel_x = 16
+ },
/turf/open/floor/plasteel/checker,
/area/shuttle/abandoned/crew{
name = "Arrival Hallway";
@@ -1163,7 +1139,7 @@
})
"bQ" = (
/obj/structure/sign/poster/contraband/chefpropaganda,
-/turf/closed/wall/mineral/titanium,
+/turf/closed/wall/mineral/titanium/nodiagonal,
/area/shuttle/abandoned/bar{
name = "Kitchen";
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
@@ -1248,7 +1224,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 5
},
-/obj/structure/scale,
+/obj/structure/scale{
+ name = "discount counter"
+ },
/turf/open/floor/plasteel,
/area/shuttle/abandoned/cargo{
name = "Food Hall";
@@ -1258,7 +1236,7 @@
/obj/structure/sign/warning/docking{
name = "\improper KEEP CLEAR: BLAST DOORS"
},
-/turf/closed/wall/mineral/titanium,
+/turf/closed/wall/mineral/titanium/nodiagonal,
/area/shuttle/abandoned/bar{
name = "Kitchen";
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
@@ -1418,10 +1396,6 @@
/obj/effect/turf_decal/tile/blue{
dir = 8
},
-/obj/structure/table/reinforced,
-/obj/machinery/recharger{
- pixel_x = -14
- },
/obj/machinery/airalarm/all_access{
pixel_y = 24
},
@@ -1438,17 +1412,14 @@
pixel_y = -5;
pixel_x = 5
},
-/obj/item/paper{
- pixel_x = -7;
- pixel_y = 3;
- name = "Radio Network Manual";
- info = "RADIO NETWORK MANUAL
Every order intercom is set on 145.3 frequency by default. There are 6 of them, 0-5. It is recommended that you familiarize yourself with the layout of these tables for more efficient ship operation.
The general radio broadcast channel is for communicating with nearby crafts and stations. May be used for advertising purposes. It is recommended to temporary mute the order receiver intercom when preparing for general broadcast, as orders may interrupt your transmission."
- },
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/stripes{
icon_state = "trim";
dir = 5
},
+/obj/machinery/computer/shuttle/white_ship{
+ dir = 8
+ },
/turf/open/floor/plasteel/dark,
/area/shuttle/abandoned/bridge{
name = "Bridge";
@@ -1495,10 +1466,6 @@
},
/obj/structure/table,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/item/stock_parts/cell/high{
- pixel_y = 9;
- pixel_x = 4
- },
/obj/structure/cable,
/obj/item/circuitboard/machine/chem_dispenser{
pixel_x = -7;
@@ -1510,9 +1477,6 @@
pixel_x = 24
},
/obj/effect/turf_decal/delivery,
-/obj/machinery/light{
- dir = 4
- },
/obj/machinery/cell_charger,
/obj/item/stock_parts/cell/high/plus,
/obj/item/radio/off{
@@ -1520,6 +1484,9 @@
pixel_y = 0;
name = "radio"
},
+/obj/machinery/light/small{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/shuttle/abandoned/engine{
name = "Engineering";
@@ -1617,9 +1584,10 @@
name = "drain";
dir = 1
},
-/obj/machinery/door/window/westleft{
+/obj/machinery/door/window/westright{
dir = 2;
- name = "Drinks Access"
+ name = "Drinks Access";
+ icon_state = "left"
},
/turf/open/floor/plasteel,
/area/shuttle/abandoned/bar{
@@ -1632,7 +1600,8 @@
dir = 4
},
/obj/machinery/door/window/westright{
- dir = 2
+ dir = 2;
+ name = "Drinks Access"
},
/obj/machinery/chem_dispenser/drinks/fullupgrade{
dir = 8
@@ -1807,10 +1776,12 @@
name = "paper - printed note";
info = "Hello lucky soul!
I'm Cynthia! More precisely, one of the Autonomous Spacefearring Nutrision Distribution Centers (A.S.N.D.)! One of the Cynthia Fitness Corporation most advanced public assets! I don't have much time, so I'll make it quick! I got hit by a solar flare, lost contact with CFC, and soon being offline from hivemind will trigger my termination protocols as I no longer be the Cynthia!
I'm asking for one thing! Please, continue my mission! Bring 'healthy' yummies to whoever wants (or needs, by your judgment)! CFC will be grateful for your service! Make me proud of you, random explorer!
((PS. Remember my company policy! Clients with BMI equal or higher than 35 gets at least triple servings!))"
},
-/obj/machinery/computer/shuttle/white_ship{
+/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{
+ designate_time = 100;
dir = 8;
- name = "A.S.N.D. Console";
- desc = "Used to control the A.S.N.D. Ship."
+ view_range = 14;
+ x_offset = -4;
+ y_offset = -8
},
/turf/open/floor/plasteel/dark,
/area/shuttle/abandoned/bridge{
@@ -2151,11 +2122,8 @@
/obj/machinery/light{
light_color = "#cee5d2"
},
-/obj/machinery/chem_master/condimaster{
- name = "CondiMaster Neo";
- pixel_x = -4
- },
/obj/effect/turf_decal/bot_white,
+/obj/machinery/chem_master/condimaster,
/turf/open/floor/plasteel/cafeteria,
/area/shuttle/abandoned/bar{
name = "Kitchen";
@@ -2271,11 +2239,6 @@
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
})
"cY" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- external_pressure_bound = 140;
- name = "server vent";
- pressure_checks = 0
- },
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
@@ -2283,6 +2246,7 @@
icon_state = "manifold-1";
dir = 4
},
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plating,
/area/shuttle/abandoned/engine{
name = "Engineering";
@@ -2421,6 +2385,7 @@
/obj/structure/window/reinforced,
/obj/machinery/deepfryer,
/obj/machinery/door/firedoor/border_only,
+/obj/structure/window/reinforced/tinted,
/turf/open/floor/plasteel/cafeteria,
/area/shuttle/abandoned/bar{
name = "Kitchen";
@@ -2469,6 +2434,7 @@
/obj/item/reagent_containers/food/condiment/milk,
/obj/item/reagent_containers/food/condiment/milk,
/obj/structure/closet/secure_closet/freezer/fridge,
+/obj/structure/window/reinforced/tinted,
/turf/open/floor/plasteel/cafeteria,
/area/shuttle/abandoned/bar{
name = "Kitchen";
@@ -2550,7 +2516,7 @@
dir = 4;
pixel_x = -24
},
-/obj/machinery/light{
+/obj/machinery/light/small{
dir = 8
},
/turf/open/floor/plating,
@@ -2941,9 +2907,6 @@
"dN" = (
/obj/effect/turf_decal/bot_white,
/obj/structure/window/reinforced,
-/obj/machinery/door/window/brigdoor/westleft{
- name = "Pete Containment Unit"
- },
/obj/structure/window/reinforced{
dir = 4
},
@@ -2953,6 +2916,12 @@
/obj/structure/window/reinforced{
dir = 1
},
+/obj/structure/window/reinforced/tinted{
+ dir = 1
+ },
+/obj/machinery/door/window/brigdoor/westleft{
+ name = "Pete Containment Unit"
+ },
/turf/open/floor/plasteel/freezer,
/area/shuttle/abandoned/bar{
name = "Kitchen";
@@ -3038,6 +3007,7 @@
/obj/structure/table/reinforced,
/obj/structure/window/reinforced,
/obj/item/reagent_containers/glass/beaker/large,
+/obj/structure/window/reinforced/tinted,
/turf/open/floor/plasteel/cafeteria,
/area/shuttle/abandoned/bar{
name = "Kitchen";
@@ -3255,7 +3225,6 @@
id = "whiteship_starboard"
},
/obj/structure/fans/tiny,
-/obj/structure/fans/tiny,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plating,
/area/shuttle/abandoned/bar{
@@ -3410,38 +3379,9 @@
name = "Kitchen";
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
})
-"mR" = (
-/obj/structure/window/reinforced,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/machinery/door/firedoor/border_only,
-/obj/machinery/vending/cola/blue,
-/turf/open/floor/plasteel,
-/area/shuttle/abandoned/cargo{
- name = "Food Hall";
- ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
- })
"nM" = (
/obj/structure/sign/poster/contraband/space_up,
/turf/closed/wall/mineral/titanium,
-/area/shuttle/abandoned/cargo{
- name = "Food Hall";
- ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
- })
-"nT" = (
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/obj/structure/sign/barsign{
- pixel_y = 32;
- req_access = null;
- req_access_txt = "0";
- name = "Restaurant Sign"
- },
-/turf/open/floor/plasteel,
/area/shuttle/abandoned/cargo{
name = "Food Hall";
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
@@ -3529,20 +3469,15 @@
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
})
"qY" = (
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/obj/machinery/vending/mealdor,
/obj/structure/sign/poster/contraband/eat{
pixel_x = 32
},
/obj/machinery/airalarm/all_access{
pixel_y = 24
},
-/turf/open/floor/plasteel,
-/area/shuttle/abandoned/cargo{
- name = "Food Hall";
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned/crew{
+ name = "Arrival Hallway";
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
})
"rT" = (
@@ -3732,9 +3667,6 @@
})
"zn" = (
/obj/effect/turf_decal/bot,
-/obj/structure/window/reinforced{
- dir = 4
- },
/obj/effect/spawner/lootdrop/keg,
/turf/open/floor/plating,
/area/shuttle/abandoned/engine{
@@ -3826,6 +3758,12 @@
name = "Kitchen";
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
})
+"Cv" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/shuttle/abandoned/cargo{
+ name = "Food Hall";
+ ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
+ })
"DK" = (
/obj/machinery/hydroponics/constructable,
/obj/effect/turf_decal/tile/green{
@@ -3923,6 +3861,7 @@
pixel_y = -28;
listening = 0
},
+/obj/structure/table/wood,
/turf/open/floor/plasteel/dark,
/area/shuttle/abandoned/cargo{
name = "Food Hall";
@@ -4078,6 +4017,12 @@
dir = 8
},
/turf/open/floor/plating,
+/area/shuttle/abandoned/engine{
+ name = "Engineering";
+ ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
+ })
+"Sc" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
/area/shuttle/abandoned/engine{
name = "Engineering";
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
@@ -4096,6 +4041,12 @@
},
/obj/item/storage/bag/tray,
/turf/open/floor/plasteel,
+/area/shuttle/abandoned/bar{
+ name = "Kitchen";
+ ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
+ })
+"Ts" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
/area/shuttle/abandoned/bar{
name = "Kitchen";
ambientsounds = list('sound/ambience/ambinice.ogg','sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg','sound/ambience/ambigen15.ogg')
@@ -4249,6 +4200,9 @@
/obj/structure/window/reinforced/tinted{
dir = 8
},
+/obj/structure/window/reinforced{
+ dir = 8
+ },
/turf/open/floor/plasteel/freezer,
/area/shuttle/abandoned/bar{
name = "Kitchen";
@@ -4334,7 +4288,7 @@ aG
aG
aG
aG
-dW
+Sc
kr
kr
kr
@@ -4410,13 +4364,13 @@ hK
aC
aP
bj
-aG
+Cv
aG
aG
an
an
an
-dW
+Sc
xu
ds
dK
@@ -4454,8 +4408,8 @@ bT
tC
cz
Hb
-dW
-dW
+Sc
+Sc
RP
Yw
bq
@@ -4516,7 +4470,7 @@ an
dv
AV
dZ
-aq
+ei
"}
(12,1,1) = {"
ae
@@ -4554,7 +4508,7 @@ an
BE
dM
ea
-an
+Ts
"}
(14,1,1) = {"
af
@@ -4581,8 +4535,8 @@ cU
bn
aV
aK
-aG
-nT
+aq
+bP
bZ
cn
cz
@@ -4600,7 +4554,7 @@ aj
aj
aj
aj
-aG
+Cv
fs
pG
co
@@ -4628,9 +4582,9 @@ aX
cT
dh
dy
+Ts
an
-an
-an
+Ts
"}
(18,1,1) = {"
ah
@@ -4654,10 +4608,10 @@ ej
(19,1,1) = {"
He
aj
-aj
+bc
aZ
bw
-aj
+bc
qY
df
cr
@@ -4668,7 +4622,7 @@ dS
dA
an
an
-an
+Ts
"}
(20,1,1) = {"
aj
@@ -4678,7 +4632,7 @@ ao
de
da
aj
-mR
+Cv
cs
LP
DU
@@ -4711,8 +4665,8 @@ tS
(22,1,1) = {"
aj
aj
-aj
bc
+ao
de
ai
aj
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 730e2dc07e..8787d3edd7 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -454,14 +454,14 @@ GLOBAL_LIST_INIT(pda_reskins, list(
#define STACK_CHECK_ADJACENT "adjacent" //checks if there is an object of the result type within one tile
//text files
-#define BRAIN_DAMAGE_FILE "traumas.json"
-#define ION_FILE "ion_laws.json"
+#define BRAIN_DAMAGE_FILE "traumas_gs.json" //GS13 Edit: Less meta memes
+#define ION_FILE "ion_laws_gs.json" //GS13 Edit: we're changing some of the things here, and removing other things
#define PIRATE_NAMES_FILE "pirates.json"
#define REDPILL_FILE "redpill.json"
#define ARCADE_FILE "arcade.json"
// #define BOOMER_FILE "boomer.json"
// #define LOCATIONS_FILE "locations.json"
-// #define WANTED_FILE "wanted_message.json"
+// #define WANTED_FILE "wanted_message_gs.json" //GS13 Edit: ...This is commented out, but I'll swap it to ours, incase it needs to be renabled.
// #define VISTA_FILE "steve.json"
#define FLESH_SCAR_FILE "wounds/flesh_scar_desc.json"
#define BONE_SCAR_FILE "wounds/bone_scar_desc.json"
@@ -569,7 +569,7 @@ GLOBAL_LIST_INIT(pda_reskins, list(
#define SHOES_TIED 1
#define SHOES_KNOTTED 2
-#define WANTED_FILE "wanted_message.json"
+#define WANTED_FILE "wanted_message_gs.json" //GS Edit: Nanotrasen to Gato.
// Notification action types
#define NOTIFY_JUMP "jump"
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index a97c862adc..07b743b9e8 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -297,7 +297,7 @@
#define OFFSET_MUTPARTS "mutantparts"
// MINOR TWEAKS/MISC
-#define AGE_MIN 18 // youngest a character can be // CITADEL EDIT - 17 --> 18
+#define AGE_MIN 21 // youngest a character can be // CITADEL EDIT - 17 --> 18 //GS13 EDIT - 18 --> 21
#define AGE_MAX 85 // oldest a character can be randomly generated
#define AGE_MAX_INPUT 85 // oldest a character's age can be manually set
#define WIZARD_AGE_MIN 30 // youngest a wizard can be
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 2bc634bb61..f2c3c13848 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -295,6 +295,7 @@
#define TRAIT_HEAT "heat"
#define TRAIT_DISTANT "headpat_hater"
#define TRAIT_CUM_PLUS "cum_plus"
+#define TRAIT_TRANSFORMED "transformed"
// mobility flag traits
// IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it)
diff --git a/code/__HELPERS/do_after.dm b/code/__HELPERS/do_after.dm
index 9f98b0e10e..ea87dea222 100644
--- a/code/__HELPERS/do_after.dm
+++ b/code/__HELPERS/do_after.dm
@@ -14,6 +14,7 @@
var/holding = user.get_active_held_item()
var/datum/progressbar/progbar
+ var/is_food_gripper = istype(user.get_active_held_item(), /obj/item/gripper/food) //GS13 EDIT
if (progress)
progbar = new(user, time, target)
@@ -34,7 +35,8 @@
|| (!(timed_action_flags & IGNORE_TARGET_IN_DOAFTERS) && !(target in user.do_afters)) \
|| (!(timed_action_flags & IGNORE_USER_LOC_CHANGE) && !drifting && user.loc != user_loc) \
|| (!(timed_action_flags & IGNORE_TARGET_LOC_CHANGE) && target.loc != target_loc) \
- || (!(timed_action_flags & IGNORE_HELD_ITEM) && user.get_active_held_item() != holding) \
+ //GS13 EDIT
+ || (!(timed_action_flags & IGNORE_HELD_ITEM) && !is_food_gripper && user.get_active_held_item() != holding) \
|| (!(timed_action_flags & IGNORE_INCAPACITATED) && user.incapacitated()) \
|| (extra_checks && !extra_checks.Invoke()) \
)
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index e177fa2860..cb68fe61fd 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -581,8 +581,11 @@
if((character.mind.assigned_role == "Cyborg") || (character.mind.assigned_role == character.mind.special_role))
return
+ var/displayed_rank = rank
+ if(character.client && character.client.prefs && character.client?.prefs?.alt_titles_preferences[rank])
+ displayed_rank = character.client?.prefs?.alt_titles_preferences[rank]
var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems)
- announcer.announce("ARRIVAL", character.real_name, rank, list()) //make the list empty to make it announce it in common
+ announcer.announce("ARRIVAL", character.real_name, displayed_rank, list()) //make the list empty to make it announce it in common
/proc/lavaland_equipment_pressure_check(turf/T)
. = FALSE
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index 609669d704..b7d4cadfaa 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -290,11 +290,11 @@ GLOBAL_LIST_INIT(TAGGERLOCATIONS, list("Disposals",
"Circuitry", "Toxins", "Dormitories", "Virology",
"Xenobiology", "Law Office","Detective's Office"))
-GLOBAL_LIST_INIT(station_prefixes, world.file2list("strings/station_prefixes.txt") + "")
+GLOBAL_LIST_INIT(station_prefixes, world.file2list("GainStation13/strings/station_prefixes.txt") + "") //GS13 Edit: Our Names
-GLOBAL_LIST_INIT(station_names, world.file2list("strings/station_names.txt" + ""))
+GLOBAL_LIST_INIT(station_names, world.file2list("GainStation13/strings/station_names.txt" + "")) //GS13 Edit: Our names
-GLOBAL_LIST_INIT(station_suffixes, world.file2list("strings/station_suffixes.txt"))
+GLOBAL_LIST_INIT(station_suffixes, world.file2list("GainStation13/strings/station_suffixes.txt")) //GS13 Edit: Our names
GLOBAL_LIST_INIT(server_taglines, world.file2list("[global.config.directory]/server_taglines.txt"))
@@ -361,4 +361,4 @@ GLOBAL_LIST_INIT(bodypart_names, list(num2text(HEAD) = "Head", num2text(CHEST) =
// list linking bodypart names back to the bitflags
GLOBAL_LIST_INIT(bodypart_values, list("Head" = num2text(HEAD), "Chest" = num2text(CHEST), "Left Leg" = num2text(LEG_LEFT), "Right Leg" = num2text(LEG_RIGHT), "Left Arm" = num2text(ARM_LEFT), "Right Arm" = num2text(ARM_RIGHT)))
-GLOBAL_LIST_INIT(junkmail_messages, world.file2list("strings/junkmail.txt"))
+GLOBAL_LIST_INIT(junkmail_messages, world.file2list("GainStation13/strings/junkmail.txt")) //GS Edit: Nanotrasen to GATO
diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm
index 1148e92dd5..aaa1fc9759 100644
--- a/code/_globalvars/lists/names.dm
+++ b/code/_globalvars/lists/names.dm
@@ -29,7 +29,7 @@ GLOBAL_LIST_INIT(verbs, world.file2list("strings/names/verbs.txt"))
GLOBAL_LIST_INIT(ing_verbs, world.file2list("strings/names/ing_verbs.txt"))
GLOBAL_LIST_INIT(adverbs, world.file2list("strings/names/adverbs.txt"))
GLOBAL_LIST_INIT(adjectives, world.file2list("strings/names/adjectives.txt"))
-GLOBAL_LIST_INIT(dream_strings, world.file2list("strings/dreamstrings.txt"))
+GLOBAL_LIST_INIT(dream_strings, world.file2list("GainStation13/strings/dreamstrings.txt")) //GS13 Edit: Nanotrasen to Gato... And our own additions
//loaded on startup because of "
//would include in rsc if ' was used
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index b8f5c68dee..af28f2edf3 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -464,7 +464,10 @@ SUBSYSTEM_DEF(job)
else
handle_auto_deadmin_roles(M.client, rank)
- to_chat(M, "You are the [rank].")
+ var/display_rank = rank
+ if(M.client && M.client.prefs && M.client?.prefs?.alt_titles_preferences[rank])
+ display_rank = M.client?.prefs?.alt_titles_preferences[rank]
+ to_chat(M, "You are the [display_rank].")
if(job)
to_chat(M, "As the [rank] you answer directly to [job.supervisors]. Special circumstances may change this.")
job.radio_help_message(M)
diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index b8c303db96..f448e9dc7a 100644
--- a/code/controllers/subsystem/processing/quirks.dm
+++ b/code/controllers/subsystem/processing/quirks.dm
@@ -17,7 +17,7 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
/datum/controller/subsystem/processing/quirks/Initialize(timeofday)
if(!quirks.len)
SetupQuirks()
- quirk_blacklist = list(list("Blind","Nearsighted"),list("Jolly","Depression","Apathetic"),list("Ageusia","Deviant Tastes"),list("Ananas Affinity","Ananas Aversion"),list("Alcohol Tolerance","Alcohol Intolerance"),list("Alcohol Intolerance","Drunken Resilience"), list("Weak Legs", "Strong Legs"), list("Fat Affinity","Fat Aversion")) //GS13 EDIT
+ quirk_blacklist = list(list("Blind","Nearsighted"),list("Jolly","Depression","Apathetic"),list("Ageusia", "Vegetarian", "Deviant Tastes"),list("Ananas Affinity","Ananas Aversion"),list("Alcohol Tolerance","Alcohol Intolerance"),list("Alcohol Intolerance","Drunken Resilience"), list("Weak Legs", "Strong Legs"), list("Fat Affinity","Fat Aversion")) //GS13 EDIT
return ..()
/datum/controller/subsystem/processing/quirks/proc/SetupQuirks()
diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm
index 3dbdf1f3ac..b1a02decf8 100644
--- a/code/datums/brain_damage/split_personality.dm
+++ b/code/datums/brain_damage/split_personality.dm
@@ -163,12 +163,14 @@
if(_codeword)
codeword = _codeword
else
- codeword = pick(strings("ion_laws.json", "ionabstract")\
- | strings("ion_laws.json", "ionobjects")\
- | strings("ion_laws.json", "ionadjectives")\
- | strings("ion_laws.json", "ionthreats")\
- | strings("ion_laws.json", "ionfood")\
- | strings("ion_laws.json", "iondrinks"))
+ //GS13 Start: We're using our file
+ codeword = pick(strings("ion_laws_gs.json", "ionabstract")\
+ | strings("ion_laws_gs.json", "ionobjects")\
+ | strings("ion_laws_gs.json", "ionadjectives")\
+ | strings("ion_laws_gs.json", "ionthreats")\
+ | strings("ion_laws_gs.json", "ionfood")\
+ | strings("ion_laws_gs.json", "iondrinks"))
+ //GS13 End
/datum/brain_trauma/severe/split_personality/brainwashing/on_gain()
..()
diff --git a/code/datums/components/storage/concrete/rped.dm b/code/datums/components/storage/concrete/rped.dm
index 47549be565..70298d4e25 100644
--- a/code/datums/components/storage/concrete/rped.dm
+++ b/code/datums/components/storage/concrete/rped.dm
@@ -1,3 +1,5 @@
+#define MAX_STACK_PICKUP 30
+
/datum/component/storage/concrete/rped
collection_mode = COLLECT_EVERYTHING
allow_quick_gather = TRUE
@@ -9,13 +11,61 @@
max_items = 100
display_numerical_stacking = TRUE
+ var/static/list/allowed_material_types = list(
+ /obj/item/stack/sheet/glass,
+ /obj/item/stack/sheet/plasteel,
+ /obj/item/stack/cable_coil,
+ )
+
+ var/static/list/allowed_bluespace_types = list(
+ /obj/item/stack/ore/bluespace_crystal,
+ /obj/item/stack/sheet/bluespace_crystal,
+ )
+
/datum/component/storage/concrete/rped/can_be_inserted(obj/item/I, stop_messages, mob/M)
. = ..()
- if(!I.get_part_rating())
- if (!stop_messages)
- to_chat(M, "[parent] only accepts machine parts!")
+ if(!.)
+ return .
+
+ //we check how much of glass,plasteel & cable the user can insert
+ if(isstack(I))
+ //user tried to insert invalid stacktype
+ if(!is_type_in_list(I, allowed_material_types) && !is_type_in_list(I, allowed_bluespace_types))
+ return FALSE
+
+ var/obj/item/stack/the_stack = I
+ var/present_amount = 0
+
+ //we try to count & limit how much the user can insert of each type to prevent them from using it as an normal storage medium
+ for(var/obj/item/stack/stack_content in parent)
+ //is user trying to insert any of these listed bluespace stuff
+ if(is_type_in_list(I, allowed_bluespace_types))
+ //if yes count total bluespace stuff is the RPED and then compare the total amount to the value the user is trying to insert
+ if(is_type_in_list(stack_content, allowed_bluespace_types))
+ present_amount += stack_content.amount
+ //count other normal stack stuff
+ else if(istype(I,stack_content.type))
+ present_amount = stack_content.amount
+ break
+
+ //no more storage for this specific stack type
+ if(MAX_STACK_PICKUP - present_amount == 0)
+ return FALSE
+
+ //we want the user to insert the exact stack amount which is available so we dont have to bother subtracting & leaving left overs for the user
+ var/available = MAX_STACK_PICKUP-present_amount
+ if(available - the_stack.amount < 0)
+ return FALSE
+
+ else if(istype(I, /obj/item/circuitboard/machine) || istype(I, /obj/item/circuitboard/computer))
+ return TRUE
+
+ //check normal insertion of other stock parts
+ else if(!I.get_part_rating())
return FALSE
+ return .
+
/datum/component/storage/concrete/rped/quick_empty(mob/M)
var/atom/A = parent
if(!M.canUseStorage() || !A.Adjacent(M) || M.incapacitated())
@@ -52,13 +102,60 @@
max_items = 350
display_numerical_stacking = TRUE
+ var/static/list/allowed_material_types = list(
+ /obj/item/stack/sheet/glass,
+ /obj/item/stack/sheet/plasteel,
+ /obj/item/stack/cable_coil,
+ )
+
+ var/static/list/allowed_bluespace_types = list(
+ /obj/item/stack/ore/bluespace_crystal,
+ /obj/item/stack/sheet/bluespace_crystal,
+ )
+
/datum/component/storage/concrete/bluespace/rped/can_be_inserted(obj/item/I, stop_messages, mob/M)
. = ..()
- if(!I.get_part_rating())
- if (!stop_messages)
- to_chat(M, "[parent] only accepts machine parts!")
+ if(!.)
+ return .
+
+ //we check how much of glass,plasteel & cable the user can insert
+ if(isstack(I))
+ //user tried to insert invalid stacktype
+ if(!is_type_in_list(I, allowed_material_types) && !is_type_in_list(I, allowed_bluespace_types))
+ return FALSE
+
+ var/obj/item/stack/the_stack = I
+ var/present_amount = 0
+
+ //we try to count & limit how much the user can insert of each type to prevent them from using it as an normal storage medium
+ for(var/obj/item/stack/stack_content in parent)
+ //is user trying to insert any of these listed bluespace stuff
+ if(is_type_in_list(I, allowed_bluespace_types))
+ //if yes count total bluespace stuff is the RPED and then compare the total amount to the value the user is trying to insert
+ if(is_type_in_list(stack_content, allowed_bluespace_types))
+ present_amount += stack_content.amount
+ //count other normal stack stuff
+ else if(istype(I,stack_content.type))
+ present_amount = stack_content.amount
+ break
+
+ //no more storage for this specific stack type
+ if(MAX_STACK_PICKUP - present_amount == 0)
+ return FALSE
+
+ //we want the user to insert the exact stack amount which is available so we dont have to bother subtracting & leaving left overs for the user
+ var/available = MAX_STACK_PICKUP-present_amount
+ if(available - the_stack.amount < 0)
+ return FALSE
+
+ else if(istype(I, /obj/item/circuitboard/machine) || istype(I, /obj/item/circuitboard/computer))
+ return TRUE
+
+ //check normal insertion of other stock parts
+ else if(!I.get_part_rating())
return FALSE
+ return .
/datum/component/storage/concrete/bluespace/rped/quick_empty(mob/M)
var/atom/A = parent
@@ -85,3 +182,5 @@
stoplag(1)
progress.end_progress()
A.do_squish(0.8, 1.2)
+
+#undef MAX_STACK_PICKUP
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index 8195666783..bb0f786fc5 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -138,12 +138,18 @@
var/static/list/show_directions = list(SOUTH, WEST)
if(H.mind && (H.mind.assigned_role != H.mind.special_role))
var/assignment
+ var/displayed_rank
if(H.mind.assigned_role)
assignment = H.mind.assigned_role
else if(H.job)
assignment = H.job
else
assignment = "Unassigned"
+ if(C && C.prefs && C.prefs.alt_titles_preferences[assignment])
+ assignment = C.prefs.alt_titles_preferences[assignment]
+
+ if(assignment)
+ displayed_rank = C.prefs.alt_titles_preferences[assignment]
var/static/record_id_num = 1001
var/id = num2hex(record_id_num++,6)
@@ -166,7 +172,7 @@
var/datum/data/record/G = new()
G.fields["id"] = id
G.fields["name"] = H.real_name
- G.fields["rank"] = assignment
+ G.fields["rank"] = displayed_rank
G.fields["age"] = H.age
G.fields["species"] = H.dna.species.name
G.fields["fingerprint"] = md5(H.dna.uni_identity)
@@ -213,7 +219,7 @@
var/datum/data/record/L = new()
L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]") //surely this should just be id, like the others?
L.fields["name"] = H.real_name
- L.fields["rank"] = H.mind.assigned_role
+ L.fields["rank"] = displayed_rank
L.fields["age"] = H.age
if(H.gender == MALE)
G.fields["gender"] = "Male"
diff --git a/code/datums/station_traits/negative_traits.dm b/code/datums/station_traits/negative_traits.dm
index 09be52d700..c89f41b16b 100644
--- a/code/datums/station_traits/negative_traits.dm
+++ b/code/datums/station_traits/negative_traits.dm
@@ -284,4 +284,4 @@
weight = 2
event_control_path = /datum/round_event_control/radiation_storm
weight_multiplier = 1.5
- max_occurrences_modifier = 2
+ max_occurrences_modifier = 0 //GS13 - radstorm bad
diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm
index ed02cd2f25..1d660c786c 100644
--- a/code/datums/weather/weather_types/radiation_storm.dm
+++ b/code/datums/weather/weather_types/radiation_storm.dm
@@ -18,7 +18,7 @@
area_type = /area
protected_areas = list(/area/maintenance, /area/ai_monitored/turret_protected/ai_upload, /area/ai_monitored/turret_protected/ai_upload_foyer,
- /area/ai_monitored/turret_protected/ai, /area/commons/storage/emergency/starboard, /area/commons/storage/emergency/port, /area/shuttle, /area/ruin/lavaland)
+ /area/ai_monitored/turret_protected/ai, /area/commons/storage/emergency/starboard, /area/commons/storage/emergency/port, /area/shuttle, /area/ruin/lavaland, /area/commons/dorms, /area/service/bar) //GS13 Edit: Dorms and bar are safe...
target_trait = ZTRAIT_STATION
immunity_type = TRAIT_RADSTORM_IMMUNE
diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm
index d06366c021..1919d424ee 100644
--- a/code/game/machinery/announcement_system.dm
+++ b/code/game/machinery/announcement_system.dm
@@ -17,9 +17,9 @@ GLOBAL_LIST_EMPTY(announcement_systems)
circuit = /obj/item/circuitboard/machine/announcement_system
var/obj/item/radio/headset/radio
- var/arrival = "%PERSON has signed up as %RANK"
+ var/arrival = "%PERSON has signed up as %DISP_RANK (%RANK)"
var/arrivalToggle = TRUE
- var/newhead = "%PERSON, %RANK, is the department head."
+ var/newhead = "%PERSON, %DISP_RANK (%RANK), is the department head."
var/newheadToggle = TRUE
var/cryostorage = "%PERSON, %RANK, has been moved into cryogenic storage." // this shouldnt be changed
@@ -70,23 +70,24 @@ GLOBAL_LIST_EMPTY(announcement_systems)
else
return ..()
-/obj/machinery/announcement_system/proc/CompileText(str, user, rank) //replaces user-given variables with actual thingies.
+/obj/machinery/announcement_system/proc/CompileText(str, user, rank, displayed_rank) //replaces user-given variables with actual thingies.
str = replacetext(str, "%PERSON", "[user]")
str = replacetext(str, "%RANK", "[rank]")
+ str = replacetext(str, "%DISP_RANK", "[displayed_rank]")
return str
-/obj/machinery/announcement_system/proc/announce(message_type, user, rank, list/channels)
+/obj/machinery/announcement_system/proc/announce(message_type, user, rank, displayed_rank, list/channels)
if(!is_operational())
return
var/message
if(message_type == "ARRIVAL" && arrivalToggle)
- message = CompileText(arrival, user, rank)
+ message = CompileText(arrival, user, rank, displayed_rank)
else if(message_type == "NEWHEAD" && newheadToggle)
- message = CompileText(newhead, user, rank)
+ message = CompileText(newhead, user, rank, displayed_rank)
else if(message_type == "CRYOSTORAGE")
- message = CompileText(cryostorage, user, rank)
+ message = CompileText(cryostorage, user, rank, displayed_rank)
else if(message_type == "ARRIVALS_BROKEN")
message = "The arrivals shuttle has been damaged. Docking for repairs..."
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index b8ab7ef2cc..8b6ac964d0 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -43,7 +43,7 @@
/obj/machinery/door/airlock
name = "airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/station/public.dmi' //GS13 change (perspective sprites)
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/public.dmi' //GS13 Edit: perspective sprites
icon_state = "closed"
max_integrity = 300
var/normal_integrity = AIRLOCK_INTEGRITY_N
@@ -87,8 +87,10 @@
var/previous_airlock = /obj/structure/door_assembly //what airlock assembly mineral plating was applied to
var/wiretypepath = /datum/wires/airlock // which set of per round randomized wires this airlock type has.
var/airlock_material //material of inner filling; if its an airlock with glass, this should be set to "glass"
+ //GS13 Edit Start: perspective sprites
var/overlays_file = 'GainStation13/icons/obj/doors/airlocks/station/overlays.dmi'
var/note_overlay_file = 'GainStation13/icons/obj/doors/airlocks/station/overlays.dmi' //Used for papers and photos pinned to the airlock
+ //GS13 End
var/cyclelinkeddir = 0
var/obj/machinery/door/airlock/cyclelinkedairlock
@@ -611,22 +613,22 @@
/obj/machinery/door/airlock/proc/check_unres() //unrestricted sides. This overlay indicates which directions the player can access even without an ID
if(hasPower() && unres_sides)
if(unres_sides & NORTH)
- var/image/I = image(icon='GainStation13/icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_n") //layer=src.layer+1
+ var/image/I = image(icon='GainStation13/icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_n") //layer=src.layer+1 //GS13 Edit: perspective sprites
I.pixel_y = 32
set_light(l_range = 2, l_power = 1)
add_overlay(I)
if(unres_sides & SOUTH)
- var/image/I = image(icon='GainStation13/icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_s") //layer=src.layer+1
+ var/image/I = image(icon='GainStation13/icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_s") //layer=src.layer+1 //GS13 Edit: perspective sprites
I.pixel_y = -32
set_light(l_range = 2, l_power = 1)
add_overlay(I)
if(unres_sides & EAST)
- var/image/I = image(icon='GainStation13/icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_e") //layer=src.layer+1
+ var/image/I = image(icon='GainStation13/icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_e") //layer=src.layer+1 //GS13 Edit: perspective sprites
I.pixel_x = 32
set_light(l_range = 2, l_power = 1)
add_overlay(I)
if(unres_sides & WEST)
- var/image/I = image(icon='GainStation13/icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_w") //layer=src.layer+1
+ var/image/I = image(icon='GainStation13/icons/obj/doors/airlocks/station/overlays.dmi', icon_state="unres_w") //layer=src.layer+1 //GS13 Edit: perspective sprites
I.pixel_x = -32
set_light(l_range = 2, l_power = 1)
add_overlay(I)
diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm
index 0822108a0f..2222ea5cf1 100644
--- a/code/game/machinery/doors/airlock_types.dm
+++ b/code/game/machinery/doors/airlock_types.dm
@@ -2,25 +2,23 @@
Station Airlocks Regular
*/
-//GS13 - changed most of these airlock sprite paths to use perspective-oriented airlocks
-
/obj/machinery/door/airlock/abandoned
abandoned = TRUE
/obj/machinery/door/airlock/command
- icon = 'GainStation13/icons/obj/doors/airlocks/station/command.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/command.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_com
wiretypepath = /datum/wires/airlock/command
normal_integrity = 450
/obj/machinery/door/airlock/security
- icon = 'GainStation13/icons/obj/doors/airlocks/station/security.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/security.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_sec
wiretypepath = /datum/wires/airlock/security
normal_integrity = 450
/obj/machinery/door/airlock/engineering
- icon = 'GainStation13/icons/obj/doors/airlocks/station/engineering.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/engineering.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_eng
wiretypepath = /datum/wires/airlock/engineering
@@ -28,13 +26,13 @@
abandoned = TRUE
/obj/machinery/door/airlock/medical
- icon = 'GainStation13/icons/obj/doors/airlocks/station/medical.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/medical.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_med
wiretypepath = /datum/wires/airlock/medical
/obj/machinery/door/airlock/maintenance
name = "maintenance access"
- icon = 'GainStation13/icons/obj/doors/airlocks/station/maintenance.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/maintenance.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_mai
normal_integrity = 250
@@ -43,18 +41,18 @@
/obj/machinery/door/airlock/maintenance/external
name = "external airlock access"
- icon = 'GainStation13/icons/obj/doors/airlocks/station/maintenanceexternal.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/maintenanceexternal.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_extmai
/obj/machinery/door/airlock/mining
name = "mining airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/station/mining.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/mining.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_min
wiretypepath = /datum/wires/airlock/cargo
/obj/machinery/door/airlock/atmos
name = "atmospherics airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/station/atmos.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/atmos.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_atmo
wiretypepath = /datum/wires/airlock/engineering
@@ -62,22 +60,22 @@
abandoned = TRUE
/obj/machinery/door/airlock/research
- icon = 'GainStation13/icons/obj/doors/airlocks/station/research.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/research.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_research
wiretypepath = /datum/wires/airlock/science
/obj/machinery/door/airlock/freezer
name = "freezer airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/station/freezer.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/freezer.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_fre
/obj/machinery/door/airlock/science
- icon = 'GainStation13/icons/obj/doors/airlocks/station/science.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/science.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_science
wiretypepath = /datum/wires/airlock/science
/obj/machinery/door/airlock/virology
- icon = 'GainStation13/icons/obj/doors/airlocks/station/virology.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/virology.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_viro
wiretypepath = /datum/wires/airlock/medical
@@ -181,7 +179,7 @@
/obj/machinery/door/airlock/gold
name = "gold airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/station/gold.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/gold.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_gold
/obj/machinery/door/airlock/gold/glass
@@ -190,7 +188,7 @@
/obj/machinery/door/airlock/silver
name = "silver airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/station/silver.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/silver.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_silver
/obj/machinery/door/airlock/silver/glass
@@ -199,7 +197,7 @@
/obj/machinery/door/airlock/diamond
name = "diamond airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/station/diamond.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/diamond.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_diamond
normal_integrity = 1000
explosion_block = 2
@@ -211,7 +209,7 @@
/obj/machinery/door/airlock/uranium
name = "uranium airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/station/uranium.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/uranium.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_uranium
var/last_event = 0
@@ -233,7 +231,7 @@
/obj/machinery/door/airlock/plasma
name = "plasma airlock"
desc = "No way this can end badly."
- icon = 'GainStation13/icons/obj/doors/airlocks/station/plasma.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/plasma.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_plasma
/obj/machinery/door/airlock/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
@@ -274,7 +272,7 @@
/obj/machinery/door/airlock/bananium
name = "bananium airlock"
desc = "Honkhonkhonk"
- icon = 'GainStation13/icons/obj/doors/airlocks/station/bananium.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/bananium.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_bananium
doorOpen = 'sound/items/bikehorn.ogg'
@@ -284,7 +282,7 @@
/obj/machinery/door/airlock/sandstone
name = "sandstone airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/station/sandstone.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/sandstone.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_sandstone
/obj/machinery/door/airlock/sandstone/glass
@@ -293,7 +291,7 @@
/obj/machinery/door/airlock/wood
name = "wooden airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/station/wood.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/wood.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_wood
/obj/machinery/door/airlock/wood/glass
@@ -303,8 +301,8 @@
/obj/machinery/door/airlock/titanium
name = "shuttle airlock"
assemblytype = /obj/structure/door_assembly/door_assembly_titanium
- icon = 'GainStation13/icons/obj/doors/airlocks/shuttle/shuttle.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/shuttle/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/shuttle/shuttle.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/shuttle/overlays.dmi' //GS13 Edit: perspective sprites
normal_integrity = 400
/obj/machinery/door/airlock/titanium/glass
@@ -314,8 +312,8 @@
/obj/machinery/door/airlock/bronze
name = "bronze airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/clockwork/pinion_airlock.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/clockwork/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/clockwork/pinion_airlock.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/clockwork/overlays.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_bronze
/obj/machinery/door/airlock/bronze/seethru
@@ -329,8 +327,8 @@
*/
/obj/machinery/door/airlock/public
- icon = 'GainStation13/icons/obj/doors/airlocks/station2/glass.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/station2/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station2/glass.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/station2/overlays.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_public
/obj/machinery/door/airlock/public/glass
@@ -358,9 +356,9 @@
/obj/machinery/door/airlock/external
name = "external airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/external/external.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/external/overlays.dmi'
- note_overlay_file = 'GainStation13/icons/obj/doors/airlocks/external/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/external/external.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/external/overlays.dmi' //GS13 Edit: perspective sprites
+ note_overlay_file = 'GainStation13/icons/obj/doors/airlocks/external/overlays.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_ext
/obj/machinery/door/airlock/external/glass
@@ -373,16 +371,16 @@
*/
/obj/machinery/door/airlock/centcom //Use grunge as a station side version, as these have special effects related to them via phobias and such.
- icon = 'GainStation13/icons/obj/doors/airlocks/centcom/centcom.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/centcom/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/centcom/centcom.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/centcom/overlays.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_centcom
normal_integrity = 1000
security_level = 6
explosion_block = 2
/obj/machinery/door/airlock/grunge
- icon = 'GainStation13/icons/obj/doors/airlocks/centcom/centcom.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/centcom/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/centcom/centcom.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/centcom/overlays.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_grunge
/obj/machinery/door/airlock/grunge/abandoned
@@ -395,8 +393,8 @@
/obj/machinery/door/airlock/vault
name = "vault door"
- icon = 'GainStation13/icons/obj/doors/airlocks/vault/vault.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/vault/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/vault/vault.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/vault/overlays.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_vault
wiretypepath = /datum/wires/airlock/secure
explosion_block = 2
@@ -410,16 +408,16 @@
/obj/machinery/door/airlock/hatch
name = "airtight hatch"
- icon = 'GainStation13/icons/obj/doors/airlocks/hatch/centcom.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/hatch/overlays.dmi'
- note_overlay_file = 'GainStation13/icons/obj/doors/airlocks/hatch/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/hatch/centcom.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/hatch/overlays.dmi' //GS13 Edit: perspective sprites
+ note_overlay_file = 'GainStation13/icons/obj/doors/airlocks/hatch/overlays.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_hatch
/obj/machinery/door/airlock/maintenance_hatch
name = "maintenance hatch"
- icon = 'GainStation13/icons/obj/doors/airlocks/hatch/maintenance.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/hatch/overlays.dmi'
- note_overlay_file = 'GainStation13/icons/obj/doors/airlocks/hatch/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/hatch/maintenance.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/hatch/overlays.dmi' //GS13 Edit: perspective sprites
+ note_overlay_file = 'GainStation13/icons/obj/doors/airlocks/hatch/overlays.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_mhatch
/obj/machinery/door/airlock/maintenance_hatch/abandoned
@@ -432,8 +430,8 @@
/obj/machinery/door/airlock/highsecurity
name = "high tech security airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/highsec/highsec.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/highsec/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/highsec/highsec.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/highsec/overlays.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_highsecurity
explosion_block = 2
normal_integrity = 500
@@ -447,8 +445,8 @@
/obj/machinery/door/airlock/shuttle
name = "shuttle airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/shuttle/shuttle.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/shuttle/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/shuttle/shuttle.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/shuttle/overlays.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_shuttle
/obj/machinery/door/airlock/shuttle/glass
@@ -458,10 +456,10 @@
/obj/machinery/door/airlock/abductor
name = "alien airlock"
desc = "With humanity's current technological level, it could take years to hack this advanced airlock... or maybe we should give a screwdriver a try?"
- icon = 'GainStation13/icons/obj/doors/airlocks/abductor/abductor_airlock.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/abductor/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/abductor/abductor_airlock.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/abductor/overlays.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_abductor
- note_overlay_file = 'GainStation13/icons/obj/doors/airlocks/external/overlays.dmi'
+ note_overlay_file = 'GainStation13/icons/obj/doors/airlocks/external/overlays.dmi' //GS13 Edit: perspective sprites
damage_deflection = 30
explosion_block = 3
hackProof = TRUE
@@ -476,8 +474,8 @@
/obj/machinery/door/airlock/cult
name = "cult airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/cult/runed/cult.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/cult/runed/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/cult/runed/cult.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/cult/runed/overlays.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_cult
hackProof = TRUE
aiControlDisabled = 1
@@ -526,8 +524,8 @@
return FALSE
/obj/machinery/door/airlock/cult/proc/conceal()
- icon = 'GainStation13/icons/obj/doors/airlocks/station/maintenance.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/station/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/station/maintenance.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/station/overlays.dmi' //GS13 Edit: perspective sprites
name = "airlock"
desc = "It opens and closes."
stealthy = TRUE
@@ -558,8 +556,8 @@
friendly = TRUE
/obj/machinery/door/airlock/cult/unruned
- icon = 'GainStation13/icons/obj/doors/airlocks/cult/unruned/cult.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/cult/unruned/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/cult/unruned/cult.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/cult/unruned/overlays.dmi' //GS13 Edit: perspective sprites
assemblytype = /obj/structure/door_assembly/door_assembly_cult/unruned
openingoverlaytype = /obj/effect/temp_visual/cult/door/unruned
@@ -701,8 +699,8 @@
/obj/machinery/door/airlock/glass_large
name = "large glass airlock"
- icon = 'GainStation13/icons/obj/doors/airlocks/glass_large/glass_large.dmi'
- overlays_file = 'GainStation13/icons/obj/doors/airlocks/glass_large/overlays.dmi'
+ icon = 'GainStation13/icons/obj/doors/airlocks/glass_large/glass_large.dmi' //GS13 Edit: perspective sprites
+ overlays_file = 'GainStation13/icons/obj/doors/airlocks/glass_large/overlays.dmi' //GS13 Edit: perspective sprites
opacity = 0
assemblytype = null
glass = TRUE
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index 949be30452..9d265e981b 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -1,7 +1,7 @@
/obj/machinery/door/poddoor
name = "blast door"
desc = "A heavy duty blast door that opens mechanically."
- icon = 'GainStation13/icons/obj/doors/blastdoor.dmi' //GS13
+ icon = 'GainStation13/icons/obj/doors/blastdoor.dmi' //GS13 Edit: perspective sprites
icon_state = "closed"
var/id = 1
layer = BLASTDOOR_LAYER
diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm
index 53e761bce8..323fab4cf2 100644
--- a/code/game/machinery/doors/shutters.dm
+++ b/code/game/machinery/doors/shutters.dm
@@ -2,7 +2,7 @@
gender = PLURAL
name = "shutters"
desc = "Mechanical metal shutters operated by a button with a magnetic seal, keeping them airtight."
- icon = 'GainStation13/icons/obj/doors/shutters.dmi' //GS13
+ icon = 'icons/obj/doors/shutters.dmi'
layer = SHUTTER_LAYER
closingLayer = SHUTTER_LAYER
armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 75, BOMB = 25, BIO = 100, RAD = 100, FIRE = 100, ACID = 70)
@@ -22,7 +22,7 @@
/obj/machinery/door/poddoor/shutters/old
name = "strong shutters"
desc = "These shutters have an armoured frame; it looks like plasteel. These shutters look robust enough to survive explosions."
- icon = 'GainStation13/icons/obj/doors/shutters_old.dmi' //GS13
+ icon = 'icons/obj/doors/shutters_old.dmi'
icon_state = "closed"
armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 75, BOMB = 30, BIO = 100, RAD = 100, FIRE = 100, ACID = 70)
max_integrity = 300
@@ -37,7 +37,7 @@
/obj/machinery/door/poddoor/shutters/radiation
name = "radiation shutters"
desc = "Lead-lined shutters painted yellow with a radioactive hazard symbol on it. Blocks out most radiation"
- icon = 'GainStation13/icons/obj/doors/shutters_radiation.dmi' //GS13
+ icon = 'icons/obj/doors/shutters_radiation.dmi'
icon_state = "closed"
rad_insulation = 0.2
@@ -60,7 +60,7 @@
/obj/machinery/door/poddoor/shutters/window
name = "windowed shutters"
desc = "Mechanical shutters that have some form of plastic window in them, allowing you to see through the shutters at all times."
- icon = 'GainStation13/icons/obj/doors/shutters_window.dmi' //GS13
+ icon = 'icons/obj/doors/shutters_window.dmi'
icon_state = "closed"
opacity = 0
glass = 1
diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm
index 933ca0b1f8..4010ceea23 100644
--- a/code/game/objects/effects/decals/cleanable/misc.dm
+++ b/code/game/objects/effects/decals/cleanable/misc.dm
@@ -277,24 +277,26 @@
icon_state = "salt_pile"
gender = NEUTER
-/obj/effect/decal/cleanable/glitter //GS13 - changed glitters to more subtle variants
+/obj/effect/decal/cleanable/glitter
name = "generic glitter pile"
desc = "The herpes of arts and crafts."
- icon = 'GainStation13/icons/effects/atmospherics.dmi'
- icon_state = "glitter"
+ icon = 'icons/effects/atmospherics.dmi'
gender = NEUTER
mergeable_decal = TRUE
persistent = FALSE
/obj/effect/decal/cleanable/glitter/pink
name = "pink glitter"
+ icon_state = "plasma_old"
color = "#9e0089"
/obj/effect/decal/cleanable/glitter/white
name = "white glitter"
+ icon_state = "nitrous_oxide_old"
/obj/effect/decal/cleanable/glitter/blue
name = "blue glitter"
+ icon_state = "freon_old"
color = "#2dd6ff"
/obj/effect/decal/cleanable/plasma
diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm
index 868adf97f2..129e1cb8be 100644
--- a/code/game/objects/items/RCD.dm
+++ b/code/game/objects/items/RCD.dm
@@ -38,6 +38,7 @@ RLD
var/ammo_sections = 10 //amount of divisions in the ammo indicator overlay/number of ammo indicator states
var/custom_range = 7
var/upgrade = FALSE
+ var/airlock_dir = 1 //GS13 - airlock direction function
/obj/item/construction/Initialize(mapload)
. = ..()
@@ -283,6 +284,23 @@ RLD
//Not scaling these down to button size because they look horrible then, instead just bumping up radius.
return MA
+
+/obj/item/construction/rcd/proc/change_airlock_direction(mob/user) //GS13 - change airlock direction
+ if(!user)
+ return
+ var/list/airlock_dirs = list(
+ "North/South" = image(icon = 'icons/mob/radial.dmi', icon_state = "airlocknorthsouth"),
+ "East/West" = image(icon = 'icons/mob/radial.dmi', icon_state = "airlockeastwest")
+ )
+ var/airlockdirs = show_radial_menu(user, src, airlock_dirs, custom_check = CALLBACK(src,PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE)
+ if(!check_menu(user))
+ return
+ switch(airlockdirs)
+ if("North/South")
+ airlock_dir = 1
+ if("East/West")
+ airlock_dir = 4
+
/obj/item/construction/rcd/proc/change_computer_dir(mob/user)
if(!user)
return
@@ -488,6 +506,7 @@ RLD
if(mode == RCD_AIRLOCK)
choices += list(
"Change Access" = image(icon = 'icons/mob/radial.dmi', icon_state = "access"),
+ "Change Direction" = image(icon = 'GainStation13/icons/mob/radial.dmi', icon_state = "airlockrotation"), //GS13 - adding airlock rotation
"Change Airlock Type" = image(icon = 'icons/mob/radial.dmi', icon_state = "airlocktype")
)
else if(mode == RCD_WINDOWGRILLE)
@@ -515,6 +534,9 @@ RLD
if("Change Access")
change_airlock_access(user)
return
+ if("Change Direction") //GS13 - adding airlock direction in RCD
+ change_airlock_direction(user)
+ return
if("Change Airlock Type")
change_airlock_setting(user)
return
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 0c4f4a5bc1..291b9e21d4 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -73,7 +73,7 @@ GENETICS SCANNER
/obj/item/healthanalyzer
name = "health analyzer"
- icon = 'icons/obj/device.dmi'
+ icon = 'GainStation13/icons/obj/device.dmi' //GS13 - better sprite
icon_state = "health"
item_state = "healthanalyzer"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
@@ -407,6 +407,13 @@ GENETICS SCANNER
msg += "Base Species: [H.spec_trait_examine_font()][S.name]\n"
if(mutant)
msg += "Subject has mutations present.\n"
+
+ //GS13 EDIT START
+ if(H.fatness)
+ msg += span_info("Subject weighs [H.calculate_weight_in_pounds()] pounds ([H.fatness] BFI.)")
+ msg += "\n"
+
+ //GS13 EEDIT END
msg += "Body temperature: [round(M.bodytemperature-T0C,0.1)] °C ([round(M.bodytemperature*1.8-459.67,0.1)] °F)\n"
// Time of death
@@ -538,6 +545,7 @@ GENETICS SCANNER
/obj/item/healthanalyzer/advanced
name = "advanced health analyzer"
+ icon = 'GainStation13/icons/obj/device.dmi' //GS13 - better sprite
icon_state = "health_adv"
desc = "A hand-held body scanner able to distinguish vital signs of the subject with high accuracy."
advanced = TRUE
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index 8842e7d68d..de9d3cca68 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -388,7 +388,7 @@
name = "bluespace tray"
icon_state = "bluespace_tray"
desc = "A tray created using bluespace technology to fit more food on it."
- max_items = 30 // far more items
+ max_items = 100 //GS13 - we loooove our mountains of food here
custom_materials = list(/datum/material/iron = 2000, /datum/material/bluespace = 500)
/*
diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm
index 4e06628d51..0740f09d1d 100644
--- a/code/game/objects/structures/barsigns.dm
+++ b/code/game/objects/structures/barsigns.dm
@@ -291,11 +291,6 @@
icon = "thehive"
desc = "Comb in for some sweet drinks! Not known for serving any sappy drink."
-/datum/barsign/the_busted_belt //gs13
- name = "The Busted Belt"
- icon = "thebustedbelt"
- desc = "GATO is not liable for any pieces of broken wardrobe." //GS13 - Nanotrasen to GATO
-
/datum/barsign/hiddensigns
hidden = TRUE
diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm
index 5710a17c86..6a5d1e11c2 100644
--- a/code/game/objects/structures/beds_chairs/chair.dm
+++ b/code/game/objects/structures/beds_chairs/chair.dm
@@ -160,7 +160,7 @@
buildstacktype = null //Custom mats handle this
/obj/structure/chair/wood
- icon = 'GainStation13/icons/obj/chairs.dmi'
+ icon = 'GainStation13/icons/obj/chairs.dmi' //GS13 Edit: Our sprites
icon_state = "wooden_chair"
name = "wooden chair"
desc = "Old is never too old to not be in fashion."
@@ -540,7 +540,7 @@
/obj/item/chair/wood
name = "wooden chair"
- icon = 'GainStation13/icons/obj/chairs.dmi'
+ icon = 'GainStation13/icons/obj/chairs.dmi' //GS13 Edit: Our sprites
icon_state = "wooden_chair_toppled"
item_state = "woodenchair"
resistance_flags = FLAMMABLE
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 289599efb9..f0e7784496 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -11,7 +11,7 @@
new /obj/item/clothing/under/rank/engineering/chief_engineer/skirt(src)
new /obj/item/clothing/head/hardhat/white(src)
new /obj/item/clothing/head/hardhat/weldhat/white(src)
- new /obj/item/clothing/gloves/color/yellow(src)
+ new /obj/item/clothing/gloves/color/yellow/ce(src)
new /obj/item/tank/jetpack/suit(src)
new /obj/item/cartridge/ce(src)
new /obj/item/radio/headset/heads/ce(src)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index e8d8e927c9..1fee950cf3 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -660,6 +660,53 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
wave_explosion_block = EXPLOSION_BLOCK_EXTREME
wave_explosion_multiply = EXPLOSION_BLOCK_EXTREME
glass_type = /obj/item/stack/sheet/plasmarglass
+ canSmoothWith = list(
+ /turf/closed/wall,
+ /turf/closed/wall/r_wall,
+ /obj/structure/falsewall,
+ /obj/structure/falsewall/brass,
+ /obj/structure/falsewall/reinforced,
+ /turf/closed/wall/rust,
+ /turf/closed/wall/r_wall/rust,
+ /turf/closed/wall/clockwork,
+ /turf/closed/indestructible/riveted/,
+ /turf/closed/indestructible/riveted/uranium,
+ /obj/structure/window/fulltile,
+ /obj/structure/window/reinforced/fulltile,
+ /obj/structure/window/reinforced/tinted/fulltile,
+ /obj/machinery/door,
+ /obj/machinery/door/airlock/,
+ /obj/machinery/door/airlock/mining,
+ /obj/machinery/door/airlock/mining/glass,
+ /obj/machinery/door/airlock/medical,
+ /obj/machinery/door/airlock/medical/glass,
+ /obj/machinery/door/airlock/public,
+ /obj/machinery/door/airlock/public/glass,
+ /obj/machinery/door/airlock/research,
+ /obj/machinery/door/airlock/research/glass,
+ /obj/machinery/door/airlock/maintenance,
+ /obj/machinery/door/airlock/maintenance/glass,
+ /obj/machinery/door/airlock/command/,
+ /obj/machinery/door/airlock/command/glass,
+ /obj/machinery/door/airlock/engineering,
+ /obj/machinery/door/airlock/engineering/glass,
+ /obj/machinery/door/airlock/engineering/abandoned,
+ /obj/machinery/door/airlock/security,
+ /obj/machinery/door/airlock/security/glass,
+ /obj/machinery/door/airlock/maintenance/abandoned,
+ /obj/machinery/door/poddoor/shutters/preopen,
+ /obj/machinery/door/poddoor/shutters,
+ /obj/machinery/door/window/eastright,
+ /obj/machinery/door/window/eastleft,
+ /obj/machinery/door/window/northleft,
+ /obj/machinery/door/window/northright,
+ /obj/machinery/door/airlock/external,
+ /obj/machinery/door/airlock,
+ /obj/machinery/door/airlock/hatch,
+ /obj/machinery/door/airlock/engineering/glass/critical,
+ /obj/machinery/door/airlock/atmos,
+ /obj/machinery/door/airlock/highsecurity,) //GS13 - directional wall sprites will smooth with windows/airlocks
+
/obj/structure/window/plasma/reinforced/spawner/east
dir = EAST
@@ -740,7 +787,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
/obj/machinery/door/airlock/hatch,
/obj/machinery/door/airlock/engineering/glass/critical,
/obj/machinery/door/airlock/atmos,
- /obj/machinery/door/airlock/highsecurity,)
+ /obj/machinery/door/airlock/highsecurity,) //GS13 - directional wall sprites will smooth with windows/airlocks
glass_amount = 2
@@ -801,7 +848,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
/obj/machinery/door/airlock/hatch,
/obj/machinery/door/airlock/engineering/glass/critical,
/obj/machinery/door/airlock/atmos,
- /obj/machinery/door/airlock/highsecurity,)
+ /obj/machinery/door/airlock/highsecurity,) //GS13 - directional wall sprites will smooth with windows/airlocks
glass_amount = 2
@@ -817,6 +864,53 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
flags_1 = PREVENT_CLICK_UNDER_1
smooth = SMOOTH_TRUE
glass_amount = 2
+ canSmoothWith = list(
+ /turf/closed/wall,
+ /turf/closed/wall/r_wall,
+ /obj/structure/falsewall,
+ /obj/structure/falsewall/brass,
+ /obj/structure/falsewall/reinforced,
+ /turf/closed/wall/rust,
+ /turf/closed/wall/r_wall/rust,
+ /turf/closed/wall/clockwork,
+ /turf/closed/indestructible/riveted/,
+ /turf/closed/indestructible/riveted/uranium,
+ /obj/structure/window/fulltile,
+ /obj/structure/window/reinforced/fulltile,
+ /obj/structure/window/reinforced/tinted/fulltile,
+ /obj/machinery/door,
+ /obj/machinery/door/airlock/,
+ /obj/machinery/door/airlock/mining,
+ /obj/machinery/door/airlock/mining/glass,
+ /obj/machinery/door/airlock/medical,
+ /obj/machinery/door/airlock/medical/glass,
+ /obj/machinery/door/airlock/public,
+ /obj/machinery/door/airlock/public/glass,
+ /obj/machinery/door/airlock/research,
+ /obj/machinery/door/airlock/research/glass,
+ /obj/machinery/door/airlock/maintenance,
+ /obj/machinery/door/airlock/maintenance/glass,
+ /obj/machinery/door/airlock/command/,
+ /obj/machinery/door/airlock/command/glass,
+ /obj/machinery/door/airlock/engineering,
+ /obj/machinery/door/airlock/engineering/glass,
+ /obj/machinery/door/airlock/engineering/abandoned,
+ /obj/machinery/door/airlock/security,
+ /obj/machinery/door/airlock/security/glass,
+ /obj/machinery/door/airlock/maintenance/abandoned,
+ /obj/machinery/door/poddoor/shutters/preopen,
+ /obj/machinery/door/poddoor/shutters,
+ /obj/machinery/door/window/eastright,
+ /obj/machinery/door/window/eastleft,
+ /obj/machinery/door/window/northleft,
+ /obj/machinery/door/window/northright,
+ /obj/machinery/door/airlock/external,
+ /obj/machinery/door/airlock,
+ /obj/machinery/door/airlock/hatch,
+ /obj/machinery/door/airlock/engineering/glass/critical,
+ /obj/machinery/door/airlock/atmos,
+ /obj/machinery/door/airlock/highsecurity,) //GS13 - directional wall sprites will smooth with windows/airlocks
+
/obj/structure/window/plasma/reinforced/fulltile/unanchored
anchored = FALSE
@@ -875,7 +969,7 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
/obj/machinery/door/airlock/hatch,
/obj/machinery/door/airlock/engineering/glass/critical,
/obj/machinery/door/airlock/atmos,
- /obj/machinery/door/airlock/highsecurity,)
+ /obj/machinery/door/airlock/highsecurity,) //GS13 - directional wall sprites will smooth with windows/airlocks
level = 3
glass_amount = 2
@@ -1046,6 +1140,52 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
level = 3
glass_type = /obj/item/stack/sheet/plastitaniumglass
glass_amount = 2
+ canSmoothWith = list(
+ /turf/closed/wall,
+ /turf/closed/wall/r_wall,
+ /obj/structure/falsewall,
+ /obj/structure/falsewall/brass,
+ /obj/structure/falsewall/reinforced,
+ /turf/closed/wall/rust,
+ /turf/closed/wall/r_wall/rust,
+ /turf/closed/wall/clockwork,
+ /turf/closed/indestructible/riveted/,
+ /turf/closed/indestructible/riveted/uranium,
+ /obj/structure/window/fulltile,
+ /obj/structure/window/reinforced/fulltile,
+ /obj/structure/window/reinforced/tinted/fulltile,
+ /obj/machinery/door,
+ /obj/machinery/door/airlock/,
+ /obj/machinery/door/airlock/mining,
+ /obj/machinery/door/airlock/mining/glass,
+ /obj/machinery/door/airlock/medical,
+ /obj/machinery/door/airlock/medical/glass,
+ /obj/machinery/door/airlock/public,
+ /obj/machinery/door/airlock/public/glass,
+ /obj/machinery/door/airlock/research,
+ /obj/machinery/door/airlock/research/glass,
+ /obj/machinery/door/airlock/maintenance,
+ /obj/machinery/door/airlock/maintenance/glass,
+ /obj/machinery/door/airlock/command/,
+ /obj/machinery/door/airlock/command/glass,
+ /obj/machinery/door/airlock/engineering,
+ /obj/machinery/door/airlock/engineering/glass,
+ /obj/machinery/door/airlock/engineering/abandoned,
+ /obj/machinery/door/airlock/security,
+ /obj/machinery/door/airlock/security/glass,
+ /obj/machinery/door/airlock/maintenance/abandoned,
+ /obj/machinery/door/poddoor/shutters/preopen,
+ /obj/machinery/door/poddoor/shutters,
+ /obj/machinery/door/window/eastright,
+ /obj/machinery/door/window/eastleft,
+ /obj/machinery/door/window/northleft,
+ /obj/machinery/door/window/northright,
+ /obj/machinery/door/airlock/external,
+ /obj/machinery/door/airlock,
+ /obj/machinery/door/airlock/hatch,
+ /obj/machinery/door/airlock/engineering/glass/critical,
+ /obj/machinery/door/airlock/atmos,
+ /obj/machinery/door/airlock/highsecurity,) //GS13 - directional wall sprites will smooth with windows/airlocks
/obj/structure/window/plastitanium/unanchored
anchored = FALSE
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index 31cd734313..d02cf49fc9 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -203,7 +203,10 @@
var/old_icon = icon_regular_floor
var/old_dir = dir
var/turf/open/floor/W = ..()
- W.icon_regular_floor = old_icon
+ //GS13 EDIT START
+ if(!(W.type in subtypesof(/turf/open/floor/plasteel)))
+ W.icon_regular_floor = old_icon
+ //GS13 EDIT END
W.setDir(old_dir)
W.update_icon()
return W
@@ -311,6 +314,7 @@
to_chat(user, "You build an airlock.")
var/obj/machinery/door/airlock/A = new the_rcd.airlock_type(src)
+ A.setDir(the_rcd.airlock_dir) //GS13 - directional airlocks edit
A.electronics = new/obj/item/electronics/airlock(A)
if(the_rcd.conf_access)
diff --git a/code/game/turfs/simulated/wall/misc_walls.dm b/code/game/turfs/simulated/wall/misc_walls.dm
index 4ec2fa2357..5edb35f9f0 100644
--- a/code/game/turfs/simulated/wall/misc_walls.dm
+++ b/code/game/turfs/simulated/wall/misc_walls.dm
@@ -186,7 +186,53 @@
/turf/closed/wall/rust
name = "rusted wall"
desc = "A rusted metal wall."
- icon = 'icons/turf/walls/rusty_wall.dmi'
+ icon = 'GainStation13/icons/turf/walls/rusty_wall.dmi' //GS13 - perspective walls
+ canSmoothWith = list(
+ /turf/closed/wall,
+ /turf/closed/wall/r_wall,
+ /obj/structure/falsewall,
+ /obj/structure/falsewall/brass,
+ /obj/structure/falsewall/reinforced,
+ /turf/closed/wall/rust,
+ /turf/closed/wall/r_wall/rust,
+ /turf/closed/wall/clockwork,
+ /turf/closed/indestructible/riveted/,
+ /turf/closed/indestructible/riveted/uranium,
+ /obj/structure/window/fulltile,
+ /obj/structure/window/reinforced/fulltile,
+ /obj/structure/window/reinforced/tinted/fulltile,
+ /obj/machinery/door,
+ /obj/machinery/door/airlock/,
+ /obj/machinery/door/airlock/mining,
+ /obj/machinery/door/airlock/mining/glass,
+ /obj/machinery/door/airlock/medical,
+ /obj/machinery/door/airlock/medical/glass,
+ /obj/machinery/door/airlock/public,
+ /obj/machinery/door/airlock/public/glass,
+ /obj/machinery/door/airlock/research,
+ /obj/machinery/door/airlock/research/glass,
+ /obj/machinery/door/airlock/maintenance,
+ /obj/machinery/door/airlock/maintenance/glass,
+ /obj/machinery/door/airlock/command/,
+ /obj/machinery/door/airlock/command/glass,
+ /obj/machinery/door/airlock/engineering,
+ /obj/machinery/door/airlock/engineering/glass,
+ /obj/machinery/door/airlock/engineering/abandoned,
+ /obj/machinery/door/airlock/security,
+ /obj/machinery/door/airlock/security/glass,
+ /obj/machinery/door/airlock/maintenance/abandoned,
+ /obj/machinery/door/poddoor/shutters/preopen,
+ /obj/machinery/door/poddoor/shutters,
+ /obj/machinery/door/window/eastright,
+ /obj/machinery/door/window/eastleft,
+ /obj/machinery/door/window/northleft,
+ /obj/machinery/door/window/northright,
+ /obj/machinery/door/airlock/external,
+ /obj/machinery/door/airlock,
+ /obj/machinery/door/airlock/hatch,
+ /obj/machinery/door/airlock/engineering/glass/critical,
+ /obj/machinery/door/airlock/atmos,
+ /obj/machinery/door/airlock/highsecurity,) //GS13 - directional wall sprites will smooth with windows/airlocks
hardness = 45
/turf/closed/wall/rust/rust_heretic_act()
diff --git a/code/modules/antagonists/abductor/abductee/abductee_objectives.dm b/code/modules/antagonists/abductor/abductee/abductee_objectives.dm
index 2d62bf1ac9..878ebed855 100644
--- a/code/modules/antagonists/abductor/abductee/abductee_objectives.dm
+++ b/code/modules/antagonists/abductor/abductee/abductee_objectives.dm
@@ -4,7 +4,7 @@
/datum/objective/abductee/random
/datum/objective/abductee/random/New()
- explanation_text = pick(world.file2list("strings/abductee_objectives.txt"))
+ explanation_text = pick(world.file2list("GainStation13/strings/abductee_objectives.txt")) //GS13 Edit: Nanotrasen to GATO
/datum/objective/abductee/steal
explanation_text = "Steal all"
diff --git a/code/modules/antagonists/disease/disease_event.dm b/code/modules/antagonists/disease/disease_event.dm
index 31ab9d8d33..c403280377 100644
--- a/code/modules/antagonists/disease/disease_event.dm
+++ b/code/modules/antagonists/disease/disease_event.dm
@@ -3,7 +3,7 @@
name = "Spawn Sentient Disease"
typepath = /datum/round_event/ghost_role/sentient_disease
weight = 7
- max_occurrences = 1
+ max_occurrences = 0 //GS13 - removed midround pseudo-antags
min_players = 5
category = EVENT_CATEGORY_HEALTH
description = "Spawns a sentient disease, who wants to infect as many people as possible."
diff --git a/code/modules/antagonists/revenant/revenant_spawn_event.dm b/code/modules/antagonists/revenant/revenant_spawn_event.dm
index b188e0c79c..655a116b7f 100644
--- a/code/modules/antagonists/revenant/revenant_spawn_event.dm
+++ b/code/modules/antagonists/revenant/revenant_spawn_event.dm
@@ -4,7 +4,7 @@
name = "Spawn Revenant" // Did you mean 'griefghost'?
typepath = /datum/round_event/ghost_role/revenant
weight = 7
- max_occurrences = 1
+ max_occurrences = 0 //GS13 tweak - no antags, thanks
min_players = 5
category = EVENT_CATEGORY_ENTITIES
description = "Spawns an angry, soul sucking ghost."
diff --git a/code/modules/antagonists/slaughter/slaughterevent.dm b/code/modules/antagonists/slaughter/slaughterevent.dm
index 8d1f92faac..bc9b1fb6ff 100644
--- a/code/modules/antagonists/slaughter/slaughterevent.dm
+++ b/code/modules/antagonists/slaughter/slaughterevent.dm
@@ -2,7 +2,7 @@
name = "Spawn Slaughter Demon"
typepath = /datum/round_event/ghost_role/slaughter
weight = 1 //Very rare
- max_occurrences = 1
+ max_occurrences = 0 //GS13 - no antags, thanks
earliest_start = 1 HOURS
min_players = 20
category = EVENT_CATEGORY_ENTITIES
diff --git a/code/modules/antagonists/swarmer/swarmer_event.dm b/code/modules/antagonists/swarmer/swarmer_event.dm
index 460ce687a6..083363a22e 100644
--- a/code/modules/antagonists/swarmer/swarmer_event.dm
+++ b/code/modules/antagonists/swarmer/swarmer_event.dm
@@ -2,7 +2,7 @@
name = "Spawn Swarmer Shell"
typepath = /datum/round_event/spawn_swarmer
weight = 7
- max_occurrences = 1 //Only once okay fam
+ max_occurrences = 0 //GS13 - no antags, thanks
earliest_start = 30 MINUTES
min_players = 35
dynamic_should_hijack = TRUE
diff --git a/code/modules/arousal/genitals.dm b/code/modules/arousal/genitals.dm
index ed94324ec8..3e0c85ddb0 100644
--- a/code/modules/arousal/genitals.dm
+++ b/code/modules/arousal/genitals.dm
@@ -32,6 +32,7 @@
var/obj/item/equipment //for fun stuff that goes on the gentials/maybe rings down the line
var/dontlist = FALSE
var/nochange = FALSE //stops people changing visablity.
+ var/starting_size //GS13 EDIT
/obj/item/organ/genital/Initialize(mapload, do_update = TRUE)
diff --git a/code/modules/arousal/organs/breasts.dm b/code/modules/arousal/organs/breasts.dm
index 69020da4f3..fb21d944bd 100644
--- a/code/modules/arousal/organs/breasts.dm
+++ b/code/modules/arousal/organs/breasts.dm
@@ -75,7 +75,7 @@
//this is far too lewd wah
/obj/item/organ/genital/breasts/modify_size(modifier, min = -INFINITY, max = INFINITY)
- var/new_value = clamp(cached_size + modifier, min, max)
+ var/new_value = clamp(cached_size + modifier, starting_size, max) //GS13 EDIT
if(new_value == cached_size)
return
prev_size = cached_size
@@ -115,6 +115,7 @@
else
color = "#[D.features["breasts_color"]]"
size = D.features["breasts_size"]
+ starting_size = D.features["breasts_size"]
shape = D.features["breasts_shape"]
if(!D.features["breasts_producing"])
genital_flags &= ~ (GENITAL_FUID_PRODUCTION|CAN_CLIMAX_WITH|CAN_MASTURBATE_WITH)
diff --git a/code/modules/arousal/organs/butt.dm b/code/modules/arousal/organs/butt.dm
index 6cb32488a5..fd20703168 100644
--- a/code/modules/arousal/organs/butt.dm
+++ b/code/modules/arousal/organs/butt.dm
@@ -16,7 +16,7 @@
layer_index = BUTT_LAYER_INDEX
/obj/item/organ/genital/butt/modify_size(modifier, min = -INFINITY, max = BUTT_SIZE_MAX)
- var/new_value = clamp(size_cached + modifier, min, max)
+ var/new_value = clamp(size_cached + modifier, starting_size, max) //GS13 EDIT
if(new_value == size_cached)
return
prev_size = size_cached
@@ -47,6 +47,8 @@
//Reflect the size of dat ass on examine.
switch(round(size))
+ if(0)
+ size_name = "nonexistent" // GS13 EDIT
if(1)
size_name = "average"
if(2)
@@ -58,7 +60,7 @@
if(5)
size_name = pick("massive","extreme","enormous","very generous","humongous","big bubbly","dummy thicc")
else
- size_name = "nonexistent"
+ size_name = "oversized" //GS13 edit
desc = "You see a [lowershape] of [size_name] asscheeks."
@@ -82,5 +84,6 @@
else
color = "#[D.features["butt_color"]]"
size = D.features["butt_size"]
+ starting_size = D.features["butt_size"] // GS13 EDIT
prev_size = size
toggle_visibility(D.features["butt_visibility"], FALSE)
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 041dd4be96..f7bf2534cd 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -474,11 +474,11 @@
uniform = /obj/item/clothing/under/pants/youngfolksjeans
id = /obj/item/card/id
-/datum/outfit/beachbum/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
- ..()
- if(visualsOnly)
- return
- H.dna.add_mutation(STONER)
+// /datum/outfit/beachbum/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+// ..()
+// if(visualsOnly)
+// return
+// H.dna.add_mutation(STONER) //GS13 - removes the stoner trait, it makes the role almost unplayable
/////////////////Officers+Nanotrasen Security//////////////////////
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 375346009f..3e8b06e05a 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -102,6 +102,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/pda_style = MONO
var/pda_color = "#808000"
var/pda_skin = PDA_SKIN_ALT
+ var/list/alt_titles_preferences = list()
var/uses_glasses_colour = 0
@@ -1409,6 +1410,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "This preference functions similar to the one before but allows for items with more drastic effects. Do not enable this if you aren't okay with more drastic things happening to your character.
"
dat += "Extreme Fatness Vulnerability:[extreme_fatness_vulnerable == TRUE ? "Enabled" : "Disabled"]
"
dat += "
"
+ dat += "Object TF:[object_tf == TRUE ? "Enabled" : "Disabled"]
"
+ dat += "
"
dat += "Extreme Weight Gain (Sprite Size scales with weight):[weight_gain_extreme == TRUE ? "Enabled" : "Disabled"]
"
dat += "Persistent Fat (endround/cryo weight becomes your new start weight):[weight_gain_persistent == TRUE ? "Enabled" : "Disabled"]
"
dat += "Permanent Weight (hard to remove and persistent weight):[weight_gain_permanent == TRUE ? "Enabled" : "Disabled"]
"
@@ -1586,6 +1589,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
HTML += " "
@@ -1607,10 +1613,15 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if((job_preferences["[SSjob.overflow_role]"] == JP_LOW) && (rank != SSjob.overflow_role) && !jobban_isbanned(user, SSjob.overflow_role))
HTML += "[rank]"
var/rank = job.title
+ var/displayed_rank = rank
+ if(job.alt_titles.len && (rank in alt_titles_preferences))
+ displayed_rank = alt_titles_preferences[rank]
lastJob = job
if(jobban_isbanned(user, rank))
HTML += "[rank] BANNED