diff --git a/code/__defines/damage_organs.dm b/code/__defines/damage_organs.dm
index 285b0b341e..9692409d45 100644
--- a/code/__defines/damage_organs.dm
+++ b/code/__defines/damage_organs.dm
@@ -47,6 +47,7 @@
// Damage above this value must be repaired with surgery.
#define ROBOLIMB_REPAIR_CAP 30
+#define ORGAN_FLESH 0 // Normal organic organs.
#define ORGAN_ASSISTED 1 // Like pacemakers, not robotic
#define ORGAN_ROBOT 2 // Fully robotic, no organic parts
#define ORGAN_LIFELIKE 3 // Robotic, made to appear organic
diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm
index 51039af253..8426edcfcf 100644
--- a/code/__defines/mobs.dm
+++ b/code/__defines/mobs.dm
@@ -196,6 +196,9 @@
#define O_VOICE "voicebox"
#define O_STANDARD list(O_EYES, O_HEART, O_LUNGS, O_BRAIN, O_LIVER, O_KIDNEYS, O_APPENDIX, O_VOICE)
+// Augments
+#define O_AUG_TSHADE "integrated thermolensing implant"
+
// Non-Standard organs
#define O_MOUTH "mouth"
#define O_CELL "cell"
diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm
index e8c7a0d08d..a6e1ef3c2d 100644
--- a/code/game/objects/items/contraband.dm
+++ b/code/game/objects/items/contraband.dm
@@ -4,30 +4,14 @@
/obj/item/weapon/storage/pill_bottle/happy
name = "bottle of Happy pills"
desc = "Highly illegal drug. When you want to see the rainbow."
-
-/obj/item/weapon/storage/pill_bottle/happy/New()
- ..()
- new /obj/item/weapon/reagent_containers/pill/happy( src )
- new /obj/item/weapon/reagent_containers/pill/happy( src )
- new /obj/item/weapon/reagent_containers/pill/happy( src )
- new /obj/item/weapon/reagent_containers/pill/happy( src )
- new /obj/item/weapon/reagent_containers/pill/happy( src )
- new /obj/item/weapon/reagent_containers/pill/happy( src )
- new /obj/item/weapon/reagent_containers/pill/happy( src )
+ wrapper_color = COLOR_PINK
+ starts_with = list(/obj/item/weapon/reagent_containers/pill/happy = 7)
/obj/item/weapon/storage/pill_bottle/zoom
name = "bottle of Zoom pills"
desc = "Highly illegal drug. Trade brain for speed."
-
-/obj/item/weapon/storage/pill_bottle/zoom/New()
- ..()
- new /obj/item/weapon/reagent_containers/pill/zoom( src )
- new /obj/item/weapon/reagent_containers/pill/zoom( src )
- new /obj/item/weapon/reagent_containers/pill/zoom( src )
- new /obj/item/weapon/reagent_containers/pill/zoom( src )
- new /obj/item/weapon/reagent_containers/pill/zoom( src )
- new /obj/item/weapon/reagent_containers/pill/zoom( src )
- new /obj/item/weapon/reagent_containers/pill/zoom( src )
+ wrapper_color = COLOR_BLUE
+ starts_with = list(/obj/item/weapon/reagent_containers/pill/zoom = 7)
/obj/item/weapon/reagent_containers/glass/beaker/vial/random
flags = 0
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index d436af1936..9b323c3b68 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -177,15 +177,25 @@
use_sound = null
max_storage_space = ITEMSIZE_COST_TINY * 14
max_w_class = ITEMSIZE_TINY
+ var/wrapper_color
+ var/label
var/label_text = ""
var/base_name = " "
var/base_desc = " "
-/obj/item/weapon/storage/pill_bottle/New()
- ..()
+/obj/item/weapon/storage/pill_bottle/Initialize()
+ . = ..()
base_name = name
base_desc = desc
+ update_icon()
+
+/obj/item/weapon/storage/pill_bottle/update_icon()
+ overlays.Cut()
+ if(wrapper_color)
+ var/image/I = image(icon, "pillbottle_wrap")
+ I.color = wrapper_color
+ overlays += I
/obj/item/weapon/storage/pill_bottle/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
@@ -216,61 +226,71 @@
desc = "[base_desc] It is labeled \"[label_text]\"."
/obj/item/weapon/storage/pill_bottle/antitox
- name = "bottle of Dylovene pills"
+ name = "pill bottle (Dylovene)"
desc = "Contains pills used to counter toxins."
starts_with = list(/obj/item/weapon/reagent_containers/pill/antitox = 7)
+ wrapper_color = COLOR_GREEN
/obj/item/weapon/storage/pill_bottle/bicaridine
- name = "bottle of Bicaridine pills"
+ name = "pill bottle (Bicaridine)"
desc = "Contains pills used to stabilize the severely injured."
starts_with = list(/obj/item/weapon/reagent_containers/pill/bicaridine = 7)
+ wrapper_color = COLOR_MAROON
/obj/item/weapon/storage/pill_bottle/dexalin_plus
- name = "bottle of Dexalin Plus pills"
+ name = "pill bottle (Dexalin Plus)"
desc = "Contains pills used to treat extreme cases of oxygen deprivation."
starts_with = list(/obj/item/weapon/reagent_containers/pill/dexalin_plus = 7)
+ wrapper_color = "#3366cc"
/obj/item/weapon/storage/pill_bottle/dermaline
- name = "bottle of Dermaline pills"
+ name = "pill bottle (Dermaline)"
desc = "Contains pills used to treat burn wounds."
starts_with = list(/obj/item/weapon/reagent_containers/pill/dermaline = 7)
+ wrapper_color = "#e8d131"
/obj/item/weapon/storage/pill_bottle/dylovene
- name = "bottle of Dylovene pills"
+ name = "pill bottle (Dylovene)"
desc = "Contains pills used to treat toxic substances in the blood."
starts_with = list(/obj/item/weapon/reagent_containers/pill/dylovene = 7)
+ wrapper_color = COLOR_GREEN
/obj/item/weapon/storage/pill_bottle/inaprovaline
- name = "bottle of Inaprovaline pills"
+ name = "pill bottle (Inaprovaline)"
desc = "Contains pills used to stabilize patients."
starts_with = list(/obj/item/weapon/reagent_containers/pill/inaprovaline = 7)
+ wrapper_color = COLOR_PALE_BLUE_GRAY
/obj/item/weapon/storage/pill_bottle/kelotane
- name = "bottle of kelotane pills"
+ name = "pill bottle (Kelotane)"
desc = "Contains pills used to treat burns."
starts_with = list(/obj/item/weapon/reagent_containers/pill/kelotane = 7)
+ wrapper_color = "#ec8b2f"
/obj/item/weapon/storage/pill_bottle/spaceacillin
- name = "bottle of Spaceacillin pills"
+ name = "pill bottle (Spaceacillin)"
desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space."
starts_with = list(/obj/item/weapon/reagent_containers/pill/spaceacillin = 7)
+ wrapper_color = COLOR_PALE_GREEN_GRAY
/obj/item/weapon/storage/pill_bottle/tramadol
- name = "bottle of Tramadol pills"
+ name = "pill bottle (Tramadol)"
desc = "Contains pills used to relieve pain."
starts_with = list(/obj/item/weapon/reagent_containers/pill/tramadol = 7)
+ wrapper_color = COLOR_PURPLE_GRAY
/obj/item/weapon/storage/pill_bottle/citalopram
- name = "bottle of Citalopram pills"
+ name = "pill bottle (Citalopram)"
desc = "Contains pills used to stabilize a patient's mood."
starts_with = list(/obj/item/weapon/reagent_containers/pill/citalopram = 7)
+ wrapper_color = COLOR_GRAY
/obj/item/weapon/storage/pill_bottle/carbon
- name = "bottle of Carbon pills"
+ name = "pill bottle (Carbon)"
desc = "Contains pills used to neutralise chemicals in the stomach."
starts_with = list(/obj/item/weapon/reagent_containers/pill/carbon = 7)
/obj/item/weapon/storage/pill_bottle/iron
- name = "bottle of Iron pills"
+ name = "pill bottle (Iron)"
desc = "Contains pills used to aid in blood regeneration."
starts_with = list(/obj/item/weapon/reagent_containers/pill/iron = 7)
diff --git a/code/game/objects/random/_random.dm b/code/game/objects/random/_random.dm
index 8a146f82c4..b559495eb5 100644
--- a/code/game/objects/random/_random.dm
+++ b/code/game/objects/random/_random.dm
@@ -11,7 +11,15 @@
. = ..()
if (!prob(spawn_nothing_percentage))
spawn_item()
+ Random_SafeDestroy(0)
+
+// This function should, theoretically, guarantee the deletion of the random object. Not all of them destroy themselves for some reason, especially if created through non-standard means.
+/obj/random/proc/Random_SafeDestroy(var/recursion_level)
+ set waitfor = FALSE
+ sleep(30)
qdel(src)
+ if(src && recursion_level < 5)
+ Random_SafeDestroy(recursion_level + 1)
// this function should return a specific item to spawn
/obj/random/proc/item_to_spawn()
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index 3dc76769fb..b03649183b 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -314,8 +314,10 @@
switch(mob.incorporeal_move)
if(1)
var/turf/T = get_step(mob, direct)
+ if(!T)
+ return
if(mob.check_holy(T))
- mob << "You cannot get past holy grounds while you are in this plane of existence!"
+ to_chat(mob, "You cannot get past holy grounds while you are in this plane of existence!")
return
else
mob.forceMove(get_step(mob, direct))
diff --git a/code/modules/organs/internal/bioaugment.dm b/code/modules/organs/internal/bioaugment.dm
new file mode 100644
index 0000000000..52621e74c1
--- /dev/null
+++ b/code/modules/organs/internal/bioaugment.dm
@@ -0,0 +1,92 @@
+/*
+ * Augments. This file contains the base, and organic-targeting augments.
+ */
+
+/obj/item/organ/internal/augment
+ name = "augment"
+
+ icon_state = "cell_bay"
+
+ parent_organ = BP_TORSO
+
+ organ_verbs = list() // Verbs added by the organ when present in the body.
+ target_parent_classes = list() // Is the parent supposed to be organic, robotic, assisted?
+ forgiving_class = FALSE // Will the organ give its verbs when it isn't a perfect match? I.E., assisted in organic, synthetic in organic.
+
+ var/obj/item/integrated_object // Objects held by the organ, used for deployable things.
+ var/integrated_object_type // Object type the organ will spawn.
+
+/obj/item/organ/internal/augment/Initialize()
+ ..()
+ if(integrated_object_type)
+ integrated_object = new integrated_object_type(src)
+ integrated_object.canremove = FALSE
+
+/obj/item/organ/internal/augment/handle_organ_mod_special(var/removed = FALSE)
+ if(removed && integrated_object && integrated_object.loc != src)
+ if(isliving(integrated_object.loc))
+ var/mob/living/L = integrated_object.loc
+ L.drop_from_inventory(integrated_object)
+ integrated_object.forceMove(src)
+ ..(removed)
+
+// The base organic-targeting augment.
+
+/obj/item/organ/internal/augment/bioaugment
+ name = "bioaugmenting implant"
+
+ robotic = ORGAN_ROBOT
+ target_parent_classes = list(ORGAN_FLESH)
+
+// Jensen Shades. Your vision can be augmented.
+
+/obj/item/organ/internal/augment/bioaugment/thermalshades
+ name = "integrated thermolensing implant"
+ desc = "A miniscule implant that houses a pair of thermolensed sunglasses. Don't ask how they deploy, you don't want to know."
+ icon_state = "augment_shades"
+ dead_icon = "augment_shades_dead"
+
+ w_class = ITEMSIZE_TINY
+
+ organ_tag = O_AUG_TSHADE
+
+ parent_organ = BP_HEAD
+
+ organ_verbs = list(/mob/living/carbon/human/proc/toggle_shades)
+
+ integrated_object_type = /obj/item/clothing/glasses/hud/security/jensenshades
+
+/mob/living/carbon/human/proc/toggle_shades()
+ set name = "Toggle Integrated Thermoshades"
+ set desc = "Toggle your flash-proof, thermal-integrated sunglasses."
+ set category = "Augments"
+
+ var/obj/item/organ/internal/augment/aug = internal_organs_by_name[O_AUG_TSHADE]
+
+ if(glasses)
+ if(aug && aug.integrated_object == glasses)
+ drop_from_inventory(glasses)
+ aug.integrated_object.forceMove(aug)
+ if(!glasses)
+ to_chat(src, "Your [aug.integrated_object] retract into your skull.")
+ else if(!istype(glasses, /obj/item/clothing/glasses/hud/security/jensenshades))
+ to_chat(src, "\The [glasses] block your shades from deploying.")
+ else if(istype(glasses, /obj/item/clothing/glasses/hud/security/jensenshades))
+ var/obj/item/G = glasses
+ if(G.canremove)
+ to_chat(src, "\The [G] are not your integrated shades.")
+ else
+ drop_from_inventory(G)
+ to_chat(src, "\The [G] retract into your skull.")
+ qdel(G)
+
+ else
+ if(aug && aug.integrated_object)
+ to_chat(src, "Your [aug.integrated_object] deploy.")
+ equip_to_slot(aug.integrated_object, slot_glasses, 0, 1)
+ if(!glasses || glasses != aug.integrated_object)
+ aug.integrated_object.forceMove(aug)
+ else
+ var/obj/item/clothing/glasses/hud/security/jensenshades/J = new(get_turf(src))
+ equip_to_slot(J, slot_glasses, 1, 1)
+ to_chat(src, "Your [aug.integrated_object] deploy.")
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index c14fac25ba..b0aadff2a2 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -36,7 +36,10 @@ var/list/organ_cache = list()
var/list/will_assist_languages = list()
var/list/datum/language/assists_languages = list()
- var/list/organ_verbs // Verbs added by the organ when present in the body.
+ // Organ verb vars.
+ var/list/organ_verbs // Verbs added by the organ when present in the body.
+ var/list/target_parent_classes = list() // Is the parent supposed to be organic, robotic, assisted?
+ var/forgiving_class = TRUE // Will the organ give its verbs when it isn't a perfect match? I.E., assisted in organic, synthetic in organic.
/obj/item/organ/Destroy()
@@ -441,12 +444,12 @@ var/list/organ_cache = list()
all_organs |= owner.internal_organs
for(var/obj/item/organ/O in all_organs)
- if(!(O.status & ORGAN_DEAD) && O.organ_verbs)
+ if(!(O.status & ORGAN_DEAD) && O.organ_verbs && O.check_verb_compatability())
for(var/verb_type in O.organ_verbs)
if(verb_type in organ_verbs)
save_verbs |= verb_type
- if(!removed && organ_verbs)
+ if(!removed && organ_verbs && check_verb_compatability())
for(var/verb_path in organ_verbs)
owner.verbs |= verb_path
else if(organ_verbs)
@@ -457,3 +460,32 @@ var/list/organ_cache = list()
/obj/item/organ/proc/handle_organ_proc_special() // Called when processed.
return
+
+/obj/item/organ/proc/check_verb_compatability() // Used for determining if an organ should give or remove its verbs. I.E., FBP part in a human, no verbs. If true, keep or add.
+ if(owner)
+ if(ishuman(owner))
+ var/mob/living/carbon/human/H = owner
+ var/obj/item/organ/O = H.get_organ(parent_organ)
+ if(forgiving_class)
+ if(O.robotic <= ORGAN_ASSISTED && robotic <= ORGAN_LIFELIKE) // Parent is organic or assisted, we are at most synthetic.
+ return TRUE
+
+ if(O.robotic >= ORGAN_ROBOT && robotic >= ORGAN_ASSISTED) // Parent is synthetic, and we are biosynthetic at least.
+ return TRUE
+
+ if(!target_parent_classes || !target_parent_classes.len) // Default checks, if we're not looking for a Specific type.
+
+ if(O.robotic == robotic) // Same thing, we're fine.
+ return TRUE
+
+ if(O.robotic < ORGAN_ROBOT && robotic < ORGAN_ROBOT)
+ return TRUE
+
+ if(O.robotic > ORGAN_ASSISTED && robotic > ORGAN_ASSISTED)
+ return TRUE
+
+ else
+ if(O.robotic in target_parent_classes)
+ return TRUE
+
+ return FALSE
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index ee77c5e79e..dee4cabfa6 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -127,7 +127,7 @@
data["pillSprite"] = pillsprite
data["bottleSprite"] = bottlesprite
- var/P[20] //how many pill sprites there are. Sprites are taken from chemical.dmi and can be found in nano/images/pill.png
+ var/P[24] //how many pill sprites there are. Sprites are taken from chemical.dmi and can be found in nano/images/pill.png
for(var/i = 1 to P.len)
P[i] = i
data["pillSpritesAmount"] = P
@@ -238,7 +238,7 @@
else
pill_cube = "pill"
- var/name = sanitizeSafe(input(usr,"Name:","Name your [pill_cube]!","[reagents.get_master_reagent_name()] ([amount_per_pill] units)") as null|text, MAX_NAME_LEN)
+ var/name = sanitizeSafe(input(usr,"Name:","Name your [pill_cube]!","[reagents.get_master_reagent_name()] ([amount_per_pill]u)") as null|text, MAX_NAME_LEN)
if(!name) //Blank name (sanitized to nothing, or left empty) or cancel
return
@@ -257,6 +257,10 @@
else //If condi is on
P.icon_state = "bouilloncube"//Reskinned monkey cube
P.desc = "A dissolvable cube."
+
+ if(P.icon_state in list("pill1", "pill2", "pill3", "pill4")) // if using greyscale, take colour from reagent
+ P.color = reagents.get_color()
+
reagents.trans_to_obj(P,amount_per_pill)
if(src.loaded_pill_bottle)
if(loaded_pill_bottle.contents.len < loaded_pill_bottle.max_storage_space)
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index 727d67e509..c0b647e53b 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -15,7 +15,7 @@
/obj/item/weapon/reagent_containers/pill/Initialize()
. = ..()
if(!icon_state)
- icon_state = "pill[rand(1, 20)]"
+ icon_state = "pill[rand(1, 4)]" //preset pills only use colour changing or unique icons
/obj/item/weapon/reagent_containers/pill/attack(mob/M as mob, mob/user as mob)
if(M == user)
@@ -92,27 +92,29 @@
//Pills
/obj/item/weapon/reagent_containers/pill/antitox
- name = "Anti-toxins pill"
- desc = "Neutralizes many common toxins. Contains 25 units of Dylovene."
- icon_state = "pill17"
+ name = "Dylovene (25u)"
+ desc = "Neutralizes many common toxins."
+ icon_state = "pill1"
/obj/item/weapon/reagent_containers/pill/antitox/Initialize()
. = ..()
reagents.add_reagent("anti_toxin", 25)
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/tox
name = "Toxins pill"
- desc = "Highly toxic." //this is cooler without "contains 50u toxin"
- icon_state = "pill5"
+ desc = "Highly toxic."
+ icon_state = "pill4"
/obj/item/weapon/reagent_containers/pill/tox/Initialize()
. = ..()
reagents.add_reagent("toxin", 50)
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/cyanide
- name = "Cyanide pill"
- desc = "Don't swallow this." //this is cooler without "contains 50u cyanide"
- icon_state = "pill5"
+ name = "Strange pill"
+ desc = "It's marked 'KCN'. Smells vaguely of almonds."
+ icon_state = "pill9"
/obj/item/weapon/reagent_containers/pill/cyanide/Initialize()
. = ..()
@@ -121,174 +123,180 @@
/obj/item/weapon/reagent_containers/pill/adminordrazine
name = "Adminordrazine pill"
- desc = "It's magic. We don't have to explain it." //it's space magic you don't need the quantity
- icon_state = "pill15"
+ desc = "It's magic. We don't have to explain it."
+ icon_state = "pillA"
/obj/item/weapon/reagent_containers/pill/adminordrazine/Initialize()
. = ..()
reagents.add_reagent("adminordrazine", 5)
+
/obj/item/weapon/reagent_containers/pill/stox
- name = "Sleeping pill"
- desc = "Commonly used to treat insomnia. Contains 15 units of Soporific."
- icon_state = "pill8"
+ name = "Soporific (15u)"
+ desc = "Commonly used to treat insomnia."
+ icon_state = "pill2"
/obj/item/weapon/reagent_containers/pill/stox/Initialize()
. = ..()
reagents.add_reagent("stoxin", 15)
-
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/kelotane
- name = "Kelotane pill"
- desc = "Used to treat burns. Contains 15 units of Kelotane."
- icon_state = "pill11"
+ name = "Kelotane (15u)"
+ desc = "Used to treat burns."
+ icon_state = "pill3"
/obj/item/weapon/reagent_containers/pill/kelotane/Initialize()
. = ..()
reagents.add_reagent("kelotane", 15)
-
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/paracetamol
- name = "Paracetamol pill"
- desc = "Paracetamol! A painkiller for the ages. Chewables! Contains 15 units of Paracetamol."
- icon_state = "pill8"
+ name = "Paracetamol (15u)"
+ desc = "Paracetamol! A painkiller for the ages. Chewables!"
+ icon_state = "pill3"
/obj/item/weapon/reagent_containers/pill/paracetamol/Initialize()
. = ..()
reagents.add_reagent("paracetamol", 15)
-
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/tramadol
- name = "Tramadol pill"
- desc = "A simple painkiller. Contains 15 units of Tramadol."
- icon_state = "pill8"
+ name = "Tramadol (15u)"
+ desc = "A simple painkiller."
+ icon_state = "pill3"
/obj/item/weapon/reagent_containers/pill/tramadol/Initialize()
. = ..()
reagents.add_reagent("tramadol", 15)
-
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/methylphenidate
- name = "Methylphenidate pill"
- desc = "Improves the ability to concentrate. Contains 15 units of Methylphenidate."
- icon_state = "pill8"
+ name = "Methylphenidate (15u)"
+ desc = "Improves the ability to concentrate."
+ icon_state = "pill2"
/obj/item/weapon/reagent_containers/pill/methylphenidate/Initialize()
. = ..()
reagents.add_reagent("methylphenidate", 15)
-
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/citalopram
- name = "Citalopram pill"
- desc = "Mild anti-depressant. Contains 15 units of Citalopram."
- icon_state = "pill8"
+ name = "Citalopram (15u)"
+ desc = "Mild anti-depressant."
+ icon_state = "pill4"
/obj/item/weapon/reagent_containers/pill/citalopram/Initialize()
. = ..()
reagents.add_reagent("citalopram", 15)
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/dexalin
- name = "Dexalin pill"
- desc = "Used to treat oxygen deprivation. Contains 15 units of Dexalin."
- icon_state = "pill16"
+ name = "Dexalin (15u)"
+ desc = "Used to treat oxygen deprivation."
+ icon_state = "pill1"
/obj/item/weapon/reagent_containers/pill/dexalin/Initialize()
. = ..()
reagents.add_reagent("dexalin", 15)
-
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/dexalin_plus
- name = "Dexalin Plus pill"
- desc = "Used to treat extreme oxygen deprivation. Contains 15 units of Dexalin Plus."
- icon_state = "pill8"
+ name = "Dexalin Plus (15u)"
+ desc = "Used to treat extreme oxygen deprivation."
+ icon_state = "pill2"
/obj/item/weapon/reagent_containers/pill/dexalin_plus/Initialize()
. = ..()
reagents.add_reagent("dexalinp", 15)
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/dermaline
- name = "Dermaline pill"
- desc = "Used to treat burn wounds. Contains 15 units of Dermaline."
- icon_state = "pill12"
+ name = "Dermaline (15u)"
+ desc = "Used to treat burn wounds."
+ icon_state = "pill2"
/obj/item/weapon/reagent_containers/pill/dermaline/Initialize()
. = ..()
reagents.add_reagent("dermaline", 15)
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/dylovene
- name = "Dylovene pill"
- desc = "A broad-spectrum anti-toxin. Contains 15 units of Dylovene."
- icon_state = "pill13"
+ name = "Dylovene (15u)"
+ desc = "A broad-spectrum anti-toxin."
+ icon_state = "pill1"
/obj/item/weapon/reagent_containers/pill/dylovene/Initialize()
. = ..()
reagents.add_reagent("anti_toxin", 15)
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/inaprovaline
- name = "Inaprovaline pill"
- desc = "Used to stabilize patients. Contains 30 units of Inaprovaline."
- icon_state = "pill20"
+ name = "Inaprovaline (30u)"
+ desc = "Used to stabilize patients."
+ icon_state = "pill2"
/obj/item/weapon/reagent_containers/pill/inaprovaline/Initialize()
. = ..()
reagents.add_reagent("inaprovaline", 30)
-
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/bicaridine
- name = "Bicaridine pill"
- desc = "Used to treat physical injuries. Contains 20 units of Bicaridine."
- icon_state = "pill18"
+ name = "Bicaridine (20u)"
+ desc = "Used to treat physical injuries."
+ icon_state = "pill2"
/obj/item/weapon/reagent_containers/pill/bicaridine/Initialize()
. = ..()
reagents.add_reagent("bicaridine", 20)
-
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/spaceacillin
- name = "Spaceacillin pill"
- desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space. Contains 15 units of Spaceacillin."
- icon_state = "pill19"
+ name = "Spaceacillin (10u)"
+ desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space."
+ icon_state = "pill3"
/obj/item/weapon/reagent_containers/pill/spaceacillin/Initialize()
. = ..()
reagents.add_reagent("spaceacillin", 15)
-
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/carbon
- name = "Carbon pill"
- desc = "Used to neutralise chemicals in the stomach. Contains 15 units of Carbon."
- icon_state = "pill7"
+ name = "Carbon (15u)"
+ desc = "Used to neutralise chemicals in the stomach."
+ icon_state = "pill3"
/obj/item/weapon/reagent_containers/pill/carbon/Initialize()
. = ..()
reagents.add_reagent("carbon", 15)
-
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/iron
- name = "Iron pill"
- desc = "Used to aid in blood regeneration after bleeding. Contains 15 units of Iron."
- icon_state = "pill4"
+ name = "Iron (15u)"
+ desc = "Used to aid in blood regeneration after bleeding."
+ icon_state = "pill1"
/obj/item/weapon/reagent_containers/pill/iron/Initialize()
. = ..()
reagents.add_reagent("iron", 15)
+ color = reagents.get_color()
//Not-quite-medicine
/obj/item/weapon/reagent_containers/pill/happy
name = "Happy pill"
- desc = "Happy happy joy joy!" //we're not giving quantities for shady maint drugs
- icon_state = "pill18"
+ desc = "Happy happy joy joy!"
+ icon_state = "pill4"
/obj/item/weapon/reagent_containers/pill/happy/Initialize()
. = ..()
reagents.add_reagent("space_drugs", 15)
reagents.add_reagent("sugar", 15)
-
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/zoom
name = "Zoom pill"
desc = "Zoooom!"
- icon_state = "pill18"
+ icon_state = "pill4"
/obj/item/weapon/reagent_containers/pill/zoom/Initialize()
. = ..()
@@ -296,12 +304,14 @@
reagents.add_reagent("mold", 2) //Chance to be more dangerous
reagents.add_reagent("expired_medicine", 5)
reagents.add_reagent("stimm", 5) //VOREStation edit end: Zoom pill adjustments
+ color = reagents.get_color()
/obj/item/weapon/reagent_containers/pill/diet
name = "diet pill"
desc = "Guaranteed to get you slim!"
- icon_state = "pill9"
+ icon_state = "pill4"
/obj/item/weapon/reagent_containers/pill/diet/Initialize()
. = ..()
reagents.add_reagent("lipozine", 15) //VOREStation Edit
+ color = reagents.get_color()
diff --git a/code/modules/research/designs/illegal.dm b/code/modules/research/designs/illegal.dm
index c195b5764b..4e99fc8665 100644
--- a/code/modules/research/designs/illegal.dm
+++ b/code/modules/research/designs/illegal.dm
@@ -19,8 +19,9 @@
sort_string = "VASBA"
/datum/design/item/weapon/esword
+ name = "Portable Energy Blade"
id = "chargesword"
- req_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 4, TECH_ENGINEERING = 5, TECH_ILLEGAL = 4, TECH_ANOMALY = 1)
+ req_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 4, TECH_ENGINEERING = 5, TECH_ILLEGAL = 4, TECH_ARCANE = 1)
materials = list(MAT_PLASTEEL = 3500, "glass" = 1000, MAT_LEAD = 2250, MAT_METALHYDROGEN = 500)
build_path = /obj/item/weapon/melee/energy/sword/charge
sort_string = "VASCA"
diff --git a/html/changelogs/Novacat - Colorablepill.yml b/html/changelogs/Novacat - Colorablepill.yml
new file mode 100644
index 0000000000..41b0195f41
--- /dev/null
+++ b/html/changelogs/Novacat - Colorablepill.yml
@@ -0,0 +1,38 @@
+################################
+# 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: "Adds greyscale pills, which are colored by their reagent"
+ - rscadd: "Adds colored pill bottles, most pre-spawned pill bottles are colored"
+ - tweak: "Prespawn pills and pill bottles have had their names simplified"
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index 41d2fbd305..5403cac867 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index d24841e6c1..1c92dc0afd 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi
index 1d4c723fca..e229d9e42d 100644
Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ
diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi
index 9fd6f77296..12bededf90 100644
Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ
diff --git a/nano/css/icons.css b/nano/css/icons.css
index 68ac412aba..23d4ba0606 100644
--- a/nano/css/icons.css
+++ b/nano/css/icons.css
@@ -265,26 +265,30 @@
.uiIcon16.icon-external64 { background-image: url(uiIcons64.png); background-position: -256px -64px; width: 64px; height: 64px; }
.uiIcon16.icon-pill { background-image: url(pills32.png); width: 32px; height: 32px;}
-.uiIcon16.icon-pill.pill1 { background-position: 0 0; }
-.uiIcon16.icon-pill.pill2 { background-position: -32px 0; }
-.uiIcon16.icon-pill.pill3 { background-position: -64px 0; }
-.uiIcon16.icon-pill.pill4 { background-position: -96px 0; }
-.uiIcon16.icon-pill.pill5 { background-position: -128px 0; }
-.uiIcon16.icon-pill.pill6 { background-position: 0 -32px; }
-.uiIcon16.icon-pill.pill7 { background-position: -32px -32px; }
-.uiIcon16.icon-pill.pill8 { background-position: -64px -32px; }
-.uiIcon16.icon-pill.pill9 { background-position: -96px -32px; }
-.uiIcon16.icon-pill.pill10 { background-position: -128px -32px; }
-.uiIcon16.icon-pill.pill11 { background-position: 0 -64px; }
-.uiIcon16.icon-pill.pill12 { background-position: -32px -64px; }
-.uiIcon16.icon-pill.pill13 { background-position: -64px -64px; }
-.uiIcon16.icon-pill.pill14 { background-position: -96px -64px; }
-.uiIcon16.icon-pill.pill15 { background-position: -128px -64px; }
-.uiIcon16.icon-pill.pill16 { background-position: 0 -96px; }
-.uiIcon16.icon-pill.pill17 { background-position: -32px -96px; }
-.uiIcon16.icon-pill.pill18 { background-position: -64px -96px; }
-.uiIcon16.icon-pill.pill19 { background-position: -96px -96px; }
-.uiIcon16.icon-pill.pill20 { background-position: -128px -96px; }
+.uiIcon16.icon-pill.pill1 { background-position: -64px -96px; }
+.uiIcon16.icon-pill.pill2 { background-position: -64px -96px; }
+.uiIcon16.icon-pill.pill3 { background-position: -96px -32px; }
+.uiIcon16.icon-pill.pill4 { background-position: -96px -32px; }
+.uiIcon16.icon-pill.pill5 { background-position: 0 0; }
+.uiIcon16.icon-pill.pill6 { background-position: -32px 0; }
+.uiIcon16.icon-pill.pill7 { background-position: -64px 0; }
+.uiIcon16.icon-pill.pill8 { background-position: -96px 0; }
+.uiIcon16.icon-pill.pill9 { background-position: -128px 0; }
+.uiIcon16.icon-pill.pill10 { background-position: 0 -32px; }
+.uiIcon16.icon-pill.pill11 { background-position: -32px -32px; }
+.uiIcon16.icon-pill.pill12 { background-position: -64px -32px; }
+.uiIcon16.icon-pill.pill13 { background-position: -96px -32px; }
+.uiIcon16.icon-pill.pill14 { background-position: -128px -32px; }
+.uiIcon16.icon-pill.pill15 { background-position: 0 -64px; }
+.uiIcon16.icon-pill.pill16 { background-position: -32px -64px; }
+.uiIcon16.icon-pill.pill17 { background-position: -64px -64px; }
+.uiIcon16.icon-pill.pill18 { background-position: -96px -64px; }
+.uiIcon16.icon-pill.pill19 { background-position: -128px -64px; }
+.uiIcon16.icon-pill.pill20 { background-position: 0 -96px; }
+.uiIcon16.icon-pill.pill21 { background-position: -32px -96px; }
+.uiIcon16.icon-pill.pill22 { background-position: -64px -96px; }
+.uiIcon16.icon-pill.pill23 { background-position: -96px -96px; }
+.uiIcon16.icon-pill.pill24 { background-position: -128px -96px; }
.uiIcon16.icon-pill.bottle1 { background-position: 0 -128px; }
.uiIcon16.icon-pill.bottle2 { background-position: -32px -128px; }
.uiIcon16.icon-pill.bottle3 { background-position: -64px -128px; }
diff --git a/vorestation.dme b/vorestation.dme
index 7ba0c16900..85901fe6af 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -2628,6 +2628,7 @@
#include "code\modules\organs\robolimbs_yw.dm"
#include "code\modules\organs\wound.dm"
#include "code\modules\organs\internal\appendix.dm"
+#include "code\modules\organs\internal\bioaugment.dm"
#include "code\modules\organs\internal\brain.dm"
#include "code\modules\organs\internal\eyes.dm"
#include "code\modules\organs\internal\heart.dm"