diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 7a9223e27ba..4b168a95915 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -66,46 +66,6 @@
icon_state = "spacecash1000"
desc = "It's worth 1000 credits."
-/obj/item/weapon/soap
- name = "soap"
- desc = "A cheap bar of soap. Doesn't smell."
- gender = PLURAL
- icon = 'icons/obj/items.dmi'
- icon_state = "soap"
- w_class = 1.0
- throwforce = 0
- throw_speed = 3
- throw_range = 7
-
-/obj/item/weapon/soap/nanotrasen
- desc = "A Nanotrasen brand bar of soap. Smells of plasma."
- icon_state = "soapnt"
-
-/obj/item/weapon/soap/deluxe
- desc = "A deluxe Waffle Co. brand bar of soap. Smells of condoms."
- icon_state = "soapdeluxe"
-
-/obj/item/weapon/soap/syndie
- desc = "An untrustworthy bar of soap. Smells of fear."
- icon_state = "soapsyndie"
-
-/obj/item/weapon/bikehorn
- name = "bike horn"
- desc = "A horn off of a bicycle."
- icon = 'icons/obj/items.dmi'
- icon_state = "bike_horn"
- item_state = "bike_horn"
- throwforce = 0
- hitsound = null //To prevent tap.ogg playing, as the item lacks of force
- w_class = 1.0
- throw_speed = 3
- throw_range = 7
- attack_verb = list("HONKED")
- var/spam_flag = 0
-
-/obj/item/weapon/bikehorn/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
- playsound(loc, 'sound/items/bikehorn.ogg', 50, 1, -1) //plays instead of tap.ogg!
- return ..()
/obj/item/weapon/c_tube
name = "cardboard tube"
@@ -134,19 +94,6 @@
name = "disk"
icon = 'icons/obj/items.dmi'
-/*
-/obj/item/weapon/game_kit
- name = "Gaming Kit"
- icon = 'icons/obj/items.dmi'
- icon_state = "game_kit"
- var/selected = null
- var/board_stat = null
- var/data = ""
- var/base_url = "http://svn.slurm.us/public/spacestation13/misc/game_kit"
- item_state = "sheet-metal"
- w_class = 5.0
-*/
-
/obj/item/weapon/legcuffs
name = "legcuffs"
desc = "Use this to keep prisoners in line."
@@ -207,7 +154,6 @@
..()
-
/obj/item/weapon/caution
desc = "Caution! Wet Floor!"
name = "wet floor sign"
diff --git a/code/game/dna.dm b/code/game/dna.dm
index 35314862a41..bbdb78b8597 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -427,7 +427,8 @@
for(var/mob/dead/observer/ghost in player_list)
if(ghost.mind == occupant.mind)
if(ghost.can_reenter_corpse)
- ghost << "Your corpse has been placed into a cloning scanner. Return to your body if you want to be resurrected/cloned! (Verbs -> Ghost -> Re-enter corpse)"
+ ghost << "Your corpse has been placed into a cloning scanner. Return to your body if you want to be cloned! (Verbs -> Ghost -> Re-enter corpse)"
+ ghost << sound('sound/effects/genetics.ogg')
break
return 1
diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm
index 12080db7be8..011787c61d2 100644
--- a/code/game/gamemodes/antag_spawner.dm
+++ b/code/game/gamemodes/antag_spawner.dm
@@ -103,6 +103,7 @@
M.mind.objectives += new_objective
ticker.mode.traitors += M.mind
M.mind.special_role = "apprentice"
+ M << sound('sound/effects/magic.ogg')
/obj/item/weapon/antag_spawner/contract/equip_antag(mob/target as mob)
target.equip_to_slot_or_del(new /obj/item/device/radio/headset(target), slot_ears)
diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm
index ef8daeb6791..837934d6f22 100644
--- a/code/game/objects/items/weapons/clown_items.dm
+++ b/code/game/objects/items/weapons/clown_items.dm
@@ -1,23 +1,37 @@
/* Clown Items
* Contains:
- * Banana Peels
* Soap
* Bike Horns
*/
-/*
- * Banana Peels
- */
-/obj/item/weapon/grown/bananapeel/Crossed(AM as mob|obj)
- if (istype(AM, /mob/living/carbon))
- var/mob/living/carbon/M = AM
- var/stun = Clamp(potency / 10, 1, 10)
- var/weaken = Clamp(potency / 20, 0.5, 5)
- M.slip(stun, weaken, src)
/*
* Soap
*/
-/obj/item/weapon/soap/Crossed(AM as mob|obj) //EXACTLY the same as bananapeel for now, so it makes sense to put it in the same dm -- Urist
+
+ /obj/item/weapon/soap
+ name = "soap"
+ desc = "A cheap bar of soap. Doesn't smell."
+ gender = PLURAL
+ icon = 'icons/obj/items.dmi'
+ icon_state = "soap"
+ w_class = 1.0
+ throwforce = 0
+ throw_speed = 3
+ throw_range = 7
+
+/obj/item/weapon/soap/nanotrasen
+ desc = "A Nanotrasen brand bar of soap. Smells of plasma."
+ icon_state = "soapnt"
+
+/obj/item/weapon/soap/deluxe
+ desc = "A deluxe Waffle Co. brand bar of soap. Smells of condoms."
+ icon_state = "soapdeluxe"
+
+/obj/item/weapon/soap/syndie
+ desc = "An untrustworthy bar of soap. Smells of fear."
+ icon_state = "soapsyndie"
+
+/obj/item/weapon/soap/Crossed(AM as mob|obj)
if (istype(AM, /mob/living/carbon))
var/mob/living/carbon/M = AM
M.slip(4, 2, src)
@@ -47,11 +61,31 @@
/*
* Bike Horns
*/
+
+
+/obj/item/weapon/bikehorn
+ name = "bike horn"
+ desc = "A horn off of a bicycle."
+ icon = 'icons/obj/items.dmi'
+ icon_state = "bike_horn"
+ item_state = "bike_horn"
+ throwforce = 0
+ hitsound = null //To prevent tap.ogg playing, as the item lacks of force
+ w_class = 1.0
+ throw_speed = 3
+ throw_range = 7
+ attack_verb = list("HONKED")
+ var/spam_flag = 0
+
+/obj/item/weapon/bikehorn/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
+ playsound(loc, 'sound/items/bikehorn.ogg', 50, 1, -1) //plays instead of tap.ogg!
+ return ..()
+
/obj/item/weapon/bikehorn/attack_self(mob/user as mob)
- if (spam_flag == 0)
+ if(spam_flag == 0)
spam_flag = 1
playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1)
src.add_fingerprint(user)
spawn(20)
spam_flag = 0
- return
\ No newline at end of file
+ return
diff --git a/code/modules/events/ninja.dm b/code/modules/events/ninja.dm
index 0adc03085a8..06c821888bc 100644
--- a/code/modules/events/ninja.dm
+++ b/code/modules/events/ninja.dm
@@ -173,6 +173,8 @@
if(Ninja.mind != Mind) //something has gone wrong!
ERROR("The ninja wasn't assigned the right mind. ;ç;")
+ Ninja << sound('sound/effects/ninja_greeting.ogg') //so ninja you probably wouldn't even know if you were made one
+
success_spawn = 1
/*
diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm
index 782723cd535..1b608e0425e 100644
--- a/code/modules/food/recipes_microwave.dm
+++ b/code/modules/food/recipes_microwave.dm
@@ -919,8 +919,8 @@
/datum/recipe/bloodsoup
reagents = list("blood" = 10)
items = list(
- /obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato,
- /obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blood,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blood,
)
result = /obj/item/weapon/reagent_containers/food/snacks/bloodsoup
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 12dfeb163be..1e6e83fe576 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -572,28 +572,35 @@
reagents.add_reagent("moonshine", 1+round((potency / 10), 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
+//tomaters
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato
seed = "/obj/item/seeds/tomatoseed"
name = "tomato"
desc = "I say to-mah-to, you say tom-mae-to."
icon_state = "tomato"
dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato
- New(var/loc, var/potency = 10)
- ..()
- if(reagents)
- reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
+ var/splat = /obj/effect/decal/cleanable/tomato_smudge
- throw_impact(atom/hit_atom)
- ..()
- new/obj/effect/decal/cleanable/tomato_smudge(src.loc)
- src.visible_message("The [src.name] has been squashed.","You hear a smack.")
- for(var/atom/A in get_turf(hit_atom))
- src.reagents.reaction(A)
- del(src) // Not qdel, because it'll hit other mobs then the floor for runtimes.
- return
+/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/New(var/loc, var/potency = 10)
+ ..()
+ if(reagents)
+ reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
-/obj/item/weapon/reagent_containers/food/snacks/grown/killertomato
+/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/proc/squish(atom/target)
+ new splat(src.loc)
+ src.visible_message("The [src.name] has been squashed.","You hear a smack.")
+ for(var/atom/A in get_turf(target))
+ src.reagents.reaction(A)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/throw_impact(atom/hit_atom)
+ ..()
+ squish(hit_atom)
+ del(src) // Not qdel, because it'll hit other mobs then the floor for runtimes.
+ return
+
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer
seed = "/obj/item/seeds/killertomatoseed"
name = "killer-tomato"
desc = "I say to-mah-to, you say tom-mae-to... OH GOD IT'S EATING MY LEGS!!"
@@ -604,7 +611,7 @@
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
-/obj/item/weapon/reagent_containers/food/snacks/grown/killertomato/attack_self(mob/user as mob)
+/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer/attack_self(mob/user as mob)
if(istype(user.loc,/turf/space))
return
new /mob/living/simple_animal/tomato(user.loc)
@@ -612,12 +619,15 @@
user << "You plant the killer-tomato."
-/obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blood
seed = "/obj/item/seeds/bloodtomatoseed"
name = "blood-tomato"
desc = "So bloody...so...very...bloody....AHHHH!!!!"
icon_state = "bloodtomato"
- dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato
+ dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blood
+ splat = /obj/effect/decal/cleanable/blood/splatter
+
New(var/loc, var/potency = 10)
..()
if(reagents)
@@ -625,22 +635,15 @@
reagents.add_reagent("blood", 1+round((potency / 5), 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
-/obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato/throw_impact(atom/hit_atom)
- ..()
- new/obj/effect/decal/cleanable/blood/splatter(src.loc)
- src.visible_message("The [src.name] has been squashed.","You hear a smack.")
- src.reagents.reaction(get_turf(hit_atom))
- for(var/atom/A in get_turf(hit_atom))
- src.reagents.reaction(A)
- del(src) // Not qdel, because it'll hit other mobs then the floor for runtimes.
- return
-/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato
+/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue
seed = "/obj/item/seeds/bluetomatoseed"
name = "blue-tomato"
desc = "I say blue-mah-to, you say blue-mae-to."
icon_state = "bluetomato"
- dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato
+ dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue
+ splat = /obj/effect/decal/cleanable/oil
+
New(var/loc, var/potency = 10)
..()
if(reagents)
@@ -648,27 +651,40 @@
reagents.add_reagent("lube", 1+round((potency / 5), 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
-/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato/throw_impact(atom/hit_atom)
- ..()
- new/obj/effect/decal/cleanable/oil(src.loc)
- src.visible_message("The [src.name] has been squashed.","You hear a smack.")
- src.reagents.reaction(get_turf(hit_atom))
- for(var/atom/A in get_turf(hit_atom))
- src.reagents.reaction(A)
- del(src) // Not qdel, because it'll hit other mobs then the floor for runtimes.
- return
-
-/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato/Crossed(AM as mob|obj)
+/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/Crossed(AM as mob|obj)
if (istype(AM, /mob/living/carbon))
- var/mob/M = AM
- if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP))
- return
+ var/mob/living/carbon/M = AM
+ var/stun = Clamp(potency / 10, 1, 10)
+ var/weaken = Clamp(potency / 20, 0.5, 5)
+ M.slip(stun, weaken, src)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace
+ seed = "/obj/item/seeds/bluespacetomatoseed"
+ name = "blue-space tomato"
+ desc = "So lubricated, you might slip through space-time."
+ icon_state = "bluespacetomato"
+ origin_tech = "bluespace=3"
+ dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace
+ New(var/loc, var/potency = 20)
+ ..()
+ if(reagents)
+ reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
+ reagents.add_reagent("singulo", 1+round((potency / 5), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace/attack_self(var/mob/user)
+ squish(user)
+ user.drop_item()
+ src.visible_message("[user] squashes the [src.name].","You hear a smack.")
+ qdel(src)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace/squish(atom/squishee)
+ ..()
+ var/teleport_radius = potency/10
+ if(isliving(squishee))
+ new /obj/effect/decal/cleanable/molten_item(squishee.loc) //Leave a pile of goo behind for dramatic effect...
+ do_teleport(squishee, get_turf(squishee), teleport_radius)
- M.stop_pulling()
- M << "\blue You slipped on the [name]!"
- playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
- M.Stun(8)
- M.Weaken(5)
/obj/item/weapon/reagent_containers/food/snacks/grown/wheat
seed = "/obj/item/seeds/wheatseed"
@@ -955,20 +971,6 @@
spawn(5) //Workaround to keep harvesting from working weirdly.
qdel(src)
-/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato
- seed = "/obj/item/seeds/bluespacetomatoseed"
- name = "blue-space tomato"
- desc = "So lubricated, you might slip through space-time."
- icon_state = "bluespacetomato"
- origin_tech = "bluespace=3"
- dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato
- New(var/loc, var/potency = 20)
- ..()
- if(reagents)
- reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
- reagents.add_reagent("singulo", 1+round((potency / 5), 1))
- bitesize = 1+round(reagents.total_volume / 2, 1)
-
/obj/item/weapon/reagent_containers/food/snacks/grown/gatfruit
seed = "/obj/item/seeds/gatfruit"
name = "gatfruit"
diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm
index 314eae82c37..77a960e92c5 100644
--- a/code/modules/hydroponics/growninedible.dm
+++ b/code/modules/hydroponics/growninedible.dm
@@ -183,9 +183,18 @@
throwforce = 0
throw_speed = 3
throw_range = 7
+
/obj/item/weapon/grown/bananapeel/New(var/loc, var/potency = 10)
..()
+/obj/item/weapon/grown/bananapeel/Crossed(AM as mob|obj)
+ if (istype(AM, /mob/living/carbon))
+ var/mob/living/carbon/M = AM
+ var/stun = Clamp(potency / 10, 1, 10)
+ var/weaken = Clamp(potency / 20, 0.5, 5)
+ M.slip(stun, weaken, src)
+
+
/obj/item/weapon/grown/corncob
name = "corn cob"
desc = "A reminder of meals gone by."
diff --git a/code/modules/hydroponics/hydroitemcode.dm b/code/modules/hydroponics/hydroitemcode.dm
index dcb3c2346c2..ad753622869 100644
--- a/code/modules/hydroponics/hydroitemcode.dm
+++ b/code/modules/hydroponics/hydroitemcode.dm
@@ -102,56 +102,4 @@
new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc)
usr.unEquip(src)
qdel(src)
- return
-
-//Bluespace Tomatoes
-/obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato/throw_impact(atom/hit_atom)
- ..()
- var/mob/M = usr
- var/outer_teleport_radius = potency/10 //Plant potency determines radius of teleport.
- var/inner_teleport_radius = potency/15
- var/list/turfs = new/list()
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- if(inner_teleport_radius < 1) //Wasn't potent enough, it just splats.
- new/obj/effect/decal/cleanable/oil(src.loc)
- src.visible_message("The [src.name] has been squashed.","You hear a smack.")
- usr.unEquip(src)
- qdel(src)
- return
- for(var/turf/T in orange(M,outer_teleport_radius))
- if(T in orange(M,inner_teleport_radius)) continue
- if(istype(T,/turf/space)) continue
- if(T.density) continue
- if(T.x>world.maxx-outer_teleport_radius || T.xworld.maxy-outer_teleport_radius || T.yThe [src.name] has been squashed, causing a distortion in space-time.","You hear a splat and a crackle.")
- qdel(src)
- return
\ No newline at end of file
+ return
\ No newline at end of file
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 5d7290fedf7..07df219516c 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -221,7 +221,7 @@
icon_state = "seed-bloodtomato"
species = "bloodtomato"
plantname = "Blood-Tomato Plants"
- product = /obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato
+ product = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blood
lifespan = 25
endurance = 20
maturation = 8
@@ -255,7 +255,7 @@
icon_state = "seed-killertomato"
species = "killertomato"
plantname = "Killer-Tomato Plants"
- product = /obj/item/weapon/reagent_containers/food/snacks/grown/killertomato
+ product = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer
lifespan = 25
endurance = 15
maturation = 8
@@ -273,7 +273,7 @@
icon_state = "seed-bluetomato"
species = "bluetomato"
plantname = "Blue-Tomato Plants"
- product = /obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato
+ product = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue
lifespan = 25
endurance = 15
maturation = 8
@@ -291,7 +291,7 @@
icon_state = "seed-bluespacetomato"
species = "bluespacetomato"
plantname = "Blue-Space Tomato Plants"
- product = /obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato
+ product = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blue/bluespace
lifespan = 25
endurance = 15
maturation = 8
diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm
index bb0692ae4a1..294b96521f2 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -927,14 +927,6 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75
G << "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost."
qdel(src)
-
- proc/announce_to_ghosts()
- for(var/mob/dead/observer/G in player_list)
- if(G.client)
- var/area/A = get_area(src)
- if(A)
- G << "Golem rune created in [A.name]."
-
/mob/living/carbon/slime/getTrail()
return null
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 16aabeec14c..a4bf9852443 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -423,6 +423,13 @@ proc/is_special_character(mob/M) // returns 1 for special characters and 2 for h
/mob/proc/reagent_check(var/datum/reagent/R) // utilized in the species code
return 1
+/proc/notify_ghosts(var/message, var/ghost_sound = null) //Easy notification of ghosts.
+ for(var/mob/dead/observer/O in player_list)
+ if(O.client)
+ O << "[message]"
+ if(ghost_sound)
+ O << sound(ghost_sound)
+
/proc/item_heal_robotic(var/mob/living/carbon/human/H, var/mob/user, var/brute, var/burn)
var/obj/item/organ/limb/affecting = H.get_organ(check_zone(user.zone_sel.selecting))
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 9016f1278a4..6de25dc697e 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -490,6 +490,11 @@
..()
world << "NAR-SIE HAS RISEN"
world << pick(sound('sound/hallucinations/im_here1.ogg'), sound('sound/hallucinations/im_here2.ogg'))
+
+ var/area/A = get_area(src)
+ if(A)
+ notify_ghosts("Nar-Sie has risen in \the [A.name]. Reach out to the Geometer to be given a new shell for your soul.")
+
if(emergency_shuttle)
emergency_shuttle.incall(0.3) // Cannot recall
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index aecd81c02b8..fb48e4f4bde 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -1419,7 +1419,7 @@ datum/chemical_reaction/pestkiller
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
var/obj/effect/golemrune/Z = new /obj/effect/golemrune
Z.loc = get_turf(holder.my_atom)
- Z.announce_to_ghosts()
+ notify_ghosts("Golem rune created in [Z.name]", 'sound/effects/ghost2.ogg')
//Bluespace
diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm
index 69fe141385b..db0b10a1046 100644
--- a/interface/stylesheet.dm
+++ b/interface/stylesheet.dm
@@ -43,7 +43,6 @@ h1.alert, h2.alert {color: #000000;}
.selecteddna {color: #FFFFFF; background-color: #001B1B}
.attack {color: #ff0000;}
-.moderate {color: #CC0000;}
.disarm {color: #990000;}
.passive {color: #660000;}
@@ -59,6 +58,7 @@ h1.alert, h2.alert {color: #000000;}
.alien {color: #543354;}
.newscaster {color: #800000;}
+.ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;}
.interface {color: #330033;}
diff --git a/sound/effects/genetics.ogg b/sound/effects/genetics.ogg
new file mode 100644
index 00000000000..9b28be68b53
Binary files /dev/null and b/sound/effects/genetics.ogg differ
diff --git a/sound/effects/magic.ogg b/sound/effects/magic.ogg
new file mode 100644
index 00000000000..c107743d805
Binary files /dev/null and b/sound/effects/magic.ogg differ
diff --git a/sound/effects/ninja_greeting.ogg b/sound/effects/ninja_greeting.ogg
new file mode 100644
index 00000000000..e8f17bdea6c
Binary files /dev/null and b/sound/effects/ninja_greeting.ogg differ