diff --git a/code/datums/spells/cluwne.dm b/code/datums/spells/cluwne.dm new file mode 100644 index 00000000000..c0336b26149 --- /dev/null +++ b/code/datums/spells/cluwne.dm @@ -0,0 +1,86 @@ +/obj/effect/proc_holder/spell/targeted/touch/cluwne + name = "Curse of the Cluwne" + desc = "Turns the target into a fat and cursed monstrosity of a clown." + hand_path = /obj/item/weapon/melee/touch_attack/cluwne + + school = "transmutation" + + charge_max = 600 + clothes_req = 1 + cooldown_min = 200 //100 deciseconds reduction per rank + + action_icon_state = "clown" + +/mob/living/carbon/human/proc/makeCluwne() + to_chat(src, "You feel funny.") + adjustBrainLoss(80) + nutrition = 9000 + confused = 120 + if(mind) + mind.assigned_role = "Cluwne" + + var/obj/item/organ/internal/honktumor/cursed/tumor = new + tumor.insert(src) + mutations.Add(NERVOUS) + dna.SetSEState(NERVOUSBLOCK, 1, 1) + genemutcheck(src, NERVOUSBLOCK, null, MUTCHK_FORCED) + + animate_clownspell(src) + + unEquip(w_uniform, 1) + unEquip(shoes, 1) + unEquip(gloves, 1) + if(!istype(wear_mask, /obj/item/clothing/mask/cursedclown)) //Infinite loops otherwise + unEquip(wear_mask, 1) + equip_to_slot_if_possible(new /obj/item/clothing/under/cursedclown, slot_w_uniform, 1, 1, 1) + equip_to_slot_if_possible(new /obj/item/clothing/gloves/cursedclown, slot_gloves, 1, 1, 1) + equip_to_slot_if_possible(new /obj/item/clothing/mask/cursedclown, slot_wear_mask, 1, 1, 1) + equip_to_slot_if_possible(new /obj/item/clothing/shoes/cursedclown, slot_shoes, 1, 1, 1) + real_name = "cluwne" + +/mob/living/carbon/human/proc/makeAntiCluwne() + to_chat(src, "You don't feel very funny.") + adjustBrainLoss(-120) + nutrition = NUTRITION_LEVEL_STARVING + confused = 0 + jitteriness = 0 + if(mind) + mind.assigned_role = "Lawyer" + + var/obj/item/organ/internal/honktumor/cursed/tumor = get_int_organ(/obj/item/organ/internal/honktumor/cursed) + if(tumor) + tumor.remove(src, clean_remove = 1) + qdel(tumor) + else + mutations.Remove(CLUMSY) + mutations.Remove(COMICBLOCK) + dna.SetSEState(CLUMSYBLOCK,0) + dna.SetSEState(COMICBLOCK,0) + genemutcheck(src, CLUMSYBLOCK, null, MUTCHK_FORCED) + genemutcheck(src, COMICBLOCK, null, MUTCHK_FORCED) + mutations.Remove(NERVOUS) + dna.SetSEState(NERVOUSBLOCK, 0) + genemutcheck(src, NERVOUSBLOCK, null, MUTCHK_FORCED) + + animate_clownspell(src) + + var/obj/item/clothing/under/U = w_uniform + unEquip(w_uniform, 1) + if(U) + qdel(U) + + var/obj/item/clothing/shoes/S = shoes + unEquip(shoes, 1) + if(S) + qdel(S) + + if(istype(wear_mask, /obj/item/clothing/mask/cursedclown)) + unEquip(wear_mask, 1) + + if(istype(gloves, /obj/item/clothing/gloves/cursedclown)) + var/obj/item/clothing/gloves/G = gloves + unEquip(gloves, 1) + qdel(G) + + equip_to_slot_if_possible(new /obj/item/clothing/under/lawyer/black, slot_w_uniform, 1, 1, 1) + equip_to_slot_if_possible(new /obj/item/clothing/shoes/black, slot_shoes, 1, 1, 1) diff --git a/code/datums/spells/touch_attacks.dm b/code/datums/spells/touch_attacks.dm index 1262730fd45..6f659e5e98d 100644 --- a/code/datums/spells/touch_attacks.dm +++ b/code/datums/spells/touch_attacks.dm @@ -1,5 +1,5 @@ -/obj/effect/proc_holder/spell/targeted/touch/ - var/hand_path = "/obj/item/weapon/melee/touch_attack" +/obj/effect/proc_holder/spell/targeted/touch + var/hand_path = /obj/item/weapon/melee/touch_attack var/obj/item/weapon/melee/touch_attack/attached_hand = null invocation_type = "none" //you scream on connecting, not summoning include_user = 1 @@ -47,7 +47,7 @@ /obj/effect/proc_holder/spell/targeted/touch/disintegrate name = "Disintegrate" desc = "This spell charges your hand with vile energy that can be used to violently explode victims." - hand_path = "/obj/item/weapon/melee/touch_attack/disintegrate" + hand_path = /obj/item/weapon/melee/touch_attack/disintegrate school = "evocation" charge_max = 600 @@ -59,11 +59,11 @@ /obj/effect/proc_holder/spell/targeted/touch/flesh_to_stone name = "Flesh to Stone" desc = "This spell charges your hand with the power to turn victims into inert statues for a long period of time." - hand_path = "/obj/item/weapon/melee/touch_attack/fleshtostone" + hand_path = /obj/item/weapon/melee/touch_attack/fleshtostone school = "transmutation" charge_max = 600 clothes_req = 1 cooldown_min = 200 //100 deciseconds reduction per rank - action_icon_state = "statue" \ No newline at end of file + action_icon_state = "statue" diff --git a/code/game/gamemodes/wizard/godhand.dm b/code/game/gamemodes/wizard/godhand.dm index 8a5ba06f36f..ab5ba426106 100644 --- a/code/game/gamemodes/wizard/godhand.dm +++ b/code/game/gamemodes/wizard/godhand.dm @@ -33,7 +33,7 @@ qdel(src) /obj/item/weapon/melee/touch_attack/disintegrate - name = "\improper disintegrating touch" + name = "disintegrating touch" desc = "This hand of mine glows with an awesome power!" catchphrase = "EI NATH!!" on_use_sound = "sound/magic/Disintegrate.ogg" @@ -51,7 +51,7 @@ ..() /obj/item/weapon/melee/touch_attack/fleshtostone - name = "\improper petrifying touch" + name = "petrifying touch" desc = "That's the bottom line, because flesh to stone said so!" catchphrase = "STAUN EI!!" on_use_sound = "sound/magic/FleshToStone.ogg" @@ -78,10 +78,38 @@ item_state = "disintegrate" /obj/item/weapon/melee/touch_attack/fake_disintegrate/afterattack(atom/target, mob/living/carbon/user, proximity) - if(!proximity || target == user || !ismob(target) || !iscarbon(user) || user.lying || user.handcuffed) //exploding after touching yourself would be bad + if(!proximity || target == user || !ismob(target) || !iscarbon(user) || user.lying || user.handcuffed) //not exploding after touching yourself would be bad return var/datum/effect/system/spark_spread/sparks = new sparks.set_up(4, 0, target.loc) //no idea what the 0 is sparks.start() playsound(target.loc, 'sound/goonstation/effects/gib.ogg', 50, 1) - ..() \ No newline at end of file + ..() + +/obj/item/weapon/melee/touch_attack/cluwne + name = "cluwne touch" + desc = "It's time to start clowning around." + catchphrase = "NWOLC EGNEVER" + on_use_sound = "sound/misc/sadtrombone.ogg" + icon_state = "cluwnecurse" + item_state = "cluwnecurse" + +/obj/item/weapon/melee/touch_attack/cluwne/afterattack(atom/target, mob/living/carbon/user, proximity) + if(!proximity || target == user || !ishuman(target) || !iscarbon(user) || user.lying || user.handcuffed) //clowning around after touching yourself would unsurprisingly, be bad + return + + if(iswizard(target)) + to_chat(user, "The spell has no effect on [target].") + return + + var/datum/effect/system/harmless_smoke_spread/s = new /datum/effect/system/harmless_smoke_spread + s.set_up(5, 0, target) + s.start() + + var/mob/living/carbon/human/H = target + if(H.mind) + if(H.mind.assigned_role != "Cluwne") + H.makeCluwne() + else + H.makeAntiCluwne() + ..() diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index ac487a8e703..65c50382532 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -233,6 +233,11 @@ category = "Assistance" cost = 1 +/datum/spellbook_entry/cluwne + name = "Curse of the Cluwne" + spell_type = /obj/effect/proc_holder/spell/targeted/touch/cluwne + log_name = "CC" + /datum/spellbook_entry/item name = "Buy Item" refundable = 0 @@ -857,4 +862,4 @@ spell = /obj/effect/proc_holder/spell/targeted/touch/fake_disintegrate spellname = "disintegrate" icon_state ="bookfireball" - desc = "This book feels like it will rip stuff apart." \ No newline at end of file + desc = "This book feels like it will rip stuff apart." diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 060dd1ca47c..d98ee1d0154 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -47,4 +47,11 @@ name = "batgloves" icon_state = "bmgloves" item_state = "bmgloves" - item_color="bmgloves" \ No newline at end of file + item_color="bmgloves" + +/obj/item/clothing/gloves/cursedclown + name = "cursed white gloves" + desc = "These things smell terrible, and they're all lumpy. Gross." + icon_state = "latex" + item_state = "lgloves" + flags = NODROP diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 3e99b277db3..ca5a267c6a4 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -275,3 +275,28 @@ obj/item/clothing/mask/bandana/purple icon_state = "bandblack" item_color = "black" desc = "It's a black bandana." + +/obj/item/clothing/mask/cursedclown + name = "cursed clown mask" + desc = "This is a very, very odd looking mask." + icon = 'icons/goonstation/objects/clothing/mask.dmi' + icon_state = "cursedclown" + item_state = "cclown_hat" + icon_override = 'icons/goonstation/mob/clothing/mask.dmi' + lefthand_file = 'icons/goonstation/mob/inhands/clothing_lefthand.dmi' + righthand_file = 'icons/goonstation/mob/inhands/clothing_righthand.dmi' + flags = NODROP + +/obj/item/clothing/mask/cursedclown/equipped(mob/user, slot) + ..() + var/mob/living/carbon/human/H = user + if(istype(H) && slot == slot_wear_mask) + to_chat(H, "[src] grips your face!") + if(H.mind && H.mind.assigned_role != "Cluwne") + H.makeCluwne() + +/obj/item/clothing/mask/cursedclown/suicide_act(mob/user) + user.visible_message("[user] gazes into the eyes of [src]. [src] gazes back!") + spawn(10) + user.gib() + return BRUTELOSS diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index af361951f3d..bc62c5d71d4 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -207,3 +207,13 @@ item_color = "fancysandal" species_restricted = null +/obj/item/clothing/shoes/cursedclown + name = "cursed clown shoes" + desc = "Moldering clown flip flops. They're neon green for some reason." + icon = 'icons/goonstation/objects/clothing/feet.dmi' + icon_state = "cursedclown" + item_state = "cclown_shoes" + icon_override = 'icons/goonstation/mob/clothing/feet.dmi' + lefthand_file = 'icons/goonstation/mob/inhands/clothing_lefthand.dmi' + righthand_file = 'icons/goonstation/mob/inhands/clothing_righthand.dmi' + flags = NODROP diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index a88fdd6f970..badf323d804 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -657,4 +657,4 @@ if(user.reagents.get_reagent_amount("syndicate_nanites") < 15) user.reagents.add_reagent("syndicate_nanites", 15) else - processing_objects.Remove(src) \ No newline at end of file + processing_objects.Remove(src) diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 769e388f546..d912a2e289d 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -709,3 +709,15 @@ to_chat(user,"You can't fit inside while wearing that \the [user.get_item_by_slot(slot_id)].") return 0 return 1 + +/obj/item/clothing/under/cursedclown + name = "cursed clown suit" + desc = "It wasn't already?" + icon = 'icons/goonstation/objects/clothing/uniform.dmi' + icon_state = "cursedclown" + item_state = "cclown_uniform" + item_color = "cursedclown" + icon_override = 'icons/goonstation/mob/clothing/uniform.dmi' + lefthand_file = 'icons/goonstation/mob/inhands/clothing_lefthand.dmi' + righthand_file = 'icons/goonstation/mob/inhands/clothing_righthand.dmi' + flags = NODROP diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index f4a47c595cb..27b7120b63a 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -476,13 +476,21 @@ var/mob/living/carbon/human/H = owner if(isobj(H.shoes)) var/thingy = H.shoes - H.unEquip(H.shoes) - walk_away(thingy,H,15,2) - spawn(20) - if(thingy) - walk(thingy,0) + if(H.unEquip(H.shoes)) + walk_away(thingy,H,15,2) + spawn(20) + if(thingy) + walk(thingy,0) ..() +/obj/item/organ/internal/honktumor/cursed + +/obj/item/organ/internal/honktumor/cursed/remove(mob/living/carbon/M, special = 0, clean_remove = 0) + ..() + if(!clean_remove) + insert(M) //You're not getting away that easily! + else + qdel(src) /obj/item/organ/internal/beard name = "beard organ" @@ -493,7 +501,6 @@ parent_organ = "head" slot = "hair_organ" - /obj/item/organ/internal/beard/on_life() if(!owner) @@ -516,4 +523,4 @@ head_organ.r_facial = 216 head_organ.g_facial = 192 head_organ.b_facial = 120 - H.update_fhair() \ No newline at end of file + H.update_fhair() diff --git a/icons/goonstation/mob/clothing/feet.dmi b/icons/goonstation/mob/clothing/feet.dmi new file mode 100644 index 00000000000..73549581095 Binary files /dev/null and b/icons/goonstation/mob/clothing/feet.dmi differ diff --git a/icons/goonstation/mob/clothing/mask.dmi b/icons/goonstation/mob/clothing/mask.dmi new file mode 100644 index 00000000000..c4392fb8de7 Binary files /dev/null and b/icons/goonstation/mob/clothing/mask.dmi differ diff --git a/icons/goonstation/mob/clothing/uniform.dmi b/icons/goonstation/mob/clothing/uniform.dmi new file mode 100644 index 00000000000..522e83854ec Binary files /dev/null and b/icons/goonstation/mob/clothing/uniform.dmi differ diff --git a/icons/goonstation/mob/inhands/clothing_lefthand.dmi b/icons/goonstation/mob/inhands/clothing_lefthand.dmi new file mode 100644 index 00000000000..363c616d3f8 Binary files /dev/null and b/icons/goonstation/mob/inhands/clothing_lefthand.dmi differ diff --git a/icons/goonstation/mob/inhands/clothing_righthand.dmi b/icons/goonstation/mob/inhands/clothing_righthand.dmi new file mode 100644 index 00000000000..0903e0d2055 Binary files /dev/null and b/icons/goonstation/mob/inhands/clothing_righthand.dmi differ diff --git a/icons/goonstation/objects/clothing/feet.dmi b/icons/goonstation/objects/clothing/feet.dmi new file mode 100644 index 00000000000..e6d37e10132 Binary files /dev/null and b/icons/goonstation/objects/clothing/feet.dmi differ diff --git a/icons/goonstation/objects/clothing/mask.dmi b/icons/goonstation/objects/clothing/mask.dmi new file mode 100644 index 00000000000..f5c4f97c255 Binary files /dev/null and b/icons/goonstation/objects/clothing/mask.dmi differ diff --git a/icons/goonstation/objects/clothing/uniform.dmi b/icons/goonstation/objects/clothing/uniform.dmi new file mode 100644 index 00000000000..a602f0cdce5 Binary files /dev/null and b/icons/goonstation/objects/clothing/uniform.dmi differ diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 5adc3ed1509..127b63a154a 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 61c176bd08a..27168c30865 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index 652996f8d8c..2f7154777fd 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 01609b50824..7867fac04b4 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/paradise.dme b/paradise.dme index 3f06e7152d2..7f315ddd7c0 100644 --- a/paradise.dme +++ b/paradise.dme @@ -274,6 +274,7 @@ #include "code\datums\spells\area_teleport.dm" #include "code\datums\spells\bloodcrawl.dm" #include "code\datums\spells\charge.dm" +#include "code\datums\spells\cluwne.dm" #include "code\datums\spells\conjure.dm" #include "code\datums\spells\construct_spells.dm" #include "code\datums\spells\dumbfire.dm"