diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm
index 35348df3d1..d4ab59cbc1 100644
--- a/code/__DEFINES/jobs.dm
+++ b/code/__DEFINES/jobs.dm
@@ -42,6 +42,7 @@
#define CLOWN (1<<11)
#define MIME (1<<12)
#define ASSISTANT (1<<13)
+#define PRISONER (1<<14)
#define JOB_AVAILABLE 0
#define JOB_UNAVAILABLE_GENERIC 1
@@ -89,3 +90,4 @@
#define JOB_DISPLAY_ORDER_WARDEN 31
#define JOB_DISPLAY_ORDER_DETECTIVE 32
#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 33
+#define JOB_DISPLAY_ORDER_PRISONER 34
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index 28f657828b..44101bea70 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -367,6 +367,7 @@ GLOBAL_LIST_INIT(job_heirlooms, list(
"Janitor" = list(/obj/item/mop),
"Scientist" = list(/obj/item/toy/plush/slimeplushie),
"Assistant" = list(/obj/item/clothing/gloves/cut/family),
+ "Prisoner" = list (/obj/item/pen/blue),
"Chaplain" = list(/obj/item/camera/spooky/family),
"Head of Personnel" = list(/obj/item/pinpointer/ian)
))
diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm
index 65321f5820..aa8edeaa72 100644
--- a/code/game/gamemodes/bloodsucker/bloodsucker.dm
+++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm
@@ -25,7 +25,7 @@
antag_flag = ROLE_BLOODSUCKER
false_report_weight = 1
chaos = 4
- restricted_jobs = list("AI","Cyborg")
+ restricted_jobs = list("Prisoner", "AI","Cyborg")
protected_jobs = list("Chaplain", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_players = 20
required_enemies = 2
diff --git a/code/game/gamemodes/brother/traitor_bro.dm b/code/game/gamemodes/brother/traitor_bro.dm
index eda6b5f9e2..6da31e41bb 100644
--- a/code/game/gamemodes/brother/traitor_bro.dm
+++ b/code/game/gamemodes/brother/traitor_bro.dm
@@ -7,7 +7,7 @@
config_tag = "traitorbro"
required_players = 25
chaos = 5
- restricted_jobs = list("AI", "Cyborg")
+ restricted_jobs = list("Prisoner", "AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
announce_span = "danger"
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index 20ef83a54c..83c1eec598 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -11,7 +11,7 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th
antag_flag = ROLE_CHANGELING
false_report_weight = 10
chaos = 5
- restricted_jobs = list("AI", "Cyborg")
+ restricted_jobs = list("Prisoner", "AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to ling role blacklist
required_players = 15
required_enemies = 1
diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm
index 88a1cde8ce..691111031d 100644
--- a/code/game/gamemodes/changeling/traitor_chan.dm
+++ b/code/game/gamemodes/changeling/traitor_chan.dm
@@ -4,7 +4,7 @@
false_report_weight = 10
chaos = 6
traitors_possible = 3 //hard limit on traitors if scaling is turned off
- restricted_jobs = list("AI", "Cyborg")
+ restricted_jobs = list("Prisoner", "AI", "Cyborg")
required_players = 25
required_enemies = 1 // how many of each type are required
recommended_enemies = 3
diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm
index d8ebf6f20c..7b6eaa6fa5 100644
--- a/code/game/gamemodes/clock_cult/clock_cult.dm
+++ b/code/game/gamemodes/clock_cult/clock_cult.dm
@@ -139,7 +139,7 @@ Credit where due:
required_enemies = 3
recommended_enemies = 5
enemy_minimum_age = 7
- protected_jobs = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //Silicons can eventually be converted
+ protected_jobs = list("Prisoner", "AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //Silicons can eventually be converted
restricted_jobs = list("Chaplain", "Captain")
announce_span = "brass"
announce_text = "Servants of Ratvar are trying to summon the Justiciar!\n\
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index ba9fad7a84..9a49c05739 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -39,7 +39,7 @@
antag_flag = ROLE_CULTIST
false_report_weight = 10
chaos = 8
- restricted_jobs = list("AI", "Cyborg")
+ restricted_jobs = list("Prisoner", "AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_players = 30
required_enemies = 3
diff --git a/code/game/gamemodes/devil/devil_game_mode.dm b/code/game/gamemodes/devil/devil_game_mode.dm
index 9bf7fc0e82..7fe2f91714 100644
--- a/code/game/gamemodes/devil/devil_game_mode.dm
+++ b/code/game/gamemodes/devil/devil_game_mode.dm
@@ -4,7 +4,7 @@
antag_flag = ROLE_DEVIL
false_report_weight = 1
chaos = 3
- protected_jobs = list("Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI")
+ protected_jobs = list("Prisoner", "Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI")
required_players = 0
required_enemies = 1
recommended_enemies = 4
diff --git a/code/game/gamemodes/eldritch_cult/eldritch_cult.dm b/code/game/gamemodes/eldritch_cult/eldritch_cult.dm
index 1693163fa2..2086653012 100644
--- a/code/game/gamemodes/eldritch_cult/eldritch_cult.dm
+++ b/code/game/gamemodes/eldritch_cult/eldritch_cult.dm
@@ -4,7 +4,7 @@
antag_flag = ROLE_HERETIC
false_report_weight = 5
chaos = 5
- restricted_jobs = list("AI", "Cyborg")
+ restricted_jobs = list("Prisoner", "AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to heretic role blacklist
required_players = 15
required_enemies = 1
diff --git a/code/game/gamemodes/gangs/gangs.dm b/code/game/gamemodes/gangs/gangs.dm
index 100669c487..1352e9340d 100644
--- a/code/game/gamemodes/gangs/gangs.dm
+++ b/code/game/gamemodes/gangs/gangs.dm
@@ -7,7 +7,7 @@ GLOBAL_LIST_EMPTY(gangs)
config_tag = "gang"
antag_flag = ROLE_GANG
chaos = 9
- restricted_jobs = list("AI", "Cyborg")
+ restricted_jobs = list("Prisoner", "AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_players = 15
required_enemies = 0
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index 419a74d616..5b3e742336 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -13,7 +13,7 @@
antag_flag = ROLE_REV
false_report_weight = 10
chaos = 8
- restricted_jobs = list("AI", "Cyborg")
+ restricted_jobs = list("Prisoner", "AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster")
required_players = 20
required_enemies = 1
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index d42fe615cd..220fbe9978 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -10,7 +10,7 @@
config_tag = "traitor"
antag_flag = ROLE_TRAITOR
false_report_weight = 20 //Reports of traitors are pretty common.
- restricted_jobs = list("Cyborg")//They are part of the AI if he is traitor so are they, they use to get double chances
+ restricted_jobs = list("Prisoner", "Cyborg")//They are part of the AI if he is traitor so are they, they use to get double chances
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Chief Engineer", "Chief Medical Officer", "Research Director", "Quartermaster") //citadel change - adds HoP, CE, CMO, and RD to ling role blacklist
required_players = 0
required_enemies = 1
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index 6910bb1db0..a484f78b41 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -64,6 +64,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
name = "Assistant"
icon_state = "Assistant"
+/obj/effect/landmark/start/prisoner
+ name = "Prisoner"
+ icon_state = "Prisoner"
+
/obj/effect/landmark/start/assistant/override
jobspawn_override = TRUE
delete_after_roundstart = FALSE
diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm
index 5a0e1790a9..920af875d5 100644
--- a/code/game/objects/effects/spawners/lootdrop.dm
+++ b/code/game/objects/effects/spawners/lootdrop.dm
@@ -60,6 +60,48 @@
/obj/item/gun/ballistic/automatic/pistol/deagle,
/obj/item/storage/box/syndie_kit/throwing_weapons = 3)
+/obj/effect/spawner/lootdrop/prison_contraband
+ name = "prison contraband loot spawner"
+ loot = list(/obj/item/clothing/mask/cigarette/space_cigarette = 4,
+ /obj/item/clothing/mask/cigarette/robust = 2,
+ /obj/item/clothing/mask/cigarette/carp = 3,
+ /obj/item/clothing/mask/cigarette/uplift = 2,
+ /obj/item/clothing/mask/cigarette/dromedary = 3,
+ /obj/item/clothing/mask/cigarette/robustgold = 1,
+ /obj/item/storage/fancy/cigarettes/cigpack_uplift = 3,
+ /obj/item/storage/fancy/cigarettes = 3,
+ /obj/item/clothing/mask/cigarette/rollie/cannabis = 4,
+ /obj/item/toy/crayon/spraycan = 2,
+ /obj/item/crowbar = 1,
+ /obj/item/assembly/flash/handheld = 1,
+ /obj/item/restraints/handcuffs/cable/zipties = 1,
+ /obj/item/restraints/handcuffs = 1,
+ /obj/item/radio/off = 1,
+ /obj/item/lighter = 3,
+ /obj/item/storage/box/matches = 3,
+ /obj/item/reagent_containers/syringe/contraband/space_drugs = 1,
+ /obj/item/reagent_containers/syringe/contraband/krokodil = 1,
+ /obj/item/reagent_containers/syringe/contraband/crank = 1,
+ /obj/item/reagent_containers/syringe/contraband/methamphetamine = 1,
+ /obj/item/reagent_containers/syringe/contraband/bath_salts = 1,
+ /obj/item/reagent_containers/syringe/contraband/fentanyl = 1,
+ /obj/item/reagent_containers/syringe/contraband/morphine = 1,
+ /obj/item/storage/pill_bottle/happy = 1,
+ /obj/item/storage/pill_bottle/lsd = 1,
+ /obj/item/storage/pill_bottle/psicodine = 1,
+ /obj/item/reagent_containers/food/drinks/beer = 4,
+ /obj/item/reagent_containers/food/drinks/bottle/whiskey = 1,
+ /obj/item/paper/fluff/jobs/prisoner/letter = 1,
+ /obj/item/grenade/smokebomb = 1,
+ /obj/item/flashlight/seclite = 1,
+ /obj/item/tailclub = 1, //want to buy makeshift wooden club sprite
+ /obj/item/kitchen/knife/shiv = 4,
+ /obj/item/kitchen/knife/shiv/carrot = 1,
+ /obj/item/kitchen/knife = 1,
+ /obj/item/storage/wallet/random = 1,
+ /obj/item/pda = 1
+ )
+
/obj/effect/spawner/lootdrop/gambling
name = "gambling valuables spawner"
loot = list(
diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm
index 2e7cef2c9f..5a16c24b8e 100644
--- a/code/game/objects/items/kitchen.dm
+++ b/code/game/objects/items/kitchen.dm
@@ -255,18 +255,31 @@
icon_state = "knife"
desc = "A cyborg-mounted plasteel knife. Extremely sharp and durable."
-/obj/item/kitchen/knife/carrotshiv
+/obj/item/kitchen/knife/shiv
+ name = "glass shiv"
+ icon = 'icons/obj/shards.dmi'
+ icon_state = "shiv"
+ item_state = "shiv"
+ lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
+ desc = "A makeshift glass shiv."
+ force = 8
+ throwforce = 12//fuck git
+ attack_verb = list("shanked", "shivved")
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+ custom_materials = list(/datum/material/glass=400)
+
+/obj/item/kitchen/knife/shiv/carrot
name = "carrot shiv"
icon_state = "carrotshiv"
item_state = "carrotshiv"
- lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
+ icon = 'icons/obj/kitchen.dmi'
desc = "Unlike other carrots, you should probably keep this far away from your eyes."
- force = 8
- throwforce = 12//fuck git
custom_materials = null
- attack_verb = list("shanked", "shivved")
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
+
+/obj/item/kitchen/knife/shiv/carrot/suicide_act(mob/living/carbon/user)
+ user.visible_message("[user] forcefully drives \the [src] into [user.p_their()] eye! It looks like [user.p_theyre()] trying to commit suicide!")
+ return BRUTELOSS
/obj/item/kitchen/rollingpin
name = "rolling pin"
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index 6b1220743f..e62b5421d4 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -355,7 +355,19 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
/obj/item/shard/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/lightreplacer))
- I.attackby(src, user)
+ var/obj/item/lightreplacer/L = I
+ L.attackby(src, user)
+ else if(istype(I, /obj/item/stack/sheet/cloth))
+ var/obj/item/stack/sheet/cloth/C = I
+ to_chat(user, "You begin to wrap the [C] around the [src]...")
+ if(do_after(user, 35, target = src))
+ var/obj/item/kitchen/knife/shiv/S = new /obj/item/kitchen/knife/shiv
+ C.use(1)
+ to_chat(user, "You wrap the [C] around the [src] forming a makeshift weapon.")
+ remove_item_from_storage(src)
+ qdel(src)
+ user.put_in_hands(S)
+
else
return ..()
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index cb619a711b..6bb501807d 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -317,7 +317,7 @@
* Trays - Agouri
*/
/obj/item/storage/bag/tray
- name = "tray"
+ name = "serving tray"
icon = 'icons/obj/food/containers.dmi'
icon_state = "tray"
desc = "A metal tray to lay food on."
@@ -377,6 +377,12 @@
. = ..()
update_icon()
+/obj/item/storage/bag/tray/cafeteria
+ name = "cafeteria tray"
+ icon = 'icons/obj/food/containers.dmi'
+ icon_state = "foodtray"
+ desc = "A cheap metal tray to pile today's meal onto."
+
//bluespace tray, holds more items
/obj/item/storage/bag/tray/bluespace
name = "bluespace tray"
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 030f7f4edf..f6153330e4 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -106,6 +106,16 @@
name = "trash cart"
icon_state = "trashcart"
+/obj/structure/closet/crate/trashcart/Moved()
+ . = ..()
+ if(has_gravity())
+ playsound(src, 'sound/effects/roll.ogg', 100, TRUE)
+
+/obj/structure/closet/crate/trashcart/laundry
+ name = "laundry cart"
+ desc = "A large cart for hauling around large amounts of laundry."
+ icon_state = "laundry"
+
/obj/structure/closet/crate/medical
desc = "A medical crate."
name = "medical crate"
diff --git a/code/modules/antagonists/fugitive/fugitive_outfits.dm b/code/modules/antagonists/fugitive/fugitive_outfits.dm
index 242a7cc7fd..7648196f3e 100644
--- a/code/modules/antagonists/fugitive/fugitive_outfits.dm
+++ b/code/modules/antagonists/fugitive/fugitive_outfits.dm
@@ -2,7 +2,7 @@
name = "Prison Escapee"
uniform = /obj/item/clothing/under/rank/prisoner
shoes = /obj/item/clothing/shoes/sneakers/orange
- r_pocket = /obj/item/kitchen/knife
+ r_pocket = /obj/item/kitchen/knife/shiv
/datum/outfit/prisoner/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE)
if(visualsOnly)
diff --git a/code/modules/cargo/exports/sheets.dm b/code/modules/cargo/exports/sheets.dm
index b0676fbde2..058e0cc892 100644
--- a/code/modules/cargo/exports/sheets.dm
+++ b/code/modules/cargo/exports/sheets.dm
@@ -59,6 +59,11 @@
unit_name = "alien hide"
export_types = list(/obj/item/stack/sheet/animalhide/xeno)
+/datum/export/stack/licenseplate
+ cost = 25
+ unit_name = "license plate"
+ export_types = list(/obj/item/stack/license_plates/filled)
+
// Common materials.
// For base materials, see materials.dm
diff --git a/code/modules/cargo/packs/materials.dm b/code/modules/cargo/packs/materials.dm
index 90629706b5..8b74b0fbe9 100644
--- a/code/modules/cargo/packs/materials.dm
+++ b/code/modules/cargo/packs/materials.dm
@@ -20,6 +20,13 @@
cost = 300 //thrice their export value
contains = list(/obj/item/stack/sheet/cardboard/fifty)
+/datum/supply_pack/materials/license50
+ name = "50 Empty License Plates"
+ desc = "Create a bunch of boxes."
+ cost = 1000 // 50 * 25 + 700 - 1000 = 950 credits profit
+ contains = list(/obj/item/stack/license_plates/empty/fifty)
+ crate_name = "empty license plate crate"
+
/datum/supply_pack/materials/glass50
crate_type = /obj/structure/closet/secure_closet/cargo
name = "50 Glass Sheets"
diff --git a/code/modules/clothing/outfits/plasmaman.dm b/code/modules/clothing/outfits/plasmaman.dm
index bd2c2b612d..5809cb8f50 100644
--- a/code/modules/clothing/outfits/plasmaman.dm
+++ b/code/modules/clothing/outfits/plasmaman.dm
@@ -71,6 +71,12 @@
head = /obj/item/clothing/head/helmet/space/plasmaman/security/hos
uniform = /obj/item/clothing/under/plasmaman/security/hos
+/datum/outfit/plasmaman/prisoner
+ name = "Prisoner Plasmaman"
+
+ head = /obj/item/clothing/head/helmet/space/plasmaman/prisoner
+ uniform = /obj/item/clothing/under/plasmaman/prisoner
+
/datum/outfit/plasmaman/cargo
name = "Cargo Plasmaman"
diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm
index b50c2b45db..25ad19eee4 100644
--- a/code/modules/clothing/spacesuits/plasmamen.dm
+++ b/code/modules/clothing/spacesuits/plasmamen.dm
@@ -169,6 +169,10 @@
icon_state = "hos_envirohelm"
item_state = "hos_envirohelm"
+/obj/item/clothing/head/helmet/space/plasmaman/prisoner
+ name = "prisoner's plasma envirosuit helmet"
+ desc = "A plasmaman containment helmet for prisoners."
+
/obj/item/clothing/head/helmet/space/plasmaman/medical
name = "medical's plasma envirosuit helmet"
desc = "An envriohelmet designed for plasmaman medical doctors, having two stripes down it's length to denote as much."
diff --git a/code/modules/clothing/under/jobs/Plasmaman/security.dm b/code/modules/clothing/under/jobs/Plasmaman/security.dm
index c9b7b494a3..262b336011 100644
--- a/code/modules/clothing/under/jobs/Plasmaman/security.dm
+++ b/code/modules/clothing/under/jobs/Plasmaman/security.dm
@@ -18,3 +18,9 @@
desc = "A slick black and red plasmaman containment suit designed for the head of security, also called the LAW."
icon_state = "hos_envirosuit"
item_state = "hos_envirosuit"
+
+/obj/item/clothing/under/plasmaman/prisoner
+ name = "prisoner envirosuit"
+ desc = "An orange envirosuit identifying and protecting a criminal plasmaman."
+ icon_state = "prisoner_envirosuit"
+ item_state = "prisoner_envirosuit"
diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm
index 5f9b55b881..843688b5a0 100644
--- a/code/modules/hydroponics/grown/root.dm
+++ b/code/modules/hydroponics/grown/root.dm
@@ -29,7 +29,7 @@
/obj/item/reagent_containers/food/snacks/grown/carrot/attackby(obj/item/I, mob/user, params)
if(I.get_sharpness())
to_chat(user, "You sharpen the carrot into a shiv with [I].")
- var/obj/item/kitchen/knife/carrotshiv/Shiv = new /obj/item/kitchen/knife/carrotshiv
+ var/obj/item/kitchen/knife/shiv/carrot/Shiv = new /obj/item/kitchen/knife/shiv/carrot
remove_item_from_storage(user)
qdel(src)
user.put_in_hands(Shiv)
diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm
index 06e1863bc9..35a89b46db 100644
--- a/code/modules/jobs/access.dm
+++ b/code/modules/jobs/access.dm
@@ -355,7 +355,7 @@
return list("Assistant", "Captain", "Head of Personnel", "Bartender", "Cook", "Botanist", "Quartermaster", "Cargo Technician",
"Shaft Miner", "Clown", "Mime", "Janitor", "Curator", "Lawyer", "Chaplain", "Chief Engineer", "Station Engineer",
"Atmospheric Technician", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Virologist", "Paramedic",
- "Research Director", "Scientist", "Roboticist", "Head of Security", "Warden", "Detective", "Security Officer")
+ "Research Director", "Scientist", "Roboticist", "Head of Security", "Warden", "Detective", "Security Officer", "Prisoner")
/proc/get_all_job_icons() //For all existing HUD icons
return get_all_jobs() + list("Prisoner")
diff --git a/code/modules/jobs/jobs.dm b/code/modules/jobs/jobs.dm
index 78b7dd3964..d91b102599 100644
--- a/code/modules/jobs/jobs.dm
+++ b/code/modules/jobs/jobs.dm
@@ -43,6 +43,7 @@ GLOBAL_LIST_INIT(civilian_positions, list(
"Chaplain",
"Clown",
"Mime",
+ "Prisoner",
"Assistant"))
GLOBAL_LIST_INIT(security_positions, list(
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index a9bdff64b2..02b19909b0 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -554,6 +554,13 @@
color = "#302000" // rgb: 48, 32, 0
taste_description = "wet and cheap noodles"
+/datum/reagent/consumable/nutraslop
+ name = "Nutraslop"
+ description = "Mixture of leftover prison foods served on previous days."
+ nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#3E4A00" // rgb: 62, 74, 0
+ taste_description = "your imprisonment"
+
/datum/reagent/consumable/hot_ramen/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(10 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL)
..()
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 93a07b1a6e..c2f80de761 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -218,6 +218,31 @@
volume = 50
list_reagents = list(/datum/reagent/medicine/stimulants = 50)
+/obj/item/reagent_containers/syringe/contraband
+ name = "unlabeled syringe"
+ desc = "A syringe containing some sort of unknown chemical cocktail."
+
+/obj/item/reagent_containers/syringe/contraband/space_drugs
+ list_reagents = list(/datum/reagent/drug/space_drugs = 15)
+
+/obj/item/reagent_containers/syringe/contraband/krokodil
+ list_reagents = list(/datum/reagent/drug/krokodil = 15)
+
+/obj/item/reagent_containers/syringe/contraband/crank
+ list_reagents = list(/datum/reagent/drug/crank = 15)
+
+/obj/item/reagent_containers/syringe/contraband/methamphetamine
+ list_reagents = list(/datum/reagent/drug/methamphetamine = 15)
+
+/obj/item/reagent_containers/syringe/contraband/bath_salts
+ list_reagents = list(/datum/reagent/drug/bath_salts = 15)
+
+/obj/item/reagent_containers/syringe/contraband/fentanyl
+ list_reagents = list(/datum/reagent/toxin/fentanyl = 15)
+
+/obj/item/reagent_containers/syringe/contraband/morphine
+ list_reagents = list(/datum/reagent/medicine/morphine = 15)
+
/obj/item/reagent_containers/syringe/calomel
name = "syringe (calomel)"
desc = "Contains calomel."
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 26f0ca66ee..db82e5cdb2 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -233,6 +233,14 @@
anchored = TRUE
reagent_id = /datum/reagent/consumable/cooking_oil
+/obj/structure/reagent_dispensers/servingdish
+ name = "serving dish"
+ desc = "A dish full of food slop for your bowl."
+ icon = 'icons/obj/kitchen.dmi'
+ icon_state = "serving"
+ anchored = TRUE
+ reagent_id = /datum/reagent/consumable/nutraslop
+
////////
//Kegs//
////////
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm
index 67890838db..fe9ffe2035 100644
--- a/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm
@@ -30,13 +30,21 @@
category = list("initial","Dinnerware")
/datum/design/tray
- name = "Tray"
- id = "tray"
+ name = "Serving Tray"
+ id = "servingtray"
build_type = AUTOLATHE
materials = list(/datum/material/iron = 3000)
build_path = /obj/item/storage/bag/tray
category = list("initial","Dinnerware")
+/datum/design/tray
+ name = "Cafeteria Tray"
+ id = "foodtray"
+ build_type = AUTOLATHE
+ materials = list(/datum/material/iron = 3000)
+ build_path = /obj/item/storage/bag/tray/cafeteria
+ category = list("initial","Dinnerware")
+
/datum/design/bowl
name = "Bowl"
id = "bowl"
diff --git a/config/jobs.txt b/config/jobs.txt
index 1bf271763b..fab38e70f6 100644
--- a/config/jobs.txt
+++ b/config/jobs.txt
@@ -11,6 +11,8 @@ Chief Medical Officer=1,1
Assistant=-1,-1
+Prisoner=0,2
+
Quartermaster=1,1
Cargo Technician=3,2
Shaft Miner=3,3
diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi
index 51675c8d7d..a688f3d9dd 100644
Binary files a/icons/mob/clothing/head.dmi and b/icons/mob/clothing/head.dmi differ
diff --git a/icons/mob/clothing/uniform.dmi b/icons/mob/clothing/uniform.dmi
index fd4ded6ad8..d4b1428f3e 100644
Binary files a/icons/mob/clothing/uniform.dmi and b/icons/mob/clothing/uniform.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 854928f2ca..27f9f5e0ac 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 2bbe93a410..e7467d6352 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/shards.dmi b/icons/obj/shards.dmi
index e7875efa26..6e5f5821ce 100644
Binary files a/icons/obj/shards.dmi and b/icons/obj/shards.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 65c5b7acab..7b0806a921 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -876,6 +876,7 @@
#include "code\game\machinery\mass_driver.dm"
#include "code\game\machinery\navbeacon.dm"
#include "code\game\machinery\PDApainter.dm"
+#include "code\game\machinery\prisonlabor.dm"
#include "code\game\machinery\quantum_pad.dm"
#include "code\game\machinery\recharger.dm"
#include "code\game\machinery\rechargestation.dm"
@@ -1237,6 +1238,7 @@
#include "code\game\objects\items\robot\robot_upgrades.dm"
#include "code\game\objects\items\stacks\bscrystal.dm"
#include "code\game\objects\items\stacks\cash.dm"
+#include "code\game\objects\items\stacks\license_plates.dm"
#include "code\game\objects\items\stacks\medical.dm"
#include "code\game\objects\items\stacks\rods.dm"
#include "code\game\objects\items\stacks\stack.dm"
@@ -2369,6 +2371,7 @@
#include "code\modules\jobs\job_types\medical_doctor.dm"
#include "code\modules\jobs\job_types\mime.dm"
#include "code\modules\jobs\job_types\paramedic.dm"
+#include "code\modules\jobs\job_types\prisoner.dm"
#include "code\modules\jobs\job_types\quartermaster.dm"
#include "code\modules\jobs\job_types\research_director.dm"
#include "code\modules\jobs\job_types\roboticist.dm"