From f05b8e0083a4dfd3582959db4423705e4019f941 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Mon, 8 Apr 2013 23:59:42 -0700 Subject: [PATCH] Fixes issues: #2632 Fire Issues (Fire doors work, Flamethrower reverted to making a flamethrower liquid fuel subtype, flame grenades now make a puddle of welder fuel that is lit aflame with napalm) #2630 (The code has been calling (turf).temperature_expose when it was supposed to be hotspot_expose), #1865 (aqain)(Added a check to remove trace gas fuel under a certain point). Also: added a flashpoint value for plasma, which is the temperature at which it self-ignites (Currently 246C or 519K which is equal to gasoline) Partial-tile firedoors now default to full-tile firedoors as the part-tile ones were breaking ZAS zones entirely. Possible cause of #2627 and maybe #2451, but those need tested and I did not have time. --- code/ZAS/Fire.dm | 20 ++++++++----------- code/ZAS/ZAS_Zones.dm | 6 +++--- code/game/machinery/doors/firedoor.dm | 3 +++ .../objects/items/weapons/flamethrower.dm | 8 +++++--- .../items/weapons/grenades/chem_grenade.dm | 10 ++++++---- code/modules/reagents/Chemistry-Reagents.dm | 19 ++++-------------- code/setup.dm | 1 + 7 files changed, 30 insertions(+), 37 deletions(-) diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 8cf9ffb3264..9481a866772 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -84,11 +84,11 @@ obj var/turf/simulated/floor/S = loc if(!S.zone) del src //Cannot exist where zones are broken. - if(istype(S,/turf/simulated/floor)) + if(istype(S)) var datum/gas_mixture/air_contents = S.return_air() //Get whatever trace fuels are in the area - datum/gas/volatile_fuel/fuel = locate(/datum/gas/volatile_fuel/) in air_contents.trace_gases + datum/gas/volatile_fuel/fuel = locate() in air_contents.trace_gases //Also get liquid fuels on the ground. obj/effect/decal/cleanable/liquid_fuel/liquid = locate() in S @@ -115,7 +115,7 @@ obj //Spread the fire. if(!(locate(/obj/fire) in enemy_tile)) - if( prob( firelevel*10 ) ) + if( prob( firelevel*10 ) && S.CanPass(null, enemy_tile, 0,0) && enemy_tile.CanPass(null, S, 0,0)) new/obj/fire(enemy_tile,firelevel) if(flow) @@ -136,6 +136,8 @@ obj //Burn the gas mixture. flow.zburn(liquid) + if(fuel && fuel.moles <= 0.00001) + del fuel else @@ -160,14 +162,12 @@ obj New(newLoc,fl) ..() - if(!istype(loc, /turf) || !loc.CanPass(null, loc, 0, 0)) + if(!istype(loc, /turf)) del src dir = pick(cardinal) //sd_SetLuminosity(3,2,0) firelevel = fl - for(var/mob/living/carbon/human/M in loc) - M.FireBurn(min(max(0.1,firelevel / 20),10)) //Burn the humans! air_master.active_hotspots.Add(src) Del() @@ -195,12 +195,8 @@ datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid) if(fuel) //Volatile Fuel - if(fuel.moles < 0.01) - trace_gases.Remove(fuel) - fuel = null - else - total_fuel += fuel.moles - fuel_sources++ + total_fuel += fuel.moles + fuel_sources++ if(liquid) //Liquid Fuel diff --git a/code/ZAS/ZAS_Zones.dm b/code/ZAS/ZAS_Zones.dm index f1a3a57bd52..d4cc90b708c 100644 --- a/code/ZAS/ZAS_Zones.dm +++ b/code/ZAS/ZAS_Zones.dm @@ -200,7 +200,7 @@ zone/proc/process() progress = "problem with an inbuilt byond function: some conditional checks" //Only run through the individual turfs if there's reason to. - if(air.graphic != air.graphic_archived || air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) + if(air.graphic != air.graphic_archived || air.temperature > PLASMA_FLASHPOINT) progress = "problem with: turf/simulated/update_visuals()" @@ -215,10 +215,10 @@ zone/proc/process() progress = "problem with: item or turf temperature_expose()" //Expose stuff to extreme heat. - if(air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) + if(air.temperature > PLASMA_FLASHPOINT) for(var/atom/movable/item in S) item.temperature_expose(air, air.temperature, CELL_VOLUME) - S.temperature_expose(air, air.temperature, CELL_VOLUME) + S.hotspot_expose(air, air.temperature, CELL_VOLUME) progress = "problem with: calculating air graphic" diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 4f8c7ba8c4b..0c6b78ea35d 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -223,6 +223,8 @@ /obj/machinery/door/firedoor/border_only +//These are playing merry hell on ZAS. Sorry fellas :( +/* icon = 'icons/obj/doors/edge_Doorfire.dmi' glass = 1 //There is a glass window so you can see through the door //This is needed due to BYOND limitations in controlling visibility @@ -257,3 +259,4 @@ if(istype(source)) air_master.tiles_to_update += source if(istype(destination)) air_master.tiles_to_update += destination return 1 +*/ \ No newline at end of file diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 86fb3a87e24..8639477ce48 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -209,15 +209,17 @@ /obj/item/weapon/flamethrower/proc/ignite_turf(turf/target) //TODO: DEFERRED Consider checking to make sure tank pressure is high enough before doing this... //Transfer 5% of current tank air contents to turf - var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(0.05) - air_transfer.toxins = air_transfer.toxins * 5 // This is me not comprehending the air system. I realize this is retarded and I could probably make it work without fucking it up like this, but there you have it. -- TLE + var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(0.02*(throw_amount/100)) + //air_transfer.toxins = air_transfer.toxins * 5 // This is me not comprehending the air system. I realize this is retarded and I could probably make it work without fucking it up like this, but there you have it. -- TLE + new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(target,air_transfer.toxins,get_dir(loc,target)) + air_transfer.toxins = 0 target.assume_air(air_transfer) //Burn it based on transfered gas + //target.hotspot_expose(part4.air_contents.temperature*2,300) target.hotspot_expose((ptank.air_contents.temperature*2) + 380,500) // -- More of my "how do I shot fire?" dickery. -- TLE //location.hotspot_expose(1000,500,1) return - /obj/item/weapon/flamethrower/full/New(var/loc) ..() weldtool = new /obj/item/weapon/weldingtool(src) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 168ef431ede..0c075c5725a 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -114,7 +114,7 @@ activate(mob/user as mob) if(active) return - + if(detonator) if(!isigniter(detonator.a_left)) detonator.a_left.activate() @@ -216,9 +216,11 @@ var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src) var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src) - B1.reagents.add_reagent("aluminum", 25) - B2.reagents.add_reagent("plasma", 25) - B2.reagents.add_reagent("sacid", 25) + B1.reagents.add_reagent("aluminum", 15) + B1.reagents.add_reagent("fuel",20) + B2.reagents.add_reagent("plasma", 15) + B2.reagents.add_reagent("sacid", 15) + B1.reagents.add_reagent("fuel",20) detonator = new/obj/item/device/assembly_holder/timer_igniter(src) diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 26666f0ecbe..fd74fc674eb 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1121,26 +1121,15 @@ datum reagent_state = LIQUID color = "#660000" // rgb: 102, 0, 0 -//Commenting this out as it's horribly broken. It's a neat effect though, so it might be worth making a new reagent (that is less common) with similar effects. -Pete -/* + reaction_obj(var/obj/O, var/volume) - src = null var/turf/the_turf = get_turf(O) if(!the_turf) return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO - var/datum/gas_mixture/napalm = new - var/datum/gas/volatile_fuel/fuel = new - fuel.moles = 15 - napalm.trace_gases += fuel - the_turf.assume_air(napalm) + new /obj/effect/decal/cleanable/liquid_fuel(the_turf, volume) reaction_turf(var/turf/T, var/volume) - src = null - var/datum/gas_mixture/napalm = new - var/datum/gas/volatile_fuel/fuel = new - fuel.moles = 15 - napalm.trace_gases += fuel - T.assume_air(napalm) - return*/ + new /obj/effect/decal/cleanable/liquid_fuel(T, volume) + return on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom M.adjustToxLoss(1) diff --git a/code/setup.dm b/code/setup.dm index 1812f920119..35fe8827a4f 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -122,6 +122,7 @@ //Plasma fire properties #define PLASMA_MINIMUM_BURN_TEMPERATURE 100+T0C +#define PLASMA_FLASHPOINT 246+T0C #define PLASMA_UPPER_TEMPERATURE 1370+T0C #define PLASMA_MINIMUM_OXYGEN_NEEDED 2 #define PLASMA_MINIMUM_OXYGEN_PLASMA_RATIO 20