From 0e371e1b93bd7fd48810890ba4f23b63f9cf8e2a Mon Sep 17 00:00:00 2001 From: Sadhorizon <108196626+Sadhorizon@users.noreply.github.com> Date: Wed, 13 Sep 2023 22:25:09 +0200 Subject: [PATCH] Unathi (and Ash Walkers) can ignite stuff now, removes tail lash. (#21981) * stuff * works! * bye bye tailwhip * renames the ability * accidental enter * snowball's reviews * tweak * less tight timing you can now ignite on 3u instead of 4 * no longer works with covered mouth * ash walkers * most of jimkils reviews + unathi also have c/d now * early returns, uses less fuel, comments * hal's reviews * redundant comment * hal's suggestion * sounds & tweaks * an unnecessary check apparently * so that check WAS needed * henri reviews, tweaked loc of sounds, timer tweaks * henri review * Update code/modules/mob/living/carbon/human/species/unathi.dm Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> --------- Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> --- code/game/objects/items/weapons/cigs.dm | 7 ++ code/game/objects/items/weapons/lighters.dm | 39 ++++++++- .../mob/living/carbon/human/species/unathi.dm | 79 ++++++++++-------- icons/obj/cigarettes.dmi | Bin 5677 -> 5661 bytes sound/effects/unathiignite.ogg | Bin 0 -> 13195 bytes 5 files changed, 90 insertions(+), 35 deletions(-) create mode 100644 sound/effects/unathiignite.ogg diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index 321790e6343..61b2e55b8d3 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -99,6 +99,13 @@ LIGHTERS ARE IN LIGHTERS.DM if(L.lit) light("After some fiddling, [user] manages to light [user.p_their()] [name] with [L].") + else if(istype(I, /obj/item/match/unathi)) + var/obj/item/match/unathi/U = I + if(U.lit) + playsound(user.loc, 'sound/effects/unathiignite.ogg', 40, FALSE) + light("[user] spits fire at [user.p_their()] [name], igniting it.") + U.matchburnout() + else if(istype(I, /obj/item/match)) var/obj/item/match/M = I if(M.lit) diff --git a/code/game/objects/items/weapons/lighters.dm b/code/game/objects/items/weapons/lighters.dm index 70a1ca7b42f..a33b38bb763 100644 --- a/code/game/objects/items/weapons/lighters.dm +++ b/code/game/objects/items/weapons/lighters.dm @@ -275,7 +275,19 @@ if(M == user) cig.attackby(src, user) else - cig.light("[user] holds [src] out for [M], and lights [cig].") + if(istype(src, /obj/item/match/unathi)) + if(prob(50)) + cig.light("[user] spits fire at [M], lighting [cig] and nearly burning [user.p_their()] face!") + matchburnout() + else + cig.light("[user] spits fire at [M], burning [user.p_their()] face and lighting [cig] in the process.") + var/obj/item/organ/external/head/affecting = M.get_organ("head") + affecting.receive_damage(0, 5) + M.UpdateDamageIcon() + playsound(user.loc, 'sound/effects/unathiignite.ogg', 40, FALSE) + + else + cig.light("[user] holds [src] out for [M], and lights [cig].") playsound(src, 'sound/items/lighter/light.ogg', 25, TRUE) else ..() @@ -300,3 +312,28 @@ /obj/item/match/firebrand/New() ..() matchignite() + +/obj/item/match/unathi + name = "small blaze" + desc = "A little flame of your own, currently located dangerously in your mouth." + icon_state = "match_unathi" + attack_verb = null + force = 0 + flags = DROPDEL | ABSTRACT + origin_tech = null + lit = TRUE + w_class = WEIGHT_CLASS_BULKY //to prevent it going to pockets + +/obj/item/match/unathi/Initialize(mapload) + . = ..() + START_PROCESSING(SSobj, src) + +/obj/item/match/unathi/matchburnout() + if(!lit) + return + lit = FALSE //to avoid a qdel loop + qdel(src) + +/obj/item/match/unathi/Destroy() + . = ..() + STOP_PROCESSING(SSobj, src) diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm index d6e74977fe0..b2740ef26d3 100644 --- a/code/modules/mob/living/carbon/human/species/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/unathi.dm @@ -57,49 +57,46 @@ "is twisting their own neck!", "is holding their breath!") - /datum/species/unathi/on_species_gain(mob/living/carbon/human/H) ..() - var/datum/action/innate/tail_lash/lash = new() - lash.Grant(H) + var/datum/action/innate/ignite/fire = new() + fire.Grant(H) /datum/species/unathi/on_species_loss(mob/living/carbon/human/H) ..() - for(var/datum/action/innate/tail_lash/lash in H.actions) - lash.Remove(H) + for(var/datum/action/innate/ignite/fire in H.actions) + fire.Remove(H) -/datum/action/innate/tail_lash - name = "Tail lash" - icon_icon = 'icons/effects/effects.dmi' - button_icon_state = "tail" - check_flags = AB_CHECK_LYING | AB_CHECK_CONSCIOUS | AB_CHECK_STUNNED +/datum/action/innate/ignite + name = "Ignite" + desc = "A fire forms in your mouth, fierce enough to... light a cigarette. Requires you to drink welding fuel beforehand." + icon_icon = 'icons/obj/cigarettes.dmi' + button_icon_state = "match_unathi" + var/cooldown = 0 + var/cooldown_duration = 20 SECONDS + var/welding_fuel_used = 3 //one sip, with less strict timing + check_flags = AB_CHECK_HANDS_BLOCKED -/datum/action/innate/tail_lash/Activate() +/datum/action/innate/ignite/Activate() var/mob/living/carbon/human/user = owner - if((user.restrained() && user.pulledby) || user.buckled) - to_chat(user, "You need freedom of movement to tail lash!") + if(world.time <= cooldown) + to_chat(user, "Your throat hurts too much to do it right now. Wait [round((cooldown - world.time) / 10)] seconds and try again.") return - if(user.getStaminaLoss() >= 50) - to_chat(user, "Rest before tail lashing again!") - return - for(var/mob/living/carbon/human/C in orange(1)) - var/obj/item/organ/external/E = C.get_organ(pick("l_leg", "r_leg", "l_foot", "r_foot", "groin")) - if(E) - user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("[user] smacks [C] in [E] with their tail! ", "You hit [C] in [E] with your tail!") - user.adjustStaminaLoss(15) - C.apply_damage(5, BRUTE, E) - user.spin(20, 1) - playsound(user.loc, 'sound/weapons/slash.ogg', 50, 0) - add_attack_logs(user, C, "tail whipped") - if(user.restrained()) - if(prob(50)) - user.Weaken(10 SECONDS) - user.visible_message("[user] loses [user.p_their()] balance!", "You lose your balance!") - return - if(user.getStaminaLoss() >= 60) //Bit higher as you don't need to start, just would need to keep going with the tail lash. - to_chat(user, "You run out of momentum!") - return + if(!welding_fuel_used || user.reagents.has_reagent("fuel", welding_fuel_used)) + if((user.head?.flags_cover & HEADCOVERSMOUTH) || (user.wear_mask?.flags_cover & MASKCOVERSMOUTH) && !user.wear_mask?.up) + to_chat(user, "Your mouth is covered.") + return + var/obj/item/match/unathi/fire = new(user.loc, src) + if(user.put_in_hands(fire)) + to_chat(user, "You ignite a small flame in your mouth.") + user.reagents.remove_reagent("fuel", 50) //slightly high, but I'd rather avoid it being TOO spammable. + cooldown = world.time + cooldown_duration + else + qdel(fire) + to_chat(user, "You don't have any free hands.") + else + to_chat(user, "You need to drink welding fuel first.") + /datum/species/unathi/handle_death(gibbed, mob/living/carbon/human/H) H.stop_tail_wagging() @@ -128,3 +125,17 @@ "appendix" = /obj/item/organ/internal/appendix, "eyes" = /obj/item/organ/internal/eyes/unathi ) + +/datum/species/unathi/ashwalker/on_species_gain(mob/living/carbon/human/H) + var/datum/action/innate/ignite/ash_walker/fire = new() + fire.Grant(H) + +/datum/species/unathi/ashwalker/on_species_loss(mob/living/carbon/human/H) + ..() + for(var/datum/action/innate/ignite/ash_walker/fire in H.actions) + fire.Remove(H) + +/datum/action/innate/ignite/ash_walker + desc = "You form a fire in your mouth, fierce enough to... light a cigarette." + cooldown_duration = 3 MINUTES + welding_fuel_used = 0 // Ash walkers dont need welding fuel to use ignite diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi index 11277d5e01dc0418aaa6663c47767a14a73c8633..8447324f71f875b95d3a007812415b5d21075acf 100644 GIT binary patch delta 5214 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 delta 5228 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