diff --git a/code/__defines/is_helpers.dm b/code/__defines/is_helpers.dm
index 07c25a40ab..0fbcd3c719 100644
--- a/code/__defines/is_helpers.dm
+++ b/code/__defines/is_helpers.dm
@@ -13,7 +13,7 @@
#define isitem(D) istype(D, /obj/item)
-#define isradio(A) istype(A, /obj/item/device/radio)
+#define isradio(A) istype(A, /obj/item/device/radio)
#define isairlock(A) istype(A, /obj/machinery/door/airlock)
@@ -23,6 +23,8 @@
#define ismecha(A) istype(A, /obj/mecha)
+#define isstructure(A) istype(A, /obj/structure)
+
//---------------
//#define isarea(D) istype(D, /area) //Built in
diff --git a/code/datums/components/crafting/recipes/primitive.dm b/code/datums/components/crafting/recipes/primitive.dm
index 97f6be5e39..ce268e893a 100644
--- a/code/datums/components/crafting/recipes/primitive.dm
+++ b/code/datums/components/crafting/recipes/primitive.dm
@@ -1,3 +1,6 @@
+/*
+ * Misc
+ */
/datum/crafting_recipe/cloth
name = "Cloth bolt"
result = /obj/item/stack/material/cloth
@@ -13,9 +16,8 @@
category = CAT_PRIMAL
/*
- * Clothing
+ * Primitive Clothing
*/
-
/datum/crafting_recipe/primitive_clothes
name = "primitive clothes"
result = /obj/item/clothing/under/primitive
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 96ce6d7356..efb84bbc85 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -702,7 +702,7 @@
desc = "Spooky!"
gender = PLURAL
icon = 'icons/obj/wizard.dmi'
- icon_state = "ectoplasm"
+ icon_state = "ectoplasm2"
/obj/item/weapon/research
name = "research debugging device"
diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm
index fc2e6c2534..9f505f903f 100644
--- a/code/game/objects/items/weapons/mop.dm
+++ b/code/game/objects/items/weapons/mop.dm
@@ -1,8 +1,11 @@
GLOBAL_LIST_BOILERPLATE(all_mops, /obj/item/weapon/mop)
+/*
+ * Mop
+ */
/obj/item/weapon/mop
- desc = "The world of janitalia wouldn't be complete without a mop."
name = "mop"
+ desc = "The world of janitalia wouldn't be complete without a mop."
icon = 'icons/obj/janitor.dmi'
icon_state = "mop"
force = 3.0
@@ -39,3 +42,38 @@ GLOBAL_LIST_BOILERPLATE(all_mops, /obj/item/weapon/mop)
if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap))
return
..()
+
+/*
+ * Advanced Mop
+ */
+/obj/item/weapon/mop/advanced
+ name = "advanced mop"
+ desc = "No stain will go unclean."
+ icon = 'icons/obj/janitor.dmi'
+ icon_state = "adv_mop"
+ force = 3.5
+ throwforce = 10.5
+ throw_speed = 4
+ throw_range = 10
+ w_class = ITEMSIZE_NORMAL
+ flags = NOCONDUCT
+ attack_verb = list("mopped", "bashed", "bludgeoned", "whacked")
+
+/obj/item/weapon/mop/advanced/New()
+ create_reagents(30)
+ ..()
+
+/obj/item/weapon/mop/advanced/afterattack(atom/A, mob/user, proximity)
+ if(!proximity) return
+ if(istype(A, /turf) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay) || istype(A, /obj/effect/rune))
+ if(reagents.total_volume < 1)
+ to_chat(user, "Your mop is dry!")
+ return
+
+ user.visible_message("[user] begins to clean \the [get_turf(A)].")
+
+ if(do_after(user, 20))
+ var/turf/T = get_turf(A)
+ if(T)
+ T.clean(src, user)
+ to_chat(user, "You have finished mopping!")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm
index 4e9f2f66e0..4f1e1efd9d 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/skeleton.dm
@@ -1,7 +1,16 @@
/datum/category_item/catalogue/fauna/skeleton
name = "Alien Wildlife - Space Skeleton"
- desc = "A creature consisting primarily of what appears to be bones with no apparent connective tissue, muscle, or organs.\
- It is not clear at all how this creature even operates."
+ desc = "Classification: Sentientis osseous\
+
\
+ No one, not scientist or wildlife expert can properly explain these spacial skeletons with any solid \
+ certanty. They are not human, despite the clear simularites to a human's skeleton, nor are they made of \
+ calcium like normal bones. Samples taken from the corpses of these strange creatures have yieled little \
+ in the form of answers and have only raised more questions with regards to their general existence. \
+ Scientist are still studying these beings, a difficult task as they are difficult to come by in the \
+ vaccum of space. The only information that scientist are able to gather about these so-called 'Space \
+ Skeletons' as people have come to call them is that their structure is comprised of a strange cell \
+ structure that is similar to plants - likely because these creatures are known to feed of the UV \
+ rays of nearby stars."
value = CATALOGUER_REWARD_MEDIUM
/mob/living/simple_mob/vore/alienanimals/skeleton
@@ -67,6 +76,11 @@
vore_default_contamination_color = "grey"
vore_default_item_mode = IM_DIGEST
+/mob/living/simple_mob/vore/alienanimals/skeleton/alt
+ icon_state = "altskeleton"
+ icon_living = "altskeleton"
+ icon_dead = "altskeleton_dead"
+
/datum/say_list/skeleton
speak = list("Nyeh heh heeeh","NYAAAAHHHH", "Books are the real treasures of the world!", "Why are skeletons so calm? Because nothing gets under their skin.","When does a skeleton laugh? When someone tickels their funny bone!","What is a skeleton’s favorite mode of transport? A scare-plane.", "What did the skeleton say to the vampire? 'You suck.'","What is a skeleton’s favorite thing to do with their cell phone? Take skelfies.", "How did the skeleton know the other skeleton was lying? He could see right through him.","What’s a skeleton’s least favorite room in the house? The living room.", "How much does an elephant skeleton weigh? Skele-tons.", "Why do skeletons drink so much milk? It’s good for the bones!", "Where do bad jokes about skeletons belong? In the skelebin.","What does a skeleton use to cut through objects? A shoulder blade.", "What kind of jokes do skeletons tell? Humerus ones.")
emote_see = list("spins its head around", "shuffles","shambles","practices on the xylophone","drinks some milk","looks at you. Its hollow, bottomless sockets gaze into you greedily.")
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm
index b8de4885ba..0520bd5351 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm
@@ -71,7 +71,7 @@
"rad" = 100
)
- loot_list = list(/obj/item/weapon/ore/diamond = 100)
+ loot_list = list(/obj/item/weapon/ore/diamond = 100, /obj/item/weapon/ectoplasm = 3)
speak_emote = list("rumbles")
@@ -101,14 +101,14 @@
/mob/living/simple_mob/vore/alienanimals/space_ghost/shoot(atom/A) //We're shooting ghosts at people and need them to have the same faction as their parent, okay?
if(!projectiletype)
- return
+ return
if(A == get_turf(src))
return
face_atom(A)
if(reload_count >= reload_max)
return
var/mob/living/simple_mob/P = new projectiletype(loc, src)
-
+
if(!P)
return
if(needs_reload)
diff --git a/code/modules/research/designs/misc.dm b/code/modules/research/designs/misc.dm
index 3e81be232e..c008eec25d 100644
--- a/code/modules/research/designs/misc.dm
+++ b/code/modules/research/designs/misc.dm
@@ -80,4 +80,13 @@
req_tech = list(TECH_ILLEGAL = 2, TECH_MATERIAL = 2)
materials = list(MAT_STEEL = 4000, MAT_GLASS = 4000)
build_path = /obj/item/device/binoculars/scope
- sort_string = "TBAAD"
\ No newline at end of file
+ sort_string = "TBAAD"
+
+/datum/design/item/general/advmop
+ name = "advanced mop"
+ desc = "An advanced mop with pressured water jets that break away the toughest stains."
+ id = "advmop"
+ req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 5, TECH_BIO = 1)
+ materials = list(MAT_STEEL = 5000, MAT_GLASS = 2000, MAT_GOLD = 1000)
+ build_path = /obj/item/weapon/mop/advanced
+ sort_string = "TBAAE"
\ No newline at end of file
diff --git a/icons/mob/alienanimals_x32.dmi b/icons/mob/alienanimals_x32.dmi
index ca61bbf9a0..d94f79a81e 100644
Binary files a/icons/mob/alienanimals_x32.dmi and b/icons/mob/alienanimals_x32.dmi differ
diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi
index 61920eb274..9f5fca36d8 100644
Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ
diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi
index 0878311519..36235039b5 100644
Binary files a/icons/obj/wizard.dmi and b/icons/obj/wizard.dmi differ