diff --git a/beestation/code/modules/admin/verbs/spawnfloorcluwne.dm b/beestation/code/modules/admin/verbs/spawnfloorcluwne.dm
deleted file mode 100644
index 92f574fb49..0000000000
--- a/beestation/code/modules/admin/verbs/spawnfloorcluwne.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-/client/proc/spawn_floor_cluwne()
- set category = "Fun"
- set name = "Unleash Floor Cluwne"
- set desc = "Pick a specific target or just let it select randomly and spawn the floor cluwne mob on the station. Be warned: spawning more than one may cause issues!"
- var/target
-
- if(!check_rights(R_FUN))
- return
-
- var/turf/T = get_turf(usr)
- target = input("Any specific target in mind? Please note only live, non cluwned, human targets are valid.", "Target", target) as null|anything in GLOB.player_list
- if(target && ishuman(target))
- var/mob/living/carbon/human/H = target
- var/mob/living/simple_animal/hostile/floor_cluwne/FC = new /mob/living/simple_animal/hostile/floor_cluwne(T)
- FC.Acquire_Victim(H)
- else
- new /mob/living/simple_animal/hostile/floor_cluwne(T)
- log_admin("[key_name(usr)] spawned floor cluwne.")
- message_admins("[key_name(usr)] spawned floor cluwne.")
\ No newline at end of file
diff --git a/beestation/code/modules/clothing/mask.dm b/beestation/code/modules/clothing/mask.dm
deleted file mode 100644
index c0464eade6..0000000000
--- a/beestation/code/modules/clothing/mask.dm
+++ /dev/null
@@ -1,104 +0,0 @@
-/obj/item/clothing/mask/bee/cluwne
- name = "clown wig and mask"
- desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
- flags_cover = MASKCOVERSEYES
- icon_state = "cluwne"
- item_state = "cluwne"
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
- flags_1 = MASKINTERNALS
- item_flags = ABSTRACT | DROPDEL
- flags_inv = HIDEEARS|HIDEEYES
- var/voicechange = TRUE
- var/last_sound = 0
- var/delay = 15
-
-/obj/item/clothing/mask/bee/cluwne/Initialize()
- .=..()
- add_trait(TRAIT_NODROP, CURSED_ITEM_TRAIT)
-
-/obj/item/clothing/mask/bee/cluwne/proc/play_laugh1()
- if(world.time - delay > last_sound)
- playsound (src, 'beestation/sound/voice/cluwnelaugh1.ogg', 30, 1)
- last_sound = world.time
-
-/obj/item/clothing/mask/bee/cluwne/proc/play_laugh2()
- if(world.time - delay > last_sound)
- playsound (src, 'beestation/sound/voice/cluwnelaugh2.ogg', 30, 1)
- last_sound = world.time
-
-/obj/item/clothing/mask/bee/cluwne/proc/play_laugh3()
- if(world.time - delay > last_sound)
- playsound (src, 'beestation/sound/voice/cluwnelaugh3.ogg', 30, 1)
- last_sound = world.time
-
-/obj/item/clothing/mask/bee/cluwne/equipped(mob/user, slot) //when you put it on
- var/mob/living/carbon/C = user
- if((C.wear_mask == src) && (voicechange))
- play_laugh1()
- return ..()
-
-/obj/item/clothing/mask/bee/cluwne/speechModification(message) //whenever you speak
- if(voicechange)
- if(prob(5)) //the brain isnt fully gone yet...
- message = pick("HELP ME!!","PLEASE KILL ME!!","I WANT TO DIE!!", "END MY SUFFERING", "I CANT TAKE THIS ANYMORE!!" ,"SOMEBODY STOP ME!!")
- play_laugh2()
- if(prob(3))
- message = pick("HOOOOINKKKKKKK!!", "HOINK HOINK HOINK HOINK!!","HOINK HOINK!!","HOOOOOOIIINKKKK!!") //but most of the time they cant speak,
- play_laugh3()
- else
- message = pick("HEEEENKKKKKK!!", "HONK HONK HONK HONK!!","HONK HONK!!","HOOOOOONKKKK!!") //More sounds,
- play_laugh1()
- return message
-
-/obj/item/clothing/mask/bee/cluwne/equipped(mob/user, slot)
- if(!ishuman(user))
- return
- if(slot == SLOT_WEAR_MASK)
- var/mob/living/carbon/human/H = user
- H.dna.add_mutation(CLUWNEMUT)
- return
-
-/obj/item/clothing/mask/bee/cluwne/happy_cluwne
- name = "Happy Cluwne Mask"
- desc = "The mask of a poor cluwne that has been scrubbed of its curse by the Nanotrasen supernatural machinations division. Guaranteed to be %99 curse free and %99.9 not haunted. "
- flags_1 = MASKINTERNALS
- item_flags = ABSTRACT
- var/can_cluwne = FALSE
- var/is_cursed = FALSE //i don't care that this is *slightly* memory wasteful, it's just one more byte and it's not like some madman is going to spawn thousands of these
- var/is_very_cursed = FALSE
-
-/obj/item/clothing/mask/bee/cluwne/happy_cluwne/Initialize()
- .=..()
- if(prob(1)) //this function pre-determines the logic of the cluwne mask. applying and reapplying the mask does not alter or change anything
- is_cursed = TRUE
- is_very_cursed = FALSE
- else if(prob(0.1))
- is_cursed = FALSE
- is_very_cursed = TRUE
-
-/obj/item/clothing/mask/bee/cluwne/happy_cluwne/attack_self(mob/user)
- voicechange = !voicechange
- to_chat(user, "You turn the voice box [voicechange ? "on" : "off"]!")
- if(voicechange)
- play_laugh1()
-
-/obj/item/clothing/mask/bee/cluwne/happy_cluwne/equipped(mob/user, slot)
- if(!ishuman(user))
- return
- var/mob/living/carbon/human/H = user
- if(slot == SLOT_WEAR_MASK)
- if(is_cursed && can_cluwne) //logic predetermined
- log_admin("[key_name(H)] was made into a cluwne by [src]")
- message_admins("[key_name(H)] got cluwned by [src]")
- to_chat(H, "The masks straps suddenly tighten to your face and your thoughts are erased by a horrible green light!")
- H.dropItemToGround(src)
- H.cluwneify()
- qdel(src)
- else if(is_very_cursed && can_cluwne)
- var/turf/T = get_turf(src)
- var/mob/living/simple_animal/hostile/floor_cluwne/S = new(T)
- S.Acquire_Victim(user)
- log_admin("[key_name(user)] summoned a floor cluwne using the [src]")
- message_admins("[key_name(user)] summoned a floor cluwne using the [src]")
- to_chat(H, "The mask suddenly slips off your face and... slides under the floor?")
- to_chat(H, "...dneirf uoy ot gnoleb ton seod tahT")
\ No newline at end of file
diff --git a/beestation/code/modules/clothing/under.dm b/beestation/code/modules/clothing/under.dm
deleted file mode 100644
index 4e41b2ddad..0000000000
--- a/beestation/code/modules/clothing/under.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-/obj/item/clothing/under/bee/cluwne
- name = "clown suit"
- desc = "'HONK!'"
- icon_state = "cluwne"
- item_state = "cluwne"
- item_color = "cluwne"
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
- item_flags = DROPDEL
- can_adjust = 0
-
-/obj/item/clothing/under/bee/cluwne/Initialize()
- .=..()
- add_trait(TRAIT_NODROP, CURSED_ITEM_TRAIT)
-
-/obj/item/clothing/under/bee/cluwne/equipped(mob/living/carbon/user, slot)
- if(!ishuman(user))
- return
- if(slot == SLOT_W_UNIFORM)
- var/mob/living/carbon/human/H = user
- H.dna.add_mutation(CLUWNEMUT)
- return ..()
\ No newline at end of file
diff --git a/beestation/icons/mob/actions.dmi b/beestation/icons/mob/actions.dmi
deleted file mode 100644
index 95f5ec7d29..0000000000
Binary files a/beestation/icons/mob/actions.dmi and /dev/null differ
diff --git a/beestation/icons/obj/clothing/masks.dmi b/beestation/icons/obj/clothing/masks.dmi
deleted file mode 100644
index dcc3d2a4ea..0000000000
Binary files a/beestation/icons/obj/clothing/masks.dmi and /dev/null differ
diff --git a/beestation/icons/turf/floors.dmi b/beestation/icons/turf/floors.dmi
deleted file mode 100644
index 076ee749a1..0000000000
Binary files a/beestation/icons/turf/floors.dmi and /dev/null differ
diff --git a/beestation/code/datums/mutations.dm b/code/datums/mutations/cluwne.dm
similarity index 69%
rename from beestation/code/datums/mutations.dm
rename to code/datums/mutations/cluwne.dm
index 3ac942aa80..4bd555f8fd 100644
--- a/beestation/code/datums/mutations.dm
+++ b/code/datums/mutations/cluwne.dm
@@ -10,29 +10,29 @@
return
owner.dna.add_mutation(CLOWNMUT)
owner.dna.add_mutation(EPILEPSY)
- owner.setBrainLoss(200)
+ owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 200, 200)
var/mob/living/carbon/human/H = owner
- if(!istype(H.wear_mask, /obj/item/clothing/mask/bee/cluwne))
- if(!H.doUnEquip(H.wear_mask))
+ if(!istype(H.wear_mask, /obj/item/clothing/mask/gas/cluwne))
+ if(!H.dropItemToGround(H.wear_mask))
qdel(H.wear_mask)
- H.equip_to_slot_or_del(new /obj/item/clothing/mask/bee/cluwne(H), SLOT_WEAR_MASK)
- if(!istype(H.w_uniform, /obj/item/clothing/under/bee/cluwne))
- if(!H.doUnEquip(H.w_uniform))
+ H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/cluwne(H), SLOT_WEAR_MASK)
+ if(!istype(H.w_uniform, /obj/item/clothing/under/cluwne))
+ if(!H.dropItemToGround(H.w_uniform))
qdel(H.w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/bee/cluwne(H), SLOT_W_UNIFORM)
- if(!istype(H.shoes, /obj/item/clothing/shoes/bee/cluwne))
- if(!H.doUnEquip(H.shoes))
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/cluwne(H), SLOT_W_UNIFORM)
+ if(!istype(H.shoes, /obj/item/clothing/shoes/clown_shoes/cluwne))
+ if(!H.dropItemToGround(H.shoes))
qdel(H.shoes)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/bee/cluwne(H), SLOT_SHOES)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes/cluwne(H), SLOT_SHOES)
owner.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/white(owner), SLOT_GLOVES) // this is purely for cosmetic purposes incase they aren't wearing anything in that slot
owner.equip_to_slot_or_del(new /obj/item/storage/backpack/clown(owner), SLOT_BACK) // ditto
/datum/mutation/human/cluwne/on_life(mob/living/carbon/human/owner)
if((prob(15) && owner.IsUnconscious()))
- owner.setBrainLoss(200) // there I changed it to setBrainLoss
+ owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 200, 200) // there I changed it to setBrainLoss
switch(rand(1, 6))
if(1)
owner.say("HONK")
@@ -54,4 +54,4 @@
regenerate_icons()
visible_message("[src]'s body glows green, the glow dissipating only to leave behind a cluwne formerly known as [src]!", \
"Your brain feels like it's being torn apart, there is only the honkmother now.")
- flash_act()
\ No newline at end of file
+ flash_act()
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index ab3e85434b..89fd7036a2 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -116,10 +116,9 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/show_tip,
/client/proc/smite,
/client/proc/admin_away,
+ /client/proc/spawn_floor_cluwne,
/client/proc/cmd_admin_toggle_fov, //CIT CHANGE - FOV
/client/proc/roll_dices //CIT CHANGE - Adds dice verb
- /client/proc/healall,
- /client/proc/spawn_floor_cluwne
))
GLOBAL_PROTECT(admin_verbs_fun)
GLOBAL_LIST_INIT(admin_verbs_spawn, list(/datum/admins/proc/spawn_atom, /datum/admins/proc/podspawn_atom, /datum/admins/proc/spawn_cargo, /datum/admins/proc/spawn_objasmob, /client/proc/respawn_character))
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 59eee83b35..3fb4f2e73d 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -1691,3 +1691,23 @@ Traitors and the like can also be revived with the previous role mostly intact.
if(!source)
return
REMOVE_TRAIT(D,chosen_trait,source)
+
+/client/proc/spawn_floor_cluwne()
+ set category = "Fun"
+ set name = "Unleash Floor Cluwne"
+ set desc = "Pick a specific target or just let it select randomly and spawn the floor cluwne mob on the station. Be warned: spawning more than one may cause issues!"
+ var/target
+
+ if(!check_rights(R_FUN))
+ return
+
+ var/turf/T = get_turf(usr)
+ target = input("Any specific target in mind? Please note only live, non cluwned, human targets are valid.", "Target", target) as null|anything in GLOB.player_list
+ if(target && ishuman(target))
+ var/mob/living/carbon/human/H = target
+ var/mob/living/simple_animal/hostile/floor_cluwne/FC = new /mob/living/simple_animal/hostile/floor_cluwne(T)
+ FC.Acquire_Victim(H)
+ else
+ new /mob/living/simple_animal/hostile/floor_cluwne(T)
+ log_admin("[key_name(usr)] spawned floor cluwne.")
+ message_admins("[key_name(usr)] spawned floor cluwne.")
diff --git a/code/modules/clothing/masks/cluwne.dm b/code/modules/clothing/masks/cluwne.dm
new file mode 100644
index 0000000000..a1177e2b47
--- /dev/null
+++ b/code/modules/clothing/masks/cluwne.dm
@@ -0,0 +1,106 @@
+/obj/item/clothing/mask/gas/cluwne
+ name = "clown wig and mask"
+ desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
+ flags_cover = MASKCOVERSEYES
+ icon_state = "cluwne"
+ item_state = "cluwne"
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
+ clothing_flags = ALLOWINTERNALS
+ item_flags = ABSTRACT | DROPDEL
+ flags_inv = HIDEEARS|HIDEEYES
+ var/voicechange = TRUE
+ var/last_sound = 0
+ var/delay = 15
+
+/obj/item/clothing/mask/gas/cluwne/Initialize()
+ .=..()
+ ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
+ ADD_TRAIT(src, CURSED_ITEM_TRAIT, CLOTHING_TRAIT)
+
+/obj/item/clothing/mask/gas/cluwne/proc/play_laugh1()
+ if(world.time - delay > last_sound)
+ playsound (src, 'sound/voice/cluwnelaugh1.ogg', 30, 1)
+ last_sound = world.time
+
+/obj/item/clothing/mask/gas/cluwne/proc/play_laugh2()
+ if(world.time - delay > last_sound)
+ playsound (src, 'sound/voice/cluwnelaugh2.ogg', 30, 1)
+ last_sound = world.time
+
+/obj/item/clothing/mask/gas/cluwne/proc/play_laugh3()
+ if(world.time - delay > last_sound)
+ playsound (src, 'sound/voice/cluwnelaugh3.ogg', 30, 1)
+ last_sound = world.time
+
+/obj/item/clothing/mask/gas/cluwne/equipped(mob/user, slot) //when you put it on
+ var/mob/living/carbon/C = user
+ if((C.wear_mask == src) && (voicechange))
+ play_laugh1()
+ return ..()
+
+/obj/item/clothing/mask/gas/cluwne/handle_speech(datum/source, list/speech_args)
+ if(voicechange)
+ if(prob(5)) //the brain isn't fully gone yet...
+ speech_args[SPEECH_MESSAGE] = pick("HELP ME!!","PLEASE KILL ME!!","I WANT TO DIE!!", "END MY SUFFERING", "I CANT TAKE THIS ANYMORE!!" ,"SOMEBODY STOP ME!!")
+ play_laugh2()
+ if(prob(3))
+ speech_args[SPEECH_MESSAGE] = pick("HOOOOINKKKKKKK!!", "HOINK HOINK HOINK HOINK!!","HOINK HOINK!!","HOOOOOOIIINKKKK!!") //but most of the time they cant speak,
+ play_laugh3()
+ else
+ speech_args[SPEECH_MESSAGE] = pick("HEEEENKKKKKK!!", "HONK HONK HONK HONK!!","HONK HONK!!","HOOOOOONKKKK!!") //More sounds,
+ play_laugh1()
+ return SPEECH_MESSAGE
+
+/obj/item/clothing/mask/gas/cluwne/equipped(mob/user, slot)
+ . = ..()
+ if(!ishuman(user))
+ return
+ if(slot == SLOT_WEAR_MASK)
+ var/mob/living/carbon/human/H = user
+ H.dna.add_mutation(CLUWNEMUT)
+ return
+
+/obj/item/clothing/mask/gas/cluwne/happy_cluwne
+ name = "Happy Cluwne Mask"
+ desc = "The mask of a poor cluwne that has been scrubbed of its curse by the Nanotrasen supernatural machinations division. Guaranteed to be %99 curse free and %99.9 not haunted. "
+ item_flags = ABSTRACT
+ var/can_cluwne = FALSE
+ var/is_cursed = FALSE //i don't care that this is *slightly* memory wasteful, it's just one more byte and it's not like some madman is going to spawn thousands of these
+ var/is_very_cursed = FALSE
+
+/obj/item/clothing/mask/gas/cluwne/happy_cluwne/Initialize()
+ .=..()
+ if(prob(1)) //this function pre-determines the logic of the cluwne mask. applying and reapplying the mask does not alter or change anything
+ is_cursed = TRUE
+ is_very_cursed = FALSE
+ else if(prob(0.1))
+ is_cursed = FALSE
+ is_very_cursed = TRUE
+
+/obj/item/clothing/mask/gas/cluwne/happy_cluwne/attack_self(mob/user)
+ voicechange = !voicechange
+ to_chat(user, "You turn the voice box [voicechange ? "on" : "off"]!")
+ if(voicechange)
+ play_laugh1()
+
+/obj/item/clothing/mask/gas/cluwne/happy_cluwne/equipped(mob/user, slot)
+ . = ..()
+ if(!ishuman(user))
+ return
+ var/mob/living/carbon/human/H = user
+ if(slot == SLOT_WEAR_MASK)
+ if(is_cursed && can_cluwne) //logic predetermined
+ log_admin("[key_name(H)] was made into a cluwne by [src]")
+ message_admins("[key_name(H)] got cluwned by [src]")
+ to_chat(H, "The masks straps suddenly tighten to your face and your thoughts are erased by a horrible green light!")
+ H.dropItemToGround(src)
+ H.cluwneify()
+ qdel(src)
+ else if(is_very_cursed && can_cluwne)
+ var/turf/T = get_turf(src)
+ var/mob/living/simple_animal/hostile/floor_cluwne/S = new(T)
+ S.Acquire_Victim(user)
+ log_admin("[key_name(user)] summoned a floor cluwne using the [src]")
+ message_admins("[key_name(user)] summoned a floor cluwne using the [src]")
+ to_chat(H, "The mask suddenly slips off your face and... slides under the floor?")
+ to_chat(H, "...dneirf uoy ot gnoleb ton seod tahT")
diff --git a/beestation/code/modules/clothing/shoes.dm b/code/modules/clothing/shoes/cluwne.dm
similarity index 56%
rename from beestation/code/modules/clothing/shoes.dm
rename to code/modules/clothing/shoes/cluwne.dm
index c0bfb38f8b..fbe1ba624b 100644
--- a/beestation/code/modules/clothing/shoes.dm
+++ b/code/modules/clothing/shoes/cluwne.dm
@@ -1,30 +1,29 @@
-/obj/item/clothing/shoes/bee/cluwne
+/obj/item/clothing/shoes/clown_shoes/cluwne
desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!"
name = "clown shoes"
icon_state = "cluwne"
item_state = "cluwne"
- item_color = "cluwne"
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
item_flags = DROPDEL
- slowdown = SHOES_SLOWDOWN+1
var/footstep = 1
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes/clown
-/obj/item/clothing/shoes/bee/cluwne/Initialize()
+/obj/item/clothing/shoes/clown_shoes/cluwne/Initialize()
.=..()
- add_trait(TRAIT_NODROP, CURSED_ITEM_TRAIT)
+ ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
+ ADD_TRAIT(src, CURSED_ITEM_TRAIT, CLOTHING_TRAIT)
-/obj/item/clothing/shoes/bee/cluwne/step_action()
+/obj/item/clothing/shoes/clown_shoes/cluwne/step_action()
if(footstep > 1)
playsound(src, "clownstep", 50, 1)
footstep = 0
else
footstep++
-/obj/item/clothing/shoes/bee/cluwne/equipped(mob/user, slot)
+/obj/item/clothing/shoes/clown_shoes/cluwne/equipped(mob/user, slot)
+ . = ..()
if(!ishuman(user))
return
if(slot == SLOT_SHOES)
var/mob/living/carbon/human/H = user
H.dna.add_mutation(CLUWNEMUT)
- return
\ No newline at end of file
+ return
diff --git a/code/modules/clothing/under/cluwne.dm b/code/modules/clothing/under/cluwne.dm
new file mode 100644
index 0000000000..5a908c5663
--- /dev/null
+++ b/code/modules/clothing/under/cluwne.dm
@@ -0,0 +1,22 @@
+/obj/item/clothing/under/cluwne
+ name = "clown suit"
+ desc = "'HONK!'"
+ icon_state = "greenclown"
+ item_state = "greenclown"
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
+ item_flags = DROPDEL
+ can_adjust = 0
+ mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
+
+/obj/item/clothing/under/cluwne/Initialize()
+ .=..()
+ ADD_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT)
+ ADD_TRAIT(src, CURSED_ITEM_TRAIT, CLOTHING_TRAIT)
+
+/obj/item/clothing/under/cluwne/equipped(mob/living/carbon/user, slot)
+ if(!ishuman(user))
+ return
+ if(slot == SLOT_W_UNIFORM)
+ var/mob/living/carbon/human/H = user
+ H.dna.add_mutation(CLUWNEMUT)
+ return ..()
diff --git a/beestation/code/modules/events/floorcluwne.dm b/code/modules/events/floorcluwne.dm
similarity index 86%
rename from beestation/code/modules/events/floorcluwne.dm
rename to code/modules/events/floorcluwne.dm
index 1105d2af0f..47ae322a9c 100644
--- a/beestation/code/modules/events/floorcluwne.dm
+++ b/code/modules/events/floorcluwne.dm
@@ -16,7 +16,7 @@
var/turf/T = get_turf(pick(spawn_locs))
var/mob/living/simple_animal/hostile/floor_cluwne/S = new(T)
- playsound(S, 'beestation/sound/misc/bikehorn_creepy.ogg', 50, 1, -1)
+ playsound(S, 'sound/misc/bikehorn_creepy.ogg', 50, 1, -1)
message_admins("A floor cluwne has been spawned at [COORD(T)][ADMIN_JMP(T)]")
log_game("A floor cluwne has been spawned at [COORD(T)]")
- return SUCCESSFUL_SPAWN
\ No newline at end of file
+ return SUCCESSFUL_SPAWN
diff --git a/beestation/code/modules/mob/living/simple_animal/hostile/floor_cluwne.dm b/code/modules/mob/living/simple_animal/hostile/floor_cluwne.dm
similarity index 77%
rename from beestation/code/modules/mob/living/simple_animal/hostile/floor_cluwne.dm
rename to code/modules/mob/living/simple_animal/hostile/floor_cluwne.dm
index 432b14dafd..11a272393f 100644
--- a/beestation/code/modules/mob/living/simple_animal/hostile/floor_cluwne.dm
+++ b/code/modules/mob/living/simple_animal/hostile/floor_cluwne.dm
@@ -9,18 +9,19 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
/mob/living/simple_animal/hostile/floor_cluwne
name = "???"
desc = "...."
- icon = 'beestation/icons/obj/clothing/masks.dmi'
+ icon = 'icons/obj/clothing/masks.dmi'
icon_state = "cluwne"
icon_living = "cluwne"
icon_gib = "clown_gib"
maxHealth = 250
health = 250
speed = -1
- attacktext = "attacks"
+ attack_verb_continuous = "attacks"
+ attack_verb_simple = "attack"
attack_sound = 'sound/items/bikehorn.ogg'
del_on_death = TRUE
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB | LETPASSTHROW | PASSGLASS | PASSBLOB//it's practically a ghost when unmanifested (under the floor)
- loot = list(/obj/item/clothing/mask/bee/cluwne)
+ loot = list(/obj/item/clothing/mask/gas/cluwne)
wander = FALSE
minimum_distance = 2
move_to_delay = 1
@@ -39,6 +40,7 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
var/target_area
var/invalid_area_typecache = list(/area/space, /area/lavaland, /area/centcom, /area/reebe, /area/shuttle/syndicate)
var/eating = FALSE
+ var/dontkill = FALSE //for if we just wanna curse a fucker
var/obj/effect/dummy/floorcluwne_orbit/poi
var/obj/effect/temp_visual/fcluwne_manifest/cluwnehole
move_resist = INFINITY
@@ -49,8 +51,8 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
/mob/living/simple_animal/hostile/floor_cluwne/Initialize()
. = ..()
access_card = new /obj/item/card/id(src)
- access_card.access = get_all_accesses()//THERE IS NO ESCAPE
- access_card.add_trait(TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
+ var/datum/job/captain/C = new /datum/job/captain
+ access_card.access = C.get_access()
invalid_area_typecache = typecacheof(invalid_area_typecache)
Manifest()
if(!current_victim)
@@ -81,7 +83,8 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
do_jitter_animation(1000)
pixel_y = 8
- if(is_type_in_typecache(get_area(src.loc), invalid_area_typecache) || !is_station_level(z))
+ var/area/A = get_area(src.loc)
+ if(is_type_in_typecache(A, invalid_area_typecache) || !is_station_level(z))
var/area = pick(GLOB.teleportlocs)
var/area/tp = GLOB.teleportlocs[area]
forceMove(pick(get_area_turfs(tp.type)))
@@ -93,22 +96,23 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
On_Stage()
if(stage == STAGE_ATTACK)
- playsound(src, 'beestation/sound/misc/cluwne_breathing.ogg', 75, 1)
+ playsound(src, 'sound/misc/cluwne_breathing.ogg', 75, 1)
if(eating)
return
var/turf/T = get_turf(current_victim)
+ A = get_area(T)
if(prob(5))//checks roughly every 20 ticks
- if(current_victim.stat == DEAD || current_victim.dna.check_mutation(CLUWNEMUT) || is_type_in_typecache(get_area(T), invalid_area_typecache) || !is_station_level(current_victim.z))
+ if(current_victim.stat == DEAD || current_victim.dna.check_mutation(CLUWNEMUT) || is_type_in_typecache(A, invalid_area_typecache) || !is_station_level(current_victim.z))
if(!Found_You())
Acquire_Victim()
- if(get_dist(src, current_victim) > 9 && !manifested && !is_type_in_typecache(get_area(T), invalid_area_typecache))//if cluwne gets stuck he just teleports
+ if(get_dist(src, current_victim) > 9 && !manifested && !is_type_in_typecache(A, invalid_area_typecache))//if cluwne gets stuck he just teleports
do_teleport(src, T)
interest++
- if(interest >= switch_stage * 4)
+ if(interest >= switch_stage * 4 && !dontkill)
stage = STAGE_ATTACK
else if(interest >= switch_stage * 2)
@@ -123,7 +127,8 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
..()
/mob/living/simple_animal/hostile/floor_cluwne/Goto(target, delay, minimum_distance)
- if(!manifested && !is_type_in_typecache(get_area(current_victim.loc), invalid_area_typecache) && is_station_level(current_victim.z))
+ var/area/A = get_area(current_victim.loc)
+ if(!manifested && !is_type_in_typecache(A, invalid_area_typecache) && is_station_level(current_victim.z))
walk_to(src, target, minimum_distance, delay)
else
walk_to(src,0)
@@ -145,7 +150,7 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
return
-/mob/living/simple_animal/hostile/floor_cluwne/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0, illusion = 0, stun = TRUE)//prevents runtimes with machine fuckery
+/mob/living/simple_animal/hostile/floor_cluwne/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE)//prevents runtimes with machine fuckery
return FALSE
/mob/living/simple_animal/hostile/floor_cluwne/proc/Found_You()
@@ -160,13 +165,16 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
/mob/living/simple_animal/hostile/floor_cluwne/proc/Acquire_Victim(specific)
for(var/I in GLOB.player_list)//better than a potential recursive loop
var/mob/living/carbon/human/H = pick(GLOB.player_list)//so the check is fair
+ var/area/A
if(specific)
H = specific
- if(H.stat != DEAD && H.has_dna() && !H.dna.check_mutation(CLUWNEMUT) && !is_type_in_typecache(get_area(H.loc), invalid_area_typecache) && is_station_level(H.z))
+ A = get_area(H.loc)
+ if(H.stat != DEAD && H.has_dna() && !H.dna.check_mutation(CLUWNEMUT) && !is_type_in_typecache(A, invalid_area_typecache) && is_station_level(H.z))
return target = current_victim
- if(H && ishuman(H) && H.stat != DEAD && H != current_victim && H.has_dna() && !H.dna.check_mutation(CLUWNEMUT) && !is_type_in_typecache(get_area(H.loc), invalid_area_typecache) && is_station_level(H.z))
+ A = get_area(H.loc)
+ if(H && ishuman(H) && H.stat != DEAD && H != current_victim && H.has_dna() && !H.dna.check_mutation(CLUWNEMUT) && !is_type_in_typecache(A, invalid_area_typecache) && is_station_level(H.z))
current_victim = H
interest = 0
stage = STAGE_HAUNT
@@ -215,10 +223,10 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
H.blur_eyes(1)
if(prob(5))
- H.playsound_local(src,'beestation/sound/voice/cluwnelaugh2_reversed.ogg', 1)
+ H.playsound_local(src,'sound/voice/cluwnelaugh2_reversed.ogg', 1)
if(prob(5))
- H.playsound_local(src,'beestation/sound/misc/bikehorn_creepy.ogg', 5)
+ H.playsound_local(src,'sound/misc/bikehorn_creepy.ogg', 5)
if(prob(3))
var/obj/item/I = locate() in orange(H, 8)
@@ -234,13 +242,13 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
to_chat(H, "The floor shifts underneath you!")
if(prob(5))
- H.playsound_local(src,'beestation/sound/voice/cluwnelaugh2.ogg', 2)
+ H.playsound_local(src,'sound/voice/cluwnelaugh2.ogg', 2)
if(prob(5))
- H.playsound_local(src,'beestation/sound/voice/cluwnelaugh2_reversed.ogg', 2)
+ H.playsound_local(src,'sound/voice/cluwnelaugh2_reversed.ogg', 2)
if(prob(5))
- H.playsound_local(src,'beestation/sound/misc/bikehorn_creepy.ogg', 10)
+ H.playsound_local(src,'sound/misc/bikehorn_creepy.ogg', 10)
to_chat(H, "knoh")
if(prob(5))
@@ -254,18 +262,6 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
Appear()
manifested = FALSE
addtimer(CALLBACK(src, /mob/living/simple_animal/hostile/floor_cluwne/.proc/Manifest), 1)
- if(current_victim.hud_used)//yay skewium
- var/list/screens = list(current_victim.hud_used.plane_masters["[GAME_PLANE]"], current_victim.hud_used.plane_masters["[LIGHTING_PLANE]"])
- var/matrix/skew = matrix()
- var/intensity = 8
- skew.set_skew(rand(-intensity,intensity), rand(-intensity,intensity))
- var/matrix/newmatrix = skew
-
- for(var/whole_screen in screens)
- animate(whole_screen, transform = newmatrix, time = 5, easing = QUAD_EASING, loop = -1)
- animate(transform = -newmatrix, time = 5, easing = QUAD_EASING)
-
- addtimer(CALLBACK(src, /mob/living/simple_animal/hostile/floor_cluwne/.proc/Reset_View, screens), 10)
if(STAGE_TORMENT)
@@ -278,17 +274,17 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
playsound(src,pick('sound/spookoween/scary_horn.ogg', 'sound/spookoween/scary_horn2.ogg', 'sound/spookoween/scary_horn3.ogg'), 30, 1)
if(prob(3))
- playsound(src,'beestation/sound/voice/cluwnelaugh1.ogg', 30, 1)
+ playsound(src,'sound/voice/cluwnelaugh1.ogg', 30, 1)
if(prob(3))
- playsound(src,'beestation/sound/voice/cluwnelaugh2_reversed.ogg', 30, 1)
+ playsound(src,'sound/voice/cluwnelaugh2_reversed.ogg', 30, 1)
if(prob(5))
- playsound(src,'beestation/sound/misc/bikehorn_creepy.ogg', 30, 1)
+ playsound(src,'sound/misc/bikehorn_creepy.ogg', 30, 1)
if(prob(4))
- for(var/obj/item/I in orange(H, 8))
- if(I && !I.anchored)
+ for(var/obj/item/I in orange(8, H))
+ if(!I.anchored)
I.throw_at(H, 4, 3)
to_chat(H, "What the hell?!")
@@ -305,7 +301,7 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
if(prob(3))
to_chat(H, "KNOH ?od nottub siht seod tahW")
- for(var/turf/open/O in range(src, 6))
+ for(var/turf/open/O in RANGE_TURFS(6, src))
O.MakeSlippery(TURF_WET_WATER, 10)
playsound(src, 'sound/effects/meteorimpact.ogg', 30, 1)
@@ -313,16 +309,20 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
to_chat(H, "WHAT THE FUCK IS THAT?!")
to_chat(H, ".KNOH !nuf hcum os si uoy htiw gniyalP .KNOH KNOH KNOH")
H.playsound_local(src,'sound/hallucinations/im_here1.ogg', 25)
- H.reagents.add_reagent("mindbreaker", 3)
- H.reagents.add_reagent("laughter", 5)
- H.reagents.add_reagent("mercury", 3)
+ H.reagents.add_reagent(/datum/reagent/toxin/mindbreaker, 3)
+ H.reagents.add_reagent(/datum/reagent/consumable/laughter, 5)
+ H.reagents.add_reagent(/datum/reagent/mercury, 3)
Appear()
manifested = FALSE
addtimer(CALLBACK(src, /mob/living/simple_animal/hostile/floor_cluwne/.proc/Manifest), 2)
- for(var/obj/machinery/light/L in range(H, 8))
+ for(var/obj/machinery/light/L in range(8, H))
L.flicker()
+
if(STAGE_ATTACK)
+ if(dontkill)
+ stage = STAGE_TORMENT
+ return
if(!eating)
Found_You()
for(var/I in getline(src,H))
@@ -334,13 +334,13 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
forceMove(H.loc)
to_chat(H, "You feel the floor closing in on your feet!")
H.Paralyze(300)
- H.emote("scream")
+ INVOKE_ASYNC(H, /mob.proc/emote, "scream")
H.adjustBruteLoss(10)
manifested = TRUE
Manifest()
if(!eating)
addtimer(CALLBACK(src, /mob/living/simple_animal/hostile/floor_cluwne/.proc/Grab, H), 50, TIMER_OVERRIDE|TIMER_UNIQUE)
- for(var/turf/open/O in range(src, 6))
+ for(var/turf/open/O in RANGE_TURFS(6, src))
O.MakeSlippery(TURF_WET_LUBE, 20)
playsound(src, 'sound/effects/meteorimpact.ogg', 30, 1)
eating = TRUE
@@ -351,12 +351,12 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
for(var/I in 1 to get_dist(src, H))
if(do_after(src, 5, target = H))
step_towards(H, src)
- playsound(H, pick('beestation/sound/effects/bodyscrape-01.ogg', 'beestation/sound/effects/bodyscrape-02.ogg'), 20, 1, -4)
+ playsound(H, pick('sound/effects/bodyscrape-01.ogg', 'sound/effects/bodyscrape-02.ogg'), 20, 1, -4)
if(prob(40))
H.emote("scream")
else if(prob(25))
H.say(pick("HELP ME!!","IT'S GOT ME!!","DON'T LET IT TAKE ME!!",";SOMETHING'S KILLING ME!!","HOLY FUCK!!"))
- playsound(src, pick('beestation/sound/voice/cluwnelaugh1.ogg', 'beestation/sound/voice/cluwnelaugh2.ogg', 'beestation/sound/voice/cluwnelaugh3.ogg'), 50, 1)
+ playsound(src, pick('sound/voice/cluwnelaugh1.ogg', 'sound/voice/cluwnelaugh2.ogg', 'sound/voice/cluwnelaugh3.ogg'), 50, 1)
if(get_dist(src,H) <= 1)
visible_message("[src] begins dragging [H] under the floor!")
@@ -381,7 +381,7 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
if(!istype(H) || !H.client)
Acquire_Victim()
return
- playsound(H, 'beestation/sound/effects/cluwne_feast.ogg', 100, 0, -4)
+ playsound(H, 'sound/effects/cluwne_feast.ogg', 100, 0, -4)
var/old_color = H.client.color
var/red_splash = list(1,0,0,0.8,0.2,0, 0.8,0,0.2,0.1,0,0)
var/pure_red = list(0,0,0,0,0,0,0,0,0,1,0,0)
@@ -396,7 +396,7 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
else
H.cluwneify()
H.adjustBruteLoss(30)
- H.adjustBrainLoss(100)
+ H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 100, 100)
H.cure_blind()
H.layer = initial(H.layer)
H.invisibility = initial(H.invisibility)
@@ -408,7 +408,7 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
eating = FALSE
switch_stage = switch_stage * 0.75 //he gets faster after each feast
for(var/mob/M in GLOB.player_list)
- M.playsound_local(get_turf(M), 'beestation/sound/misc/honk_echo_distant.ogg', 50, 1, pressure_affected = FALSE)
+ M.playsound_local(get_turf(M), 'sound/misc/honk_echo_distant.ogg', 50, 1, pressure_affected = FALSE)
interest = 0
stage = STAGE_HAUNT
@@ -416,7 +416,7 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
//manifestation animation
/obj/effect/temp_visual/fcluwne_manifest
- icon = 'beestation/icons/turf/floors.dmi'
+ icon = 'icons/turf/floors.dmi'
icon_state = "fcluwne_open"
layer = TURF_LAYER
duration = 600
@@ -424,7 +424,7 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
/obj/effect/temp_visual/fcluwne_manifest/Initialize()
. = ..()
- playsound(src, 'beestation/sound/misc/floor_cluwne_emerge.ogg', 100, 1)
+ playsound(src, 'sound/misc/floor_cluwne_emerge.ogg', 100, 1)
flick("fcluwne_manifest",src)
/obj/effect/dummy/floorcluwne_orbit
diff --git a/beestation/code/modules/spells/cluwnecurse.dm b/code/modules/spells/spell_types/cluwnecurse.dm
similarity index 94%
rename from beestation/code/modules/spells/cluwnecurse.dm
rename to code/modules/spells/spell_types/cluwnecurse.dm
index 1c2ef66cb4..1c93d8a598 100644
--- a/beestation/code/modules/spells/cluwnecurse.dm
+++ b/code/modules/spells/spell_types/cluwnecurse.dm
@@ -13,7 +13,7 @@
cooldown_min = 75
selection_type = "range"
var/list/compatible_mobs = list(/mob/living/carbon/human)
- action_icon = 'beestation/icons/mob/actions.dmi'
+ action_icon = '/icons/mob/actions_spells.dmi'
action_icon_state = "cluwne"
/obj/effect/proc_holder/spell/targeted/cluwnecurse/cast(list/targets, mob/user = usr)
@@ -37,4 +37,4 @@
/datum/action/spell_action/New(Target)
..()
var/obj/effect/proc_holder/spell/S = Target
- icon_icon = S.action_icon
\ No newline at end of file
+ icon_icon = S.action_icon
diff --git a/icons/mob/actions/actions_spells.dmi b/icons/mob/actions/actions_spells.dmi
index 72e72ad6f3..9c2a30031e 100644
Binary files a/icons/mob/actions/actions_spells.dmi and b/icons/mob/actions/actions_spells.dmi differ
diff --git a/icons/mob/clothing/feet.dmi b/icons/mob/clothing/feet.dmi
index d93543805b..5712f05165 100644
Binary files a/icons/mob/clothing/feet.dmi and b/icons/mob/clothing/feet.dmi differ
diff --git a/icons/mob/clothing/feet_digi.dmi b/icons/mob/clothing/feet_digi.dmi
index 43244e99b9..5b4d733879 100644
Binary files a/icons/mob/clothing/feet_digi.dmi and b/icons/mob/clothing/feet_digi.dmi differ
diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi
index d06f9cf899..60c2e34b39 100644
Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ
diff --git a/icons/mob/clothing/mask_muzzled.dmi b/icons/mob/clothing/mask_muzzled.dmi
index 807d944172..9da3545c65 100644
Binary files a/icons/mob/clothing/mask_muzzled.dmi and b/icons/mob/clothing/mask_muzzled.dmi differ
diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi
index 9f1c0cbd2a..532d4f5df7 100644
Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ
diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi
index aee67da199..d277ebf970 100644
Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ
diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi
index 19d4dca13d..e1b128e10b 100644
Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ
diff --git a/beestation/sound/effects/bodyscrape-01.ogg b/sound/effects/bodyscrape-01.ogg
similarity index 100%
rename from beestation/sound/effects/bodyscrape-01.ogg
rename to sound/effects/bodyscrape-01.ogg
diff --git a/beestation/sound/effects/bodyscrape-02.ogg b/sound/effects/bodyscrape-02.ogg
similarity index 100%
rename from beestation/sound/effects/bodyscrape-02.ogg
rename to sound/effects/bodyscrape-02.ogg
diff --git a/beestation/sound/effects/cluwne_feast.ogg b/sound/effects/cluwne_feast.ogg
similarity index 100%
rename from beestation/sound/effects/cluwne_feast.ogg
rename to sound/effects/cluwne_feast.ogg
diff --git a/beestation/sound/misc/bikehorn_creepy.ogg b/sound/misc/bikehorn_creepy.ogg
similarity index 100%
rename from beestation/sound/misc/bikehorn_creepy.ogg
rename to sound/misc/bikehorn_creepy.ogg
diff --git a/beestation/sound/misc/cluwne_breathing.ogg b/sound/misc/cluwne_breathing.ogg
similarity index 100%
rename from beestation/sound/misc/cluwne_breathing.ogg
rename to sound/misc/cluwne_breathing.ogg
diff --git a/beestation/sound/misc/floor_cluwne_emerge.ogg b/sound/misc/floor_cluwne_emerge.ogg
similarity index 100%
rename from beestation/sound/misc/floor_cluwne_emerge.ogg
rename to sound/misc/floor_cluwne_emerge.ogg
diff --git a/beestation/sound/misc/honk_echo_distant.ogg b/sound/misc/honk_echo_distant.ogg
similarity index 100%
rename from beestation/sound/misc/honk_echo_distant.ogg
rename to sound/misc/honk_echo_distant.ogg
diff --git a/beestation/sound/voice/cluwnelaugh1.ogg b/sound/voice/cluwnelaugh1.ogg
similarity index 100%
rename from beestation/sound/voice/cluwnelaugh1.ogg
rename to sound/voice/cluwnelaugh1.ogg
diff --git a/beestation/sound/voice/cluwnelaugh2.ogg b/sound/voice/cluwnelaugh2.ogg
similarity index 100%
rename from beestation/sound/voice/cluwnelaugh2.ogg
rename to sound/voice/cluwnelaugh2.ogg
diff --git a/beestation/sound/voice/cluwnelaugh2_reversed.ogg b/sound/voice/cluwnelaugh2_reversed.ogg
similarity index 100%
rename from beestation/sound/voice/cluwnelaugh2_reversed.ogg
rename to sound/voice/cluwnelaugh2_reversed.ogg
diff --git a/beestation/sound/voice/cluwnelaugh3.ogg b/sound/voice/cluwnelaugh3.ogg
similarity index 100%
rename from beestation/sound/voice/cluwnelaugh3.ogg
rename to sound/voice/cluwnelaugh3.ogg
diff --git a/tgstation.dme b/tgstation.dme
index 2e5bd87e51..436572f623 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -681,6 +681,7 @@
#include "code\datums\mutations\antenna.dm"
#include "code\datums\mutations\body.dm"
#include "code\datums\mutations\chameleon.dm"
+#include "code\datums\mutations\cluwne.dm"
#include "code\datums\mutations\cold.dm"
#include "code\datums\mutations\combined.dm"
#include "code\datums\mutations\hulk.dm"
@@ -1985,6 +1986,7 @@
#include "code\modules\clothing\masks\_masks.dm"
#include "code\modules\clothing\masks\boxing.dm"
#include "code\modules\clothing\masks\breath.dm"
+#include "code\modules\clothing\masks\cluwne.dm"
#include "code\modules\clothing\masks\gasmask.dm"
#include "code\modules\clothing\masks\hailer.dm"
#include "code\modules\clothing\masks\miscellaneous.dm"
@@ -1997,6 +1999,7 @@
#include "code\modules\clothing\outfits\vv_outfit.dm"
#include "code\modules\clothing\shoes\_shoes.dm"
#include "code\modules\clothing\shoes\bananashoes.dm"
+#include "code\modules\clothing\shoes\cluwne.dm"
#include "code\modules\clothing\shoes\colour.dm"
#include "code\modules\clothing\shoes\magboots.dm"
#include "code\modules\clothing\shoes\miscellaneous.dm"
@@ -2020,6 +2023,7 @@
#include "code\modules\clothing\suits\wiz_robe.dm"
#include "code\modules\clothing\under\_under.dm"
#include "code\modules\clothing\under\accessories.dm"
+#include "code\modules\clothing\under\cluwne.dm"
#include "code\modules\clothing\under\color.dm"
#include "code\modules\clothing\under\costume.dm"
#include "code\modules\clothing\under\miscellaneous.dm"
@@ -2076,6 +2080,7 @@
#include "code\modules\events\electrical_storm.dm"
#include "code\modules\events\fake_virus.dm"
#include "code\modules\events\false_alarm.dm"
+#include "code\modules\events\floorcluwne.dm"
#include "code\modules\events\fugitive_spawning.dm"
#include "code\modules\events\ghost_role.dm"
#include "code\modules\events\grid_check.dm"
@@ -2782,6 +2787,7 @@
#include "code\modules\mob\living\simple_animal\hostile\dark_wizard.dm"
#include "code\modules\mob\living\simple_animal\hostile\eyeballs.dm"
#include "code\modules\mob\living\simple_animal\hostile\faithless.dm"
+#include "code\modules\mob\living\simple_animal\hostile\floor_cluwne.dm"
#include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm"
#include "code\modules\mob\living\simple_animal\hostile\goose.dm"
#include "code\modules\mob\living\simple_animal\hostile\headcrab.dm"