diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 8d1068baa13..f8e679352bf 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -260,6 +260,10 @@ */ /datum/antagonist/changeling/proc/on_life(datum/source, seconds_per_tick, times_fired) SIGNAL_HANDLER + if(isliving(owner.current)) + var/mob/living/living_owner = owner.current + if(living_owner.fire_stacks && living_owner.on_fire) + return // No chemical regen while on fire. var/delta_time = DELTA_WORLD_TIME(SSmobs) diff --git a/code/modules/antagonists/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm index 23b4f9548c4..d5152772e51 100644 --- a/code/modules/antagonists/changeling/changeling_power.dm +++ b/code/modules/antagonists/changeling/changeling_power.dm @@ -81,6 +81,10 @@ the same goes for Remove(). if you override Remove(), call parent or else your p /datum/action/changeling/proc/can_sting(mob/living/user, mob/living/target) if(!can_be_used_by(user)) return FALSE + if(user.fire_stacks && user.on_fire) + user.balloon_alert(user, "on fire!") + to_chat(user, span_boldwarning("WE CANNOT DO THIS WHILE ENGULFED IN FLAMES!!! PUT OUT THE FIRE FIRST!!!")) + return FALSE var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) if(changeling.chem_charges < chemical_cost) user.balloon_alert(user, "needs [chemical_cost] chemicals!") diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index d82ec1d1318..167c1c697cd 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -173,15 +173,24 @@ \***************************************/ /datum/action/changeling/weapon/arm_blade name = "Arm Blade" - desc = "We reform one of our arms into a deadly blade. Costs 20 chemicals." - helptext = "We may retract our armblade in the same manner as we form it. Cannot be used while in lesser form." + desc = "We reform one of our arms into a deadly blade that breaks after a number of hits, improvable by absorbing genomes. Costs 40 chemicals." + helptext = "We may retract our armblade in the same manner as we form it. Organic tissue is not perfect; the armblade will break after it is used too much. The more genomes we absorb, the stronger it is. Cannot be used while in lesser form." button_icon_state = "armblade" - chemical_cost = 20 - dna_cost = 2 + chemical_cost = 30 + dna_cost = 3 req_human = TRUE weapon_type = /obj/item/melee/arm_blade weapon_name_simple = "blade" +/datum/action/changeling/weapon/arm_blade/sting_action(mob/living/carbon/user) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) //So we can read the absorbed_count. + if(!changeling) + return + + var/obj/item/melee/arm_blade/blade = ..() + blade.remaining_uses = round(changeling.absorbed_count * 3) + return TRUE + /obj/item/melee/arm_blade name = "arm blade" desc = "A grotesque blade made out of bone and flesh that cleaves through people as a hot knife through butter." @@ -203,8 +212,10 @@ wound_bonus = 10 bare_wound_bonus = 10 armour_penetration = 35 + resistance_flags = FLAMMABLE var/can_drop = FALSE var/fake = FALSE + var/remaining_uses /obj/item/melee/arm_blade/Initialize(mapload,silent,synthetic) . = ..() @@ -250,6 +261,15 @@ span_hear("You hear a metal screeching sound.")) opening.open(BYPASS_DOOR_CHECKS) + if(remaining_uses <= 1) + if(ishuman(loc)) + var/mob/living/carbon/human/changeling = loc + changeling.visible_message(span_warning("With a sickening crunch, [changeling] reforms [changeling.p_their()] [src] into an arm!"), span_notice("We assimilate our armblade into our body."), "You hear organic matter ripping and tearing!") + qdel(src) + else + remaining_uses-- + + /obj/item/melee/arm_blade/dropped(mob/user) ..() if(can_drop) @@ -297,6 +317,7 @@ throw_range = 0 throw_speed = 0 can_hold_up = FALSE + resistance_flags = FLAMMABLE /obj/item/gun/magic/tentacle/Initialize(mapload, silent) . = ..() @@ -493,6 +514,9 @@ S.remaining_uses = round(changeling.absorbed_count * 3) return TRUE +/datum/armor/item_shield/changeling + fire = -100 + /obj/item/shield/changeling name = "shield-like mass" desc = "A mass of tough, boney tissue. You can still see the fingers as a twisted pattern in the shield." @@ -502,6 +526,8 @@ lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' block_chance = 50 + armor_type = /datum/armor/item_shield/changeling + resistance_flags = FLAMMABLE var/remaining_uses //Set by the changeling ability. @@ -512,7 +538,7 @@ loc.visible_message(span_warning("The end of [loc.name]\'s hand inflates rapidly, forming a huge shield-like mass!"), span_warning("We inflate our hand into a strong shield."), span_hear("You hear organic matter ripping and tearing!")) /obj/item/shield/changeling/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) - if(remaining_uses < 1) + if(remaining_uses <= 1) if(ishuman(loc)) var/mob/living/carbon/human/H = loc H.visible_message(span_warning("With a sickening crunch, [H] reforms [H.p_their()] shield into an arm!"), span_notice("We assimilate our shield into our body"), "