From 939eb35a3fe6f33aa8ef8800f2e2e6e3af196fa6 Mon Sep 17 00:00:00 2001 From: Useroth Date: Tue, 28 May 2019 09:02:26 +0200 Subject: [PATCH 1/8] Tae-clown-do v1 --- code/modules/spells/spell_types/aimed.dm | 2 + code/modules/spells/spell_types/godhand.dm | 83 ++++++++++++++++++++++ code/modules/uplink/uplink_items.dm | 14 ++++ tgstation.dme | 2 + 4 files changed, 101 insertions(+) diff --git a/code/modules/spells/spell_types/aimed.dm b/code/modules/spells/spell_types/aimed.dm index 35f9a8f50a..73a428af71 100644 --- a/code/modules/spells/spell_types/aimed.dm +++ b/code/modules/spells/spell_types/aimed.dm @@ -74,6 +74,8 @@ /obj/effect/proc_holder/spell/aimed/proc/fire_projectile(mob/living/user, atom/target) current_amount-- + if(!projectile_type) + return for(var/i in 1 to projectiles_per_fire) var/obj/item/projectile/P = new projectile_type(user.loc) P.firer = user diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index 919d87b4c7..5a94b19e7f 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -94,3 +94,86 @@ M.Stun(40) M.petrify() return ..() + + +/obj/item/melee/touch_attack/megahonk + name = "\improper honkmother's blessing" + desc = "You've got a feeling they won't be laughing after this one. Honk honk." + catchphrase = "HONKDOOOOUKEN!" + on_use_sound = 'sound/items/airhorn.ogg' + icon = 'icons/mecha/mecha_equipment.dmi' + icon_state = "mecha_honker" + +/obj/item/melee/touch_attack/megahonk/afterattack(atom/target, mob/user, proximity) + if(!iscarbon(target)) + return + + user.say(catchphrase, forced = "spell") + playsound(get_turf(target), on_use_sound,100,1) + for(var/mob/living/carbon/M in (hearers(1, target) - user)) //3x3 around the target, not affecting the user + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(istype(H.ears, /obj/item/clothing/ears/earmuffs)) + continue + var/mul = (M==target ? 1 : 0.5) + to_chat(M, "HONK") + M.SetSleeping(0) + M.stuttering += 20*mul + M.adjustEarDamage(0, 30*mul) + M.Knockdown(60*mul) + if(prob(30)) + M.Stun(200*mul) + M.Unconscious(80*mul) + else + M.Jitter(500*mul) + + charges-- + if(charges <= 0) + qdel(src) + +/obj/item/melee/touch_attack/megahonk/attack_self(mob/user) + . = ..() + to_chat(user, "\The [src] disappears, to honk another day.") + qdel(src) + +/obj/item/melee/touch_attack/bspie + name = "\improper bluespace pie" + desc = "A thing you can barely comprehend as you hold it in your hand. You're fairly sure you could fit an entire body inside." + on_use_sound = 'sound/magic/demon_consume.ogg' + icon = 'icons/obj/food/piecake.dmi' + icon_state = "frostypie" + color = "#000077" + +/obj/item/melee/touch_attack/bspie/attack_self(mob/user) + . = ..() + to_chat(user, "You smear \the [src] on your chest! ") + qdel(src) + +/obj/item/melee/touch_attack/bspie/afterattack(atom/target, mob/user, proximity) + if(target == user) + to_chat(user, "You smear \the [src] on your chest!") + qdel(src) + return + if(!iscarbon(target)) + return + var/mob/living/carbon/M = target + var/obj/item/bodypart/head = M.get_bodypart("head") + + user.visible_message("[user] is trying to stuff [M]\s body into \the [src]!") + if(do_mob(user, M, 250)) + var/name = M.real_name + var/obj/item/reagent_containers/food/snacks/pie/cream/pie = new(get_turf(M)) + pie.name = "\improper [name] [pie.name]" + + playsound(get_turf(target), on_use_sound, 50, 1) + + if(head) + head.drop_limb() + head.throw_at(get_turf(head), 1, 1, user) + qdel(M) + + + charges-- + + if(charges <= 0) + qdel(src) \ No newline at end of file diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 503b1bd743..43a4c582ca 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -837,6 +837,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) surplus = 0 include_modes = list(/datum/game_mode/nuclear/clown_ops) +datum/uplink_item/stealthy_tools/taeclowndo_shoes + name = "Tae-clown-do Shoes" + desc = "A pair of shoes for the most elite agents of the honkmotherland. They grant the mastery of taeclowndo as long as they're worn." + cost = 12 + item = /obj/item/clothing/shoes/clown_shoes/taeclowndo + include_modes = list(/datum/game_mode/nuclear/clown_ops) + /datum/uplink_item/stealthy_tools/frame name = "F.R.A.M.E. PDA Cartridge" desc = "When inserted into a personal digital assistant, this cartridge gives you five PDA viruses which \ @@ -1382,6 +1389,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/dnainjector/clumsymut restricted_roles = list("Clown") +/datum/uplink_item/role_restricted/taeclowndo_shoes + name = "Tae-clown-do Shoes" + desc = "A pair of shoes for the most elite agents of the honkmotherland. They grant the mastery of taeclowndo as long as they're worn." + cost = 16 + item = /obj/item/clothing/shoes/clown_shoes/taeclowndo + restricted_roles = list("Clown") + /datum/uplink_item/role_restricted/mimery name = "Guide to Advanced Mimery Series" desc = "The classical two part series on how to further hone your mime skills. Upon studying the series, the user should be able to make 3x1 invisible walls, and shoot bullets out of their fingers. Obviously only works for Mimes." diff --git a/tgstation.dme b/tgstation.dme index dea02c485f..0806cd17d5 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1495,6 +1495,7 @@ #include "code\modules\clothing\shoes\colour.dm" #include "code\modules\clothing\shoes\magboots.dm" #include "code\modules\clothing\shoes\miscellaneous.dm" +#include "code\modules\clothing\shoes\taeclowndo.dm" #include "code\modules\clothing\shoes\vg_shoes.dm" #include "code\modules\clothing\spacesuits\_spacesuits.dm" #include "code\modules\clothing\spacesuits\chronosuit.dm" @@ -2652,6 +2653,7 @@ #include "code\modules\spells\spell_types\shapeshift.dm" #include "code\modules\spells\spell_types\spacetime_distortion.dm" #include "code\modules\spells\spell_types\summonitem.dm" +#include "code\modules\spells\spell_types\taeclowndo.dm" #include "code\modules\spells\spell_types\the_traps.dm" #include "code\modules\spells\spell_types\touch_attacks.dm" #include "code\modules\spells\spell_types\trigger.dm" From bd4108c094cf45a874acca872bfb35295eb80c4f Mon Sep 17 00:00:00 2001 From: Useroth Date: Tue, 28 May 2019 09:04:13 +0200 Subject: [PATCH 2/8] ... --- code/modules/uplink/uplink_items.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 43a4c582ca..fd15775e55 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -839,7 +839,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) datum/uplink_item/stealthy_tools/taeclowndo_shoes name = "Tae-clown-do Shoes" - desc = "A pair of shoes for the most elite agents of the honkmotherland. They grant the mastery of taeclowndo as long as they're worn." + desc = "A pair of shoes for the most elite agents of the honkmotherland. They grant the mastery of taeclowndo with some honk-fu moves as long as they're worn." cost = 12 item = /obj/item/clothing/shoes/clown_shoes/taeclowndo include_modes = list(/datum/game_mode/nuclear/clown_ops) @@ -1391,8 +1391,8 @@ datum/uplink_item/stealthy_tools/taeclowndo_shoes /datum/uplink_item/role_restricted/taeclowndo_shoes name = "Tae-clown-do Shoes" - desc = "A pair of shoes for the most elite agents of the honkmotherland. They grant the mastery of taeclowndo as long as they're worn." - cost = 16 + desc = "A pair of shoes for the most elite agents of the honkmotherland. They grant the mastery of taeclowndo with some honk-fu moves as long as they're worn." + cost = 14 item = /obj/item/clothing/shoes/clown_shoes/taeclowndo restricted_roles = list("Clown") From eb6e710b184490977ad6f692aef2985c038150b6 Mon Sep 17 00:00:00 2001 From: Useroth Date: Tue, 28 May 2019 09:17:03 +0200 Subject: [PATCH 3/8] Forgot to uncomment the clown check on the shoes. --- code/modules/clothing/shoes/taeclowndo.dm | 36 ++++++++ code/modules/spells/spell_types/taeclowndo.dm | 86 +++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 code/modules/clothing/shoes/taeclowndo.dm create mode 100644 code/modules/spells/spell_types/taeclowndo.dm diff --git a/code/modules/clothing/shoes/taeclowndo.dm b/code/modules/clothing/shoes/taeclowndo.dm new file mode 100644 index 0000000000..3a4612933d --- /dev/null +++ b/code/modules/clothing/shoes/taeclowndo.dm @@ -0,0 +1,36 @@ +/obj/item/clothing/shoes/clown_shoes/taeclowndo + var/list/spelltypes = list ( + /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pie, + /obj/effect/proc_holder/spell/aimed/banana_peel, + /obj/effect/proc_holder/spell/targeted/touch/megahonk, + /obj/effect/proc_holder/spell/targeted/touch/bspie, + ) + var/list/spells = list() + + +/obj/item/clothing/shoes/clown_shoes/taeclowndo/equipped(mob/user, slot) + . = ..() + if(!ishuman(user)) + return + if(!(user.has_trait(TRAIT_CLUMSY)) && !(user.mind && user.mind.assigned_role == "Clown")) + return + var/mob/living/carbon/human/H = user + if(slot == SLOT_SHOES) + spells = new + for(var/spell in spelltypes) + var/obj/effect/proc_holder/spell/S = new spell + spells += S + S.charge_counter = 0 + S.start_recharge() + H.mind.AddSpell(S) + +/obj/item/clothing/shoes/clown_shoes/taeclowndo/dropped(mob/user) + . = ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(H.get_item_by_slot(SLOT_SHOES) == src) + for(var/spell in spells) + var/obj/effect/proc_holder/spell/S = spell + H.mind.spell_list.Remove(S) + qdel(S) \ No newline at end of file diff --git a/code/modules/spells/spell_types/taeclowndo.dm b/code/modules/spells/spell_types/taeclowndo.dm new file mode 100644 index 0000000000..d2b0782b07 --- /dev/null +++ b/code/modules/spells/spell_types/taeclowndo.dm @@ -0,0 +1,86 @@ +/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pie + name = "Summon Creampie" + desc = "A clown's weapon of choice. Use this to summon a fresh pie, just waiting to acquaintain itself with someone's face." + invocation_type = "none" + include_user = 1 + range = -1 + clothes_req = 0 + item_type = /obj/item/reagent_containers/food/snacks/pie/cream + + charge_max = 30 + cooldown_min = 30 + action_icon = 'icons/obj/food/piecake.dmi' + action_icon_state = "pie" + +////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/obj/effect/proc_holder/spell/aimed/banana_peel + name = "Conjure Banana Peel" + desc = "Make a banana peel appear out of thin air right under someone's feet!" + charge_type = "recharge" + charge_max = 100 + cooldown_min = 100 + clothes_req = 0 + invocation_type = "none" + range = 7 + selection_type = "view" + projectile_type = null + + active_msg = "You focus, your mind reaching to the clown dimension, ready to make a peel matrialize wherever you want!" + deactive_msg = "You relax, the peel remaining right in the \"thin air\" it would appear out of." + action_icon = 'icons/obj/hydroponics/harvest.dmi' + base_icon_state = "banana_peel" + action_icon_state = "banana" + + +/obj/effect/proc_holder/spell/aimed/banana_peel/cast(list/targets, mob/user = usr) + var/target = get_turf(targets[1]) + + if(get_dist(user,target)>range) + to_chat(user, "\The [target] is too far away!") + return + + . = ..() + new /obj/item/grown/bananapeel(target) + +/obj/effect/proc_holder/spell/aimed/banana_peel/update_icon() + if(!action) + return + if(active) + action.button_icon_state = base_icon_state + else + action.button_icon_state = action_icon_state + + action.UpdateButtonIcon() + return +////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/obj/effect/proc_holder/spell/targeted/touch/megahonk + name = "Mega HoNk" + desc = "This spell channels your inner clown powers, concentrating them into one massive HONK." + hand_path = /obj/item/melee/touch_attack/megahonk + + charge_max = 100 + clothes_req = 0 + cooldown_min = 100 + + action_icon = 'icons/mecha/mecha_equipment.dmi' + action_icon_state = "mecha_honker" + +///////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/obj/effect/proc_holder/spell/targeted/touch/bspie + name = "Bluespace Banana Pie" + desc = "An entire body would fit in there!" + hand_path = /obj/item/melee/touch_attack/bspie + + charge_max = 450 + clothes_req = 0 + cooldown_min = 450 + + action_icon = 'icons/obj/food/piecake.dmi' + action_icon_state = "frostypie" + + + + From 848f3910e6d4d896a9504874a06338c5d9071206 Mon Sep 17 00:00:00 2001 From: Useroth Date: Tue, 28 May 2019 09:32:59 +0200 Subject: [PATCH 4/8] Oops. Now it compiles fine. --- code/modules/clothing/shoes/taeclowndo.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/shoes/taeclowndo.dm b/code/modules/clothing/shoes/taeclowndo.dm index 3a4612933d..20d9fa6b70 100644 --- a/code/modules/clothing/shoes/taeclowndo.dm +++ b/code/modules/clothing/shoes/taeclowndo.dm @@ -12,9 +12,9 @@ . = ..() if(!ishuman(user)) return - if(!(user.has_trait(TRAIT_CLUMSY)) && !(user.mind && user.mind.assigned_role == "Clown")) - return var/mob/living/carbon/human/H = user + if(!(H.has_trait(TRAIT_CLUMSY)) && !(H.mind && H.mind.assigned_role == "Clown")) + return if(slot == SLOT_SHOES) spells = new for(var/spell in spelltypes) From 16826eba6618050867c7cbf8b5f84d1c7b8f0cf1 Mon Sep 17 00:00:00 2001 From: Useroth Date: Wed, 29 May 2019 08:45:21 +0200 Subject: [PATCH 5/8] Tweaks n' stuff. --- .../modules/food_and_drinks/food/snacks_pie.dm | 3 +++ code/modules/spells/spell_types/godhand.dm | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm index 04177783e6..1ec65d3df3 100644 --- a/code/modules/food_and_drinks/food/snacks_pie.dm +++ b/code/modules/food_and_drinks/food/snacks_pie.dm @@ -57,6 +57,9 @@ H.add_overlay(creamoverlay) H.creamed = TRUE SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "creampie", /datum/mood_event/creampie) + for(var/atom/movable/A in contents) + A.forceMove(T) + A.throw_at(hit_atom, 1, 1) qdel(src) /obj/item/reagent_containers/food/snacks/pie/cream/nostun diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index 5a94b19e7f..e4db45123b 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -104,10 +104,9 @@ icon = 'icons/mecha/mecha_equipment.dmi' icon_state = "mecha_honker" -/obj/item/melee/touch_attack/megahonk/afterattack(atom/target, mob/user, proximity) - if(!iscarbon(target)) +/obj/item/melee/touch_attack/megahonk/afterattack(atom/target, mob/living/carbon/user, proximity) + if(!proximity || !iscarbon(target) || !iscarbon(user) || user.handcuffed) return - user.say(catchphrase, forced = "spell") playsound(get_turf(target), on_use_sound,100,1) for(var/mob/living/carbon/M in (hearers(1, target) - user)) //3x3 around the target, not affecting the user @@ -149,15 +148,14 @@ to_chat(user, "You smear \the [src] on your chest! ") qdel(src) -/obj/item/melee/touch_attack/bspie/afterattack(atom/target, mob/user, proximity) +/obj/item/melee/touch_attack/bspie/afterattack(atom/target, mob/living/carbon/user, proximity) + if(!proximity || !iscarbon(target) || !iscarbon(user) || user.handcuffed) + return if(target == user) to_chat(user, "You smear \the [src] on your chest!") qdel(src) return - if(!iscarbon(target)) - return var/mob/living/carbon/M = target - var/obj/item/bodypart/head = M.get_bodypart("head") user.visible_message("[user] is trying to stuff [M]\s body into \the [src]!") if(do_mob(user, M, 250)) @@ -167,10 +165,14 @@ playsound(get_turf(target), on_use_sound, 50, 1) + /* + var/obj/item/bodypart/head = M.get_bodypart("head") if(head) head.drop_limb() - head.throw_at(get_turf(head), 1, 1, user) + head.throw_at(get_turf(head), 1, 1) qdel(M) + */ + M.forceMove(pie) charges-- From d8d9d6efebd1d907a6a796ba4f3f041460a2d355 Mon Sep 17 00:00:00 2001 From: Useroth Date: Wed, 29 May 2019 23:45:25 +0200 Subject: [PATCH 6/8] Tweaks. Also, eating human pies makes them chestburst you a'la monkey cubes. --- .../food_and_drinks/food/snacks_pie.dm | 25 ++++++++++++++++--- code/modules/spells/spell_types/godhand.dm | 2 +- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm index 1ec65d3df3..8264b4153e 100644 --- a/code/modules/food_and_drinks/food/snacks_pie.dm +++ b/code/modules/food_and_drinks/food/snacks_pie.dm @@ -57,14 +57,33 @@ H.add_overlay(creamoverlay) H.creamed = TRUE SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "creampie", /datum/mood_event/creampie) - for(var/atom/movable/A in contents) - A.forceMove(T) - A.throw_at(hit_atom, 1, 1) qdel(src) /obj/item/reagent_containers/food/snacks/pie/cream/nostun stunning = FALSE +/obj/item/reagent_containers/food/snacks/pie/cream/body + +/obj/item/reagent_containers/food/snacks/pie/cream/body/Destroy() + var/turf/T = get_turf(src) + for(var/atom/movable/A in contents) + A.forceMove(T) + A.throw_at(T, 1, 1) + . = ..() + +/obj/item/reagent_containers/food/snacks/pie/cream/body/On_Consume(mob/living/carbon/M) + if(!reagents.total_volume) //so that it happens on the last bite + if(iscarbon(M) && contents.len) + var/turf/T = get_turf(src) + for(var/atom/movable/A in contents) + A.forceMove(T) + A.throw_at(T, 1, 1) + M.visible_message("[src] bursts out of [M]!") + M.emote("scream") + M.Knockdown(40) + M.adjustBruteLoss(60) + return ..() + /obj/item/reagent_containers/food/snacks/pie/berryclafoutis name = "berry clafoutis" desc = "No black birds, this is a good sign." diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index e4db45123b..a08b5baa13 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -160,7 +160,7 @@ user.visible_message("[user] is trying to stuff [M]\s body into \the [src]!") if(do_mob(user, M, 250)) var/name = M.real_name - var/obj/item/reagent_containers/food/snacks/pie/cream/pie = new(get_turf(M)) + var/obj/item/reagent_containers/food/snacks/pie/cream/body/pie = new(get_turf(M)) pie.name = "\improper [name] [pie.name]" playsound(get_turf(target), on_use_sound, 50, 1) From 8af39b8da7bf2f6f67e5c42cf57542a0281d3e37 Mon Sep 17 00:00:00 2001 From: Useroth <37159550+Useroth@users.noreply.github.com> Date: Sat, 1 Jun 2019 04:16:37 +0200 Subject: [PATCH 7/8] Update godhand.dm --- code/modules/spells/spell_types/godhand.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index a08b5baa13..578b18a4e0 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -120,9 +120,8 @@ M.stuttering += 20*mul M.adjustEarDamage(0, 30*mul) M.Knockdown(60*mul) - if(prob(30)) + if(prob(40)) M.Stun(200*mul) - M.Unconscious(80*mul) else M.Jitter(500*mul) @@ -178,4 +177,4 @@ charges-- if(charges <= 0) - qdel(src) \ No newline at end of file + qdel(src) From a46312ede606e9f5949015e5f1c501d94415573f Mon Sep 17 00:00:00 2001 From: Useroth <37159550+Useroth@users.noreply.github.com> Date: Sat, 1 Jun 2019 04:20:27 +0200 Subject: [PATCH 8/8] Update godhand.dm --- code/modules/spells/spell_types/godhand.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index 578b18a4e0..06d1fc3dc5 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -121,7 +121,7 @@ M.adjustEarDamage(0, 30*mul) M.Knockdown(60*mul) if(prob(40)) - M.Stun(200*mul) + M.Knockdown(200*mul) else M.Jitter(500*mul)