diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 3900ba2ba33..3aea31b9366 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1196,6 +1196,12 @@ 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/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index 766fe92c1ee..547bc6e1f8d 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -75,24 +75,11 @@ 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) @@ -103,6 +90,8 @@ 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 42781cd1e57..cbd8714dabf 100644 --- a/code/modules/food_and_drinks/drinks/drinks/shotglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/shotglass.dm @@ -1,12 +1,25 @@ +#define SHOT_FLAME_TEMPERATURE 700 + /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass name = "shot glass" desc = "No glasses were shot in the making of this glass." 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() + update_icon() + +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/update_icon() overlays.Cut() if(reagents.total_volume) @@ -24,5 +37,87 @@ 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) + 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/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() + 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 + 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) + 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/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 + else + processing_objects.Remove(src) + +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/attack_self(mob/living/carbon/human/user) + ..() + if(!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(75) && on_fire) + clumsilyDrink(user) + else + ..() + +/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/MouseDrop(mob/living/carbon/human/user) + if((CLUMSY in user.mutations) && prob(75) && on_fire) + clumsilyDrink(user) + else + ..() diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index 2ba73d2a127..a7fbc85f5f9 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -424,6 +424,18 @@ drink_desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy." taste_message = "the number fourty two" +/datum/reagent/consumable/ethanol/flaming_moe + name = "Flaming Moe" + id = "flamingmoe" + description = "This seems like a bunch of various alcohols thrown together, along with what looks like prescription medicine..." + reagent_state = LIQUID + color = "#58447f" + 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" + /datum/reagent/consumable/ethanol/brave_bull name = "Brave Bull" id = "bravebull" diff --git a/code/modules/reagents/chemistry/recipes/drinks.dm b/code/modules/reagents/chemistry/recipes/drinks.dm index b8d31e55e1c..92eacddb63b 100644 --- a/code/modules/reagents/chemistry/recipes/drinks.dm +++ b/code/modules/reagents/chemistry/recipes/drinks.dm @@ -224,6 +224,16 @@ result_amount = 5 mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' +/datum/chemical_reaction/flaming_moe + name = "Flaming Moe" + id = "flamingmoe" + result = "flamingmoe" + required_reagents = list("vodka" = 1, "gin" = 1, "cognac" = 1, "tequila" = 1, "oculine" = 1) //Close enough + min_temp = 374 //Fire makes it good! + result_amount = 5 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + mix_message = "The concoction bursts into flame!" + /datum/chemical_reaction/brave_bull name = "Brave Bull" id = "bravebull" diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 4008e17b3cf..8c75c1bc317 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ