diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 3aea31b9366..3900ba2ba33 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1196,12 +1196,6 @@ var/global/list/common_tools = list( return 0 if(istype(W, /obj/item/device/assembly/igniter)) return 1000 - if(istype(W, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass)) - var/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/G = W - if(G.on_fire) - return 700 - else - return 0 else return 0 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index a1a68ff5cf7..95a48aab38d 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -202,7 +202,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d to_chat(user, msg) -/obj/item/attack_hand(mob/user as mob) +/obj/item/attack_hand(mob/user as mob, var/pickupfireoverride = FALSE) if(!user) return 0 if(hasorgans(user)) var/mob/living/carbon/human/H = user @@ -216,7 +216,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d to_chat(user, "You try to move your [temp.name], but cannot!") return 0 - if(burn_state == ON_FIRE) + if(burn_state == ON_FIRE && !pickupfireoverride) var/mob/living/carbon/human/H = user if(istype(H)) if(H.gloves && (H.gloves.max_heat_protection_temperature > 360)) diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index 547bc6e1f8d..766fe92c1ee 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -75,11 +75,24 @@ LIGHTERS ARE IN LIGHTERS.DM if(Z.lit) light("With a single flick of their wrist, [user] smoothly lights their [name] with their [W]. Damn they're cool.") + else if(istype(W, /obj/item/weapon/lighter)) + var/obj/item/weapon/lighter/L = W + if(L.lit) + light("After some fiddling, [user] manages to light their [name] with [W].") + + else if(istype(W, /obj/item/weapon/match)) + var/obj/item/weapon/match/M = W + if(M.lit == 1) + light("[user] lights their [name] with their [W].") + else if(istype(W, /obj/item/weapon/melee/energy/sword/saber)) var/obj/item/weapon/melee/energy/sword/saber/S = W if(S.active) light("[user] swings their [W], barely missing their nose. They light their [name] in the process.") + else if(istype(W, /obj/item/device/assembly/igniter)) + light("[user] fiddles with [W], and manages to light their [name].") + else if(istype(W, /obj/item/weapon/gun/magic/wand/fireball)) var/obj/item/weapon/gun/magic/wand/fireball/F = W if(F.charges) @@ -90,8 +103,6 @@ LIGHTERS ARE IN LIGHTERS.DM explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2) F.charges-- - else if(is_hot(W) > 600) - light("After some fiddling, [user] manages to light their [name] with [W].") //can't think of any other way to update the overlays :< user.update_inv_wear_mask() diff --git a/code/modules/food_and_drinks/drinks/drinks/shotglass.dm b/code/modules/food_and_drinks/drinks/drinks/shotglass.dm index e0f6b8be47c..55440cdd7bb 100644 --- a/code/modules/food_and_drinks/drinks/drinks/shotglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/shotglass.dm @@ -6,22 +6,17 @@ icon_state = "shotglass" amount_per_transfer_from_this = 15 volume = 15 - var/on_fire materials = list(MAT_GLASS=100) var/light_intensity = 2 light_color = LIGHT_COLOR_LIGHTBLUE -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/Destroy() - processing_objects.Remove(src) - return ..() - /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change() - handleFlaming() + if(!isShotFlammable() && burn_state == ON_FIRE) + extinguish() update_icon() /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/update_icon() overlays.Cut() - if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]1") @@ -33,91 +28,78 @@ filling.icon_state = "[icon_state]5" if(80 to INFINITY) filling.icon_state = "[icon_state]12" - filling.icon += mix_color_from_reagents(reagents.reagent_list) overlays += filling name = "shot glass of " + reagents.get_master_reagent_name() //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future. - if(on_fire) + if(burn_state == ON_FIRE) overlays += "shotglass_fire" name = "flaming [name]" else name = "shot glass" -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/attackby(obj/item/W, mob/living/carbon/human/user) - ..() - handleFlaming(W, user) +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/proc/clumsilyDrink(mob/living/carbon/human/user) //Clowns beware + if(burn_state != ON_FIRE) + return + user.visible_message("[user] pours [src] all over themself!", "You pour [src] all over yourself!", "You hear a 'whoompf' and a sizzle.") + reagents.reaction(user, TOUCH) + reagents.clear_reagents() + user.IgniteMob() + extinguish(silent = TRUE) -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/proc/handleFlaming(obj/item/W, mob/living/carbon/human/user) - if(!reagents && on_fire) //If no reagents exist inside the shot, it will obviously not sustain a burn - extinguishShot() - else if(!canBeFlaming() && on_fire) //If it's on fire, but can't sustain the flame, put it out - extinguishShot() - else if(canBeFlaming() && !on_fire && is_hot(W) > 300) //if it can burn yet not on fire, and is attacked by something hot, set it alight - user.visible_message("[user] sets [src] alight!", "You set [src] alight!", "You hear a gentle crackling.") - lightShot() - -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/proc/canBeFlaming() +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/proc/isShotFlammable() var/datum/reagent/R = reagents.get_master_reagent() if(istype(R, /datum/reagent/consumable/ethanol)) var/datum/reagent/consumable/ethanol/A = R if(A.volume >= 5 && A.alcohol_perc >= 0.35) //Only an approximation to if something's flammable but it will do return TRUE -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/proc/lightShot(var/silent) - on_fire = TRUE - processing_objects.Add(src) //So it can do stuff like set plasma clouds on fire +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/fire_act(global_overlay = FALSE, var/silent = FALSE) + if(!isShotFlammable() || burn_state == ON_FIRE) //You can't light a shot that's not flammable! + return + ..() set_light(light_intensity, null, light_color) if(!silent) visible_message("[src] begins to burn with a blue hue!") update_icon() -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/proc/extinguishShot(var/silent) - on_fire = FALSE - processing_objects.Remove(src) +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/extinguish(var/silent = FALSE) + ..() set_light(0) if(!silent) visible_message("The dancing flame on [src] dies out.") update_icon() -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/proc/clumsilyDrink(mob/living/carbon/human/user) //Clowns beware - if(!on_fire) - return - user.visible_message("[user] pours [src] all over themself!", "You pour [src] all over yourself!", "You hear a 'whoompf' and a sizzle.") - reagents.reaction(user, TOUCH) - reagents.clear_reagents() - user.adjust_fire_stacks(reagents.total_volume/10) - user.IgniteMob() - extinguishShot(TRUE) +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/burn() //Let's override fire deleting the reagents inside the shot + return -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/process() - if(on_fire) - reagents.chem_temp = min(reagents.chem_temp + 10, SHOT_FLAME_TEMPERATURE) - reagents.handle_reactions() - var/turf/L = get_turf(src) - if(L) - L.hotspot_expose(SHOT_FLAME_TEMPERATURE, 5) - return +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/attack(mob/living/carbon/human/user) + if((CLUMSY in user.mutations) && prob(50) && burn_state == ON_FIRE) + clumsilyDrink(user) else - processing_objects.Remove(src) + ..() + +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/attackby(obj/item/W) + ..() + if(is_hot(W) >= 600) + fire_act() + +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/attack_hand(mob/user, pickupfireoverride = TRUE) + ..() /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/attack_self(mob/living/carbon/human/user) ..() - if(!on_fire) + if(burn_state != ON_FIRE) return if((CLUMSY in user.mutations) && prob(50)) clumsilyDrink(user) else user.visible_message("[user] places their hand over [src] to put it out!", "You use your hand to extinguish [src]!") - extinguishShot() - -/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/attack(mob/living/carbon/human/user) - if((CLUMSY in user.mutations) && prob(50) && on_fire) - clumsilyDrink(user) - else - ..() + extinguish() /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/MouseDrop(mob/living/carbon/human/user) - if((CLUMSY in user.mutations) && prob(50) && on_fire) + if(!ishuman(user)) + return + if((CLUMSY in user.mutations) && prob(50) && burn_state == ON_FIRE) clumsilyDrink(user) else ..() diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index 30b9495395e..63c8275afea 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -427,14 +427,14 @@ /datum/reagent/consumable/ethanol/flaming_homer name = "Flaming Moe" id = "flamingmoe" - description = "This seems like a bunch of various alcohols thrown together, along with what looks like prescription medicine..." + description = "This appears to be a mixture of various alcohols blended with prescription medicine. It is lightly toasted..." reagent_state = LIQUID color = "#58447f" //rgb: 88, 66, 127 alcohol_perc = 0.5 drink_icon = "flamingmoeglass" drink_name = "Flaming Moe" drink_desc = "Happiness is just a Flaming Moe away!" - taste_message = "caramelised booze and medicine" + taste_message = "caramelised booze and sweet, salty medicine" /datum/reagent/consumable/ethanol/brave_bull name = "Brave Bull"