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.
This commit is contained in:
SkyMarshal
2013-04-08 23:59:42 -07:00
parent b366998eeb
commit f05b8e0083
7 changed files with 30 additions and 37 deletions
+8 -12
View File
@@ -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
+3 -3
View File
@@ -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"
+3
View File
@@ -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
*/
@@ -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)
@@ -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)
+4 -15
View File
@@ -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)
+1
View File
@@ -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