From afeb4a08497ba61681f2ace9e40bc154b17fcd3c Mon Sep 17 00:00:00 2001 From: Geeves Date: Sat, 6 Feb 2021 17:45:37 +0200 Subject: [PATCH] Better Molotoovs (#11128) Molotovs now work off both alcohol and welding fuel. Molotovs now longer emit light if an unlit rag is inserted. Molotov rags now properly delete when they burn out. --- code/modules/detectivework/tools/rag.dm | 29 ++++++++++++++----- .../reagent_containers/food/drinks/bottle.dm | 19 ++++++++---- html/changelogs/geeves-better_molotoovs.yml | 8 +++++ 3 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 html/changelogs/geeves-better_molotoovs.yml diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index 73cb78eed68..f10a8a8701a 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -208,10 +208,13 @@ new /obj/effect/decal/cleanable/ash(get_turf(src)) qdel(src) -//rag must have a minimum of 2 units welder fuel and at least 80% of the reagents must be welder fuel. +//rag must have a minimum of 2 units fuel and at least 80% of the reagents must be fuel. //maybe generalize flammable reagents someday /obj/item/reagent_containers/glass/rag/proc/can_ignite() - var/fuel = REAGENT_VOLUME(reagents, /decl/reagent/fuel) + var/fuel = 0 + for(var/fuel_type in reagents.reagent_volumes) + if(ispath(fuel_type, /decl/reagent/fuel) || ispath(fuel_type, /decl/reagent/alcohol)) + fuel += reagents.reagent_volumes[fuel_type] return (fuel >= 2 && fuel >= reagents.total_volume*0.8) /obj/item/reagent_containers/glass/rag/proc/ignite() @@ -244,8 +247,13 @@ //ensures players always have a few seconds of burn time left when they light their rag if(burn_time <= 5) visible_message(SPAN_WARNING("\The [src] falls apart!")) - new /obj/effect/decal/cleanable/ash(get_turf(src)) - qdel(src) + if(istype(loc, /obj/item/reagent_containers/food/drinks/bottle)) + var/obj/item/reagent_containers/food/drinks/bottle/B = loc + B.delete_rag() + else + new /obj/effect/decal/cleanable/ash(get_turf(src)) + qdel(src) + return update_name() update_icon() @@ -264,11 +272,18 @@ if(burn_time <= 0) STOP_PROCESSING(SSprocessing, src) - new /obj/effect/decal/cleanable/ash(location) - qdel(src) + if(istype(loc, /obj/item/reagent_containers/food/drinks/bottle)) + var/obj/item/reagent_containers/food/drinks/bottle/B = loc + B.delete_rag() + else + new /obj/effect/decal/cleanable/ash(location) + qdel(src) return - reagents.remove_reagent(/decl/reagent/fuel, reagents.maximum_volume/25) + for(var/fuel_type in reagents.reagent_volumes) + if(ispath(fuel_type, /decl/reagent/fuel) || ispath(fuel_type, /decl/reagent/alcohol)) + reagents.remove_reagent(reagents.reagent_volumes[fuel_type], reagents.maximum_volume/25) + break update_name() update_icon() burn_time-- diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm index f7f24209920..f9c29537be7 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm @@ -101,12 +101,20 @@ update_icon() /obj/item/reagent_containers/food/drinks/bottle/proc/remove_rag(mob/user) - if(!rag) return + if(!rag) + return user.put_in_hands(rag) rag = null flags |= (initial(flags) & OPENCONTAINER) update_icon() +/obj/item/reagent_containers/food/drinks/bottle/proc/delete_rag() + if(!rag) + return + QDEL_NULL(rag) + flags |= (initial(flags) & OPENCONTAINER) + update_icon() + /obj/item/reagent_containers/food/drinks/bottle/open(mob/user) if(rag) return @@ -114,13 +122,14 @@ /obj/item/reagent_containers/food/drinks/bottle/update_icon() underlays.Cut() + set_light(0) if(rag) var/underlay_image = image(icon='icons/obj/drinks.dmi', icon_state=rag.on_fire? "[rag_underlay]_lit" : rag_underlay) underlays += underlay_image - set_light(2) - else - set_light(0) - ..() + if(rag.on_fire) + set_light(2, l_color = LIGHT_COLOR_FIRE) + return + ..() /obj/item/reagent_containers/food/drinks/bottle/attack(mob/living/target, mob/living/user, var/hit_zone) var/blocked = ..() diff --git a/html/changelogs/geeves-better_molotoovs.yml b/html/changelogs/geeves-better_molotoovs.yml new file mode 100644 index 00000000000..b7405b0fd2f --- /dev/null +++ b/html/changelogs/geeves-better_molotoovs.yml @@ -0,0 +1,8 @@ +author: Geeves + +delete-after: True + +changes: + - bugfix: "Molotovs now work off both alcohol and welding fuel." + - bugfix: "Molotovs now longer emit light if an unlit rag is inserted." + - bugfix: "Molotov rags now properly delete when they burn out." \ No newline at end of file