diff --git a/code/controllers/subsystems/nanoui.dm b/code/controllers/subsystems/nanoui.dm
index 3c999cb5e2..520973514d 100644
--- a/code/controllers/subsystems/nanoui.dm
+++ b/code/controllers/subsystems/nanoui.dm
@@ -13,7 +13,7 @@ SUBSYSTEM_DEF(nanoui)
"nano/css/",\
"nano/images/",\
"nano/images/status_icons/",\
- "nano/images/modular_computers/",
+ "nano/images/modular_computers/",\
"nano/js/",\
"nano/templates/"\
)
@@ -25,9 +25,9 @@ SUBSYSTEM_DEF(nanoui)
if(copytext(filename, length(filename)) != "/") // filenames which end in "/" are actually directories, which we want to ignore
if(fexists(path + filename))
asset_files.Add(fcopy_rsc(path + filename)) // add this file to asset_files for sending to clients when they connect
- .=..() //VOREStation Edit start: fixing some kevinzing
+ .=..()
for(var/i in GLOB.clients)
- send_resources(i) //VOREStation Edit end: fixing some kevinzing
+ send_resources(i)
/datum/controller/subsystem/nanoui/Recover()
if(SSnanoui.open_uis)
@@ -50,4 +50,4 @@ SUBSYSTEM_DEF(nanoui)
if(!subsystem_initialized)
return
for(var/file in asset_files)
- client << browse_rsc(file) // send the file to the client
\ No newline at end of file
+ client << browse_rsc(file) // send the file to the client
diff --git a/code/datums/outfits/jobs/civilian_vr.dm b/code/datums/outfits/jobs/civilian_vr.dm
index b9b4f60ad7..7d39ae8c1b 100644
--- a/code/datums/outfits/jobs/civilian_vr.dm
+++ b/code/datums/outfits/jobs/civilian_vr.dm
@@ -6,7 +6,7 @@
/decl/hierarchy/outfit/job/assistant/engineer
id_type = /obj/item/weapon/card/id/engineering
- flags = OUTFIT_EXTENDED_SURVIVAL
+ flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL
/decl/hierarchy/outfit/job/assistant/medic
id_type = /obj/item/weapon/card/id/medical
diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm
index b6251dc281..e454c93b18 100644
--- a/code/game/jobs/job_controller.dm
+++ b/code/game/jobs/job_controller.dm
@@ -342,11 +342,13 @@ var/global/datum/controller/occupations/job_master
if(!joined_late)
var/obj/S = null
+ var/list/possible_spawns = list()
for(var/obj/effect/landmark/start/sloc in landmarks_list)
if(sloc.name != rank) continue
if(locate(/mob/living) in sloc.loc) continue
- S = sloc
- break
+ possible_spawns.Add(sloc)
+ if(possible_spawns.len)
+ S = pick(possible_spawns)
if(!S)
S = locate("start*[rank]") // use old stype
if(istype(S, /obj/effect/landmark/start) && istype(S.loc, /turf))
diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm
index 33901a8b2b..25671feca2 100644
--- a/code/game/turfs/simulated/water.dm
+++ b/code/game/turfs/simulated/water.dm
@@ -19,6 +19,7 @@
/turf/simulated/floor/water/Initialize()
. = ..()
update_icon()
+ handle_fish()
/turf/simulated/floor/water/update_icon()
..() // To get the edges.
diff --git a/code/modules/fishing/fishing.dm b/code/modules/fishing/fishing.dm
new file mode 100644
index 0000000000..7e4a9d85bc
--- /dev/null
+++ b/code/modules/fishing/fishing.dm
@@ -0,0 +1,202 @@
+/*
+ * Fishing! Contains normal fishing rods and nets.
+ */
+
+GLOBAL_LIST_INIT(generic_fishing_rare_list, list(
+ /mob/living/simple_mob/animal/passive/fish/solarfish = 1,
+ /mob/living/simple_mob/animal/passive/fish/icebass = 5,
+ /mob/living/simple_mob/animal/passive/fish/koi = 3
+ ))
+
+GLOBAL_LIST_INIT(generic_fishing_uncommon_list, list(
+ /mob/living/simple_mob/animal/passive/fish/salmon = 6,
+ /mob/living/simple_mob/animal/passive/fish/pike = 10,
+ /mob/living/simple_mob/animal/passive/fish/javelin = 3,
+ /mob/living/simple_mob/animal/passive/crab/sif = 1
+ ))
+
+GLOBAL_LIST_INIT(generic_fishing_common_list, list(
+ /mob/living/simple_mob/animal/passive/fish/bass = 10,
+ /mob/living/simple_mob/animal/passive/fish/trout = 8,
+ /mob/living/simple_mob/animal/passive/fish/perch = 6,
+ /mob/living/simple_mob/animal/passive/fish/murkin = 8,
+ /mob/living/simple_mob/animal/passive/fish/rockfish = 5,
+ /mob/living/simple_mob/animal/passive/crab = 1
+ ))
+
+GLOBAL_LIST_INIT(generic_fishing_junk_list, list(
+ /obj/item/clothing/shoes/boots/cowboy = 1,
+ /obj/random/fishing_junk = 10
+ ))
+
+GLOBAL_LIST_INIT(generic_fishing_pool_list, list(
+ /obj/item/weapon/bikehorn/rubberducky = 5,
+ /obj/item/toy/plushie/carp = 20,
+ /obj/random/junk = 80,
+ /obj/random/trash = 80,
+ /obj/item/weapon/spacecash/c1 = 10,
+ /obj/item/weapon/spacecash/c10 = 5,
+ /obj/item/weapon/spacecash/c100 = 1
+ ))
+
+#define FISHING_RARE "rare"
+#define FISHING_UNCOMMON "uncommon"
+#define FISHING_COMMON "common"
+#define FISHING_JUNK "junk"
+#define FISHING_NOTHING "nothing"
+
+GLOBAL_LIST_INIT(generic_fishing_chance_list, list(FISHING_RARE = 5, FISHING_UNCOMMON = 15, FISHING_COMMON = 30, FISHING_JUNK = 30, FISHING_NOTHING = 40))
+
+/turf/simulated/floor/water
+ var/has_fish = TRUE //If the water has fish or not.
+
+ var/list/rare_fish_list // Rare list.
+
+ var/list/uncommon_fish_list // Uncommon list.
+
+ var/list/common_fish_list // Common list.
+
+ var/list/junk_list // Junk item list.
+
+ var/list/fishing_loot // Chance list.
+
+ var/fishing_cooldown = 30 SECONDS
+ var/last_fished = 0
+
+ var/fish_type
+ var/min_fishing_time = 30 // Time in seconds.
+ var/max_fishing_time = 90
+
+ var/being_fished = FALSE
+
+/turf/simulated/floor/water/proc/handle_fish() // Subtypes should over-ride this, and supply their own GLOB lists for maximum Mix and Match power.
+ if(has_fish)
+ rare_fish_list = GLOB.generic_fishing_rare_list
+ uncommon_fish_list = GLOB.generic_fishing_uncommon_list
+ common_fish_list = GLOB.generic_fishing_common_list
+ junk_list = GLOB.generic_fishing_junk_list
+ fishing_loot = GLOB.generic_fishing_chance_list
+
+/turf/simulated/floor/water/pool
+ has_fish = FALSE
+
+/turf/simulated/floor/water/deep/pool
+ has_fish = TRUE
+
+/turf/simulated/floor/water/deep/pool/handle_fish()
+ if(has_fish)
+ rare_fish_list = GLOB.generic_fishing_pool_list
+ uncommon_fish_list = GLOB.generic_fishing_pool_list
+ common_fish_list = GLOB.generic_fishing_pool_list
+ junk_list = GLOB.generic_fishing_pool_list
+ fishing_loot = GLOB.generic_fishing_chance_list
+
+/turf/simulated/floor/water/ex_act(severity) // Explosive fishing.
+ if(prob(5 * severity))
+ pick_fish()
+ if(fish_type)
+ var/fished = new fish_type(get_turf(src))
+ if(isliving(fished))
+ var/mob/living/L = fished
+ L.death()
+ has_fish = FALSE
+ ..(severity)
+
+/turf/simulated/floor/water/proc/pick_fish()
+ if(has_fish)
+ var/table = pickweight(fishing_loot)
+ if(table == FISHING_RARE && rare_fish_list.len)
+ fish_type = pickweight(rare_fish_list)
+ else if(table == FISHING_UNCOMMON && uncommon_fish_list.len)
+ fish_type = pickweight(uncommon_fish_list)
+ else if(table == FISHING_COMMON && common_fish_list.len)
+ fish_type = pickweight(common_fish_list)
+ else if(table == FISHING_JUNK && junk_list.len)
+ fish_type = pickweight(junk_list)
+ else
+ fish_type = null
+ else
+ fish_type = null
+
+/turf/simulated/floor/water/attackby(obj/item/weapon/P as obj, mob/user as mob)
+//If you use a fishing rod on an open body of water that var/has_fish enabled
+ if(istype(P, /obj/item/weapon/material/fishing_rod) && !being_fished)
+ var/obj/item/weapon/material/fishing_rod/R = P
+ if(!R.strung)
+ to_chat(user, "It is hard to go fishing without any line!")
+ return
+ if(R.cast)
+ to_chat(user, "You can only cast one line at a time!")
+ return
+ playsound(src, 'sound/effects/slosh.ogg', 5, 1, 5)
+ to_chat(user,"You cast \the [P.name] into \the [src].")
+ being_fished = TRUE
+ R.cast = TRUE
+ var/fishing_time = rand(min_fishing_time SECONDS,max_fishing_time SECONDS) * R.toolspeed
+ if(do_after(user,fishing_time,user))
+ playsound(src, 'sound/effects/slosh.ogg', 5, 1, 5)
+ to_chat(user,"You feel a tug and begin pulling!")
+ if(world.time >= last_fished + fishing_cooldown)
+ pick_fish()
+ last_fished = world.time
+ else
+ fish_type = null
+ if(prob(3)) // No fish left here..
+ has_fish = FALSE
+ //List of possible outcomes.
+ if(!fish_type)
+ to_chat(user,"You caught... nothing. How sad.")
+ else
+ var/fished = new fish_type(get_turf(user))
+ if(isliving(fished))
+ R.consume_bait()
+ var/mob/living/L = fished
+ if(prob(rand(L.mob_size) + 10) && R.line_break)
+ R.strung = FALSE
+ R.update_icon()
+ user.visible_message("\The [R]'s string snaps!")
+ if(prob(33)) // Dead on hook. Good for food, not so much for live catch.
+ L.death()
+ to_chat(user,"You fish out \the [fished] from the water with [P.name]!")
+ R.cast = FALSE
+ being_fished = FALSE
+ else ..()
+
+/obj/random/fishing_junk
+ name = "junk"
+ desc = "This is a random fishing junk item."
+ icon = 'icons/obj/storage.dmi'
+ icon_state = "red"
+
+/obj/random/fishing_junk/item_to_spawn()
+ return pickweight(list(
+ /obj/random/toy = 60,
+ /obj/random/maintenance/engineering = 50,
+ /obj/random/maintenance/clean = 40,
+ /obj/random/maintenance/security = 40,
+ /obj/random/maintenance/research = 40,
+ /obj/structure/closet/crate/secure/loot = 30,
+ /obj/random/bomb_supply = 30,
+ /obj/random/powercell = 30,
+ /obj/random/tech_supply/component = 30,
+ /obj/random/unidentified_medicine/old_medicine = 30,
+ /obj/random/plushie = 30,
+ /obj/random/contraband = 20,
+ /obj/random/coin = 20,
+ /obj/random/medical = 15,
+ /obj/random/unidentified_medicine/fresh_medicine = 15,
+ /obj/random/action_figure = 15,
+ /obj/random/plushielarge = 15,
+ /obj/random/firstaid = 10,
+ /obj/random/tool/powermaint = 5,
+ /obj/random/unidentified_medicine/combat_medicine = 1,
+ /obj/random/tool/alien = 1,
+ /obj/random/handgun = 1,
+ /mob/living/simple_mob/animal/sif/hooligan_crab = 1
+ ))
+
+#undef FISHING_RARE
+#undef FISHING_UNCOMMON
+#undef FISHING_COMMON
+#undef FISHING_JUNK
+#undef FISHING_NOTHING
diff --git a/code/modules/fishing/fishing_net.dm b/code/modules/fishing/fishing_net.dm
new file mode 100644
index 0000000000..740e3a2a6d
--- /dev/null
+++ b/code/modules/fishing/fishing_net.dm
@@ -0,0 +1,109 @@
+/obj/item/weapon/material/fishing_net
+ name = "fishing net"
+ desc = "A crude fishing net."
+ icon = 'icons/obj/items.dmi'
+ icon_state = "net"
+ item_state = "net"
+ description_info = "This object can be used to capture certain creatures easily, most commonly fish. \
+ It has a reach of two tiles, and can be emptied by activating it in-hand. \
+ This version will not keep creatures inside in stasis, and will be heavier if it contains a mob."
+
+ var/empty_state = "net"
+ var/contain_state = "net_full"
+
+ w_class = ITEMSIZE_SMALL
+ flags = NOBLUDGEON
+
+ slowdown = 0.25
+
+ reach = 2
+
+ default_material = "cloth"
+
+ var/list/accepted_mobs = list(/mob/living/simple_mob/animal/passive/fish)
+
+/obj/item/weapon/material/fishing_net/Initialize()
+ ..()
+ update_icon()
+
+/obj/item/weapon/material/fishing_net/afterattack(var/atom/A, var/mob/user, var/proximity)
+ if(get_dist(get_turf(src), A) > reach)
+ return
+
+ if(istype(A, /turf))
+ var/mob/living/Target
+ for(var/type in accepted_mobs)
+ Target = locate(type) in A.contents
+ if(Target)
+ afterattack(Target, user, proximity)
+ break
+
+ if(istype(A, /mob))
+ var/accept = FALSE
+ for(var/D in accepted_mobs)
+ if(istype(A, D))
+ accept = TRUE
+ for(var/atom/At in src.contents)
+ if(isliving(At))
+ to_chat(user, "Your net is already holding something!")
+ accept = FALSE
+ if(!accept)
+ to_chat(user, "[A] can't be trapped in \the [src].")
+ return
+ var/mob/L = A
+ user.visible_message("[user] snatches [L] with \the [src].", "You snatch [L] with \the [src].")
+ L.forceMove(src)
+ update_icon()
+ update_weight()
+ return
+ return ..()
+
+/obj/item/weapon/material/fishing_net/attack_self(var/mob/user)
+ for(var/mob/M in src)
+ M.forceMove(get_turf(src))
+ user.visible_message("[user] releases [M] from \the [src].", "You release [M] from \the [src].")
+ for(var/obj/item/I in src)
+ I.forceMove(get_turf(src))
+ user.visible_message("[user] dumps \the [I] out of \the [src].", "You dump \the [I] out of \the [src].")
+ update_icon()
+ update_weight()
+ return
+
+/obj/item/weapon/material/fishing_net/attackby(var/obj/item/W, var/mob/user)
+ if(contents)
+ for(var/mob/living/L in contents)
+ if(prob(25))
+ L.attackby(W, user)
+ ..()
+
+/obj/item/weapon/material/fishing_net/update_icon() // Also updates name and desc
+ underlays.Cut()
+ overlays.Cut()
+
+ ..()
+
+ name = initial(name)
+ desc = initial(desc)
+ var/contains_mob = FALSE
+ for(var/mob/M in src)
+ var/image/victim = image(M.icon, M.icon_state)
+ underlays += victim
+ name = "filled net"
+ desc = "A net with [M] inside."
+ contains_mob = TRUE
+
+ if(contains_mob)
+ icon_state = contain_state
+
+ else
+ icon_state = empty_state
+
+ return
+
+/obj/item/weapon/material/fishing_net/proc/update_weight()
+ if(icon_state == contain_state) // Let's not do a for loop just to see if a mob is in here.
+ slowdown = initial(slowdown) * 2
+ reach = 1
+ else
+ slowdown = initial(slowdown)
+ reach = initial(reach)
diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm
new file mode 100644
index 0000000000..7cf6f7457c
--- /dev/null
+++ b/code/modules/fishing/fishing_rod.dm
@@ -0,0 +1,124 @@
+
+/obj/item/weapon/material/fishing_rod
+ name = "crude fishing rod"
+ desc = "A crude rod made for catching fish."
+ description_info = "A tool usable on water-tiles to attempt to catch fish by swiping it over them.\
+ You can add or remove cable by wirecutter or coil respectively to allow its use.\
+ Any food containing things like protein, sugar, or standard nutriment can be attached to the rod, allowing for faster fishing based on the amount.\
+ You can examine the rod to check if it has bait attached, and examine it automatically if so.\
+ \
+ Ctrl clicking the rod will remove any attached bait from the rod."
+ description_antag = "Some fishing rods can be utilized as long-range, sharp weapons, though their pseudo ranged ability comes at the cost of slow speed."
+ icon_state = "fishing_rod"
+ item_state = "fishing_rod"
+ force_divisor = 0.25
+ throwforce = 7
+ sharp = TRUE
+ attack_verb = list("whipped", "battered", "slapped", "fished", "hooked")
+ hitsound = 'sound/weapons/punchmiss.ogg'
+ applies_material_colour = TRUE
+ default_material = "wood"
+ can_dull = FALSE
+ var/strung = TRUE
+ var/line_break = TRUE
+
+ var/obj/item/weapon/reagent_containers/food/snacks/Bait
+ var/bait_type = /obj/item/weapon/reagent_containers/food/snacks
+
+ var/cast = FALSE
+
+ attackspeed = 3 SECONDS
+
+/obj/item/weapon/material/fishing_rod/built
+ strung = FALSE
+
+/obj/item/weapon/material/fishing_rod/examine(mob/M as mob)
+ ..()
+ if(Bait)
+ to_chat(M, "\The [src] has \the [Bait] hanging on its hook.")
+ Bait.examine(M)
+
+/obj/item/weapon/material/fishing_rod/CtrlClick(mob/user)
+ if((src.loc == user || Adjacent(user)) && Bait)
+ Bait.forceMove(get_turf(user))
+ to_chat(user, "You remove the bait from \the [src].")
+ Bait = null
+ else
+ ..()
+
+/obj/item/weapon/material/fishing_rod/Initialize()
+ ..()
+ update_icon()
+
+/obj/item/weapon/material/fishing_rod/attackby(obj/item/I as obj, mob/user as mob)
+ if(I.is_wirecutter() && strung)
+ strung = FALSE
+ to_chat(user, "You cut \the [src]'s string!")
+ update_icon()
+ return
+ else if(istype(I, /obj/item/stack/cable_coil) && !strung)
+ var/obj/item/stack/cable_coil/C = I
+ if(C.amount < 5)
+ to_chat(user, "You do not have enough length in \the [C] to string this!")
+ return
+ if(do_after(user, rand(10 SECONDS, 20 SECONDS)))
+ C.use(5)
+ strung = TRUE
+ to_chat(user, "You string \the [src]!")
+ update_icon()
+ return
+ else if(istype(I, bait_type))
+ if(Bait)
+ Bait.forceMove(get_turf(user))
+ to_chat(user, "You swap \the [Bait] with \the [I].")
+ Bait = I
+ user.drop_from_inventory(Bait)
+ Bait.forceMove(src)
+ update_bait()
+ return ..()
+
+/obj/item/weapon/material/fishing_rod/update_icon()
+ overlays.Cut()
+ ..()
+ if(strung)
+ overlays += image(icon, "[icon_state]_string")
+
+/obj/item/weapon/material/fishing_rod/proc/update_bait()
+ if(istype(Bait, bait_type))
+ var/foodvolume
+ for(var/datum/reagent/re in Bait.reagents.reagent_list)
+ if(re.id == "nutriment" || re.id == "protein" || re.id == "glucose")
+ foodvolume += re.volume
+
+ toolspeed = initial(toolspeed) * min(0.75, (0.5 / max(0.5, (foodvolume / Bait.reagents.maximum_volume))))
+
+ else
+ toolspeed = initial(toolspeed)
+
+/obj/item/weapon/material/fishing_rod/proc/consume_bait()
+ if(Bait)
+ qdel(Bait)
+ Bait = null
+ return TRUE
+ return FALSE
+
+/obj/item/weapon/material/fishing_rod/attack(var/mob/M as mob, var/mob/user as mob, var/def_zone)
+ if(cast)
+ to_chat(user, "You cannot cast \the [src] when it is already in use!")
+ return FALSE
+ update_bait()
+ return ..()
+
+/obj/item/weapon/material/fishing_rod/modern
+ name = "fishing rod"
+ desc = "A refined rod for catching fish."
+ icon_state = "fishing_rod_modern"
+ item_state = "fishing_rod"
+ reach = 4
+ attackspeed = 2 SECONDS
+ default_material = "titanium"
+
+ toolspeed = 0.75
+
+/obj/item/weapon/material/fishing_rod/modern/built
+ strung = FALSE
diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm
index 7921dd0e13..1f0b9cf7fe 100644
--- a/code/modules/food/food/snacks.dm
+++ b/code/modules/food/food/snacks.dm
@@ -714,18 +714,36 @@
bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
- name = "carp fillet"
- desc = "A fillet of spess carp meat"
+ name = "fillet"
+ desc = "A fillet of carp meat"
icon_state = "fishfillet"
filling_color = "#FFDEFE"
center_of_mass = list("x"=17, "y"=13)
+ var/toxin_type = "carpotoxin"
+ var/toxin_amount = 3
+
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/Initialize()
. = ..()
reagents.add_reagent("protein", 3)
- reagents.add_reagent("carpotoxin", 3)
+ reagents.add_reagent(toxin_type, toxin_amount)
src.bitesize = 6
+/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
+ desc = "A fillet of sivian fish meat."
+ filling_color = "#2c2cff"
+ color = "#2c2cff"
+ toxin_type = "neurotoxic_protein"
+ toxin_amount = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish
+ toxin_type = "murk_protein"
+
+/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish
+ desc = "A fillet of fish meat."
+ toxin_type = "neurotoxic_protein"
+ toxin_amount = 1
+
/obj/item/weapon/reagent_containers/food/snacks/fishfingers
name = "Fish Fingers"
desc = "A finger of fish."
diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm
index 764a99ad97..721b54826e 100644
--- a/code/modules/materials/material_recipes.dm
+++ b/code/modules/materials/material_recipes.dm
@@ -129,6 +129,7 @@
recipes += new/datum/stack_recipe("airtight plastic flaps", /obj/structure/plasticflaps/mining, 5, time = 25, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1)
+ recipes += new/datum/stack_recipe("plastic net", /obj/item/weapon/material/fishing_net, 25, time = 1 MINUTE)
/material/wood/generate_recipes()
..()
@@ -148,6 +149,7 @@
recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1)
recipes += new/datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0)
recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5)
+ recipes += new/datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS)
/material/wood/log/generate_recipes()
recipes = list()
@@ -200,3 +202,20 @@
/material/supermatter/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("supermatter shard", /obj/machinery/power/supermatter/shard, 30 , one_per_turf = 1, time = 600, on_floor = 1)
+
+/material/cloth/generate_recipes()
+ recipes = list()
+ recipes += new/datum/stack_recipe("woven net", /obj/item/weapon/material/fishing_net, 10, time = 30 SECONDS)
+ recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS)
+ recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS)
+ recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS)
+ recipes += new/datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS)
+ recipes += new/datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS)
+ recipes += new/datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES)
+ recipes += new/datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS)
+ recipes += new/datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS)
+ recipes += new/datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS)
+ recipes += new/datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS)
+ recipes += new/datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS)
+ recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS)
+ recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE)
diff --git a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm
index 40386f2b71..1f4391a67b 100644
--- a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm
+++ b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm
@@ -53,7 +53,9 @@
new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
new /datum/data/mining_equipment("KA Efficiency Increase", /obj/item/borg/upgrade/modkit/efficiency, 1200),
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000),
- new /datum/data/mining_equipment("KA Holster", /obj/item/clothing/accessory/holster/waist/kinetic_accelerator, 350)
+ new /datum/data/mining_equipment("KA Holster", /obj/item/clothing/accessory/holster/waist/kinetic_accelerator, 350),
+ new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 500),
+ new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 1000)
)
//VOREStation Edit End
diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index 25ee7c64be..584dc51ad5 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -104,6 +104,22 @@ var/list/holder_mob_icon_cache = list()
/obj/item/weapon/holder/borer
origin_tech = list(TECH_BIO = 6)
+/obj/item/weapon/holder/fish
+ attack_verb = list("fished", "disrespected", "smacked", "smackereled")
+ hitsound = 'sound/effects/slime_squish.ogg'
+ slot_flags = SLOT_HOLSTER
+ origin_tech = list(TECH_BIO = 3)
+
+/obj/item/weapon/holder/fish/afterattack(var/atom/target, var/mob/living/user, proximity)
+ if(!target)
+ return
+ if(!proximity)
+ return
+ if(isliving(target))
+ var/mob/living/L = target
+ if(prob(10))
+ L.Stun(2)
+
/obj/item/weapon/holder/attackby(obj/item/weapon/W as obj, mob/user as mob)
for(var/mob/M in src.contents)
M.attackby(W,user)
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm
index 3b40147794..06d4eb4caa 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm
@@ -16,6 +16,8 @@
response_harm = "stomps"
friendly = "pinches"
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/crab
+
say_list_type = /datum/say_list/crab
//COFFEE! SQUEEEEEEEEE!
@@ -23,3 +25,33 @@
name = "Coffee"
real_name = "Coffee"
desc = "It's Coffee, the other pet!"
+
+// Sif!
+
+/datum/category_item/catalogue/fauna/sif_crab
+ name = "Sivian Fauna - Shelf Crab"
+ desc = "Classification: S Ocypode glacian\
+
\
+ A small crustacean sometimes considered a pest to Sivian fisheries, \
+ as the creatures often tend to ignore non-native fish species when feeding. This \
+ results in an unfortunate advantage for invasive species. \
+
\
+ Otherwise, these animals are enjoyed as a reliable source of high-grade meat."
+ value = CATALOGUER_REWARD_EASY
+
+/mob/living/simple_mob/animal/passive/crab/sif
+ icon = 'icons/mob/fish.dmi'
+ tt_desc = "S Ocypode glacian"
+
+ catalogue_data = list(/datum/category_item/catalogue/fauna/sif_crab)
+
+/mob/living/simple_mob/animal/passive/crab/sif/Initialize()
+ ..()
+ adjust_scale(rand(5,15) / 10)
+
+// Meat!
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/crab
+ name = "meat"
+ desc = "A chunk of meat."
+ icon_state = "crustacean-meat"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
index bdf8853b4b..790681a3fc 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
@@ -1,14 +1,27 @@
// Different types of fish! They are all subtypes of this tho
+/datum/category_item/catalogue/fauna/invasive_fish
+ name = "Invasive Fauna - Fish"
+ desc = "This fish is considered an invasive species according \
+ to Sivian wildlife regulations. Removal or relocation is advised."
+ value = CATALOGUER_REWARD_TRIVIAL
+
/mob/living/simple_mob/animal/passive/fish
name = "fish"
desc = "Its a fishy. No touchy fishy."
icon = 'icons/mob/fish.dmi'
+ item_state = "fish"
+
+ catalogue_data = list(/datum/category_item/catalogue/fauna/invasive_fish)
mob_size = MOB_SMALL
// So fish are actually underwater.
plane = TURF_PLANE
layer = UNDERWATER_LAYER
+ holder_type = /obj/item/weapon/holder/fish
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish
+
// By default they can be in any water turf. Subtypes might restrict to deep/shallow etc
var/global/list/suitable_turf_types = list(
/turf/simulated/floor/beach/water,
@@ -75,3 +88,212 @@
icon_living = "koi-swim"
icon_dead = "koi-dead"
+/datum/category_item/catalogue/fauna/javelin
+ name = "Sivian Fauna - Javelin Shark"
+ desc = "Classification: S Cetusan minimalix\
+
\
+ A small breed of fatty shark native to the waters near the Ullran Expanse.\
+ The creatures are not known to attack humans or larger animals, possibly \
+ due to their size. It is speculated that they are actually scavengers, \
+ as they are most commonly found near the gulf floor. \
+
\
+ The Javelin's reproductive cycle only recurs between three and four \
+ Sivian years. \
+
\
+ These creatures are considered a protected species, and thus require an \
+ up-to-date license to be hunted."
+ value = CATALOGUER_REWARD_EASY
+
+/mob/living/simple_mob/animal/passive/fish/javelin
+ name = "javelin"
+ tt_desc = "S Cetusan minimalix"
+ icon_state = "javelin-swim"
+ icon_living = "javelin-swim"
+ icon_dead = "javelin-dead"
+
+ catalogue_data = list(/datum/category_item/catalogue/fauna/javelin)
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
+
+/datum/category_item/catalogue/fauna/icebass
+ name = "Sivian Fauna - Glitter Bass"
+ desc = "Classification: X Micropterus notius crotux\
+
\
+ Initially a genetically engineered hybrid of the common Earth bass and \
+ the Sivian Rock-Fish. These were designed to deal with the invasive \
+ fish species, however to their creators' dismay, they instead \
+ began to form their own passive niche. \
+
\
+ Due to the brilliant reflective scales earning them their name, the \
+ animals pose a specific issue for Sivian animals relying on \
+ bioluminesence to aid in their hunt. \
+
\
+ Despite their beauty, they are considered an invasive species."
+ value = CATALOGUER_REWARD_EASY
+
+/mob/living/simple_mob/animal/passive/fish/icebass
+ name = "glitter bass"
+ tt_desc = "X Micropterus notius crotux"
+ icon_state = "sifbass-swim"
+ icon_living = "sifbass-swim"
+ icon_dead = "sifbass-dead"
+
+ catalogue_data = list(/datum/category_item/catalogue/fauna/icebass)
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
+
+ var/max_red = 150
+ var/min_red = 50
+
+ var/max_blue = 255
+ var/min_blue = 50
+
+ var/max_green = 150
+ var/min_green = 50
+
+ var/dorsal_color = "#FFFFFF"
+ var/belly_color = "#FFFFFF"
+
+ var/image/dorsal_image
+ var/image/belly_image
+
+/mob/living/simple_mob/animal/passive/fish/icebass/Initialize()
+ ..()
+ dorsal_color = rgb(rand(min_red,max_red), rand(min_green,max_green), rand(min_blue,max_blue))
+ belly_color = rgb(rand(min_red,max_red), rand(min_green,max_green), rand(min_blue,max_blue))
+ update_icon()
+
+/mob/living/simple_mob/animal/passive/fish/icebass/update_icon()
+ overlays.Cut()
+ ..()
+ if(!dorsal_image)
+ dorsal_image = image(icon, "[icon_state]_mask-body")
+ if(!belly_image)
+ belly_image = image(icon, "[icon_state]_mask-belly")
+
+ dorsal_image.color = dorsal_color
+ belly_image.color = belly_color
+
+ overlays += dorsal_image
+ overlays += belly_image
+
+/datum/category_item/catalogue/fauna/rockfish
+ name = "Sivian Fauna - Rock Puffer"
+ desc = "Classification: S Tetraodontidae scopulix\
+
\
+ A species strangely resembling the puffer-fish of Earth. These \
+ creatures do not use toxic spines to protect themselves, instead \
+ utilizing an incredibly durable exoskeleton that is molded by the \
+ expansion of its ventral fluid bladders. \
+
\
+ Rock Puffers or 'Rock-fish' are often host to smaller creatures which \
+ maneuver their way into the gap between the fish's body and shell. \
+
\
+ The species is also capable of pulling its vibrantly colored head into \
+ the safer confines of its shell, the action being utilized in their \
+ attempts to find a mate."
+ value = CATALOGUER_REWARD_EASY
+
+/mob/living/simple_mob/animal/passive/fish/rockfish
+ name = "rock-fish"
+ tt_desc = "S Tetraodontidae scopulix"
+ icon_state = "rockfish-swim"
+ icon_living = "rockfish-swim"
+ icon_dead = "rockfish-dead"
+
+ catalogue_data = list(/datum/category_item/catalogue/fauna/rockfish)
+
+ armor = list(
+ "melee" = 90,
+ "bullet" = 50,
+ "laser" = -15,
+ "energy" = 30,
+ "bomb" = 30,
+ "bio" = 100,
+ "rad" = 100)
+
+ var/max_red = 255
+ var/min_red = 50
+
+ var/max_blue = 255
+ var/min_blue = 50
+
+ var/max_green = 255
+ var/min_green = 50
+
+ var/head_color = "#FFFFFF"
+
+ var/image/head_image
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
+
+/mob/living/simple_mob/animal/passive/fish/rockfish/Initialize()
+ ..()
+ head_color = rgb(rand(min_red,max_red), rand(min_green,max_green), rand(min_blue,max_blue))
+
+/mob/living/simple_mob/animal/passive/fish/rockfish/update_icon()
+ overlays.Cut()
+ ..()
+ if(!head_image)
+ head_image = image(icon, "[icon_state]_mask")
+
+ head_image.color = head_color
+
+ overlays += head_image
+
+/datum/category_item/catalogue/fauna/solarfish
+ name = "Sivian Fauna - Solar Fin"
+ desc = "Classification: S Exocoetidae solarin\
+
\
+ An incredibly rare species of Sivian fish.\
+ The solar-fin missile fish is a specialized omnivore capable of \
+ catching insects or small birds venturing too close to the water's \
+ surface. \
+
\
+ The glimmering fins of the solar-fin are actually biofluorescent, \
+ 'charged' by the creature basking at the surface of the water, most \
+ commonly by the edge of an ice-shelf, as a rapid means of cover. \
+
\
+ These creatures are considered a protected species, and thus require an \
+ up-to-date license to be hunted."
+ value = CATALOGUER_REWARD_HARD
+
+/mob/living/simple_mob/animal/passive/fish/solarfish
+ name = "sun-fin"
+ tt_desc = "S Exocoetidae solarin"
+ icon_state = "solarfin-swim"
+ icon_living = "solarfin-swim"
+ icon_dead = "solarfin-dead"
+
+ catalogue_data = list(/datum/category_item/catalogue/fauna/solarfish)
+
+ has_eye_glow = TRUE
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
+
+/datum/category_item/catalogue/fauna/murkin
+ name = "Sivian Fauna - Murkfish"
+ desc = "Classification: S Perca lutux\
+
\
+ A small, Sivian fish most known for its bland-ness.\
+
\
+ The species is incredibly close in appearance to the Earth \
+ perch, aside from its incredibly tall dorsal fin. The animals use \
+ the fin to assess the wind direction while near the surface. \
+
\
+ The murkfish earns its name from the fact its dense meat tastes like mud \
+ thanks to a specially formed protein, most likely an adaptation to \
+ protect the species from predation."
+ value = CATALOGUER_REWARD_TRIVIAL
+
+/mob/living/simple_mob/animal/passive/fish/murkin
+ name = "murkin"
+ tt_desc = "S Perca lutux"
+
+ icon_state = "murkin-swim"
+ icon_living = "murkin-swim"
+ icon_dead = "murkin-dead"
+
+ catalogue_data = list(/datum/category_item/catalogue/fauna/murkin)
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish
diff --git a/code/modules/modular_computers/computers/subtypes/dev_laptop.dm b/code/modules/modular_computers/computers/subtypes/dev_laptop.dm
index eddae93f74..ac284b6bac 100644
--- a/code/modules/modular_computers/computers/subtypes/dev_laptop.dm
+++ b/code/modules/modular_computers/computers/subtypes/dev_laptop.dm
@@ -22,6 +22,16 @@
if(!istype(loc, /turf/))
to_chat(usr, "\The [src] has to be on a stable surface first!")
return
+ //VOREStation Addition Begin
+ var/supported = FALSE
+ for(var/obj/structure/table/S in loc)
+ if(istype(S, /obj/structure/table/bench) || istype(S, /obj/structure/table/rack))
+ continue
+ supported = TRUE
+ if(!supported)
+ to_chat(usr, "You will need a better supporting surface before opening \the [src]!")
+ return
+ //VOREStation Addition End
anchored = !anchored
screen_on = anchored
update_icon()
diff --git a/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm
index cfd9353eee..9d80482644 100644
--- a/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm
+++ b/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm
@@ -7,6 +7,7 @@
program_key_state = "atmos_key"
program_menu_icon = "alert"
extended_desc = "This program provides visual interface for the alarm system."
+ required_access = access_engine //VOREStation Addition
requires_ntnet = 1
network_destination = "alarm monitoring network"
size = 5
diff --git a/code/modules/modular_computers/file_system/programs/generic/camera.dm b/code/modules/modular_computers/file_system/programs/generic/camera.dm
index 47ac48eb40..92936def68 100644
--- a/code/modules/modular_computers/file_system/programs/generic/camera.dm
+++ b/code/modules/modular_computers/file_system/programs/generic/camera.dm
@@ -9,8 +9,9 @@
switch(network)
if(NETWORK_THUNDER)
return 0
- if(NETWORK_ENGINE,NETWORK_ENGINEERING,NETWORK_ENGINEERING_OUTPOST,NETWORK_ALARM_ATMOS,NETWORK_ALARM_FIRE,NETWORK_ALARM_POWER)
+ if(NETWORK_ENGINE,NETWORK_ALARM_ATMOS,NETWORK_ALARM_FIRE,NETWORK_ALARM_POWER) //VOREStation Edit
return access_engine
+ /*
if(NETWORK_MEDICAL)
return access_medical
if(NETWORK_RESEARCH,NETWORK_RESEARCH_OUTPOST)
@@ -19,6 +20,7 @@
return access_mailsorting // Cargo office - all cargo staff should have access here.
if(NETWORK_COMMAND,NETWORK_TELECOM)
return access_heads
+ */ //VOREStation Removal
if(NETWORK_ERT)
return access_cent_specops
@@ -80,7 +82,7 @@
if(!network_access)
return 1
- return check_access(user, access_security) || check_access(user, network_access)
+ return check_access(user, access_security) || check_access(user, access_heads) || check_access(user, network_access) //VOREStation Edit
/datum/nano_module/camera_monitor/Topic(href, href_list)
if(..())
diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm
index 837d5e8657..38239fb801 100644
--- a/code/modules/reagents/Chemistry-Holder.dm
+++ b/code/modules/reagents/Chemistry-Holder.dm
@@ -88,8 +88,8 @@
reaction_occurred = FALSE
for(var/i in reagent_list)
var/datum/reagent/R = i
- if(SSchemistry.chemical_reactions_by_reagent[R.id]) //VOREStation Edit: unruntiming chems
- eligible_reactions |= SSchemistry.chemical_reactions_by_reagent[R.id] //VOREStation Edit: unruntiming chems
+ if(SSchemistry.chemical_reactions_by_reagent[R.id])
+ eligible_reactions |= SSchemistry.chemical_reactions_by_reagent[R.id]
for(var/i in eligible_reactions)
var/datum/chemical_reaction/C = i
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
index 6528826ac7..9b8970c2b7 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
@@ -92,6 +92,12 @@
taste_description = "egg"
color = "#FFFFAA"
+/datum/reagent/nutriment/protein/murk
+ name = "murkfin protein"
+ id = "murk_protein"
+ taste_description = "mud"
+ color = "#664330"
+
/datum/reagent/nutriment/honey
name = "Honey"
id = "honey"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
index 59716a5493..79304733dd 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
@@ -50,6 +50,25 @@
color = "#003333"
strength = 10
+/datum/reagent/toxin/neurotoxic_protein
+ name = "toxic protein"
+ id = "neurotoxic_protein"
+ description = "A weak neurotoxic chemical commonly found in Sivian fish meat."
+ taste_description = "fish"
+ reagent_state = LIQUID
+ color = "#005555"
+ strength = 8
+
+/datum/reagent/toxin/neurotoxic_protein/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien != IS_DIONA)
+ if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
+ step(M, pick(cardinal))
+ if(prob(5))
+ M.emote(pick("twitch", "drool", "moan"))
+ if(prob(20))
+ M.adjustBrainLoss(0.1)
+
//R-UST port
// Produced during deuterium synthesis. Super poisonous, SUPER flammable (doesn't need oxygen to burn).
/datum/reagent/toxin/hydrophoron
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index c3a973402a..7d2a588d52 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -2379,3 +2379,12 @@
result = "biomass"
required_reagents = list("protein" = 1, "sugar" = 1, "phoron" = 1)
result_amount = 6 // Roughly 120u per phoron sheet //VOREStation Edit
+
+// Neutralization.
+
+/datum/chemical_reaction/neutralize_neurotoxic_protein
+ name = "Neutralize Toxic Proteins"
+ id = "neurotoxic_protein_neutral"
+ result = "protein"
+ required_reagents = list("anti_toxin" = 1, "neurotoxic_protein" = 2)
+ result_amount = 2
diff --git a/html/changelog.html b/html/changelog.html
index 7dfc0cd7b1..db7b957f42 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -53,6 +53,26 @@
-->
+
06 May 2019
+
Mechoid updated:
+
+ - Added fishing mechanics, and fishing gear.
+ - Cloth can make normal cloth things.
+
+
Novacat updated:
+
+ - Ports Bay code to allow hiding accessories when jumpsuits are rolled down/sleeve rolled.
+ - Ports medals and ribbons from SEV Torch.
+ - Ports initial infrastructure for modular computers from Baystation.
+ - Cameras now have a slight static when viewing through them.
+ - Adds Digital Warrant Program, to set warrants. Comes with a device.
+ - Adds Supermatter Monitor program.
+ - Chemistry processes instantly again.
+ - Nanoui sends stuff even after client connect.
+ - Shortwave radios now can transmit across connected Z levels.
+ - Relays on moving platforms (shuttles) will now function.
+
+
26 April 2019
Heroman3003 updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 8810d47f18..b86092211c 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -4477,3 +4477,19 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
chaoko99:
- rscadd: Ore bags will automatically pick up items when held, belted, or pocketed,
and automatically deposit ore in boxes if one is being pulled.
+2019-05-06:
+ Mechoid:
+ - rscadd: Added fishing mechanics, and fishing gear.
+ - tweak: Cloth can make normal cloth things.
+ Novacat:
+ - rscadd: Ports Bay code to allow hiding accessories when jumpsuits are rolled down/sleeve
+ rolled.
+ - rscadd: Ports medals and ribbons from SEV Torch.
+ - rscadd: Ports initial infrastructure for modular computers from Baystation.
+ - rscadd: Cameras now have a slight static when viewing through them.
+ - rscadd: Adds Digital Warrant Program, to set warrants. Comes with a device.
+ - rscadd: Adds Supermatter Monitor program.
+ - tweak: Chemistry processes instantly again.
+ - tweak: Nanoui sends stuff even after client connect.
+ - tweak: Shortwave radios now can transmit across connected Z levels.
+ - tweak: Relays on moving platforms (shuttles) will now function.
diff --git a/html/changelogs/Novacat - modularcomputers.yml b/html/changelogs/Novacat - modularcomputers.yml
deleted file mode 100644
index 1e21807f7f..0000000000
--- a/html/changelogs/Novacat - modularcomputers.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-################################
-# Example Changelog File
-#
-# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
-#
-# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
-# When it is, any changes listed below will disappear.
-#
-# Valid Prefixes:
-# bugfix
-# wip (For works in progress)
-# tweak
-# soundadd
-# sounddel
-# rscadd (general adding of nice things)
-# rscdel (general deleting of nice things)
-# imageadd
-# imagedel
-# maptweak
-# spellcheck (typo fixes)
-# experiment
-#################################
-
-# Your name.
-author: Novacat
-
-# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
-delete-after: True
-
-# Any changes you've made. See valid prefix list above.
-# INDENT WITH TWO SPACES. NOT TABS. SPACES.
-# SCREW THIS UP AND IT WON'T WORK.
-# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
-# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
-changes:
- - rscadd: "Ports initial infrastructure for modular computers from Baystation."
- - rscadd: "Cameras now have a slight static when viewing through them."
- - rscadd: "Adds Digital Warrant Program, to set warrants. Comes with a device."
- - rscadd: "Adds Supermatter Monitor program."
diff --git a/html/changelogs/Novacat - shortwave.yml b/html/changelogs/Novacat - shortwave.yml
deleted file mode 100644
index 5c94c77f64..0000000000
--- a/html/changelogs/Novacat - shortwave.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-################################
-# Example Changelog File
-#
-# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
-#
-# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
-# When it is, any changes listed below will disappear.
-#
-# Valid Prefixes:
-# bugfix
-# wip (For works in progress)
-# tweak
-# soundadd
-# sounddel
-# rscadd (general adding of nice things)
-# rscdel (general deleting of nice things)
-# imageadd
-# imagedel
-# maptweak
-# spellcheck (typo fixes)
-# experiment
-#################################
-
-# Your name.
-author: Novacat
-
-# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
-delete-after: True
-
-# Any changes you've made. See valid prefix list above.
-# INDENT WITH TWO SPACES. NOT TABS. SPACES.
-# SCREW THIS UP AND IT WON'T WORK.
-# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
-# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
-changes:
- - tweak: "Shortwave radios now can transmit across connected Z levels."
- - tweak: "Relays on moving platforms (shuttles) will now function."
diff --git a/icons/mob/fish.dmi b/icons/mob/fish.dmi
index 81ba72c9fd..66dbf7278e 100644
Binary files a/icons/mob/fish.dmi and b/icons/mob/fish.dmi differ
diff --git a/icons/mob/items/lefthand_holder.dmi b/icons/mob/items/lefthand_holder.dmi
index 9f47a4743a..d629c657ce 100644
Binary files a/icons/mob/items/lefthand_holder.dmi and b/icons/mob/items/lefthand_holder.dmi differ
diff --git a/icons/mob/items/lefthand_material.dmi b/icons/mob/items/lefthand_material.dmi
index 767b25c77a..a2f035cd58 100644
Binary files a/icons/mob/items/lefthand_material.dmi and b/icons/mob/items/lefthand_material.dmi differ
diff --git a/icons/mob/items/righthand_holder.dmi b/icons/mob/items/righthand_holder.dmi
index 7ac02b7720..c1e0563ec4 100644
Binary files a/icons/mob/items/righthand_holder.dmi and b/icons/mob/items/righthand_holder.dmi differ
diff --git a/icons/mob/items/righthand_material.dmi b/icons/mob/items/righthand_material.dmi
index 28da6c5e55..6895183a5b 100644
Binary files a/icons/mob/items/righthand_material.dmi and b/icons/mob/items/righthand_material.dmi differ
diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi
index a22005ef29..ea59c54077 100644
Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index c9cea71b82..d2d986c205 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi
index 3abf08997f..da2754d04b 100644
Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ
diff --git a/maps/southern_cross/job/outfits_vr.dm b/maps/southern_cross/job/outfits_vr.dm
index 08ab9379d3..0a0301212f 100644
--- a/maps/southern_cross/job/outfits_vr.dm
+++ b/maps/southern_cross/job/outfits_vr.dm
@@ -18,4 +18,4 @@
/decl/hierarchy/outfit/job/assistant/explorer
id_type = /obj/item/weapon/card/id/explorer
- flags = OUTFIT_COMPREHENSIVE_SURVIVAL
+ flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL
diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm
index 17ecf7288f..75ba4194d0 100644
--- a/maps/tether/tether-01-surface1.dmm
+++ b/maps/tether/tether-01-surface1.dmm
@@ -1408,12 +1408,18 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/effect/landmark/start{
+ name = "Shaft Miner"
+ },
/turf/simulated/floor/tiled,
/area/tether/surfacebase/mining_main/eva)
"acF" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/effect/landmark/start{
+ name = "Shaft Miner"
+ },
/turf/simulated/floor/tiled,
/area/tether/surfacebase/mining_main/eva)
"acG" = (
@@ -5071,6 +5077,9 @@
/obj/structure/bed/chair/office/light{
dir = 4
},
+/obj/effect/landmark/start{
+ name = "Scientist"
+ },
/turf/simulated/floor/tiled/white,
/area/rnd/chemistry_lab)
"aiI" = (
@@ -5822,6 +5831,16 @@
},
/turf/simulated/floor/tiled,
/area/rnd/hallway)
+"ajP" = (
+/obj/structure/bed/chair/office/light{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/effect/landmark/start{
+ name = "Xenobiologist"
+ },
+/turf/simulated/floor/tiled,
+/area/rnd/xenobiology)
"ajQ" = (
/obj/machinery/door/airlock/glass_mining{
name = "Warehouse"
@@ -5834,6 +5853,37 @@
},
/turf/simulated/floor/tiled/steel_grid,
/area/tether/surfacebase/mining_main/ore)
+"ajR" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/landmark/start{
+ name = "Xenobiologist"
+ },
+/turf/simulated/floor/tiled,
+/area/rnd/xenobiology)
+"ajS" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/effect/landmark/start{
+ name = "Bartender"
+ },
+/turf/simulated/floor/tiled,
+/area/crew_quarters/visitor_dining)
+"ajT" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/bed/chair/office/dark{
+ dir = 4
+ },
+/obj/effect/landmark/start{
+ name = "Security Officer"
+ },
+/turf/simulated/floor/tiled,
+/area/security/checkpoint)
"ajU" = (
/turf/simulated/floor/grass,
/area/tether/surfacebase/atrium_one)
@@ -5859,6 +5909,19 @@
},
/turf/simulated/floor/tiled,
/area/tether/surfacebase/atrium_one)
+"ajX" = (
+/obj/effect/landmark/start{
+ name = "Atmospheric Technician"
+ },
+/turf/simulated/floor/tiled,
+/area/engineering/atmos)
+"ajY" = (
+/obj/item/weapon/stool,
+/obj/effect/landmark/start{
+ name = "Atmospheric Technician"
+ },
+/turf/simulated/floor/tiled,
+/area/engineering/atmos)
"ajZ" = (
/obj/structure/table/standard,
/obj/item/device/t_scanner,
@@ -5880,6 +5943,19 @@
},
/turf/simulated/floor/tiled/steel_dirty/virgo3b,
/area/storage/surface_eva/external)
+"akd" = (
+/obj/effect/landmark/start{
+ name = "Assistant"
+ },
+/turf/simulated/floor/tiled,
+/area/storage/primary)
+"ake" = (
+/obj/item/weapon/stool,
+/obj/effect/landmark/start{
+ name = "Assistant"
+ },
+/turf/simulated/floor/tiled,
+/area/storage/primary)
"akf" = (
/obj/machinery/washing_machine,
/obj/machinery/atmospherics/unary/vent_scrubber/on,
@@ -7333,10 +7409,6 @@
},
/turf/simulated/floor/tiled,
/area/storage/primary)
-"aoB" = (
-/obj/item/weapon/stool,
-/turf/simulated/floor/tiled,
-/area/storage/primary)
"aoC" = (
/obj/effect/floor_decal/borderfloor{
dir = 5
@@ -13495,13 +13567,6 @@
},
/turf/simulated/floor/tiled,
/area/hallway/lower/first_west)
-"aEA" = (
-/obj/structure/bed/chair/office/light{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/turf/simulated/floor/tiled,
-/area/rnd/xenobiology)
"aEC" = (
/obj/effect/floor_decal/borderfloor{
dir = 10
@@ -14139,12 +14204,6 @@
},
/turf/simulated/floor/tiled,
/area/rnd/xenobiology)
-"aGv" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/rnd/xenobiology)
"aGw" = (
/obj/structure/table/standard,
/obj/item/weapon/storage/box/monkeycubes,
@@ -14432,10 +14491,6 @@
/obj/machinery/pipedispenser,
/turf/simulated/floor/tiled,
/area/engineering/atmos)
-"aHr" = (
-/obj/item/weapon/stool,
-/turf/simulated/floor/tiled,
-/area/engineering/atmos)
"aHv" = (
/obj/structure/table/standard,
/obj/effect/floor_decal/borderfloor{
@@ -15319,13 +15374,6 @@
/obj/machinery/disposal,
/turf/simulated/floor/tiled,
/area/security/checkpoint)
-"aMy" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/structure/bed/chair/office/dark{
- dir = 4
- },
-/turf/simulated/floor/tiled,
-/area/security/checkpoint)
"aND" = (
/obj/structure/table/standard,
/obj/random/tech_supply,
@@ -23971,15 +24019,6 @@
},
/turf/simulated/floor/lino,
/area/crew_quarters/visitor_dining)
-"cfd" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/turf/simulated/floor/tiled,
-/area/crew_quarters/visitor_dining)
"cfg" = (
/obj/structure/grille,
/obj/structure/window/reinforced/full,
@@ -36696,7 +36735,7 @@ bqm
aAO
aAO
aDP
-aEA
+ajP
aFh
aFE
aFE
@@ -37410,7 +37449,7 @@ aEE
aFk
aGr
aGh
-aGv
+ajR
aZe
aHe
bOo
@@ -40917,10 +40956,10 @@ aah
aah
aeW
aft
-afT
+akd
afr
afr
-afT
+akd
agX
ahn
ahU
@@ -41059,10 +41098,10 @@ aah
aah
aeW
amq
-aoB
+ake
afr
agA
-aoB
+ake
agY
ahn
ahL
@@ -41201,10 +41240,10 @@ aah
aah
aeW
afv
-afT
+akd
afr
aND
-afT
+akd
agX
ahn
ahS
@@ -41814,7 +41853,7 @@ aFs
aFs
bEX
ugE
-aHr
+ajY
aHO
kwi
kwi
@@ -43238,7 +43277,7 @@ kwi
kwi
xKT
iLm
-kwi
+ajX
kwi
kwi
kwi
@@ -47190,7 +47229,7 @@ asF
atp
auW
awR
-aMy
+ajT
aTf
atp
bfv
@@ -47485,7 +47524,7 @@ agM
aFc
bqg
bXu
-cfd
+ajS
cfw
bXu
bAT
diff --git a/maps/tether/tether-02-surface2.dmm b/maps/tether/tether-02-surface2.dmm
index 7fad8e897a..036ba41204 100644
--- a/maps/tether/tether-02-surface2.dmm
+++ b/maps/tether/tether-02-surface2.dmm
@@ -4811,6 +4811,9 @@
pixel_x = -30;
pixel_y = -18
},
+/obj/effect/landmark/start{
+ name = "Research Director"
+ },
/turf/simulated/floor/tiled,
/area/rnd/rdoffice)
"kr" = (
@@ -7821,6 +7824,9 @@
d2 = 8;
icon_state = "1-8"
},
+/obj/effect/landmark/start{
+ name = "Roboticist"
+ },
/turf/simulated/floor/wood,
/area/rnd/breakroom)
"pU" = (
@@ -7850,6 +7856,9 @@
/obj/structure/bed/chair{
dir = 8
},
+/obj/effect/landmark/start{
+ name = "Scientist"
+ },
/turf/simulated/floor/wood,
/area/rnd/breakroom)
"pX" = (
@@ -8034,6 +8043,9 @@
/obj/structure/bed/chair{
dir = 4
},
+/obj/effect/landmark/start{
+ name = "Scientist"
+ },
/turf/simulated/floor/wood,
/area/rnd/breakroom)
"qo" = (
@@ -8062,11 +8074,10 @@
/area/rnd/breakroom)
"qr" = (
/obj/structure/bed/chair{
- dir = 4
+ dir = 8
},
-/obj/structure/disposalpipe/segment{
- dir = 2;
- icon_state = "pipe-c"
+/obj/effect/landmark/start{
+ name = "Roboticist"
},
/turf/simulated/floor/wood,
/area/rnd/breakroom)
@@ -8305,12 +8316,12 @@
/obj/structure/bed/chair{
dir = 4
},
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+/obj/structure/disposalpipe/segment{
+ dir = 2;
+ icon_state = "pipe-c"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
+/obj/effect/landmark/start{
+ name = "Scientist"
},
/turf/simulated/floor/wood,
/area/rnd/breakroom)
@@ -9423,6 +9434,49 @@
},
/turf/simulated/open,
/area/rnd/staircase/secondfloor)
+"sY" = (
+/obj/structure/bed/chair{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/effect/landmark/start{
+ name = "Xenobiologist"
+ },
+/turf/simulated/floor/wood,
+/area/rnd/breakroom)
+"sZ" = (
+/obj/structure/bed/chair{
+ dir = 1
+ },
+/obj/effect/landmark/start{
+ name = "Atmospheric Technician"
+ },
+/turf/simulated/floor/carpet,
+/area/engineering/lower/breakroom)
+"ta" = (
+/obj/effect/landmark/start{
+ name = "Atmospheric Technician"
+ },
+/turf/simulated/floor/tiled,
+/area/engineering/lower/atmos_lockers)
+"tb" = (
+/obj/effect/floor_decal/borderfloor{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/purple/border{
+ dir = 8
+ },
+/obj/effect/landmark/start{
+ name = "Janitor"
+ },
+/turf/simulated/floor/tiled,
+/area/janitor)
"te" = (
/obj/effect/floor_decal/borderfloor{
dir = 8
@@ -11304,9 +11358,6 @@
/obj/structure/railing,
/turf/simulated/floor/tiled/techmaint,
/area/engineering/atmos)
-"xY" = (
-/turf/simulated/floor/tiled,
-/area/engineering/lower/atmos_lockers)
"ya" = (
/obj/machinery/door/firedoor/glass,
/obj/structure/grille,
@@ -15933,15 +15984,6 @@
},
/turf/simulated/floor/tiled,
/area/tether/surfacebase/public_garden_two)
-"Nt" = (
-/obj/effect/floor_decal/borderfloor{
- dir = 8
- },
-/obj/effect/floor_decal/corner/purple/border{
- dir = 8
- },
-/turf/simulated/floor/tiled,
-/area/janitor)
"Nw" = (
/obj/structure/table/rack,
/obj/random/maintenance/clean,
@@ -27447,8 +27489,8 @@ nq
pF
pT
qn
-qr
qL
+sY
rm
rm
sb
@@ -27872,7 +27914,7 @@ oZ
nr
pL
pW
-pW
+qr
pW
pW
rn
@@ -28868,7 +28910,7 @@ Pi
OR
Ji
KH
-xY
+ta
uG
vw
th
@@ -30710,7 +30752,7 @@ RK
oJ
py
qk
-rK
+sZ
If
sp
tp
@@ -32422,7 +32464,7 @@ ac
oc
vP
Qh
-Nt
+tb
QR
TD
Vz
diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm
index 8d617463e4..3bd18561a1 100644
--- a/maps/tether/tether-03-surface3.dmm
+++ b/maps/tether/tether-03-surface3.dmm
@@ -2351,7 +2351,7 @@
/area/tether/surfacebase/security/armory)
"eq" = (
/obj/effect/decal/cleanable/dirt,
-/mob/living/simple_mob/animal/space/mimic,
+/mob/living/simple_mob/vore/aggressive/mimic,
/turf/simulated/floor/plating,
/area/tether/surfacebase/security/armory)
"er" = (
@@ -4831,13 +4831,13 @@
/area/rnd/workshop)
"iz" = (
/obj/structure/disposalpipe/segment,
-/obj/machinery/vending,
/obj/machinery/firealarm{
dir = 8;
pixel_x = -24
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/floor_decal/rust,
+/obj/machinery/vending/assist,
/turf/simulated/floor/plating,
/area/rnd/research_storage)
"iA" = (
@@ -11094,6 +11094,9 @@
/area/crew_quarters/kitchen)
"tp" = (
/obj/structure/bed/chair/office/dark,
+/obj/effect/landmark/start{
+ name = "Scientist"
+ },
/turf/simulated/floor/tiled/techfloor,
/area/rnd/workshop)
"tq" = (
@@ -11202,6 +11205,9 @@
/obj/structure/bed/chair/office/dark{
dir = 1
},
+/obj/effect/landmark/start{
+ name = "Scientist"
+ },
/turf/simulated/floor/tiled/techfloor,
/area/rnd/workshop)
"tD" = (
@@ -12621,6 +12627,9 @@
dir = 4
},
/obj/machinery/hologram/holopad,
+/obj/effect/landmark/start{
+ name = "Scientist"
+ },
/turf/simulated/floor/tiled/dark,
/area/rnd/research)
"vW" = (
@@ -14031,6 +14040,9 @@
pixel_x = -12;
pixel_y = 8
},
+/obj/effect/landmark/start{
+ name = "Gardener"
+ },
/turf/simulated/floor/tiled,
/area/hydroponics)
"xZ" = (
@@ -17243,11 +17255,23 @@
/turf/simulated/floor/tiled,
/area/rnd/research/testingrange)
"Cz" = (
-/obj/machinery/hologram/holopad,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/obj/structure/bed/chair{
+ dir = 8
+ },
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 8
+ },
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled,
-/area/rnd/research/testingrange)
+/obj/effect/landmark/start{
+ name = "Roboticist"
+ },
+/turf/simulated/floor/tiled/steel_grid,
+/area/assembly/robotics)
"CA" = (
/obj/machinery/door/firedoor/glass,
/obj/structure/cable/green{
@@ -17708,6 +17732,9 @@
pixel_x = -12;
pixel_y = 8
},
+/obj/effect/landmark/start{
+ name = "Gardener"
+ },
/turf/simulated/floor/tiled,
/area/hydroponics)
"Do" = (
@@ -18386,20 +18413,14 @@
/turf/simulated/floor/bluegrid,
/area/assembly/chargebay)
"Eq" = (
-/obj/structure/bed/chair{
- dir = 8
- },
-/obj/structure/cable/green{
- d1 = 1;
- d2 = 2;
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 8
- },
+/obj/machinery/hologram/holopad,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
-/turf/simulated/floor/tiled/steel_grid,
-/area/assembly/robotics)
+/obj/effect/landmark/start{
+ name = "Scientist"
+ },
+/turf/simulated/floor/tiled,
+/area/rnd/research/testingrange)
"Er" = (
/turf/simulated/floor/bluegrid,
/area/assembly/chargebay)
@@ -19802,6 +19823,9 @@
/area/assembly/robotics)
"Gx" = (
/obj/structure/bed/chair/office/dark,
+/obj/effect/landmark/start{
+ name = "Roboticist"
+ },
/turf/simulated/floor/tiled/steel_grid,
/area/assembly/robotics)
"Gy" = (
@@ -20303,10 +20327,18 @@
/turf/simulated/floor/tiled/steel_grid,
/area/assembly/robotics)
"Hp" = (
-/obj/structure/shuttle/engine/propulsion,
-/turf/simulated/floor/reinforced,
-/turf/simulated/shuttle/plating/carry,
-/area/shuttle/tether/surface)
+/obj/effect/floor_decal/corner/grey/diagonal,
+/obj/effect/landmark/start{
+ name = "Chef"
+ },
+/turf/simulated/floor/tiled/white,
+/area/crew_quarters/kitchen)
+"Hq" = (
+/obj/effect/landmark/start{
+ name = "Medical Doctor"
+ },
+/turf/simulated/floor/tiled/white,
+/area/tether/surfacebase/medical/triage)
"Hr" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/glass_external/public,
@@ -20336,6 +20368,25 @@
},
/turf/simulated/floor/tiled/steel_grid,
/area/assembly/robotics)
+"Ht" = (
+/obj/structure/bed/chair{
+ dir = 1
+ },
+/obj/effect/landmark/start{
+ name = "Security Officer"
+ },
+/turf/simulated/floor/carpet/blue,
+/area/tether/surfacebase/security/breakroom)
+"Hu" = (
+/obj/item/weapon/storage/secure/safe{
+ pixel_x = 30;
+ pixel_z = 0
+ },
+/obj/effect/landmark/start{
+ name = "Bartender"
+ },
+/turf/simulated/floor/wood,
+/area/tether/surfacebase/bar_backroom)
"Hv" = (
/obj/structure/railing{
dir = 1
@@ -20358,6 +20409,11 @@
/obj/machinery/door/firedoor/glass,
/turf/simulated/floor/lino,
/area/tether/surfacebase/bar_backroom)
+"Hx" = (
+/obj/structure/shuttle/engine/propulsion,
+/turf/simulated/floor/reinforced,
+/turf/simulated/shuttle/plating/carry,
+/area/shuttle/tether/surface)
"HH" = (
/obj/structure/disposalpipe/segment,
/obj/effect/floor_decal/borderfloor{
@@ -22335,13 +22391,6 @@
/obj/machinery/portable_atmospherics/hydroponics/soil,
/turf/simulated/floor/grass,
/area/tether/surfacebase/public_garden_three)
-"VS" = (
-/obj/item/weapon/storage/secure/safe{
- pixel_x = 30;
- pixel_z = 0
- },
-/turf/simulated/floor/wood,
-/area/tether/surfacebase/bar_backroom)
"VV" = (
/obj/structure/bookcase,
/obj/item/weapon/book/manual/nuclear,
@@ -30421,7 +30470,7 @@ Em
Al
Bd
Ca
-Cz
+Eq
DB
Ei
EA
@@ -31982,7 +32031,7 @@ zw
CA
GJ
Eb
-Eq
+Cz
EK
EX
Fq
@@ -34063,7 +34112,7 @@ bl
bS
cG
cF
-dY
+Ht
eA
fs
gd
@@ -35339,7 +35388,7 @@ aQ
aZ
aZ
ca
-aZ
+Hq
dv
ag
eI
@@ -36822,7 +36871,7 @@ Jr
Js
Wh
JE
-Hp
+Hx
IY
bg
RO
@@ -36964,7 +37013,7 @@ Js
Js
Jz
JE
-Hp
+Hx
IY
bg
RO
@@ -37106,7 +37155,7 @@ Jt
Js
Jz
JE
-Hp
+Hx
IY
bg
RO
@@ -38375,7 +38424,7 @@ Qr
Hc
RB
QB
-VS
+Hu
Vi
RB
ac
@@ -38915,7 +38964,7 @@ ra
rt
rS
sq
-sO
+Hp
sO
sO
sO
diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm
index b510408fe2..252c2f0c70 100644
--- a/maps/tether/tether-05-station1.dmm
+++ b/maps/tether/tether-05-station1.dmm
@@ -6467,6 +6467,18 @@
},
/turf/simulated/floor/tiled,
/area/hallway/station/atrium)
+"alM" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/landmark/start{
+ name = "Librarian"
+ },
+/turf/simulated/floor/carpet,
+/area/library)
"alN" = (
/obj/effect/floor_decal/industrial/outline/yellow,
/obj/structure/extinguisher_cabinet{
@@ -6477,6 +6489,25 @@
/obj/vehicle/train/trolley,
/turf/simulated/floor/tiled/monotile,
/area/engineering/hallway)
+"alO" = (
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/effect/landmark/start,
+/turf/simulated/floor/tiled,
+/area/storage/tools)
+"alP" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/effect/landmark/start{
+ name = "Assistant"
+ },
+/turf/simulated/floor/tiled,
+/area/storage/tools)
"alQ" = (
/turf/simulated/wall/r_wall,
/area/maintenance/substation/civilian)
@@ -6491,6 +6522,12 @@
/obj/vehicle/train/trolley,
/turf/simulated/floor/tiled/monotile,
/area/engineering/hallway)
+"alS" = (
+/obj/effect/landmark/start{
+ name = "Assistant"
+ },
+/turf/simulated/floor/tiled,
+/area/storage/tools)
"alT" = (
/turf/simulated/wall,
/area/storage/emergency_storage/emergency4)
@@ -10082,12 +10119,6 @@
"axR" = (
/turf/simulated/floor/tiled,
/area/tether/station/stairs_one)
-"axT" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/simulated/floor/tiled,
-/area/storage/tools)
"axU" = (
/obj/effect/floor_decal/industrial/warning/corner{
icon_state = "warningcorner";
@@ -10243,9 +10274,6 @@
/obj/structure/stairs/south,
/turf/simulated/floor/tiled,
/area/tether/station/stairs_one)
-"ayA" = (
-/turf/simulated/floor/tiled,
-/area/storage/tools)
"ayB" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6
@@ -17521,18 +17549,6 @@
/obj/effect/floor_decal/industrial/warning,
/turf/simulated/floor/tiled,
/area/tether/station/stairs_one)
-"biE" = (
-/obj/structure/cable{
- d1 = 1;
- d2 = 2;
- icon_state = "1-2";
- pixel_y = 0
- },
-/obj/effect/landmark/start{
- name = "Assistant"
- },
-/turf/simulated/floor/tiled,
-/area/storage/tools)
"biK" = (
/obj/structure/table/standard,
/obj/random/tech_supply,
@@ -30188,10 +30204,10 @@ acp
bdx
awt
bgO
-biE
-axT
-ayA
-ayA
+alO
+alP
+alS
+alS
azO
awt
bsv
@@ -35739,7 +35755,7 @@ bFh
aBx
aEh
bSN
-aFi
+alM
aEL
aGo
bWQ
diff --git a/maps/tether/tether-06-station2.dmm b/maps/tether/tether-06-station2.dmm
index d9ef6d7757..23f433571c 100644
--- a/maps/tether/tether-06-station2.dmm
+++ b/maps/tether/tether-06-station2.dmm
@@ -7676,7 +7676,6 @@
/turf/simulated/floor,
/area/maintenance/station/exploration)
"lo" = (
-/obj/machinery/portable_atmospherics/canister/empty/oxygen,
/obj/effect/floor_decal/borderfloor{
dir = 1;
icon_state = "borderfloor";
@@ -7703,6 +7702,7 @@
pixel_y = 24;
req_access = list()
},
+/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/simulated/floor/tiled,
/area/tether/exploration/equipment)
"lp" = (
@@ -8025,16 +8025,16 @@
/obj/effect/floor_decal/steeldecal/steel_decals7{
dir = 4
},
-/obj/machinery/disposal,
-/obj/structure/disposalpipe/trunk{
- dir = 8
- },
/obj/machinery/light_switch{
dir = 2;
name = "light switch ";
pixel_x = 0;
pixel_y = 26
},
+/obj/machinery/photocopier,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
/turf/simulated/floor/tiled,
/area/tether/exploration/pathfinder_office)
"lO" = (
@@ -8044,7 +8044,10 @@
/obj/effect/floor_decal/corner/purple/border{
dir = 5
},
-/obj/structure/filingcabinet/filingcabinet,
+/obj/machinery/disposal,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
/turf/simulated/floor/tiled,
/area/tether/exploration/pathfinder_office)
"lP" = (
@@ -8511,10 +8514,16 @@
/obj/effect/floor_decal/steeldecal/steel_decals7{
dir = 10
},
-/obj/machinery/photocopier,
/obj/machinery/light{
dir = 4
},
+/obj/structure/table/rack/shelf,
+/obj/item/weapon/tank/oxygen,
+/obj/item/device/suit_cooling_unit,
+/obj/item/clothing/shoes/magboots,
+/obj/item/clothing/suit/space/void/exploration,
+/obj/item/clothing/mask/breath,
+/obj/item/clothing/head/helmet/space/void/exploration,
/turf/simulated/floor/tiled,
/area/tether/exploration/pathfinder_office)
"mA" = (
@@ -12435,6 +12444,9 @@
/obj/structure/bed/chair/office/dark{
dir = 8
},
+/obj/effect/landmark/start{
+ name = "Medical Doctor"
+ },
/turf/simulated/floor/tiled/white,
/area/medical/virology)
"sJ" = (
@@ -15618,6 +15630,9 @@
/obj/structure/bed/chair/office/light{
dir = 8
},
+/obj/effect/landmark/start{
+ name = "Medical Doctor"
+ },
/turf/simulated/floor/tiled/techfloor,
/area/medical/morgue)
"xZ" = (
@@ -18237,10 +18252,17 @@
/turf/simulated/floor/tiled/white,
/area/crew_quarters/medbreak)
"BS" = (
-/obj/structure/bed/chair,
-/obj/effect/floor_decal/corner/paleblue/diagonal,
-/turf/simulated/floor/tiled/white,
-/area/crew_quarters/medbreak)
+/obj/effect/floor_decal/borderfloorblack{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/paleblue/border{
+ dir = 8
+ },
+/obj/effect/landmark/start{
+ name = "Pathfinder"
+ },
+/turf/simulated/floor/tiled/dark,
+/area/medical/medbay_emt_bay)
"BT" = (
/obj/effect/floor_decal/corner/paleblue/diagonal,
/obj/machinery/atmospherics/unary/vent_pump/on,
@@ -18412,23 +18434,17 @@
/turf/simulated/floor/tiled/white,
/area/crew_quarters/medbreak)
"Ci" = (
-/obj/structure/bed/chair{
+/obj/effect/floor_decal/borderfloorblack{
dir = 4
},
-/obj/effect/floor_decal/corner/paleblue/diagonal,
-/obj/structure/cable/green{
- d1 = 1;
- d2 = 8;
- icon_state = "1-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/effect/floor_decal/corner/paleblue/border{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
- dir = 1
+/obj/effect/landmark/start{
+ name = "Pathfinder"
},
-/turf/simulated/floor/tiled/white,
-/area/crew_quarters/medbreak)
+/turf/simulated/floor/tiled/dark,
+/area/medical/medbay_emt_bay)
"Cj" = (
/obj/structure/table/glass,
/obj/item/weapon/deck/cards,
@@ -18454,19 +18470,15 @@
/turf/simulated/floor/tiled/white,
/area/crew_quarters/medbreak)
"Cl" = (
-/obj/structure/bed/chair{
- dir = 8
+/obj/structure/shuttle/engine/propulsion{
+ dir = 8;
+ icon_state = "propulsion_l"
},
-/obj/effect/floor_decal/corner/paleblue/diagonal,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 9;
- pixel_y = 0
- },
-/turf/simulated/floor/tiled/white,
-/area/crew_quarters/medbreak)
+/turf/space,
+/turf/simulated/shuttle/plating/airless/carry,
+/area/shuttle/large_escape_pod1/station{
+ base_turf = /turf/simulated/mineral/floor/vacuum
+ })
"Cm" = (
/obj/effect/floor_decal/borderfloor,
/obj/effect/floor_decal/corner/purple/border,
@@ -18657,16 +18669,14 @@
/turf/simulated/floor/tiled/white,
/area/crew_quarters/medbreak)
"CE" = (
-/obj/structure/bed/chair{
- dir = 4
+/obj/structure/shuttle/engine/propulsion{
+ dir = 8
},
-/obj/effect/floor_decal/corner/paleblue/diagonal,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/landmark/start{
- name = "Field Medic"
- },
-/turf/simulated/floor/tiled/white,
-/area/crew_quarters/medbreak)
+/turf/space,
+/turf/simulated/shuttle/plating/airless/carry,
+/area/shuttle/large_escape_pod1/station{
+ base_turf = /turf/simulated/mineral/floor/vacuum
+ })
"CF" = (
/obj/structure/table/glass,
/obj/item/device/universal_translator,
@@ -18770,18 +18780,33 @@
/area/crew_quarters/medbreak)
"CR" = (
/obj/structure/bed/chair{
- dir = 1
+ dir = 4
},
/obj/effect/floor_decal/corner/paleblue/diagonal,
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
+ dir = 1
+ },
+/obj/effect/landmark/start{
+ name = "Medical Doctor"
+ },
/turf/simulated/floor/tiled/white,
/area/crew_quarters/medbreak)
"CS" = (
/obj/structure/bed/chair{
- dir = 1
+ dir = 4
},
/obj/effect/floor_decal/corner/paleblue/diagonal,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/landmark/start{
- name = "Field Medic"
+ name = "Paramedic"
},
/turf/simulated/floor/tiled/white,
/area/crew_quarters/medbreak)
@@ -18944,13 +18969,6 @@
/obj/effect/floor_decal/corner/purple/border{
dir = 6
},
-/obj/structure/table/rack/shelf,
-/obj/item/weapon/tank/oxygen,
-/obj/item/device/suit_cooling_unit,
-/obj/item/clothing/shoes/magboots,
-/obj/item/clothing/suit/space/void/exploration,
-/obj/item/clothing/mask/breath,
-/obj/item/clothing/head/helmet/space/void/exploration,
/obj/item/device/radio/intercom{
dir = 4;
pixel_x = 24
@@ -18958,6 +18976,7 @@
/obj/machinery/camera/network/exploration{
dir = 1
},
+/obj/structure/filingcabinet/filingcabinet,
/turf/simulated/floor/tiled,
/area/tether/exploration/pathfinder_office)
"Di" = (
@@ -19546,24 +19565,32 @@
/turf/simulated/floor/tiled/dark,
/area/security/interrogation)
"Eo" = (
-/obj/structure/shuttle/engine/propulsion{
- dir = 8;
- icon_state = "propulsion_l"
- },
-/turf/space,
-/turf/simulated/shuttle/plating/airless/carry,
-/area/shuttle/large_escape_pod1/station{
- base_turf = /turf/simulated/mineral/floor/vacuum
- })
-"Ep" = (
-/obj/structure/shuttle/engine/propulsion{
+/obj/structure/bed/chair{
dir = 8
},
-/turf/space,
-/turf/simulated/shuttle/plating/airless/carry,
-/area/shuttle/large_escape_pod1/station{
- base_turf = /turf/simulated/mineral/floor/vacuum
- })
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 9;
+ pixel_y = 0
+ },
+/obj/effect/landmark/start{
+ name = "Medical Doctor"
+ },
+/turf/simulated/floor/tiled/white,
+/area/crew_quarters/medbreak)
+"Ep" = (
+/obj/structure/bed/chair{
+ dir = 1
+ },
+/obj/effect/floor_decal/corner/paleblue/diagonal,
+/obj/effect/landmark/start{
+ name = "Paramedic"
+ },
+/turf/simulated/floor/tiled/white,
+/area/crew_quarters/medbreak)
"Eq" = (
/obj/structure/shuttle/engine/propulsion{
dir = 8;
@@ -30854,8 +30881,8 @@ AX
Bp
BF
BQ
-Ci
-CE
+CR
+CS
CQ
AX
Di
@@ -30998,7 +31025,7 @@ BG
BR
Cj
CF
-CR
+Ep
De
AG
aP
@@ -31137,10 +31164,10 @@ AH
AX
Bp
BG
-BS
+BR
Ck
CG
-CS
+Ep
Df
AG
aP
@@ -31280,7 +31307,7 @@ AZ
Bq
BH
BT
-Cl
+Eo
CH
CT
AX
@@ -31986,7 +32013,7 @@ zQ
Aj
Ay
AK
-AK
+BS
fO
BK
ac
@@ -32412,13 +32439,13 @@ zT
Ai
AB
AN
-AN
+Ci
Bw
yY
-Eo
-Ep
-Ep
-Ep
+Cl
+CE
+CE
+CE
Eq
yY
ac
diff --git a/maps/tether/tether-07-station3.dmm b/maps/tether/tether-07-station3.dmm
index efdb53dc3e..e51d192b3e 100644
--- a/maps/tether/tether-07-station3.dmm
+++ b/maps/tether/tether-07-station3.dmm
@@ -1627,8 +1627,11 @@
/turf/simulated/floor/tiled,
/area/security/hallwayaux)
"cy" = (
-/obj/structure/railing{
- dir = 4
+/obj/machinery/alarm{
+ dir = 4;
+ icon_state = "alarm0";
+ pixel_x = -22;
+ pixel_y = 0
},
/turf/simulated/floor,
/area/maintenance/station/ai)
@@ -2073,15 +2076,10 @@
/turf/simulated/floor,
/area/maintenance/station/sec_upper)
"ds" = (
-/obj/structure/bed/chair/office/dark{
- dir = 8
+/obj/structure/bed/chair/office/dark,
+/obj/effect/landmark/start{
+ name = "Security Officer"
},
-/obj/structure/cable/green{
- d1 = 1;
- d2 = 2;
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/carpet,
/area/security/breakroom)
"dt" = (
@@ -5891,6 +5889,9 @@
/area/security/breakroom)
"jC" = (
/obj/structure/bed/chair/office/dark,
+/obj/effect/landmark/start{
+ name = "Detective"
+ },
/turf/simulated/floor/carpet,
/area/security/breakroom)
"jD" = (
@@ -6139,16 +6140,8 @@
/obj/structure/bed/chair/office/dark{
dir = 4
},
-/obj/structure/cable/green{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
+/obj/effect/landmark/start{
+ name = "Security Officer"
},
/turf/simulated/floor/carpet,
/area/security/breakroom)
@@ -6747,15 +6740,16 @@
/turf/simulated/floor/tiled/techfloor/grid,
/area/ai)
"kV" = (
-/obj/structure/railing{
- icon_state = "railing0";
- dir = 1
- },
-/obj/structure/railing{
- dir = 4
+/obj/structure/catwalk,
+/obj/random/junk,
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2";
+ pixel_y = 0
},
/turf/simulated/floor,
-/area/maintenance/station/sec_upper)
+/area/maintenance/station/ai)
"kW" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 6
@@ -8055,15 +8049,20 @@
/turf/simulated/floor,
/area/maintenance/station/ai)
"mU" = (
-/obj/structure/railing,
-/obj/structure/table/rack{
- dir = 8;
- layer = 2.9
+/obj/structure/bed/chair/office/dark{
+ dir = 8
},
-/obj/random/maintenance/clean,
-/obj/random/maintenance/clean,
-/turf/simulated/floor,
-/area/maintenance/cargo)
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
+/obj/effect/landmark/start{
+ name = "Detective"
+ },
+/turf/simulated/floor/carpet,
+/area/security/breakroom)
"mV" = (
/obj/structure/railing,
/obj/structure/railing{
@@ -8574,18 +8573,25 @@
/turf/simulated/floor/tiled/dark,
/area/security/security_lockerroom)
"nK" = (
-/obj/effect/floor_decal/borderfloorblack{
- dir = 8
+/obj/structure/bed/chair/office/dark{
+ dir = 4
},
-/obj/effect/floor_decal/corner/red/border{
- dir = 8
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
},
-/obj/structure/table/bench/steel,
-/obj/structure/window/reinforced{
- dir = 8
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
},
-/turf/simulated/floor/tiled/dark,
-/area/security/security_lockerroom)
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/landmark/start{
+ name = "Security Officer"
+ },
+/turf/simulated/floor/carpet,
+/area/security/breakroom)
"nL" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
@@ -9577,14 +9583,30 @@
/turf/simulated/floor/tiled,
/area/security/security_processing)
"pm" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 5
- },
/obj/structure/bed/chair/office/dark{
+ dir = 8
+ },
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 8;
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 10
+ },
+/obj/structure/cable/green{
+ d1 = 2;
+ d2 = 8;
+ icon_state = "2-8"
+ },
+/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
dir = 4
},
-/turf/simulated/floor/tiled,
-/area/security/security_processing)
+/obj/effect/landmark/start{
+ name = "Security Officer"
+ },
+/turf/simulated/floor/carpet,
+/area/security/breakroom)
"pn" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -19509,17 +19531,11 @@
/turf/simulated/floor/tiled/white,
/area/medical/reception)
"EI" = (
-/obj/effect/floor_decal/borderfloorwhite{
- dir = 1
+/obj/effect/landmark/start{
+ name = "Cargo Technician"
},
-/obj/effect/floor_decal/corner/paleblue/border{
- dir = 1
- },
-/obj/structure/bed/chair/office/light{
- dir = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/medical/reception)
+/turf/simulated/floor/tiled,
+/area/quartermaster/office)
"EJ" = (
/obj/structure/window/reinforced{
dir = 4
@@ -19937,17 +19953,16 @@
/turf/simulated/floor/tiled/white,
/area/medical/reception)
"Fx" = (
-/obj/structure/bed/chair/office/light{
- dir = 4
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
+/obj/effect/landmark/start{
+ name = "Cargo Technician"
},
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/turf/simulated/floor/tiled/white,
-/area/medical/reception)
+/turf/simulated/floor/tiled,
+/area/quartermaster/office)
"Fy" = (
/obj/structure/window/reinforced{
dir = 4
@@ -20922,11 +20937,20 @@
/turf/simulated/floor/tiled/white,
/area/medical/chemistry)
"He" = (
-/obj/structure/bed/chair/office/dark{
+/obj/effect/floor_decal/borderfloorwhite{
+ dir = 1
+ },
+/obj/effect/floor_decal/corner/paleblue/border{
+ dir = 1
+ },
+/obj/structure/bed/chair/office/light{
dir = 4
},
+/obj/effect/landmark/start{
+ name = "Medical Doctor"
+ },
/turf/simulated/floor/tiled/white,
-/area/medical/chemistry)
+/area/medical/reception)
"Hf" = (
/obj/machinery/chem_master,
/obj/effect/floor_decal/borderfloorwhite{
@@ -26341,10 +26365,21 @@
/turf/simulated/wall,
/area/medical/patient_c)
"Pk" = (
-/obj/structure/shuttle/engine/propulsion,
-/turf/simulated/floor/reinforced,
-/turf/simulated/shuttle/plating/airless/carry,
-/area/shuttle/excursion/tether)
+/obj/structure/catwalk,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/machinery/firealarm{
+ dir = 4;
+ layer = 3.3;
+ pixel_x = 26
+ },
+/turf/simulated/floor,
+/area/maintenance/station/ai)
"Pl" = (
/obj/structure/cable/green{
d1 = 1;
@@ -26435,16 +26470,20 @@
/turf/simulated/floor/tiled/white,
/area/medical/ward)
"Ps" = (
-/obj/structure/cable/green{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8"
- },
/obj/structure/bed/chair/office/light{
- dir = 8
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/effect/landmark/start{
+ name = "Medical Doctor"
},
/turf/simulated/floor/tiled/white,
-/area/medical/ward)
+/area/medical/reception)
"Pt" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -26515,12 +26554,14 @@
/turf/simulated/floor/tiled/white,
/area/medical/exam_room)
"Py" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+/obj/structure/bed/chair/office/dark{
dir = 4
},
-/obj/structure/bed/chair/office/light,
+/obj/effect/landmark/start{
+ name = "Chemist"
+ },
/turf/simulated/floor/tiled/white,
-/area/medical/exam_room)
+/area/medical/chemistry)
"Pz" = (
/obj/structure/table/glass,
/obj/machinery/computer/med_data/laptop{
@@ -27753,13 +27794,17 @@
/turf/simulated/floor,
/area/maintenance/station/ai)
"Ry" = (
-/obj/structure/catwalk,
-/obj/random/junk,
+/obj/structure/railing{
+ dir = 4
+ },
/obj/structure/cable{
- d1 = 1;
- d2 = 2;
- icon_state = "1-2";
- pixel_y = 0
+ icon_state = "0-4";
+ d2 = 4
+ },
+/obj/machinery/power/apc{
+ dir = 8;
+ name = "west bump";
+ pixel_x = -28
},
/turf/simulated/floor,
/area/maintenance/station/ai)
@@ -27828,6 +27873,19 @@
},
/turf/simulated/floor,
/area/maintenance/station/sec_upper)
+"RF" = (
+/obj/structure/catwalk,
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor,
+/area/maintenance/station/ai)
"RG" = (
/obj/structure/catwalk,
/obj/effect/decal/cleanable/dirt,
@@ -28115,6 +28173,106 @@
},
/turf/simulated/floor/tiled/monotile,
/area/tether/exploration)
+"Sr" = (
+/obj/structure/railing,
+/obj/structure/table/rack{
+ dir = 8;
+ layer = 2.9
+ },
+/obj/random/maintenance/clean,
+/obj/random/maintenance/clean,
+/obj/machinery/alarm{
+ pixel_y = 22
+ },
+/turf/simulated/floor,
+/area/maintenance/cargo)
+"Ss" = (
+/obj/effect/floor_decal/rust,
+/obj/machinery/light/small{
+ dir = 8;
+ pixel_y = 0
+ },
+/turf/simulated/floor,
+/area/maintenance/station/ai)
+"St" = (
+/obj/structure/railing{
+ icon_state = "railing0";
+ dir = 1
+ },
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-4";
+ d2 = 4
+ },
+/obj/machinery/power/apc{
+ dir = 8;
+ name = "west bump";
+ pixel_x = -28
+ },
+/turf/simulated/floor,
+/area/maintenance/station/sec_upper)
+"Su" = (
+/obj/structure/catwalk,
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 4;
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8";
+ pixel_x = 0
+ },
+/turf/simulated/floor,
+/area/maintenance/station/sec_upper)
+"Sv" = (
+/obj/structure/catwalk,
+/obj/effect/floor_decal/rust,
+/obj/structure/cable{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_x = 0;
+ pixel_y = -24
+ },
+/turf/simulated/floor,
+/area/maintenance/cargo)
+"Sw" = (
+/obj/structure/catwalk,
+/obj/structure/cable{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/maintenance/common,
+/turf/simulated/floor,
+/area/maintenance/cargo)
+"Sx" = (
+/obj/structure/catwalk,
+/obj/structure/cable{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/alarm{
+ dir = 1;
+ icon_state = "alarm0";
+ pixel_y = -22
+ },
+/turf/simulated/floor,
+/area/maintenance/station/ai)
+"Sy" = (
+/obj/effect/landmark/start{
+ name = "Cargo Technician"
+ },
+/turf/simulated/floor/tiled,
+/area/quartermaster/storage)
"Sz" = (
/obj/structure/cable/green{
d1 = 1;
@@ -28123,6 +28281,89 @@
},
/turf/simulated/floor/wood,
/area/crew_quarters/heads/hos)
+"SA" = (
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/structure/bed/chair/office/light{
+ dir = 8
+ },
+/obj/effect/landmark/start{
+ name = "Medical Doctor"
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/ward)
+"SB" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/structure/bed/chair/office/light,
+/obj/effect/landmark/start{
+ name = "Medical Doctor"
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/exam_room)
+"SC" = (
+/obj/structure/bed/chair/office/dark{
+ dir = 1
+ },
+/obj/effect/landmark/start{
+ name = "Security Officer"
+ },
+/turf/simulated/floor/carpet,
+/area/security/breakroom)
+"SD" = (
+/obj/structure/shuttle/engine/propulsion,
+/turf/simulated/floor/reinforced,
+/turf/simulated/shuttle/plating/airless/carry,
+/area/shuttle/excursion/tether)
+"SE" = (
+/obj/effect/floor_decal/borderfloorblack{
+ dir = 8
+ },
+/obj/effect/floor_decal/corner/red/border{
+ dir = 8
+ },
+/obj/structure/table/bench/steel,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/effect/landmark/start{
+ name = "Security Officer"
+ },
+/turf/simulated/floor/tiled/dark,
+/area/security/security_lockerroom)
+"SF" = (
+/obj/structure/cable/green{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/structure/bed/chair{
+ dir = 4
+ },
+/obj/effect/landmark/start{
+ name = "Security Officer"
+ },
+/turf/simulated/floor/tiled,
+/area/security/briefing_room)
+"SG" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 5
+ },
+/obj/structure/bed/chair/office/dark{
+ dir = 4
+ },
+/obj/effect/landmark/start{
+ name = "Security Officer"
+ },
+/turf/simulated/floor/tiled,
+/area/security/security_processing)
+"SH" = (
+/turf/simulated/wall,
+/area/storage/emergency_storage/emergency3)
"SK" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -28173,12 +28414,6 @@
},
/turf/simulated/floor/carpet,
/area/security/breakroom)
-"Th" = (
-/obj/structure/bed/chair/office/dark{
- dir = 4
- },
-/turf/simulated/floor/carpet,
-/area/security/breakroom)
"Tp" = (
/obj/structure/cable{
d1 = 1;
@@ -28484,28 +28719,6 @@
/obj/structure/closet/secure_closet/hos2,
/turf/simulated/floor/wood,
/area/crew_quarters/heads/hos)
-"YF" = (
-/obj/structure/bed/chair/office/dark{
- dir = 8
- },
-/obj/structure/cable/green{
- d1 = 1;
- d2 = 8;
- icon_state = "1-8"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 10
- },
-/obj/structure/cable/green{
- d1 = 2;
- d2 = 8;
- icon_state = "2-8"
- },
-/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/carpet,
-/area/security/breakroom)
"YH" = (
/obj/structure/table/woodentable,
/obj/machinery/microwave,
@@ -34133,7 +34346,7 @@ eT
me
mB
ev
-nK
+SE
od
mh
pd
@@ -35840,7 +36053,7 @@ jk
jk
lv
oC
-pm
+SG
Rs
qi
qN
@@ -36001,9 +36214,9 @@ Ah
Bt
Cc
Dk
-EI
+He
nc
-Fx
+Ps
GS
GW
HO
@@ -36588,7 +36801,7 @@ NF
NZ
yl
OV
-Ps
+SA
PM
Ql
Pu
@@ -37104,8 +37317,8 @@ iR
YT
jn
jB
-Th
jW
+nK
ey
eJ
kF
@@ -37245,10 +37458,10 @@ iG
iS
YT
jo
-jC
+ds
jN
jX
-da
+SC
eJ
kG
YT
@@ -37530,8 +37743,8 @@ iR
YT
Uq
dt
-ds
-YF
+mU
+pm
Td
eY
TQ
@@ -37542,7 +37755,7 @@ mm
mO
ns
mm
-ol
+SF
oL
le
iq
@@ -37567,14 +37780,14 @@ DW
ER
FI
Gy
-He
+Py
HY
ID
Jv
Kj
Kh
Lt
-Kh
+LT
Mn
Lp
Nj
@@ -37582,7 +37795,7 @@ KI
Of
tt
Pb
-Py
+SB
PS
Qr
uN
@@ -38532,7 +38745,7 @@ ku
kJ
aI
mR
-kV
+St
aI
aI
aI
@@ -38674,7 +38887,7 @@ RH
RH
RH
RH
-RO
+Su
eU
aI
ab
@@ -39100,7 +39313,7 @@ cJ
mr
nz
be
-mU
+Sr
RS
iV
ab
@@ -39520,7 +39733,7 @@ it
di
di
dy
-Pk
+SD
cK
cK
ms
@@ -39662,7 +39875,7 @@ iK
jY
kn
di
-Pk
+SD
cK
cK
ms
@@ -39671,7 +39884,7 @@ be
os
oV
RY
-Sf
+Sv
iV
oO
ps
@@ -39684,7 +39897,7 @@ eL
up
vc
vS
-sq
+SH
xe
xU
yO
@@ -39804,7 +40017,7 @@ iK
jY
kn
di
-Pk
+SD
cK
cK
ms
@@ -39826,7 +40039,7 @@ iV
uq
vd
vT
-sq
+SH
xf
xV
yP
@@ -40239,7 +40452,7 @@ Ox
Ox
Sp
be
-Sg
+Sw
iV
iV
pw
@@ -40656,7 +40869,7 @@ eb
ka
ky
di
-Pk
+SD
cK
cK
ms
@@ -40798,7 +41011,7 @@ jf
kj
kQ
di
-Pk
+SD
cK
cK
ms
@@ -40940,7 +41153,7 @@ jr
kk
kR
dy
-Pk
+SD
cK
cK
ms
@@ -41233,7 +41446,7 @@ be
be
be
be
-Si
+Sx
gy
Sn
Sl
@@ -41687,7 +41900,7 @@ BU
GL
HB
Is
-BU
+Sy
JN
zO
ab
@@ -41784,22 +41997,22 @@ aa
aa
dV
bV
-gK
+cy
lt
dV
Rw
-Ry
+kV
RA
RC
RD
-RG
+Pk
RA
RA
RG
RL
-cy
+Ry
RR
-RX
+Ss
Sd
Si
Sk
@@ -41939,7 +42152,7 @@ eI
RJ
RK
RM
-RA
+RF
RA
RA
RA
@@ -42383,8 +42596,8 @@ sJ
vq
sJ
sJ
-sJ
-yg
+EI
+Fx
zc
zR
AU
diff --git a/vorestation.dme b/vorestation.dme
index ec41c3309e..2844fc08a9 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -1820,6 +1820,9 @@
#include "code\modules\examine\descriptions\weapons.dm"
#include "code\modules\ext_scripts\irc.dm"
#include "code\modules\ext_scripts\python.dm"
+#include "code\modules\fishing\fishing.dm"
+#include "code\modules\fishing\fishing_net.dm"
+#include "code\modules\fishing\fishing_rod.dm"
#include "code\modules\flufftext\Dreaming.dm"
#include "code\modules\flufftext\Hallucination.dm"
#include "code\modules\flufftext\look_up.dm"
@@ -2881,6 +2884,7 @@
#include "code\modules\research\designs\medical.dm"
#include "code\modules\research\designs\mining_toys.dm"
#include "code\modules\research\designs\misc.dm"
+#include "code\modules\research\designs\modular_computer.dm"
#include "code\modules\research\designs\pdas.dm"
#include "code\modules\research\designs\powercells.dm"
#include "code\modules\research\designs\precursor.dm"