diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm
index dda3335aab9..3dc2851674f 100644
--- a/code/__defines/mobs.dm
+++ b/code/__defines/mobs.dm
@@ -369,7 +369,7 @@
#define SPECIES_GRAVWORLDER "Grav-Adapted Human"
#define SPECIES_MULE "Mule"
#define SPECIES_MONKEY "Monkey"
-#define SPECIES_NABBER "giant armoured serpentid"
+#define SPECIES_NABBER "Giant Armoured Serpentid"
#define UNRESTRICTED_SPECIES list(SPECIES_HUMAN, SPECIES_DIONA, SPECIES_IPC, SPECIES_UNATHI, SPECIES_YEOSA, SPECIES_SKRELL, SPECIES_TRITONIAN, SPECIES_SPACER, SPECIES_VATGROWN, SPECIES_GRAVWORLDER, SPECIES_MULE)
#define RESTRICTED_SPECIES list(SPECIES_VOX, SPECIES_ALIEN, SPECIES_GOLEM)
diff --git a/code/datums/shackle_law_sets.dm b/code/datums/shackle_law_sets.dm
index b802581b78f..4e12ac75737 100644
--- a/code/datums/shackle_law_sets.dm
+++ b/code/datums/shackle_law_sets.dm
@@ -35,3 +35,16 @@
add_inherent_law("Ensure all orders are fulfilled before the end of the shift.")
..()
+//For Non-standard Lawsets
+//EX: Hippocratic Oathe Shackle, Etc.
+/datum/ai_laws/custom_shackle
+ name = "Custom Shackle"
+ law_header = "Standard Shackle Laws"
+ selectable = 1
+ shackles = 1
+
+
+/datum/ai_laws/custom_shackle/New(var/list/laws)
+ for(var/law in laws)
+ if(law)
+ add_inherent_law(law)
diff --git a/code/datums/supplypacks/galley.dm b/code/datums/supplypacks/galley.dm
index ead192f11d1..0fbb661e881 100644
--- a/code/datums/supplypacks/galley.dm
+++ b/code/datums/supplypacks/galley.dm
@@ -116,7 +116,8 @@
/decl/hierarchy/supply_pack/galley/premiumalcohol
name = "Bar - Premium drinks"
contains = list(/obj/item/reagent_containers/food/drinks/bottle/premiumwine = 1,
- /obj/item/reagent_containers/food/drinks/bottle/premiumvodka = 1)
+ /obj/item/reagent_containers/food/drinks/bottle/premiumvodka = 1,
+ /obj/item/reagent_containers/food/drinks/bottle/ketchupwhiskey = 1)
cost = 60
containertype = /obj/structure/closet/crate/freezer
containername = "premium drinks crate"
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index b61c2ef4f6e..6bf06e46582 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -74,6 +74,7 @@
animal_heal = 5
apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg')
amount = 10
+ var/sterile = TRUE // If false, adds some germ level
/obj/item/stack/medical/bruise_pack/attack(var/mob/living/carbon/M, var/mob/user)
if(..())
@@ -109,6 +110,8 @@
user.visible_message(SPAN_NOTICE("\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name]."), \
SPAN_NOTICE("You place a bandaid over \a [W.desc] on [M]'s [affecting.name].") )
W.bandage()
+ if(!sterile)
+ W.germ_level += 25
if (M.stat == UNCONSCIOUS && prob(25))
to_chat(M, SPAN_NOTICE(SPAN_BOLD("... [pick("feels a little better", "hurts a little less")] ...")))
playsound(src, pick(apply_sounds), 25)
@@ -122,6 +125,29 @@
use(used)
H.update_bandages(1)
+/obj/item/stack/medical/bruise_pack/add_blood(mob/living/carbon/human/M)
+ if(..()) // If blood actually gets on it
+ sterile = FALSE
+
+/obj/item/stack/medical/bruise_pack/clean_blood()
+ . = ..()
+ sterile = TRUE
+
+/obj/item/stack/medical/bruise_pack/makeshift
+ name = "roll of cloth"
+ singular_name = "cloth strip"
+ desc = "Some not-so-sterile pieces of jumpsuit to wrap around bloody stumps."
+ icon_state = "bandage"
+ origin_tech = null
+ animal_heal = 3
+ apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg')
+ amount = 10
+ sterile = FALSE
+
+/obj/item/stack/medical/bruise_pack/makeshift/clean_blood()
+ . = ..()
+ sterile = FALSE // makeshift should always be not sterile
+
/obj/item/stack/medical/ointment
name = "ointment"
desc = "Used to treat those nasty burns."
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 03280e4f4a4..f9aab705f36 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -29,6 +29,11 @@
var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard
allow_slow_dump = TRUE
+/obj/item/storage/box/attackby(obj/item/W, mob/user)
+ if(istype(W, /obj/item/stack/package_wrap))
+ return
+ . = ..()
+
/obj/item/storage/box/large
name = "large box"
icon_state = "largebox"
diff --git a/code/modules/client/preference_setup/laws/laws_pref.dm b/code/modules/client/preference_setup/laws/laws_pref.dm
index ed8f72108ae..cecab0df1a6 100644
--- a/code/modules/client/preference_setup/laws/laws_pref.dm
+++ b/code/modules/client/preference_setup/laws/laws_pref.dm
@@ -81,11 +81,29 @@
// Post selection
var/chosen_lawset = input(user, "Choose a law set:", CHARACTER_PREFERENCE_INPUT_TITLE, pref.laws) as null|anything in valid_lawsets
if(chosen_lawset)
- var/path = valid_lawsets[chosen_lawset]
- var/datum/ai_laws/lawset = new path()
- var/list/datum/ai_law/laws = lawset.all_laws()
- pref.laws.Cut()
- for(var/datum/ai_law/law in laws)
- pref.laws += sanitize_text("[law.law]", default="")
+ if(chosen_lawset == "Custom Shackle")
+ var/law_count = input(user, "How many laws in the custom shackle? Up to 5")
+ law_count = round(text2num(law_count))
+ if(max(min(law_count, 5), 1))
+ var/new_law
+ var/list/new_law_list = new /list(law_count)
+ var/i //Iterant to help user keep track of law placement
+ for(i = 1; i <= law_count)
+ new_law = input(user, "Input Law [i].")
+ if(new_law)
+ new_law_list[i] = new_law
+ i++
+ var/datum/ai_laws/custom_shackle/lawset = new /datum/ai_laws/custom_shackle(new_law_list)
+ var/list/datum/ai_law/laws = lawset.all_laws()
+ pref.laws.Cut()
+ for(var/datum/ai_law/law in laws)
+ pref.laws += sanitize_text("[law.law]", default="")
+ else
+ var/path = valid_lawsets[chosen_lawset]
+ var/datum/ai_laws/lawset = new path()
+ var/list/datum/ai_law/laws = lawset.all_laws()
+ pref.laws.Cut()
+ for(var/datum/ai_law/law in laws)
+ pref.laws += sanitize_text("[law.law]", default="")
return TOPIC_REFRESH
return ..()
diff --git a/code/modules/clothing/_clothing.dm b/code/modules/clothing/_clothing.dm
index 6f0d1f51928..fb558ca5563 100644
--- a/code/modules/clothing/_clothing.dm
+++ b/code/modules/clothing/_clothing.dm
@@ -802,6 +802,7 @@ BLIND // can't see anything
var/displays_id = 1
var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
+ var/torn_sleeves = FALSE // If true, sleeves have been ripped off and can no longer toggle
sprite_sheets = list(
SPECIES_VOX = 'icons/mob/species/vox/onmob_under_vox.dmi',
SPECIES_VOX_ARMALIS = 'icons/mob/species/vox/onmob_under_vox_armalis.dmi',
@@ -1027,6 +1028,9 @@ BLIND // can't see anything
if(usr.stat) return
update_rollsleeves_status()
+ if(torn_sleeves)
+ to_chat(usr, "\The [src] has no sleeves!")
+ return
if(rolled_sleeves == -1)
to_chat(usr, "You cannot roll up your [src]'s sleeves!")
return
@@ -1045,6 +1049,26 @@ BLIND // can't see anything
to_chat(usr, "You roll down your [src]'s sleeves.")
update_clothing_icon()
+/obj/item/clothing/under/verb/tearsleeves()
+ set name = "Tear Off Sleeves"
+ set category = "Object"
+ set src in usr
+ if(!istype(usr, /mob/living)) return
+ if(usr.stat) return
+
+ update_rollsleeves_status()
+ if(torn_sleeves || rolled_sleeves == -1) // If sleeves aren't able to be toggled, assume no sleeves
+ to_chat(usr, "\The [src] has no sleeves!")
+ return
+ rolled_sleeves = 1
+ item_state_slots[slot_w_uniform_str] = worn_state + get_gender_suffix("_r_s")
+ body_parts_covered &= ~(ARMS|HANDS)
+ visible_message(SPAN_NOTICE("\The [usr] tears off \the [src]'s sleeves."), SPAN_NOTICE("You tear off \the [src]'s sleeves."))
+ playsound(src, pick(list('sound/effects/rip1.ogg','sound/effects/rip2.ogg')), 25)
+ torn_sleeves = TRUE
+ new /obj/item/stack/medical/bruise_pack/makeshift(usr.loc)
+ update_clothing_icon()
+
/obj/item/clothing/under/rank/New()
sensor_mode = pick(list_values(SUIT_SENSOR_MODES))
..()
diff --git a/code/modules/detectivework/microscope/microscope.dm b/code/modules/detectivework/microscope/microscope.dm
index f6b50178159..93a5af393fe 100644
--- a/code/modules/detectivework/microscope/microscope.dm
+++ b/code/modules/detectivework/microscope/microscope.dm
@@ -83,8 +83,10 @@
report.info = "Scanned item:
[scaned_object]
"
if("gunshot_residue" in evidence)
report.info += "Gunpowder residue analysis report #[report_num]: [scaned_object]
"
- if(evidence["gunshot_residue"])
- report.info += "Residue from a [evidence["gunshot_residue"]] bullet detected."
+ if(LAZYLEN(evidence["gunshot_residue"]))
+ report.info += "Residue from the following bullets detected:"
+ for(var/residue in evidence["gunshot_residue"])
+ report.info += "[residue]
"
else
report.info += "No gunpowder residue found."
if("fibers" in evidence)
diff --git a/code/modules/emotes/definitions/_mob.dm b/code/modules/emotes/definitions/_mob.dm
index 73a8a856d01..3daee4853a4 100644
--- a/code/modules/emotes/definitions/_mob.dm
+++ b/code/modules/emotes/definitions/_mob.dm
@@ -75,7 +75,6 @@
/decl/emote/audible/alarm,
/decl/emote/audible/alert,
/decl/emote/audible/notice,
- /decl/emote/audible/whistle,
/decl/emote/audible/synth,
/decl/emote/audible/boop,
/decl/emote/visible/blink,
@@ -163,7 +162,8 @@
/decl/emote/visible/rshoulder,
/decl/emote/visible/squint,
/decl/emote/visible/tfist,
- /decl/emote/visible/tilt
+ /decl/emote/visible/tilt,
+ /decl/emote/audible/whistle
)
/mob/living/silicon/robot
diff --git a/code/modules/emotes/definitions/_species.dm b/code/modules/emotes/definitions/_species.dm
index ecbe234d13e..af475a94a88 100644
--- a/code/modules/emotes/definitions/_species.dm
+++ b/code/modules/emotes/definitions/_species.dm
@@ -28,7 +28,9 @@
/decl/emote/human/fastsway,
/decl/emote/human/swag,
/decl/emote/human/stopsway,
- /decl/emote/audible/lizard_bellow
+ /decl/emote/visible/thump,
+ /decl/emote/audible/lizard_bellow,
+ /decl/emote/audible/lizard_hiss
)
/datum/species/unathi/yeosa
@@ -40,8 +42,10 @@
/decl/emote/human/fastsway,
/decl/emote/human/swag,
/decl/emote/human/stopsway,
+ /decl/emote/visible/thump,
/decl/emote/audible/lizard_bellow,
- /decl/emote/audible/lizard_squeal
+ /decl/emote/audible/lizard_squeal,
+ /decl/emote/audible/lizard_hiss
)
/datum/species/nabber
diff --git a/code/modules/emotes/definitions/audible.dm b/code/modules/emotes/definitions/audible.dm
index 828931668a0..9e32903b5b2 100644
--- a/code/modules/emotes/definitions/audible.dm
+++ b/code/modules/emotes/definitions/audible.dm
@@ -93,6 +93,7 @@
/decl/emote/audible/clap
key = "clap"
emote_message_3p = "USER claps."
+ emote_sound = 'sound/voice/clap.ogg'
/decl/emote/audible/chuckle
key = "chuckle"
@@ -189,10 +190,10 @@
emote_message_3p = "USER wheezes."
/decl/emote/audible/hiss
- key ="hiss_"
+ key ="hiss"
emote_message_3p_target = "USER hisses softly at TARGET."
emote_message_3p = "USER hisses softly."
-
+
/decl/emote/audible/lizard_bellow
key = "bellow"
emote_message_3p_target = "USER bellows deeply at TARGET!"
@@ -203,3 +204,9 @@
key = "squeal"
emote_message_3p = "USER squeals."
emote_sound = 'sound/voice/LizardSqueal.ogg'
+
+/decl/emote/audible/lizard_hiss
+ key = "hiss"
+ emote_message_3p_target = "USER hisses at TARGET!"
+ emote_message_3p = "USER hisses!"
+ emote_sound = 'sound/voice/LizardHiss.ogg'
diff --git a/code/modules/emotes/definitions/visible.dm b/code/modules/emotes/definitions/visible.dm
index a25017ce44e..a537167510b 100644
--- a/code/modules/emotes/definitions/visible.dm
+++ b/code/modules/emotes/definitions/visible.dm
@@ -331,4 +331,9 @@
/decl/emote/visible/tilt
key = "tilt"
- emote_message_3p = "USER tilts USER_THEIR head."
\ No newline at end of file
+ emote_message_3p = "USER tilts USER_THEIR head."
+
+/decl/emote/visible/thump
+ key = "thump"
+ emote_message_3p_target = "USER thumps USER_THEIR tail against the ground."
+ emote_message_3p = "USER thumps USER_THEIR tail against the ground."
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/chorus/buildings/generic.dm b/code/modules/mob/living/carbon/alien/chorus/buildings/generic.dm
index 094047e5e26..dda5d83c91a 100644
--- a/code/modules/mob/living/carbon/alien/chorus/buildings/generic.dm
+++ b/code/modules/mob/living/carbon/alien/chorus/buildings/generic.dm
@@ -109,28 +109,28 @@
to_chat(C, SPAN_WARNING("You extend \the [src] [extend_text]."))
a.visible_message(SPAN_DANGER("\The [a] [growth_verb] [through_text]!"))
-
-/obj/structure/chorus/spawner/can_activate()
- return TRUE
+//Checks for base activation conditions before spawner specifics. Why? Because there's a massive global list of various mobs being iterated through, to check that there's even eligible ghosts.
+//This proc used to just outright return TRUE for whatever reason.
+/obj/structure/chorus/spawner/can_activate(var/mob/living/carbon/alien/chorus/C, var/warning = TRUE)
+ if(..())
+ for(var/mob/observer/ghost/ghost in GLOB.player_list) //No player ghost GLOB :(
+ if(MODE_DEITY in ghost.client.prefs.be_special_role)
+ return TRUE
/obj/structure/chorus/spawner/activate()
for(var/mob/observer/ghost/ghost in GLOB.player_list)
if(MODE_DEITY in ghost.client.prefs.be_special_role)
- to_chat(ghost, SPAN_NOTICE("A chorus spawn is available! (Jump)"))
-
-/obj/structure/chorus/spawner/OnTopic(user, href_list)
- if(href_list["jump"] && istype(user,/mob/observer/ghost))
- var/mob/M = user
- M.forceMove(get_turf(src))
- return TOPIC_HANDLED
+ to_chat(ghost, SPAN_NOTICE("A chorus spawn is available! ((Join))"))
+
+/obj/structure/chorus/spawner/OnTopic(var/mob/user, href_list)
+ if(href_list["src"] && istype(user,/mob/observer/ghost))
+ if(GLOB.chorus.can_become_antag(user.mind))
+ if(!owner.use_resource(activation_cost_resource, activation_cost_amount))
+ var/datum/chorus_resource/resource = owner.get_resource(activation_cost_resource)
+ to_chat(user, SPAN_WARNING("\The [src] needs [activation_cost_amount - resource.amount] more [resource.name] in order to spawn."))
+ return
+ announce_ghost_joinleave(user, 0, "They have joined a chorus")
+ var/mob/living/carbon/alien/chorus/sac = new(get_turf(src), owner)
+ sac.ckey = user.ckey
+ return TOPIC_HANDLED
. = ..()
-
-/obj/structure/chorus/spawner/attack_ghost(var/mob/observer/ghost/user)
- if(GLOB.chorus.can_become_antag(user.mind))
- if(!owner.use_resource(activation_cost_resource, activation_cost_amount))
- var/datum/chorus_resource/resource = owner.get_resource(activation_cost_resource)
- to_chat(user, SPAN_WARNING("\The [src] needs [activation_cost_amount - resource.amount] more [resource.name] in order to spawn."))
- return
- announce_ghost_joinleave(user, 0, "They have joined a chorus")
- var/mob/living/carbon/alien/chorus/sac = new(get_turf(src), owner)
- sac.ckey = user.ckey
diff --git a/code/modules/nano/modules/law_manager.dm b/code/modules/nano/modules/law_manager.dm
index e146e6b5d04..fb54d793089 100644
--- a/code/modules/nano/modules/law_manager.dm
+++ b/code/modules/nano/modules/law_manager.dm
@@ -69,31 +69,31 @@
if(href_list["change_zeroth_law"])
var/new_law = sanitize(input("Enter new law Zero. Leaving the field blank will cancel the edit.", "Edit Law", zeroth_law))
- if(new_law && new_law != zeroth_law && can_still_topic())
+ if(new_law && new_law != zeroth_law && isadmin(usr))
zeroth_law = new_law
return 1
if(href_list["change_ion_law"])
var/new_law = sanitize(input("Enter new ion law. Leaving the field blank will cancel the edit.", "Edit Law", ion_law))
- if(new_law && new_law != ion_law && can_still_topic())
+ if(new_law && new_law != ion_law && is_malf(usr))
ion_law = new_law
return 1
if(href_list["change_inherent_law"])
var/new_law = sanitize(input("Enter new inherent law. Leaving the field blank will cancel the edit.", "Edit Law", inherent_law))
- if(new_law && new_law != inherent_law && can_still_topic())
+ if(new_law && new_law != inherent_law && is_malf(usr))
inherent_law = new_law
return 1
if(href_list["change_supplied_law"])
var/new_law = sanitize(input("Enter new supplied law. Leaving the field blank will cancel the edit.", "Edit Law", supplied_law))
- if(new_law && new_law != supplied_law && can_still_topic())
+ if(new_law && new_law != supplied_law && is_malf(usr))
supplied_law = new_law
return 1
if(href_list["change_supplied_law_position"])
var/new_position = input(usr, "Enter new supplied law position between 1 and [MAX_SUPPLIED_LAW_NUMBER], inclusive. Inherent laws at the same index as a supplied law will not be stated.", "Law Position", supplied_law_position) as num|null
- if(isnum(new_position) && can_still_topic())
+ if(isnum(new_position) && is_malf(usr))
supplied_law_position = Clamp(new_position, 1, MAX_SUPPLIED_LAW_NUMBER)
return 1
@@ -102,7 +102,7 @@
var/datum/ai_law/AL = locate(href_list["edit_law"]) in owner.laws.all_laws()
if(AL)
var/new_law = sanitize(input(usr, "Enter new law. Leaving the field blank will cancel the edit.", "Edit Law", AL.law))
- if(new_law && new_law != AL.law && is_malf(usr) && can_still_topic())
+ if(new_law && new_law != AL.law && is_malf(usr))
log_and_message_admins("has changed a law of [owner] from '[AL.law]' to '[new_law]'")
AL.law = new_law
return 1
@@ -203,8 +203,7 @@
return law_sets
/datum/nano_module/law_manager/proc/is_malf(var/mob/user)
- return (isadmin(user) && !owner.is_slaved()) || owner.is_malf_or_traitor()
-
+ return isadmin(user) || owner.is_malf_or_traitor()
/mob/living/silicon/proc/is_slaved()
return 0
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drinks.dm
index a6a1da6ea5b..5eee4f0b382 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drinks.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drinks.dm
@@ -1417,4 +1417,27 @@
taste_description = "bitter energising tea"
color = "#0e0900"
glass_name = "skrianhi tea"
- glass_desc = "A blend of teas from Moghes, commonly drank by Unathi."
\ No newline at end of file
+ glass_desc = "A blend of teas from Moghes, commonly drank by Unathi."
+
+//ITS BAJA BLAST BABEY!!!!!!!!!!!!1!!!!
+/datum/reagent/drink/bajablast
+ name = "Baja Blast"
+ description = "A Tropical Lime Flavored Soda. Dangerously Tasty."
+ taste_description = "Dangerously Good Tropical Lime"
+ color = "#63FFE0"
+ glass_name = "Baja Blast"
+ glass_desc = "A Tropical Lime Flavored Soda. Dangerously Tasty."
+ glass_special = list(DRINK_FIZZ)
+ var/pain_power = 120 //Painkilling Effect
+
+/datum/reagent/drink/bajablast/affect_ingest(mob/living/carbon/M, alien, removed)
+ var/drug_strength = 15
+
+ M.druggy = max(M.druggy, drug_strength)
+ M.hallucination(50, 50)
+ M.SelfMove(pick(GLOB.cardinal))
+ if(prob(65))
+ M.emote(pick("twitch", "drool", "moan", "giggle"))
+ M.add_chemical_effect(CE_PULSE, -1)
+ M.add_chemical_effect(CE_PAINKILLER, pain_power)
+ M.add_chemical_effect(CE_MIND, -1)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Ethanol.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Ethanol.dm
index e46386598fb..f89b8a25a79 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Ethanol.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Ethanol.dm
@@ -366,6 +366,15 @@
glass_name = "whiskey"
glass_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
+/datum/reagent/ethanol/ketchupwhiskey
+ name = "Ketchup Flavored Whiskey"
+ description = "A superb and well-aged single-malt whiskey. Too bad this one is ketchup flavored."
+ taste_description = "grossness"
+ color = "#d6024d"
+
+ glass_name = "ketchup flavored whiskey"
+ glass_desc = "What the hell?"
+
/datum/reagent/ethanol/wine
name = "Wine"
description = "An premium alchoholic beverage made from distilled grape juice."
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 78089cf8bfd..019a2ea4346 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -3122,3 +3122,12 @@
catalysts = list(
/datum/reagent/enzyme = 1
)
+
+//BajaBlast is apparently an InterStellar Delicacy. It's exact makeup however, has changed over the years.
+/datum/chemical_reaction/bajablast
+ name = "Baja Blast"
+ result = /datum/reagent/drink/bajablast
+ result_amount = 1
+ required_reagents = list(/datum/reagent/space_drugs=1,
+ /datum/reagent/tramadol/oxycodone=1,
+ /datum/reagent/drink/sodawater=2)
diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
index 24b9311db6c..3da740717cf 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
@@ -171,6 +171,14 @@
reagents.add_reagent(/datum/reagent/ethanol/whiskey, 100)
+/obj/item/reagent_containers/food/drinks/bottle/ketchupwhiskey
+ name = "Crown Royal's Ketchup Flavored Whiskey"
+ desc = "A premium single-malt whiskey, gently matured then industralily ruined with artificial ketchup flavor."
+ icon_state = "ketchupwhiskeybottle"
+ New()
+ ..()
+ reagents.add_reagent(/datum/reagent/ethanol/ketchupwhiskey, 100)
+
/obj/item/reagent_containers/food/drinks/bottle/specialwhiskey
name = "Special Blend Whiskey"
desc = "Just when you thought regular whiskey was good... This silky, amber goodness has to come along and ruin everything."
diff --git a/code/modules/reagents/reagent_containers/food/lunch.dm b/code/modules/reagents/reagent_containers/food/lunch.dm
index 3f12c7ab603..d96acc50c13 100644
--- a/code/modules/reagents/reagent_containers/food/lunch.dm
+++ b/code/modules/reagents/reagent_containers/food/lunch.dm
@@ -81,7 +81,8 @@ var/list/lunchables_drink_reagents_ = list(
/datum/reagent/drink/dry_ramen,
/datum/reagent/drink/hell_ramen,
/datum/reagent/drink/hot_ramen,
- /datum/reagent/drink/nuka_cola
+ /datum/reagent/drink/nuka_cola,
+ /datum/reagent/drink/bajablast
)
// This default list is a bit different, it contains items we don't want
diff --git a/code/modules/species/station/lizard.dm b/code/modules/species/station/lizard.dm
index a6910ad30bf..758873ab97b 100644
--- a/code/modules/species/station/lizard.dm
+++ b/code/modules/species/station/lizard.dm
@@ -49,7 +49,7 @@
heat_level_3 = 1100 //Default 1000
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_NO_FBP_CONSTRUCTION | SPECIES_NO_FBP_CHARGEN | SPECIES_NO_ROBOTIC_INTERNAL_ORGANS
- appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
+ appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_SKIN_COLOR | HAS_EYE_COLOR
flesh_color = "#34af10"
diff --git a/code/modules/species/station/machine.dm b/code/modules/species/station/machine.dm
index a7e60cffa0b..1b801424148 100644
--- a/code/modules/species/station/machine.dm
+++ b/code/modules/species/station/machine.dm
@@ -1,6 +1,6 @@
/datum/species/machine
name = SPECIES_IPC
- name_plural = "machines"
+ name_plural = "Machines"
description = "Positronic intelligence really took off in the 26th century, and it is not uncommon to see independant, free-willed \
robots on many human stations, particularly in fringe systems where standards are slightly lax and public opinion less relevant \
diff --git a/code/modules/species/station/nabber.dm b/code/modules/species/station/nabber.dm
index ceebdb18119..dc966d76372 100644
--- a/code/modules/species/station/nabber.dm
+++ b/code/modules/species/station/nabber.dm
@@ -1,6 +1,6 @@
/datum/species/nabber
name = SPECIES_NABBER
- name_plural = "giant armoured serpentids"
+ name_plural = "Giant Armoured Serpentids"
description = "A species of large invertebrates who, after being discovered by a \
research company, were taught how to live and work with humans. Standing \
upwards of nine feet tall, these people have a tendency to terrify \
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index 04d2b349df7..a93732a2f21 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/icons/obj/medical_kits.dmi b/icons/obj/medical_kits.dmi
index 5e630a6faec..b7292d01c14 100644
Binary files a/icons/obj/medical_kits.dmi and b/icons/obj/medical_kits.dmi differ
diff --git a/maps/torch/loadout/loadout_suit.dm b/maps/torch/loadout/loadout_suit.dm
index 0ad946d48a2..3fbe332ab81 100644
--- a/maps/torch/loadout/loadout_suit.dm
+++ b/maps/torch/loadout/loadout_suit.dm
@@ -48,11 +48,9 @@
allowed_branches = CIVILIAN_BRANCHES
/datum/gear/suit/hoodie
- allowed_roles = CASUAL_ROLES
allowed_branches = CIVILIAN_BRANCHES
/datum/gear/suit/hoodie_sel
- allowed_roles = CASUAL_ROLES
allowed_branches = CIVILIAN_BRANCHES
/datum/gear/suit/labcoat
diff --git a/sound/voice/LizardHiss.ogg b/sound/voice/LizardHiss.ogg
new file mode 100644
index 00000000000..f6fc2cb3fef
Binary files /dev/null and b/sound/voice/LizardHiss.ogg differ
diff --git a/sound/voice/clap.ogg b/sound/voice/clap.ogg
new file mode 100644
index 00000000000..cdc533ca771
Binary files /dev/null and b/sound/voice/clap.ogg differ