diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm
index 39036252f0c..68b313d9a1b 100644
--- a/code/__defines/mobs.dm
+++ b/code/__defines/mobs.dm
@@ -13,7 +13,6 @@
#define GODMODE 0x1000
#define FAKEDEATH 0x2000 // Replaces stuff like changeling.changeling_fakedeath.
#define DISFIGURED 0x4000 // Set but never checked. Remove this sometime and replace occurences with the appropriate organ code
-#define XENO_HOST 0x8000 // Tracks whether we're gonna be a baby alien's mummy.
// Grab levels.
#define GRAB_PASSIVE 1
diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm
index a50680ef8d9..a4553403bc1 100644
--- a/code/game/machinery/computer/guestpass.dm
+++ b/code/game/machinery/computer/guestpass.dm
@@ -148,9 +148,9 @@
if(reas)
reason = reas
if ("duration")
- var/dur = input("Duration (in minutes) during which pass is valid (up to 30 minutes).", "Duration") as num|null
+ var/dur = input("Duration (in minutes) during which pass is valid (up to 120 minutes).", "Duration") as num|null
if (dur)
- if (dur > 0 && dur <= 30)
+ if (dur > 0 && dur <= 120)
duration = dur
else
usr << "Invalid duration."
@@ -158,7 +158,7 @@
var/A = text2num(href_list["access"])
if (A in accesses)
accesses.Remove(A)
- else
+ else
if(A in giver.access) //Let's make sure the ID card actually has the access.
accesses.Add(A)
else
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 912bacb8177..439d0199d71 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -1047,3 +1047,24 @@
/obj/item/weapon/screwdriver = 5,/obj/item/weapon/crowbar = 5)
//everything after the power cell had no amounts, I improvised. -Sayu
+/obj/machinery/vending/fitness
+ name = "SweatMAX"
+ desc = "Fueled by your inner inadequacy!"
+ icon_state = "fitness"
+ products = list(/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton = 8,
+ /obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/chocolate = 8,
+ /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake = 8,
+ /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask = 8,
+ /obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 8,
+ /obj/item/weapon/reagent_containers/food/snacks/liquidfood = 8,
+ /obj/item/weapon/reagent_containers/pill/diet = 8)
+
+ prices = list(/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton = 3,
+ /obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/chocolate = 3,
+ /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake = 20,
+ /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask = 5,
+ /obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 5,
+ /obj/item/weapon/reagent_containers/food/snacks/liquidfood = 5,
+ /obj/item/weapon/reagent_containers/pill/diet = 25)
+
+ contraband = list(/obj/item/weapon/reagent_containers/syringe/steroid = 4)
diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm
index ede4ccf410e..65ed711f2fd 100644
--- a/code/game/mecha/medical/odysseus.dm
+++ b/code/game/mecha/medical/odysseus.dm
@@ -101,8 +101,6 @@
holder = patient.hud_list[STATUS_HUD]
if(patient.stat == 2)
holder.icon_state = "huddead"
- else if(patient.status_flags & XENO_HOST)
- holder.icon_state = "hudxeno"
else if(foundVirus)
holder.icon_state = "hudill"
else if(patient.has_brain_worms())
diff --git a/code/game/objects/effects/decals/posters/bs12.dm b/code/game/objects/effects/decals/posters/bs12.dm
index a727e2804c0..091b8cb2c90 100644
--- a/code/game/objects/effects/decals/posters/bs12.dm
+++ b/code/game/objects/effects/decals/posters/bs12.dm
@@ -91,7 +91,7 @@
/datum/poster/bay_19
icon_state="bsposter19"
- name = "Respect a Unathi"
+ name = "Respect an Unathi"
desc = "This poster depicts a well dressed looking Unathi receiving a prestigious award. It appears to espouse greater co-operation and harmony between the two races."
/datum/poster/bay_20
diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm
index 34181486e49..1d171d9dbee 100644
--- a/code/game/objects/items/trash.dm
+++ b/code/game/objects/items/trash.dm
@@ -9,11 +9,15 @@
/obj/item/trash/raisins
name = "\improper 4no raisins"
- icon_state= "4no_raisins"
+ icon_state = "4no_raisins"
/obj/item/trash/candy
name = "candy"
- icon_state= "candy"
+ icon_state = "candy"
+
+/obj/item/trash/candy/proteinbar
+ name = "protein bar"
+ icon_state = "proteinbar"
/obj/item/trash/cheesie
name = "\improper Cheesie Honkers"
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 478272b8b25..c0469cd9f8c 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -187,7 +187,8 @@
/obj/item/device/flash,
/obj/item/weapon/flame/lighter,
/obj/item/weapon/reagent_containers/food/snacks/donut/,
- /obj/item/ammo_magazine
+ /obj/item/ammo_magazine,
+ /obj/item/weapon/gun/projectile/colt/detective
)
/obj/item/weapon/storage/belt/soulstone
diff --git a/code/game/objects/items/weapons/towels.dm b/code/game/objects/items/weapons/towels.dm
new file mode 100644
index 00000000000..180ccf2af9f
--- /dev/null
+++ b/code/game/objects/items/weapons/towels.dm
@@ -0,0 +1,14 @@
+/obj/item/weapon/towel
+ name = "towel"
+ icon = 'icons/obj/weapons.dmi'
+ icon_state = "towel"
+ slot_flags = SLOT_HEAD | SLOT_BELT | SLOT_OCLOTHING
+ force = 3.0
+ w_class = 3.0
+ attack_verb = list("whipped")
+ hitsound = "towelwhip"
+ desc = "A soft cotton towel."
+
+/obj/item/weapon/towel/attack_self(mob/living/user as mob)
+ user.visible_message(text("[] uses [] to towel themselves off.", user, src))
+ playsound(user, 'sound/weapons/towelwipe.ogg', 25, 1)
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 23c5961b661..c7dc8f4ae1d 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -910,7 +910,7 @@ proc/admin_notice(var/message, var/rights)
for(var/datum/antagonist/antag in ticker.mode.antag_templates)
if(antag.is_antagonist(M))
return 2
- else if(M.special_role)
+ if(M.special_role)
return 1
if(isrobot(character))
diff --git a/code/modules/client/preference_setup/loadout/loadout_general.dm b/code/modules/client/preference_setup/loadout/loadout_general.dm
index 2b1c4bbb6b7..c68037704e0 100644
--- a/code/modules/client/preference_setup/loadout/loadout_general.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_general.dm
@@ -61,3 +61,11 @@
lunchboxes[initial(lunchbox.name)] = lunchbox_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(lunchboxes))
gear_tweaks += new/datum/gear_tweak/contents(lunchables_lunches(), lunchables_snacks(), lunchables_drinks())
+
+/datum/gear/towel
+ display_name = "towel"
+ path = /obj/item/weapon/towel
+
+/datum/gear/towel/New()
+ ..()
+ gear_tweaks = list(gear_tweak_free_color_choice)
\ No newline at end of file
diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm
index a86f0e214fe..01209c73290 100644
--- a/code/modules/client/preference_setup/loadout/loadout_suit.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm
@@ -143,7 +143,7 @@
/datum/gear/suit/roles/poncho/science
display_name = "poncho, science"
path = /obj/item/clothing/suit/poncho/roles/science
- allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobotanist")
+ allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist")
/datum/gear/suit/roles/poncho/cargo
display_name = "poncho, cargo"
@@ -218,7 +218,7 @@
/datum/gear/suit/wintercoat/science
display_name = "winter coat, science"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/science
- allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobotanist")
+ allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist")
/datum/gear/suit/wintercoat/engineering
display_name = "winter coat, engineering"
@@ -233,7 +233,7 @@
/datum/gear/suit/wintercoat/hydro
display_name = "winter coat, hydroponics"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/hydro
- allowed_roles = list("Botanist", "Xenobotanist")
+ allowed_roles = list("Botanist", "Xenobiologist")
/datum/gear/suit/wintercoat/cargo
display_name = "winter coat, cargo"
diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm
index 1ef69de38ad..a6665d0bb51 100644
--- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm
@@ -88,72 +88,72 @@
shorts[initial(short_type.name)] = short_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(shorts))
-/datum/gear/uniform/skirt/ce
+/datum/gear/uniform/job_skirt/ce
display_name = "skirt, ce"
path = /obj/item/clothing/under/rank/engineer/chief_engineer/skirt
allowed_roles = list("Chief Engineer")
-/datum/gear/uniform/skirt/atmos
+/datum/gear/uniform/job_skirt/atmos
display_name = "skirt, atmos"
path = /obj/item/clothing/under/rank/engineer/atmospheric_technician/skirt
allowed_roles = list("Chief Engineer","Atmospheric Technician")
-/datum/gear/uniform/skirt/eng
+/datum/gear/uniform/job_skirt/eng
display_name = "skirt, engineer"
path = /obj/item/clothing/under/rank/engineer/skirt
allowed_roles = list("Chief Engineer","Station Engineer")
-/datum/gear/uniform/skirt/roboticist
+/datum/gear/uniform/job_skirt/roboticist
display_name = "skirt, roboticist"
path = /obj/item/clothing/under/rank/roboticist/skirt
allowed_roles = list("Research Director","Roboticist")
-/datum/gear/uniform/skirt/cmo
+/datum/gear/uniform/job_skirt/cmo
display_name = "skirt, cmo"
path = /obj/item/clothing/under/rank/medical/chief_medical_officer/skirt
allowed_roles = list("Chief Medical Officer")
-/datum/gear/uniform/skirt/chem
+/datum/gear/uniform/job_skirt/chem
display_name = "skirt, chemist"
path = /obj/item/clothing/under/rank/medical/chemist/skirt
allowed_roles = list("Chief Medical Officer","Chemist")
-/datum/gear/uniform/skirt/viro
+/datum/gear/uniform/job_skirt/viro
display_name = "skirt, virologist"
path = /obj/item/clothing/under/rank/medical/virologist/skirt
allowed_roles = list("Chief Medical Officer","Medical Doctor")
-/datum/gear/uniform/skirt/med
+/datum/gear/uniform/job_skirt/med
display_name = "skirt, medical"
path = /obj/item/clothing/under/rank/medical/skirt
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic")
-/datum/gear/uniform/skirt/sci
+/datum/gear/uniform/job_skirt/sci
display_name = "skirt, scientist"
path = /obj/item/clothing/under/rank/scientist/skirt
- allowed_roles = list("Research Director","Scientist")
+ allowed_roles = list("Research Director","Scientist", "Xenobiologist")
-/datum/gear/uniform/skirt/cargo
+/datum/gear/uniform/job_skirt/cargo
display_name = "skirt, cargo"
path = /obj/item/clothing/under/rank/cargotech/skirt
allowed_roles = list("Quartermaster","Cargo Technician")
-/datum/gear/uniform/skirt/qm
+/datum/gear/uniform/job_skirt/qm
display_name = "skirt, QM"
path = /obj/item/clothing/under/rank/cargo/skirt
allowed_roles = list("Quartermaster")
-/datum/gear/uniform/skirt/warden
+/datum/gear/uniform/job_skirt/warden
display_name = "skirt, warden"
path = /obj/item/clothing/under/rank/security/warden/skirt
allowed_roles = list("Head of Security", "Warden")
-/datum/gear/uniform/skirt/security
+/datum/gear/uniform/job_skirt/security
display_name = "skirt, security"
path = /obj/item/clothing/under/rank/security/skirt
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
-/datum/gear/uniform/skirt/head_of_security
+/datum/gear/uniform/job_skirt/head_of_security
display_name = "skirt, hos"
path = /obj/item/clothing/under/rank/security/head_of_security/skirt
allowed_roles = list("Head of Security")
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 8c6fd55c690..dd166511361 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -678,27 +678,16 @@
if (src.loc == usr)
switch(sensor_mode)
if(0)
- usr << "You disable your suit's remote sensing equipment."
+ usr.visible_message("[usr] adjusts their sensors.", "You disable your suit's remote sensing equipment.")
if(1)
- usr << "Your suit will now report whether you are live or dead."
+ usr.visible_message("[usr] adjusts their sensors.", "Your suit will now report whether you are live or dead.")
if(2)
- usr << "Your suit will now report your vital lifesigns."
+ usr.visible_message("[usr] adjusts their sensors.", "Your suit will now report your vital lifesigns.")
if(3)
- usr << "Your suit will now report your vital lifesigns as well as your coordinate position."
+ usr.visible_message("[usr] adjusts their sensors.", "Your suit will now report your vital lifesigns as well as your coordinate position.")
+
else if (istype(src.loc, /mob))
- switch(sensor_mode)
- if(0)
- for(var/mob/V in viewers(usr, 1))
- V.show_message("\red [usr] disables [src.loc]'s remote sensing equipment.", 1)
- if(1)
- for(var/mob/V in viewers(usr, 1))
- V.show_message("[usr] turns [src.loc]'s remote sensors to binary.", 1)
- if(2)
- for(var/mob/V in viewers(usr, 1))
- V.show_message("[usr] sets [src.loc]'s sensors to track vitals.", 1)
- if(3)
- for(var/mob/V in viewers(usr, 1))
- V.show_message("[usr] sets [src.loc]'s sensors to maximum.", 1)
+ usr.visible_message("[usr] adjusts [src.loc]'s sensors.", "You adjust [src.loc]'s sensors.")
/obj/item/clothing/under/verb/toggle()
set name = "Toggle Suit Sensors"
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index 26d7de90820..4d900827081 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -133,7 +133,6 @@
chest = new chest_type(src)
if(allowed)
chest.allowed = allowed
- chest.slowdown = offline_slowdown
verbs |= /obj/item/weapon/rig/proc/toggle_chest
for(var/obj/item/piece in list(gloves,helmet,boots,chest))
@@ -332,14 +331,14 @@
offline = 0
if(istype(wearer) && !wearer.wearing_rig)
wearer.wearing_rig = src
- chest.slowdown = initial(slowdown)
+ slowdown = initial(slowdown)
if(offline)
if(offline == 1)
for(var/obj/item/rig_module/module in installed_modules)
module.deactivate()
offline = 2
- chest.slowdown = offline_slowdown
+ slowdown = offline_slowdown
return
if(cell && cell.charge > 0 && electrified > 0)
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index bfcde568e9c..b856f8a8bbf 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -46,14 +46,14 @@
desc = "An armoured jacket with silver rank pips and livery."
icon_state = "warden_jacket"
item_state = "armor"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
/obj/item/clothing/suit/armor/vest/warden/alt
name = "Warden's jacket"
desc = "An armoured jacket with silver rank pips and livery."
icon_state = "warden_alt"
item_state = "warden_alt"
- body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
/obj/item/clothing/suit/armor/riot
diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm
index c4b712c4c34..b04621bdfe7 100644
--- a/code/modules/clothing/under/shorts.dm
+++ b/code/modules/clothing/under/shorts.dm
@@ -116,26 +116,31 @@
name = "khaki skirt"
desc = "A skirt that is a khaki color."
icon_state = "skirt_khaki"
+ worn_state = "skirt_khaki"
/obj/item/clothing/under/skirt/black
name = "short black skirt"
desc = "A skirt that is a shiny black."
icon_state = "skirt_short_black"
+ worn_state = "skirt_short_black"
/obj/item/clothing/under/skirt/blue
name = "short blue skirt"
desc = "A skirt that is a shiny blue."
icon_state = "skirt_short_blue"
+ worn_state = "skirt_short_blue"
/obj/item/clothing/under/skirt/red
name = "short red skirt"
desc = "A skirt that is a shiny red."
icon_state = "skirt_short_red"
+ worn_state = "skirt_short_red"
/obj/item/clothing/under/skirt/swept
name = "swept skirt"
desc = "A skirt that is swept to one side."
icon_state = "skirt_swept"
+ worn_state = "skirt_swept"
/obj/item/clothing/under/skirt/plaid_blue
name = "blue plaid skirt"
diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm
index 6887ef1fbaf..b279ab63d52 100644
--- a/code/modules/detectivework/tools/rag.dm
+++ b/code/modules/detectivework/tools/rag.dm
@@ -49,7 +49,7 @@
if(!on_fire && istype(W, /obj/item/weapon/flame))
var/obj/item/weapon/flame/F = W
if(F.lit)
- ignite()
+ src.ignite()
if(on_fire)
visible_message("\The [user] lights [src] with [W].")
else
@@ -151,7 +151,7 @@
/obj/item/weapon/reagent_containers/glass/rag/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature >= 50 + T0C)
- ignite()
+ src.ignite()
if(exposed_temperature >= 900 + T0C)
new /obj/effect/decal/cleanable/ash(get_turf(src))
qdel(src)
diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm
index 69032cd5ce1..6ac9483e2f9 100644
--- a/code/modules/flufftext/Dreaming.dm
+++ b/code/modules/flufftext/Dreaming.dm
@@ -11,7 +11,7 @@ var/list/dreams = list(
"the quartermaster","a cargo technician","the botanist","a shaft miner","the psychologist","the chemist","the geneticist",
"the virologist","the roboticist","the chef","the bartender","the chaplain","the librarian","a mouse","an ert member",
"a beach","the holodeck","a smokey room","a voice","the cold","a mouse","an operating table","the bar","the rain","a skrell",
- "a unathi","a tajaran","the ai core","the mining station","the research station","a beaker of strange liquid",
+ "an unathi","a tajaran","the ai core","the mining station","the research station","a beaker of strange liquid",
)
mob/living/carbon/proc/dream()
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 9790559edfb..0ecc6219fff 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -154,21 +154,6 @@
if(stat != CONSCIOUS) //Let's not worry about tourettes if you're not conscious.
return
- //Vision
- if(species.vision_organ)
- if(internal_organs_by_name[species.vision_organ]) // Vision organs cut out? Permablind.
- eye_blind = 0
- blinded = 0
- eye_blurry = 0
- else
- eye_blind = 1
- blinded = 1
- eye_blurry = 1
- else // Presumably if a species has no vision organs, they see via some other means.
- eye_blind = 0
- blinded = 0
- eye_blurry = 0
-
if (disabilities & EPILEPSY)
if ((prob(1) && paralysis < 1))
src << "\red You have a seizure!"
@@ -970,19 +955,18 @@
if(species.vision_organ)
vision = internal_organs_by_name[species.vision_organ]
- if(!vision) // Presumably if a species has no vision organs, they see via some other means.
+ if(!species.vision_organ) // Presumably if a species has no vision organs, they see via some other means.
eye_blind = 0
blinded = 0
eye_blurry = 0
- else if(vision.is_broken()) // Vision organs cut out or broken? Permablind.
+ else if(!vision || vision.is_broken()) // Vision organs cut out or broken? Permablind.
eye_blind = 1
blinded = 1
eye_blurry = 1
- else
- //blindness
- if(sdisabilities & BLIND) // Disabled-blind, doesn't get better on its own
+ else //You have the requisite organs
+ if(sdisabilities & BLIND) // Disabled-blind, doesn't get better on its own
blinded = 1
- else if(eye_blind) // Blindness, heals slowly over time
+ else if(eye_blind) // Blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
blinded = 1
else if(istype(glasses, /obj/item/clothing/glasses/sunglasses/blindfold)) //resting your eyes with a blindfold heals blurry eyes faster
@@ -1584,9 +1568,6 @@
if(stat == DEAD)
holder.icon_state = "huddead"
holder2.icon_state = "huddead"
- else if(status_flags & XENO_HOST)
- holder.icon_state = "hudxeno"
- holder2.icon_state = "hudxeno"
else if(foundVirus)
holder.icon_state = "hudill"
else if(has_brain_worms())
diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm
index b0577bdf5fa..8c87751de7a 100644
--- a/code/modules/projectiles/targeting/targeting_overlay.dm
+++ b/code/modules/projectiles/targeting/targeting_overlay.dm
@@ -23,7 +23,6 @@
owner = newowner
loc = null
verbs.Cut()
- toggle_permission(TARGET_CAN_RADIO)
/obj/aiming_overlay/proc/toggle_permission(var/perm)
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 be96e6665af..469c34a1c19 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
@@ -548,6 +548,20 @@
cup_name = "cup of milk"
cup_desc = "White and nutritious goodness!"
+/datum/reagent/drink/milk/chocolate
+ name = "Chocolate Milk"
+ id = "chocolate_milk"
+ description = "A delicious mixture of perfectly healthy mix and terrible chocolate."
+ color = "#74533b"
+
+ glass_icon_state = "glass_brown"
+ glass_name = "glass of chocolate milk"
+ glass_desc = "Delciously fattening!"
+
+ cup_icon_state = "cup_brown"
+ cup_name = "cup of chocolate milk"
+ cup_desc = "Deliciously fattening!"
+
/datum/reagent/drink/milk/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
if(alien == IS_DIONA)
diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm
index c934343e77b..3b78dc73263 100644
--- a/code/modules/reagents/reagent_containers/food/drinks.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks.dm
@@ -123,6 +123,23 @@
..()
reagents.add_reagent("soymilk", 50)
+/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton
+ name = "Small Carton of Milk"
+ volume = 30
+ icon_state = "mini-milk"
+/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/New()
+ ..()
+ reagents.add_reagent("milk", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/chocolate
+ name = "Small Carton of Chocolate Milk"
+ desc = "It's milk! This one is in delicious chocolate flavour."
+
+/obj/item/weapon/reagent_containers/food/drinks/milk/smallcarton/chocolate/New()
+ ..()
+ reagents.add_reagent("chocolate_milk", 30)
+
+
/obj/item/weapon/reagent_containers/food/drinks/coffee
name = "Robust Coffee"
desc = "Careful, the beverage you're about to enjoy is extremely hot."
diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
index a9e55b26fe3..712772a54b5 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
@@ -40,7 +40,7 @@
if(!isGlass || !smash_duration)
return 0
- var/list/chance_table = list(90, 90, 85, 85, 60, 35, 15) //starting from distance 0
+ var/list/chance_table = list(100, 95, 90, 85, 75, 55, 35) //starting from distance 0
var/idx = max(distance + 1, 1) //since list indices start at 1
if(idx > chance_table.len)
return 0
diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
index cdf495405ff..b10feb2b593 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
@@ -133,3 +133,46 @@
name = "shot glass of " + reagents.get_master_reagent_name() //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future.
else
name = "shot glass"
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask
+ name = "fitness shaker"
+ desc = "Big enough to contain enough protein to get perfectly swole. Don't mind the bits."
+ icon_state = "fitness-cup_black"
+ volume = 100
+ matter = list("plastic" = 2000)
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/New()
+ ..()
+ icon_state = pick("fitness-cup_black", "fitness-cup_red", "fitness-cup_black")
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/on_reagent_change()
+ overlays.Cut()
+
+ if(reagents.total_volume)
+ var/image/filling = image('icons/obj/reagentfillings.dmi', src, "fitness-cup10")
+
+ switch(reagents.total_volume)
+ if(0 to 10) filling.icon_state = "fitness-cup10"
+ if(11 to 20) filling.icon_state = "fitness-cup20"
+ if(21 to 29) filling.icon_state = "fitness-cup30"
+ if(30 to 39) filling.icon_state = "fitness-cup40"
+ if(40 to 49) filling.icon_state = "fitness-cup50"
+ if(50 to 59) filling.icon_state = "fitness-cup60"
+ if(60 to 69) filling.icon_state = "fitness-cup70"
+ if(70 to 79) filling.icon_state = "fitness-cup80"
+ if(80 to 89) filling.icon_state = "fitness-cup90"
+ if(90 to INFINITY) filling.icon_state = "fitness-cup100"
+
+ filling.color += reagents.get_color()
+ overlays += filling
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake
+ name = "protein shake"
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake/New()
+ ..()
+ reagents.add_reagent("nutriment", 30)
+ reagents.add_reagent("iron", 10)
+ reagents.add_reagent("protein", 15)
+ reagents.add_reagent("water", 45)
+ on_reagent_change()
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index 98ce8751aa8..854e6b72812 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -273,6 +273,19 @@
reagents.add_reagent("sugar", 3)
bitesize = 2
+/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar
+ name = "protein bar"
+ desc = "SwoleMAX brand protein bars, guaranteed to get you feeling perfectly overconfident."
+ icon_state = "proteinbar"
+ trash = /obj/item/trash/candy/proteinbar
+
+/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar/New()
+ ..()
+ reagents.add_reagent("nutriment", 9)
+ reagents.add_reagent("protein", 4)
+ reagents.add_reagent("sugar", 4)
+ bitesize = 6
+
/obj/item/weapon/reagent_containers/food/snacks/candy/donor
name = "Donor Candy"
desc = "A little treat for blood donors."
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index 89598898f87..9e223628726 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -294,3 +294,12 @@
/obj/item/weapon/reagent_containers/pill/spaceacillin/New()
..()
reagents.add_reagent("spaceacillin", 15)
+
+/obj/item/weapon/reagent_containers/pill/diet
+ name = "diet pill"
+ desc = "Guaranteed to get you slim!"
+ icon_state = "pill9"
+
+/obj/item/weapon/reagent_containers/pill/diet/New()
+ ..()
+ reagents.add_reagent("lipozine", 2)
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 7c291f1906b..3c51df071ea 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -344,3 +344,12 @@
reagents.add_reagent("chloralhydrate", 50)
mode = SYRINGE_INJECT
update_icon()
+
+/obj/item/weapon/reagent_containers/syringe/steroid
+ name = "Syringe (anabolic steroids)"
+ desc = "Contains drugs for muscle growth."
+
+/obj/item/weapon/reagent_containers/syringe/steroid/New()
+ ..()
+ reagents.add_reagent("adrenaline",5)
+ reagents.add_reagent("hyperzine",10)
diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm
index 822bc8da7cf..b54b243609a 100644
--- a/code/modules/spells/spellbook.dm
+++ b/code/modules/spells/spellbook.dm
@@ -42,8 +42,6 @@
This spell temporarly blinds a single person and does not require wizard garb.
Subjugation (30)
This spell temporarily subjugates a target's mind and does not require wizard garb.
- Mind Transfer (60)
- This spell allows the user to switch bodies with a target. Careful to not lose your memory in the process.
Forcewall (10)
This spell creates an unbreakable wall that lasts for 30 seconds and does not need wizard garb.
Blink (2)
@@ -56,8 +54,6 @@
This spell creates your ethereal form, temporarily making you invisible and able to pass through walls.
Knock (10)
This spell opens nearby doors and does not require wizard garb.
- Curse of the Horseman (15)
- This spell will curse a person to wear an unremovable horse mask (it has glue on the inside) and speak like a horse. It does not require wizard garb.
Remove Clothes Requirement Warning: this takes away 2 spell choices.