diff --git a/code/game/objects/items/food/burgers.dm b/code/game/objects/items/food/burgers.dm
index adbedb934a1..c6d64b17b4c 100644
--- a/code/game/objects/items/food/burgers.dm
+++ b/code/game/objects/items/food/burgers.dm
@@ -164,7 +164,7 @@
switch(paranormal_activity)
if(97 to 100)
audible_message("[src] rattles a length of chain.")
- playsound(loc,'sound/spookoween/chain_rattling.ogg', 300, TRUE)
+ playsound(loc,'sound/misc/chain_rattling.ogg', 300, TRUE)
if(91 to 96)
say(pick("OoOoOoo.", "OoooOOooOoo!!"))
if(84 to 90)
diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm
index 1d2c624c0d9..b4edf7173f9 100644
--- a/code/modules/antagonists/cult/runes.dm
+++ b/code/modules/antagonists/cult/runes.dm
@@ -957,7 +957,7 @@ structure_check() searches for nearby cultist structures required for the invoca
add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/noncult, "human_apoc", A, NONE)
addtimer(CALLBACK(M,/atom/.proc/remove_alt_appearance,"human_apoc",TRUE), duration)
images += A
- SEND_SOUND(M, pick(sound('sound/ambience/antag/bloodcult.ogg'),sound('sound/spookoween/ghost_whisper.ogg'),sound('sound/spookoween/ghosty_wind.ogg')))
+ SEND_SOUND(M, pick(sound('sound/ambience/antag/bloodcult.ogg'),sound('sound/voice/ghost_whisper.ogg'),sound('sound/misc/ghosty_wind.ogg')))
else
var/construct = pick("floater","artificer","behemoth")
var/image/B = image('icons/mob/mob.dmi',M,construct, ABOVE_MOB_LAYER)
diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm
index 1c9e73527ac..d9dabfe9e85 100644
--- a/code/modules/antagonists/slaughter/slaughter.dm
+++ b/code/modules/antagonists/slaughter/slaughter.dm
@@ -194,7 +194,7 @@
attack_sound = 'sound/items/bikehorn.ogg'
attack_vis_effect = null
- feast_sound = 'sound/spookoween/scary_horn2.ogg'
+ feast_sound = 'sound/misc/scary_horn.ogg'
deathsound = 'sound/misc/sadtrombone.ogg'
icon_state = "bowmon"
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
index 1bc1b40bfef..d479807a337 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
@@ -467,6 +467,28 @@
result = /obj/item/food/cookie/sugar
subcategory = CAT_PASTRY
+/datum/crafting_recipe/food/spookyskull
+ time = 15
+ name = "Skull cookie"
+ reqs = list(
+ /obj/item/food/pastrybase = 1,
+ /datum/reagent/consumable/sugar = 5,
+ /datum/reagent/consumable/milk = 5
+ )
+ result = /obj/item/food/cookie/sugar/spookyskull
+ subcategory = CAT_PASTRY
+
+/datum/crafting_recipe/food/spookycoffin
+ time = 15
+ name = "Coffin cookie"
+ reqs = list(
+ /obj/item/food/pastrybase = 1,
+ /datum/reagent/consumable/sugar = 5,
+ /datum/reagent/consumable/coffee = 5
+ )
+ result = /obj/item/food/cookie/sugar/spookycoffin
+ subcategory = CAT_PASTRY
+
/datum/crafting_recipe/food/fortunecookie
time = 15
name = "Fortune cookie"
diff --git a/code/modules/holiday/halloween.dm b/code/modules/holiday/halloween.dm
deleted file mode 100644
index 7ab589394d1..00000000000
--- a/code/modules/holiday/halloween.dm
+++ /dev/null
@@ -1,276 +0,0 @@
-///////////////////////////////////////
-///////////HALLOWEEN CONTENT///////////
-///////////////////////////////////////
-
-
-//spooky recipes
-
-/datum/recipe/sugarcookie/spookyskull
- reagents_list = list(/datum/reagent/consumable/flour = 5, /datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/milk = 5)
- items = list(
- /obj/item/food/egg,
- )
- result = /obj/item/food/cookie/sugar/spookyskull
-
-/datum/recipe/sugarcookie/spookycoffin
- reagents_list = list(/datum/reagent/consumable/flour = 5, /datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/coffee = 5)
- items = list(
- /obj/item/food/egg,
- )
- result = /obj/item/food/cookie/sugar/spookycoffin
-
-//////////////////////////////
-//Spookoween trapped closets//
-//////////////////////////////
-
-#define SPOOKY_SKELETON 1
-#define ANGRY_FAITHLESS 2
-#define SCARY_BATS 3
-#define INSANE_CLOWN 4
-#define HOWLING_GHOST 5
-
-//Spookoween variables
-/obj/structure/closet
- var/trapped = 0
- var/mob/trapped_mob
-
-/obj/structure/closet/Initialize(mapload)
- . = ..()
- if(prob(30))
- set_spooky_trap()
-
-/obj/structure/closet/dump_contents()
- ..()
- trigger_spooky_trap()
-
-/obj/structure/closet/proc/set_spooky_trap()
- if(prob(0.1))
- trapped = INSANE_CLOWN
- return
- if(prob(1))
- trapped = ANGRY_FAITHLESS
- return
- if(prob(15))
- trapped = SCARY_BATS
- return
- if(prob(20))
- trapped = HOWLING_GHOST
- return
- else
- var/mob/living/carbon/human/H = new(loc)
- H.makeSkeleton()
- H.health = 1e5
- insert(H)
- trapped_mob = H
- trapped = SPOOKY_SKELETON
- return
-
-/obj/structure/closet/proc/trigger_spooky_trap()
- if(!trapped)
- return
-
- else if(trapped == SPOOKY_SKELETON)
- visible_message(span_userdanger("BOO!"))
- playsound(loc, 'sound/spookoween/girlscream.ogg', 300, TRUE)
- trapped = 0
- QDEL_IN(trapped_mob, 90)
-
- else if(trapped == HOWLING_GHOST)
- visible_message(span_userdanger("[pick("OooOOooooOOOoOoOOooooOOOOO", "BooOOooOooooOOOO", "BOO!", "WoOOoOoooOooo")]"))
- playsound(loc, 'sound/spookoween/ghosty_wind.ogg', 300, TRUE)
- new /mob/living/simple_animal/shade/howling_ghost(loc)
- trapped = 0
-
- else if(trapped == SCARY_BATS)
- visible_message(span_userdanger("Protect your hair!"))
- playsound(loc, 'sound/spookoween/bats.ogg', 300, TRUE)
- var/number = rand(1,3)
- for(var/i=0,i < number,i++)
- new /mob/living/simple_animal/hostile/retaliate/bat(loc)
- trapped = 0
-
- else if(trapped == ANGRY_FAITHLESS)
- visible_message(span_userdanger("The closet bursts open!"))
- visible_message(span_userdanger("THIS BEING RADIATES PURE EVIL! YOU BETTER RUN!!!"))
- playsound(loc, 'sound/hallucinations/wail.ogg', 300, TRUE)
- var/mob/living/simple_animal/hostile/faithless/F = new(loc)
- trapped = 0
- QDEL_IN(F, 120)
-
- else if(trapped == INSANE_CLOWN)
- visible_message(span_userdanger("..."))
- playsound(loc, 'sound/spookoween/scary_clown_appear.ogg', 300, TRUE)
- spawn_atom_to_turf(/mob/living/simple_animal/hostile/clown_insane, loc, 1, FALSE)
- trapped = 0
-
-//don't spawn in crates
-/obj/structure/closet/crate/trigger_spooky_trap()
- return
-
-/obj/structure/closet/crate/set_spooky_trap()
- return
-
-
-////////////////////
-//Spookoween Ghost//
-////////////////////
-
-/mob/living/simple_animal/shade/howling_ghost
- name = "ghost"
- real_name = "ghost"
- icon = 'icons/mob/mob.dmi'
- maxHealth = 1e6
- health = 1e6
- speak_emote = list("howls")
- emote_hear = list("wails","screeches")
- density = FALSE
- anchored = TRUE
- incorporeal_move = 1
- layer = 4
- var/timer = 0
-
-/mob/living/simple_animal/shade/howling_ghost/Initialize(mapload)
- . = ..()
- icon_state = pick("ghost","ghostian","ghostian2","ghostking","ghost1","ghost2")
- icon_living = icon_state
- status_flags |= GODMODE
- timer = rand(1,15)
-
-/mob/living/simple_animal/shade/howling_ghost/Life()
- ..()
- timer--
- if(prob(20))
- roam()
- if(timer == 0)
- spooky_ghosty()
- timer = rand(1,15)
-
-/mob/living/simple_animal/shade/howling_ghost/proc/EtherealMove(direction)
- forceMove(get_step(src, direction))
- setDir(direction)
-
-/mob/living/simple_animal/shade/howling_ghost/proc/roam()
- if(prob(80))
- var/direction = pick(NORTH,SOUTH,EAST,WEST,NORTHEAST,NORTHWEST,SOUTHEAST,SOUTHWEST)
- EtherealMove(direction)
-
-/mob/living/simple_animal/shade/howling_ghost/proc/spooky_ghosty()
- if(prob(20)) //haunt
- playsound(loc, pick('sound/spookoween/ghosty_wind.ogg','sound/spookoween/ghost_whisper.ogg','sound/spookoween/chain_rattling.ogg'), 300, TRUE)
- if(prob(10)) //flickers
- var/obj/machinery/light/L = locate(/obj/machinery/light) in view(5, src)
- if(L)
- L.flicker()
- if(prob(5)) //poltergeist
- var/obj/item/I = locate(/obj/item) in view(3, src)
- if(I)
- var/direction = pick(NORTH,SOUTH,EAST,WEST,NORTHEAST,NORTHWEST,SOUTHEAST,SOUTHWEST)
- step(I,direction)
- return
-
-/mob/living/simple_animal/shade/howling_ghost/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
- . = 0
-
-///////////////////////////
-//Spookoween Insane Clown//
-///////////////////////////
-
-///Insane clown mob. Basically a clown that haunts you.
-/mob/living/simple_animal/hostile/clown_insane
- name = "insane clown"
- desc = "Some clowns do not manage to be accepted, and go insane. This is one of them."
- icon = 'icons/mob/clown_mobs.dmi'
- icon_state = "scary_clown"
- icon_living = "scary_clown"
- icon_dead = "scary_clown"
- icon_gib = "scary_clown"
- speak = list("...", ". . .")
- maxHealth = INFINITY
- health = INFINITY
- emote_see = list("silently stares")
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- unsuitable_atmos_damage = 0
- minbodytemp = 0
- maxbodytemp = INFINITY
- var/timer
-
-/mob/living/simple_animal/hostile/clown_insane/Initialize(mapload)
- . = ..()
- status_flags |= GODMODE //Slightly easier to maintain.
-
-/mob/living/simple_animal/hostile/clown_insane/Destroy()
- timer = null
- return ..()
-
-/mob/living/simple_animal/hostile/clown_insane/ex_act()
- return
-
-///Adds a timer to call stalk() on Aggro
-/mob/living/simple_animal/hostile/clown_insane/Aggro()
- . = ..()
- timer = addtimer(CALLBACK(src, .proc/stalk), 30, TIMER_STOPPABLE|TIMER_UNIQUE)
-
-/mob/living/simple_animal/hostile/clown_insane/LoseAggro()
- . = ..()
- if(timer)
- deltimer(timer)
- timer = null
-
-///Plays scary noises and adds some timers.
-/mob/living/simple_animal/hostile/clown_insane/proc/stalk()
- var/mob/living/M = target
- if(!istype(M))
- LoseAggro()
- return
- if(M.stat == DEAD)
- playsound(M.loc, 'sound/spookoween/insane_low_laugh.ogg', 100, TRUE)
- qdel(src)
- return
- playsound(M, pick('sound/spookoween/scary_horn.ogg','sound/spookoween/scary_horn2.ogg', 'sound/spookoween/scary_horn3.ogg'), 100, TRUE)
- timer = addtimer(CALLBACK(src, .proc/stalk), 30, TIMER_STOPPABLE|TIMER_UNIQUE)
- addtimer(CALLBACK(src, .proc/teleport_to_target), 12, TIMER_STOPPABLE|TIMER_UNIQUE)
-
-///Does what's in the name. Teleports to target.loc. Called from a timer.
-/mob/living/simple_animal/hostile/clown_insane/proc/teleport_to_target()
- if(target && isturf(target.loc)) //Hiding in lockers works to get rid of this thing.
- forceMove(target.loc)
-
-/mob/living/simple_animal/hostile/clown_insane/MoveToTarget()
- return
-
-/mob/living/simple_animal/hostile/clown_insane/AttackingTarget()
- return
-
-/mob/living/simple_animal/hostile/clown_insane/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
- . = 0
- if(prob(5))
- playsound(loc, 'sound/spookoween/insane_low_laugh.ogg', 300, TRUE)
-
-/mob/living/simple_animal/hostile/clown_insane/attackby(obj/item/O, mob/user)
- if(istype(O, /obj/item/nullrod))
- if(prob(5))
- visible_message(span_notice("[src] finally found the peace it deserves. You hear honks echoing off into the distance."))
- playsound(loc, 'sound/spookoween/insane_low_laugh.ogg', 300, TRUE)
- qdel(src)
- else
- visible_message(span_danger("[src] seems to be resisting the effect!"))
- return
- return ..()
-
-/////////////////////////
-// Spooky Uplink Items //
-/////////////////////////
-
-/datum/uplink_item/dangerous/crossbow/candy
- name = "Candy Corn Crossbow"
- desc = "A standard miniature energy crossbow that uses a hard-light projector to transform bolts into candy corn. Happy Halloween!"
- category = "Holiday"
- item = /obj/item/gun/energy/kinetic_accelerator/crossbow/halloween
- surplus = 0
-
-/datum/uplink_item/device_tools/emag/hack_o_lantern
- name = "Hack-o'-Lantern"
- desc = "An emag fitted to support the Halloween season. Candle not included."
- category = "Holiday"
- item = /obj/item/card/emag/halloween
- surplus = 0
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
index 1317cff6804..301c06a21e7 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm
@@ -134,7 +134,7 @@
/mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/rage()
ranged_cooldown = world.time + 100
- playsound(src,'sound/spookoween/insane_low_laugh.ogg', 200, 1)
+ playsound(src,'sound/voice/insane_low_laugh.ogg', 200, 1)
visible_message(span_warning("[src] starts picking up speed!"))
color = "#FF0000"
set_varspeed(0)
diff --git a/code/modules/spells/spell_types/voice_of_god.dm b/code/modules/spells/spell_types/voice_of_god.dm
index 0fc89e3f3fc..58c76b47753 100644
--- a/code/modules/spells/spell_types/voice_of_god.dm
+++ b/code/modules/spells/spell_types/voice_of_god.dm
@@ -42,4 +42,4 @@
power_mod = 0.1
cooldown_mod = 0.5
spans = list("clown")
- speech_sound = 'sound/spookoween/scary_horn2.ogg'
+ speech_sound = 'sound/misc/scary_horn.ogg'
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index 27d5df84bbf..2616d873bbb 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -612,6 +612,12 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
surplus = 50
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)
+/datum/uplink_item/stealthy_weapons/crossbow/New()
+ . = ..()
+ if(SSevents.holidays?[HALLOWEEN])
+ item = /obj/item/gun/energy/kinetic_accelerator/crossbow/halloween
+ desc += " Happy Halloween!"
+
/datum/uplink_item/stealthy_weapons/origami_kit
name = "Boxed Origami Kit"
desc = "This box contains a guide on how to craft masterful works of origami, allowing you to transform normal pieces of paper into \
@@ -1393,6 +1399,12 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
item = /obj/item/card/emag
cost = 4
+/datum/uplink_item/device_tools/emag/New()
+ . = ..()
+ if(SSevents.holidays?[HALLOWEEN])
+ item = /obj/item/card/emag/halloween
+ desc += " This one is fitted to support the Halloween season. Candle not included."
+
/datum/uplink_item/device_tools/syndie_jaws_of_life
name = "Syndicate Jaws of Life"
desc = "Based on a Nanotrasen model, this powerful tool can be used as both a crowbar and a pair of wirecutters. \
diff --git a/sound/spookoween/chain_rattling.ogg b/sound/misc/chain_rattling.ogg
similarity index 100%
rename from sound/spookoween/chain_rattling.ogg
rename to sound/misc/chain_rattling.ogg
diff --git a/sound/spookoween/ghosty_wind.ogg b/sound/misc/ghosty_wind.ogg
similarity index 100%
rename from sound/spookoween/ghosty_wind.ogg
rename to sound/misc/ghosty_wind.ogg
diff --git a/sound/spookoween/scary_horn2.ogg b/sound/misc/scary_horn.ogg
similarity index 100%
rename from sound/spookoween/scary_horn2.ogg
rename to sound/misc/scary_horn.ogg
diff --git a/sound/spookoween/bats.ogg b/sound/spookoween/bats.ogg
deleted file mode 100644
index fb428debcb3..00000000000
Binary files a/sound/spookoween/bats.ogg and /dev/null differ
diff --git a/sound/spookoween/girlscream.ogg b/sound/spookoween/girlscream.ogg
deleted file mode 100644
index 8ded518f47f..00000000000
Binary files a/sound/spookoween/girlscream.ogg and /dev/null differ
diff --git a/sound/spookoween/scary_clown_appear.ogg b/sound/spookoween/scary_clown_appear.ogg
deleted file mode 100644
index 05ab18f70b0..00000000000
Binary files a/sound/spookoween/scary_clown_appear.ogg and /dev/null differ
diff --git a/sound/spookoween/scary_horn.ogg b/sound/spookoween/scary_horn.ogg
deleted file mode 100644
index a0b05821bb2..00000000000
Binary files a/sound/spookoween/scary_horn.ogg and /dev/null differ
diff --git a/sound/spookoween/scary_horn3.ogg b/sound/spookoween/scary_horn3.ogg
deleted file mode 100644
index 0aaefe1583a..00000000000
Binary files a/sound/spookoween/scary_horn3.ogg and /dev/null differ
diff --git a/sound/spookoween/ghost_whisper.ogg b/sound/voice/ghost_whisper.ogg
similarity index 100%
rename from sound/spookoween/ghost_whisper.ogg
rename to sound/voice/ghost_whisper.ogg
diff --git a/sound/spookoween/insane_low_laugh.ogg b/sound/voice/insane_low_laugh.ogg
similarity index 100%
rename from sound/spookoween/insane_low_laugh.ogg
rename to sound/voice/insane_low_laugh.ogg