From cfd3f7a4fd2b2f94a896daf0eb2694b6794a30da Mon Sep 17 00:00:00 2001 From: imsxz Date: Wed, 11 Apr 2018 08:33:01 -0400 Subject: [PATCH 1/2] fixes changelings stinging other lings twice --- .../changeling/powers/tiny_prick.dm | 246 ++++++++++++++++++ 1 file changed, 246 insertions(+) diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm index 5c3ea52952..6e9d7b6d4c 100644 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/effect/proc_holder/changeling/sting name = "Tiny Prick" desc = "Stabby stabby." @@ -244,3 +245,248 @@ if(target.reagents) target.reagents.add_reagent("frostoil", 30) return TRUE +======= +/obj/effect/proc_holder/changeling/sting + name = "Tiny Prick" + desc = "Stabby stabby." + var/sting_icon = null + +/obj/effect/proc_holder/changeling/sting/Click() + var/mob/user = usr + if(!user || !user.mind) + return + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + if(!changeling) + return + if(!changeling.chosen_sting) + set_sting(user) + else + unset_sting(user) + return + +/obj/effect/proc_holder/changeling/sting/proc/set_sting(mob/user) + to_chat(user, "We prepare our sting, use alt+click or middle mouse button on target to sting them.") + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + changeling.chosen_sting = src + + user.hud_used.lingstingdisplay.icon_state = sting_icon + user.hud_used.lingstingdisplay.invisibility = 0 + +/obj/effect/proc_holder/changeling/sting/proc/unset_sting(mob/user) + to_chat(user, "We retract our sting, we can't sting anyone for now.") + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + changeling.chosen_sting = null + + user.hud_used.lingstingdisplay.icon_state = null + user.hud_used.lingstingdisplay.invisibility = INVISIBILITY_ABSTRACT + +/mob/living/carbon/proc/unset_sting() + if(mind) + var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling) + if(changeling && changeling.chosen_sting) + changeling.chosen_sting.unset_sting(src) + +/obj/effect/proc_holder/changeling/sting/can_sting(mob/user, mob/target) + if(!..()) + return + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + if(!changeling.chosen_sting) + to_chat(user, "We haven't prepared our sting yet!") + if(!iscarbon(target)) + return + if(!isturf(user.loc)) + return + if(!AStar(user, target.loc, /turf/proc/Distance, changeling.sting_range, simulated_only = 0)) + return + return 1 + +/obj/effect/proc_holder/changeling/sting/sting_feedback(mob/user, mob/target) + if(!target) + return + to_chat(user, "We stealthily sting [target.name].") + if(target.mind && target.mind.has_antag_datum(/datum/antagonist/changeling)) + to_chat(target, "You feel a tiny prick.") + return 1 + + +/obj/effect/proc_holder/changeling/sting/transformation + name = "Transformation Sting" + desc = "We silently sting a human, injecting a retrovirus that forces them to transform." + helptext = "The victim will transform much like a changeling would. Does not provide a warning to others. Mutations will not be transferred, and monkeys will become human." + sting_icon = "sting_transform" + chemical_cost = 50 + dna_cost = 3 + var/datum/changelingprofile/selected_dna = null + +/obj/effect/proc_holder/changeling/sting/transformation/Click() + var/mob/user = usr + var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + if(changeling.chosen_sting) + unset_sting(user) + return + selected_dna = changeling.select_dna("Select the target DNA: ", "Target DNA") + if(!selected_dna) + return + if(NOTRANSSTING in selected_dna.dna.species.species_traits) + to_chat(user, "That DNA is not compatible with changeling retrovirus!") + return + ..() + +/obj/effect/proc_holder/changeling/sting/transformation/can_sting(mob/user, mob/living/carbon/target) + if(!..()) + return + if((target.has_trait(TRAIT_HUSK)) || !iscarbon(target) || (NOTRANSSTING in target.dna.species.species_traits)) + to_chat(user, "Our sting appears ineffective against its DNA.") + return 0 + return 1 + +/obj/effect/proc_holder/changeling/sting/transformation/sting_action(mob/user, mob/target) + add_logs(user, target, "stung", "transformation sting", " new identity is [selected_dna.dna.real_name]") + var/datum/dna/NewDNA = selected_dna.dna + if(ismonkey(target)) + to_chat(user, "Our genes cry out as we sting [target.name]!") + + var/mob/living/carbon/C = target + . = TRUE + if(istype(C)) + C.real_name = NewDNA.real_name + NewDNA.transfer_identity(C) + if(ismonkey(C)) + C.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG) + C.updateappearance(mutcolor_update=1) + + +/obj/effect/proc_holder/changeling/sting/false_armblade + name = "False Armblade Sting" + desc = "We silently sting a human, injecting a retrovirus that mutates their arm to temporarily appear as an armblade." + helptext = "The victim will form an armblade much like a changeling would, except the armblade is dull and useless." + sting_icon = "sting_armblade" + chemical_cost = 20 + dna_cost = 1 + +/obj/item/melee/arm_blade/false + desc = "A grotesque mass of flesh that used to be your arm. Although it looks dangerous at first, you can tell it's actually quite dull and useless." + force = 5 //Basically as strong as a punch + +/obj/item/melee/arm_blade/false/afterattack(atom/target, mob/user, proximity) + return + +/obj/effect/proc_holder/changeling/sting/false_armblade/can_sting(mob/user, mob/target) + if(!..()) + return + if(isliving(target)) + var/mob/living/L = target + if((L.has_trait(TRAIT_HUSK)) || !L.has_dna()) + to_chat(user, "Our sting appears ineffective against its DNA.") + return 0 + return 1 + +/obj/effect/proc_holder/changeling/sting/false_armblade/sting_action(mob/user, mob/target) + add_logs(user, target, "stung", object="falso armblade sting") + + var/obj/item/held = target.get_active_held_item() + if(held && !target.dropItemToGround(held)) + to_chat(user, "[held] is stuck to their hand, you cannot grow a false armblade over it!") + return + + if(ismonkey(target)) + to_chat(user, "Our genes cry out as we sting [target.name]!") + + var/obj/item/melee/arm_blade/false/blade = new(target,1) + target.put_in_hands(blade) + target.visible_message("A grotesque blade forms around [target.name]\'s arm!", "Your arm twists and mutates, transforming into a horrific monstrosity!", "You hear organic matter ripping and tearing!") + playsound(target, 'sound/effects/blobattack.ogg', 30, 1) + + addtimer(CALLBACK(src, .proc/remove_fake, target, blade), 600) + return TRUE + +/obj/effect/proc_holder/changeling/sting/false_armblade/proc/remove_fake(mob/target, obj/item/melee/arm_blade/false/blade) + playsound(target, 'sound/effects/blobattack.ogg', 30, 1) + target.visible_message("With a sickening crunch, \ + [target] reforms their [blade.name] into an arm!", + "[blade] reforms back to normal.", + "Your eyes burn horrifically!") + target.become_nearsighted(EYE_DAMAGE) + target.blind_eyes(20) + target.blur_eyes(40) + return TRUE + +/obj/effect/proc_holder/changeling/sting/LSD + name = "Hallucination Sting" + desc = "Causes terror in the target." + helptext = "We evolve the ability to sting a target with a powerful hallucinogenic chemical. The target does not notice they have been stung, and the effect occurs after 30 to 60 seconds." + sting_icon = "sting_lsd" + chemical_cost = 10 + dna_cost = 1 + +/obj/effect/proc_holder/changeling/sting/LSD/sting_action(mob/user, mob/living/carbon/target) + add_logs(user, target, "stung", "LSD sting") + addtimer(CALLBACK(src, .proc/hallucination_time, target), rand(300,600)) + return TRUE + +/obj/effect/proc_holder/changeling/sting/LSD/proc/hallucination_time(mob/living/carbon/target) + if(target) + target.hallucination = max(400, target.hallucination) + +/obj/effect/proc_holder/changeling/sting/cryo + name = "Cryogenic Sting" + desc = "We silently sting a human with a cocktail of chemicals that freeze them." + helptext = "Does not provide a warning to the victim, though they will likely realize they are suddenly freezing." + sting_icon = "sting_cryo" + chemical_cost = 15 + dna_cost = 2 + +/obj/effect/proc_holder/changeling/sting/cryo/sting_action(mob/user, mob/target) + add_logs(user, target, "stung", "cryo sting") + if(target.reagents) + target.reagents.add_reagent("frostoil", 30) + return TRUE +>>>>>>> a9aa745... fixes #36813 (#37110) From 508e4f4d37f2206f1a729725251cfa8d63d32351 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Thu, 12 Apr 2018 07:03:26 -0500 Subject: [PATCH 2/2] Update tiny_prick.dm --- .../changeling/powers/tiny_prick.dm | 249 ------------------ 1 file changed, 249 deletions(-) diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm index 6e9d7b6d4c..10b86ac1ad 100644 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -1,251 +1,3 @@ -<<<<<<< HEAD -/obj/effect/proc_holder/changeling/sting - name = "Tiny Prick" - desc = "Stabby stabby." - var/sting_icon = null - -/obj/effect/proc_holder/changeling/sting/Click() - var/mob/user = usr - if(!user || !user.mind) - return - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(!changeling) - return - if(!changeling.chosen_sting) - set_sting(user) - else - unset_sting(user) - return - -/obj/effect/proc_holder/changeling/sting/proc/set_sting(mob/user) - to_chat(user, "We prepare our sting, use alt+click or middle mouse button on target to sting them.") - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - changeling.chosen_sting = src - - user.hud_used.lingstingdisplay.icon_state = sting_icon - user.hud_used.lingstingdisplay.invisibility = 0 - -/obj/effect/proc_holder/changeling/sting/proc/unset_sting(mob/user) - to_chat(user, "We retract our sting, we can't sting anyone for now.") - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - changeling.chosen_sting = null - - user.hud_used.lingstingdisplay.icon_state = null - user.hud_used.lingstingdisplay.invisibility = INVISIBILITY_ABSTRACT - -/mob/living/carbon/proc/unset_sting() - if(mind) - var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling && changeling.chosen_sting) - changeling.chosen_sting.unset_sting(src) - -/obj/effect/proc_holder/changeling/sting/can_sting(mob/user, mob/target) - if(!..()) - return - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(!changeling.chosen_sting) - to_chat(user, "We haven't prepared our sting yet!") - if(!iscarbon(target)) - return - if(!isturf(user.loc)) - return - if(!AStar(user, target.loc, /turf/proc/Distance, changeling.sting_range, simulated_only = 0)) - return - if(target.mind && target.mind.has_antag_datum(/datum/antagonist/changeling)) - sting_feedback(user, target) - changeling.chem_charges -= chemical_cost //?? - return 1 - -/obj/effect/proc_holder/changeling/sting/sting_feedback(mob/user, mob/target) - if(!target) - return - to_chat(user, "We stealthily sting [target.name].") - if(target.mind && target.mind.has_antag_datum(/datum/antagonist/changeling)) - to_chat(target, "You feel a tiny prick.") - return 1 - - -/obj/effect/proc_holder/changeling/sting/transformation - name = "Transformation Sting" - desc = "We silently sting a human, injecting a retrovirus that forces them to transform." - helptext = "The victim will transform much like a changeling would. Does not provide a warning to others. Mutations will not be transferred, and monkeys will become human." - sting_icon = "sting_transform" - chemical_cost = 50 - dna_cost = 3 - var/datum/changelingprofile/selected_dna = null - -/obj/effect/proc_holder/changeling/sting/transformation/Click() - var/mob/user = usr - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling.chosen_sting) - unset_sting(user) - return - selected_dna = changeling.select_dna("Select the target DNA: ", "Target DNA") - if(!selected_dna) - return - if(NOTRANSSTING in selected_dna.dna.species.species_traits) - to_chat(user, "That DNA is not compatible with changeling retrovirus!") - return - ..() - -/obj/effect/proc_holder/changeling/sting/transformation/can_sting(mob/user, mob/living/carbon/target) - if(!..()) - return - if((target.has_trait(TRAIT_HUSK)) || !iscarbon(target) || (NOTRANSSTING in target.dna.species.species_traits)) - to_chat(user, "Our sting appears ineffective against its DNA.") - return 0 - return 1 - -/obj/effect/proc_holder/changeling/sting/transformation/sting_action(mob/user, mob/target) - add_logs(user, target, "stung", "transformation sting", " new identity is [selected_dna.dna.real_name]") - var/datum/dna/NewDNA = selected_dna.dna - if(ismonkey(target)) - to_chat(user, "Our genes cry out as we sting [target.name]!") - - var/mob/living/carbon/C = target - . = TRUE - if(istype(C)) - C.real_name = NewDNA.real_name - NewDNA.transfer_identity(C) - if(ismonkey(C)) - C.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG) - C.updateappearance(mutcolor_update=1) - - -/obj/effect/proc_holder/changeling/sting/false_armblade - name = "False Armblade Sting" - desc = "We silently sting a human, injecting a retrovirus that mutates their arm to temporarily appear as an armblade." - helptext = "The victim will form an armblade much like a changeling would, except the armblade is dull and useless." - sting_icon = "sting_armblade" - chemical_cost = 20 - dna_cost = 1 - -/obj/item/melee/arm_blade/false - desc = "A grotesque mass of flesh that used to be your arm. Although it looks dangerous at first, you can tell it's actually quite dull and useless." - force = 5 //Basically as strong as a punch - -/obj/item/melee/arm_blade/false/afterattack(atom/target, mob/user, proximity) - return - -/obj/effect/proc_holder/changeling/sting/false_armblade/can_sting(mob/user, mob/target) - if(!..()) - return - if(isliving(target)) - var/mob/living/L = target - if((L.has_trait(TRAIT_HUSK)) || !L.has_dna()) - to_chat(user, "Our sting appears ineffective against its DNA.") - return 0 - return 1 - -/obj/effect/proc_holder/changeling/sting/false_armblade/sting_action(mob/user, mob/target) - add_logs(user, target, "stung", object="falso armblade sting") - - var/obj/item/held = target.get_active_held_item() - if(held && !target.dropItemToGround(held)) - to_chat(user, "[held] is stuck to their hand, you cannot grow a false armblade over it!") - return - - if(ismonkey(target)) - to_chat(user, "Our genes cry out as we sting [target.name]!") - - var/obj/item/melee/arm_blade/false/blade = new(target,1) - target.put_in_hands(blade) - target.visible_message("A grotesque blade forms around [target.name]\'s arm!", "Your arm twists and mutates, transforming into a horrific monstrosity!", "You hear organic matter ripping and tearing!") - playsound(target, 'sound/effects/blobattack.ogg', 30, 1) - - addtimer(CALLBACK(src, .proc/remove_fake, target, blade), 600) - return TRUE - -/obj/effect/proc_holder/changeling/sting/false_armblade/proc/remove_fake(mob/target, obj/item/melee/arm_blade/false/blade) - playsound(target, 'sound/effects/blobattack.ogg', 30, 1) - target.visible_message("With a sickening crunch, \ - [target] reforms their [blade.name] into an arm!", - "[blade] reforms back to normal.", - "Your eyes burn horrifically!") - target.become_nearsighted(EYE_DAMAGE) - target.blind_eyes(20) - target.blur_eyes(40) - return TRUE - -/obj/effect/proc_holder/changeling/sting/LSD - name = "Hallucination Sting" - desc = "Causes terror in the target." - helptext = "We evolve the ability to sting a target with a powerful hallucinogenic chemical. The target does not notice they have been stung, and the effect occurs after 30 to 60 seconds." - sting_icon = "sting_lsd" - chemical_cost = 10 - dna_cost = 1 - -/obj/effect/proc_holder/changeling/sting/LSD/sting_action(mob/user, mob/living/carbon/target) - add_logs(user, target, "stung", "LSD sting") - addtimer(CALLBACK(src, .proc/hallucination_time, target), rand(300,600)) - return TRUE - -/obj/effect/proc_holder/changeling/sting/LSD/proc/hallucination_time(mob/living/carbon/target) - if(target) - target.hallucination = max(400, target.hallucination) - -/obj/effect/proc_holder/changeling/sting/cryo - name = "Cryogenic Sting" - desc = "We silently sting a human with a cocktail of chemicals that freeze them." - helptext = "Does not provide a warning to the victim, though they will likely realize they are suddenly freezing." - sting_icon = "sting_cryo" - chemical_cost = 15 - dna_cost = 2 - -/obj/effect/proc_holder/changeling/sting/cryo/sting_action(mob/user, mob/target) - add_logs(user, target, "stung", "cryo sting") - if(target.reagents) - target.reagents.add_reagent("frostoil", 30) - return TRUE -======= /obj/effect/proc_holder/changeling/sting name = "Tiny Prick" desc = "Stabby stabby." @@ -489,4 +241,3 @@ if(target.reagents) target.reagents.add_reagent("frostoil", 30) return TRUE ->>>>>>> a9aa745... fixes #36813 (#37110)