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"), "