mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 19:47:22 +01:00
Merge pull request #3316 from LordBraindead/bleeding-edge-freeze
fire update
This commit is contained in:
+117
-47
@@ -30,7 +30,7 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh)
|
||||
|
||||
var/igniting = 0
|
||||
var/obj/effect/decal/cleanable/liquid_fuel/liquid = locate() in src
|
||||
|
||||
|
||||
if(air_contents.check_combustability(liquid))
|
||||
igniting = 1
|
||||
|
||||
@@ -55,28 +55,87 @@ obj
|
||||
icon = 'fire.dmi'
|
||||
icon_state = "1"
|
||||
|
||||
layer = TURF_LAYER
|
||||
layer = TURF_LAYER + 0.2
|
||||
|
||||
var
|
||||
firelevel = 10000 //Calculated by gas_mixture.calculate_firelevel()
|
||||
|
||||
process()
|
||||
. = 1
|
||||
|
||||
|
||||
//get location and check if it is in a proper ZAS zone
|
||||
var/turf/simulated/floor/S = loc
|
||||
if(!S.zone)
|
||||
del src
|
||||
|
||||
|
||||
if(!istype(S))
|
||||
del src
|
||||
|
||||
|
||||
var/datum/gas_mixture/air_contents = S.return_air()
|
||||
//get liquid fuels on the ground.
|
||||
var/obj/effect/decal/cleanable/liquid_fuel/liquid = locate() in S
|
||||
//and the volatile stuff from the air
|
||||
var/datum/gas/volatile_fuel/fuel = locate() in air_contents.trace_gases
|
||||
|
||||
//get scorchmarks
|
||||
var/obj/effect/decal/cleanable/scorchmark/scorch = locate() in S
|
||||
|
||||
//check if it found a scorchmark and add one if there isnt one already
|
||||
if (!scorch)
|
||||
scorch = new/obj/effect/decal/cleanable/scorchmark(S,0)
|
||||
|
||||
//try to burn the floor
|
||||
//initialize the temperature needed for burning the floor
|
||||
//initialize the fuel gained by burning this floor
|
||||
//initialize the speed modifier for the floor to catch on fire
|
||||
var/floor_target_temp = 0
|
||||
var/floor_fuel = 1
|
||||
var/floor_speed_modifier = 1
|
||||
if(S.is_plasteel_floor())
|
||||
floor_target_temp = 800
|
||||
else if (S.is_light_floor())
|
||||
floor_target_temp = 600
|
||||
else if (S.is_grass_floor())
|
||||
floor_target_temp = 500
|
||||
floor_fuel = 2
|
||||
floor_speed_modifier = 1.5
|
||||
else if (S.is_wood_floor())
|
||||
floor_target_temp = 500
|
||||
floor_fuel = 3
|
||||
floor_speed_modifier = 1.25
|
||||
else if (S.is_carpet_floor())
|
||||
floor_target_temp = 500
|
||||
floor_fuel = 3
|
||||
floor_speed_modifier = 1.5
|
||||
else
|
||||
floor_target_temp = 1200
|
||||
floor_speed_modifier = 0.8
|
||||
|
||||
//check if the floor is burnable
|
||||
if(floor_target_temp > 0)
|
||||
//calculate a random factor for the equation
|
||||
var/turf_burn_random = max( min(floor_speed_modifier * 5 * ( ( max(air_contents.temperature - floor_target_temp,0) / floor_target_temp )^2 ), 100), 0)
|
||||
//check if the random check is passed
|
||||
if (prob(turf_burn_random))
|
||||
//check if the tile has already been damaged once
|
||||
if (S.burnt || S.broken)
|
||||
//check if the tile is plating, if not break it and release some fuel, also some randomness to slow down the process
|
||||
if (!S.is_plating() && prob(10))
|
||||
scorch.amount += floor_fuel
|
||||
S.break_tile_to_plating()
|
||||
|
||||
//damage it and release fuel
|
||||
else
|
||||
scorch.amount += floor_fuel
|
||||
S.burn_tile()
|
||||
|
||||
//now burn some items!
|
||||
for(var/obj/o in loc)
|
||||
if(o.fire_min_burn_temp)
|
||||
var/obj_burn_random = max( min(o.fire_burn_multiplier * 5 * ( ( max(air_contents.temperature - o.fire_min_burn_temp,0) / o.fire_min_burn_temp )^2 ), 100), 0)
|
||||
if(prob(obj_burn_random))
|
||||
scorch.amount += fire_fuel_worth
|
||||
o.fire_burn()
|
||||
|
||||
//since the air is processed in fractions, we need to make sure not to have any minuscle residue or
|
||||
//the amount of moles might get to low for some functions to catch them and thus result in wonky behaviour
|
||||
if(air_contents.oxygen < 0.001)
|
||||
@@ -86,29 +145,29 @@ obj
|
||||
if(fuel)
|
||||
if(fuel.moles < 0.001)
|
||||
air_contents.trace_gases.Remove(fuel)
|
||||
|
||||
|
||||
//check if there is something to combust
|
||||
if(!air_contents.check_combustability(liquid))
|
||||
if(!air_contents.check_combustability(liquid,scorch))
|
||||
del src
|
||||
|
||||
|
||||
//get a firelevel and set the icon
|
||||
firelevel = air_contents.calculate_firelevel(liquid)
|
||||
|
||||
if(firelevel > 6)
|
||||
firelevel = air_contents.calculate_firelevel(liquid,scorch)
|
||||
|
||||
if(firelevel > 3)
|
||||
icon_state = "3"
|
||||
SetLuminosity(7)
|
||||
else if(firelevel > 2.5)
|
||||
else if(firelevel > 2)
|
||||
icon_state = "2"
|
||||
SetLuminosity(5)
|
||||
else
|
||||
icon_state = "1"
|
||||
SetLuminosity(3)
|
||||
|
||||
|
||||
//im not sure how to implement a version that works for every creature so for now monkeys are firesafe
|
||||
for(var/mob/living/carbon/human/M in loc)
|
||||
M.FireBurn(firelevel, air_contents.temperature, air_contents.return_pressure() ) //Burn the humans!
|
||||
|
||||
|
||||
|
||||
//spread!
|
||||
for(var/direction in cardinal)
|
||||
if(S.air_check_directions&direction) //Grab all valid bordering tiles
|
||||
@@ -118,7 +177,7 @@ obj
|
||||
if(istype(enemy_tile))
|
||||
//If extinguisher mist passed over the turf it's trying to spread to, don't spread and
|
||||
//reduce firelevel.
|
||||
if(enemy_tile.fire_protection > world.time-30)
|
||||
if(prob( 100 * (1 - min( max( ( (world.time - 30) - enemy_tile.fire_protection ), 0 ) / 30, 1) ) ) )
|
||||
firelevel -= 1.5
|
||||
continue
|
||||
|
||||
@@ -126,29 +185,29 @@ obj
|
||||
if(!(locate(/obj/fire) in enemy_tile))
|
||||
if( prob( 50 + 50 * (firelevel/vsc.fire_firelevel_multiplier) ) && S.CanPass(null, enemy_tile, 0,0) && enemy_tile.CanPass(null, S, 0,0))
|
||||
new/obj/fire(enemy_tile,firelevel)
|
||||
|
||||
|
||||
//seperate part of the present gas
|
||||
//this is done to prevent the fire burning all gases in a single pass
|
||||
var/datum/gas_mixture/flow = air_contents.remove_ratio(vsc.fire_consuption_rate)
|
||||
|
||||
|
||||
///////////////////////////////// FLOW HAS BEEN CREATED /// DONT DELETE THE FIRE UNTIL IT IS MERGED BACK OR YOU WILL DELETE AIR ///////////////////////////////////////////////
|
||||
|
||||
|
||||
if(flow)
|
||||
if(flow.check_combustability(liquid))
|
||||
if(flow.check_combustability(liquid,scorch))
|
||||
//Ensure flow temperature is higher than minimum fire temperatures.
|
||||
//this creates some energy ex nihilo but is necessary to get a fire started
|
||||
//lets just pretend this energy comes from the ignition source and dont mention this again
|
||||
//flow.temperature = max(PLASMA_MINIMUM_BURN_TEMPERATURE+0.1,flow.temperature)
|
||||
|
||||
|
||||
//burn baby burn!
|
||||
flow.zburn(liquid,1)
|
||||
|
||||
flow.zburn(liquid,scorch,1)
|
||||
|
||||
//merge the air back
|
||||
S.assume_air(flow)
|
||||
|
||||
///////////////////////////////// FLOW HAS BEEN REMERGED /// feel free to delete the fire again from here on //////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
New(newLoc,fl)
|
||||
..()
|
||||
|
||||
@@ -178,15 +237,15 @@ turf/simulated/apply_fire_protection()
|
||||
fire_protection = world.time
|
||||
|
||||
|
||||
datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid,force_burn)
|
||||
datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid, obj/effect/decal/cleanable/scorchmark/scorch, force_burn)
|
||||
var/value = 0
|
||||
|
||||
if((temperature > PLASMA_MINIMUM_BURN_TEMPERATURE || force_burn) && check_combustability(liquid) )
|
||||
var/total_fuel = 0
|
||||
|
||||
if((temperature > PLASMA_MINIMUM_BURN_TEMPERATURE || force_burn) && check_combustability(liquid,scorch) )
|
||||
var/total_fuel = 0
|
||||
var/datum/gas/volatile_fuel/fuel = locate() in trace_gases
|
||||
|
||||
total_fuel += toxins
|
||||
|
||||
|
||||
if(fuel)
|
||||
//Volatile Fuel
|
||||
total_fuel += fuel.moles
|
||||
@@ -198,8 +257,12 @@ datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid,force
|
||||
else
|
||||
total_fuel += liquid.amount
|
||||
|
||||
if(scorch)
|
||||
//fuel created by destroying objects and turfs
|
||||
total_fuel += scorch.amount
|
||||
|
||||
//Calculate the firelevel.
|
||||
var/firelevel = calculate_firelevel(liquid)
|
||||
var/firelevel = calculate_firelevel(liquid, scorch)
|
||||
|
||||
//get the current inner energy of the gas mix
|
||||
//this must be taken here to prevent the addition or deletion of energy by a changing heat capacity
|
||||
@@ -207,7 +270,7 @@ datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid,force
|
||||
|
||||
//determine the amount of oxygen used
|
||||
var/total_oxygen = min(oxygen, 2 * total_fuel)
|
||||
|
||||
|
||||
//determine the amount of fuel actually used
|
||||
var/used_fuel_ratio = min(oxygen / 2 , total_fuel) / total_fuel
|
||||
total_fuel = total_fuel * used_fuel_ratio
|
||||
@@ -232,33 +295,39 @@ datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid,force
|
||||
liquid.amount -= liquid.amount * used_fuel_ratio * used_reactants_ratio
|
||||
if(liquid.amount <= 0) del liquid
|
||||
|
||||
if(scorch)
|
||||
scorch.amount -= min(scorch.amount, scorch.amount * used_fuel_ratio * used_reactants_ratio)
|
||||
|
||||
//calculate the energy produced by the reaction and then set the new temperature of the mix
|
||||
temperature = (starting_energy + vsc.fire_fuel_energy_release * total_fuel) / heat_capacity()
|
||||
|
||||
|
||||
update_values()
|
||||
value = total_reactants * used_reactants_ratio
|
||||
return value
|
||||
|
||||
datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/liquid_fuel/liquid)
|
||||
datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/liquid_fuel/liquid, obj/effect/decal/cleanable/scorchmark/scorch)
|
||||
//this check comes up very often and is thus centralized here to ease adding stuff
|
||||
|
||||
var/datum/gas/volatile_fuel/fuel = locate() in trace_gases
|
||||
|
||||
var/datum/gas/volatile_fuel/fuel = locate() in trace_gases
|
||||
var/value = 0
|
||||
|
||||
|
||||
if(oxygen && (toxins || fuel || liquid))
|
||||
value = 1
|
||||
|
||||
else if (scorch)
|
||||
if (oxygen && scorch.amount > 0)
|
||||
value = 1
|
||||
|
||||
return value
|
||||
|
||||
datum/gas_mixture/proc/calculate_firelevel(obj/effect/decal/cleanable/liquid_fuel/liquid)
|
||||
datum/gas_mixture/proc/calculate_firelevel(obj/effect/decal/cleanable/liquid_fuel/liquid, obj/effect/decal/cleanable/scorchmark/scorch)
|
||||
//Calculates the firelevel based on one equation instead of having to do this multiple times in different areas.
|
||||
|
||||
|
||||
var/datum/gas/volatile_fuel/fuel = locate() in trace_gases
|
||||
var/total_fuel = 0
|
||||
var/firelevel = 0
|
||||
|
||||
|
||||
if(check_combustability(liquid))
|
||||
|
||||
|
||||
total_fuel += toxins
|
||||
|
||||
if(liquid)
|
||||
@@ -267,17 +336,20 @@ datum/gas_mixture/proc/calculate_firelevel(obj/effect/decal/cleanable/liquid_fue
|
||||
if(fuel)
|
||||
total_fuel += fuel.moles
|
||||
|
||||
if(scorch)
|
||||
total_fuel += scorch.amount
|
||||
|
||||
var/total_combustables = (total_fuel + oxygen)
|
||||
|
||||
|
||||
if(total_fuel > 0 && oxygen > 0)
|
||||
|
||||
|
||||
//slows down the burning when the concentration of the reactants is low
|
||||
var/dampening_multiplier = total_combustables / (total_combustables + nitrogen + carbon_dioxide)
|
||||
//calculates how close the mixture of the reactants is to the optimum
|
||||
var/mix_multiplier = 1 / (1 + (5 * ((oxygen / total_combustables) ^2)))
|
||||
//toss everything together
|
||||
firelevel = vsc.fire_firelevel_multiplier * mix_multiplier * dampening_multiplier
|
||||
|
||||
|
||||
return max( 0, firelevel)
|
||||
|
||||
|
||||
@@ -323,6 +395,4 @@ datum/gas_mixture/proc/calculate_firelevel(obj/effect/decal/cleanable/liquid_fue
|
||||
apply_damage(0.6*mx*legs_exposure, BURN, "l_leg", 0, 0, "Fire")
|
||||
apply_damage(0.6*mx*legs_exposure, BURN, "r_leg", 0, 0, "Fire")
|
||||
apply_damage(0.4*mx*arms_exposure, BURN, "l_arm", 0, 0, "Fire")
|
||||
apply_damage(0.4*mx*arms_exposure, BURN, "r_arm", 0, 0, "Fire")
|
||||
|
||||
//flash_pain()
|
||||
apply_damage(0.4*mx*arms_exposure, BURN, "r_arm", 0, 0, "Fire")
|
||||
+11
-1
@@ -80,7 +80,17 @@
|
||||
var/name = t.fields["name"]
|
||||
var/rank = t.fields["rank"]
|
||||
var/real_rank = t.fields["real_rank"]
|
||||
isactive[name] = t.fields["p_stat"]
|
||||
|
||||
var/active = 0
|
||||
for(var/mob/M in player_list) if(M.name == name)
|
||||
// For dead ones, have a chance to get their status wrong
|
||||
if(M.stat == 2)
|
||||
active = M.x % 2 // Should be good enough, avoids their status flipping constantly
|
||||
break
|
||||
else if(M.client && M.client.inactivity <= 10 * 60 * 10)
|
||||
active = 1
|
||||
break
|
||||
isactive[name] = active ? "Active" : "SSD"
|
||||
|
||||
//world << "[name]: [rank]"
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
obj/effect/decal/cleanable/scorchmark
|
||||
//this is used as an additional visual result of fire and as a reagent holder for fuel created by burning of turfs and items.
|
||||
icon = 'icons/effects/scorchmark.dmi'
|
||||
name = "Soot"
|
||||
icon_state = "1"
|
||||
layer = TURF_LAYER+0.1
|
||||
anchored = 1
|
||||
var/amount = 0 //starts always empty and is filled by procs called by fire
|
||||
|
||||
New(newLoc,start_amount=0)
|
||||
..()
|
||||
|
||||
icon_state = pick("1","2","3","4","5","6","7","8","9")
|
||||
dir = pick(cardinal)
|
||||
amount = start_amount
|
||||
@@ -39,25 +39,25 @@ would spawn and follow the beaker, even if it is carried or thrown.
|
||||
|
||||
/obj/effect/effect/water/New()
|
||||
..()
|
||||
//var/turf/T = src.loc
|
||||
//if (istype(T, /turf))
|
||||
// T.firelevel = 0 //TODO: FIX
|
||||
var/turf/simulated/floor/T = src.loc
|
||||
if (istype(T, /turf/simulated/floor))
|
||||
T.fire_protection = world.time
|
||||
spawn( 70 )
|
||||
delete()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/effect/effect/water/Del()
|
||||
//var/turf/T = src.loc
|
||||
//if (istype(T, /turf))
|
||||
// T.firelevel = 0 //TODO: FIX
|
||||
var/turf/simulated/floor/T = src.loc
|
||||
if (istype(T, /turf/simulated/floor))
|
||||
T.fire_protection = world.time
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/effect/effect/water/Move(turf/newloc)
|
||||
//var/turf/T = src.loc
|
||||
//if (istype(T, /turf))
|
||||
// T.firelevel = 0 //TODO: FIX
|
||||
var/turf/simulated/floor/T = src.loc
|
||||
if (istype(T, /turf/simulated/floor))
|
||||
T.fire_protection = world.time
|
||||
if (--src.life < 1)
|
||||
//SN src = null
|
||||
delete()
|
||||
|
||||
@@ -103,6 +103,9 @@ var/global/list/datum/stack_recipe/uranium_recipes = list ( \
|
||||
origin_tech = "plasmatech=2;materials=2"
|
||||
perunit = 2000
|
||||
sheettype = "plasma"
|
||||
fire_min_burn_temp = 500
|
||||
fire_burn_multiplier = 3 //made of burnium
|
||||
fire_fuel_worth = 0
|
||||
|
||||
var/global/list/datum/stack_recipe/plasma_recipes = list ( \
|
||||
new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, one_per_turf = 1, on_floor = 1), \
|
||||
@@ -114,6 +117,18 @@ var/global/list/datum/stack_recipe/plasma_recipes = list ( \
|
||||
pixel_y = rand(0,4)-4
|
||||
..()
|
||||
|
||||
/obj/item/stack/sheet/mineral/plasma/fire_burn()
|
||||
//get location and check if it is in a proper ZAS zone
|
||||
var/turf/simulated/floor/S = loc
|
||||
if(S.zone)
|
||||
var/datum/gas_mixture/air_contents = S.return_air()
|
||||
if(air_contents)
|
||||
air_contents.toxins += 20
|
||||
air_contents.update_values()
|
||||
amount -= 1
|
||||
if(amount <= 0)
|
||||
del src
|
||||
|
||||
/obj/item/stack/sheet/mineral/plastic
|
||||
name = "Plastic"
|
||||
icon_state = "sheet-plastic"
|
||||
@@ -253,4 +268,4 @@ var/global/list/datum/stack_recipe/silver_recipes = list ( \
|
||||
throw_speed = 3
|
||||
throw_range = 3
|
||||
origin_tech = "materials=4"
|
||||
perunit = 2000
|
||||
perunit = 2000
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
var/construction_cost = list("metal"=750,"glass"=75)
|
||||
var/construction_time=100
|
||||
|
||||
fire_min_burn_temp = 1000
|
||||
fire_burn_multiplier = 0.75
|
||||
fire_fuel_worth = 0
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << "\red <b>[user] is licking the electrodes of the [src.name]! It looks like \he's trying to commit suicide.</b>"
|
||||
return (FIRELOSS)
|
||||
@@ -111,4 +115,10 @@
|
||||
maxcharge = 10000
|
||||
maxcharge = 10000
|
||||
m_amt = 0
|
||||
g_amt = 0
|
||||
g_amt = 0
|
||||
|
||||
/obj/item/weapon/cell/fire_burn()
|
||||
var/radius = round( (sqrt(charge)/30)+0.5, 1 )
|
||||
if (radius >= 1)
|
||||
explosion(src.loc,0,0,radius)
|
||||
..()
|
||||
|
||||
@@ -16,6 +16,11 @@
|
||||
var/integrity = 3
|
||||
var/volume = 70
|
||||
|
||||
m_amt = 3750
|
||||
fire_min_burn_temp = 800
|
||||
fire_burn_multiplier = 0.75
|
||||
fire_fuel_worth = 0
|
||||
|
||||
/obj/item/weapon/tank/New()
|
||||
..()
|
||||
|
||||
@@ -261,4 +266,11 @@
|
||||
integrity--
|
||||
|
||||
else if(integrity < 3)
|
||||
integrity++
|
||||
integrity++
|
||||
|
||||
/obj/item/weapon/tank/fire_burn()
|
||||
//get location and check if it is in a proper ZAS zone
|
||||
var/turf/simulated/floor/S = loc
|
||||
if(S.zone)
|
||||
S.assume_air(air_contents)
|
||||
..()
|
||||
@@ -76,11 +76,19 @@
|
||||
icon_state = "wooden_chair"
|
||||
name = "wooden chair"
|
||||
desc = "Old is never too old to not be in fashion."
|
||||
fire_min_burn_temp = 500
|
||||
fire_burn_multiplier = 1.25
|
||||
fire_fuel_worth = 5
|
||||
m_amt = 0
|
||||
|
||||
/obj/structure/stool/bed/chair/wood/wings
|
||||
icon_state = "wooden_chair_wings"
|
||||
name = "wooden chair"
|
||||
desc = "Old is never too old to not be in fashion."
|
||||
fire_min_burn_temp = 500
|
||||
fire_burn_multiplier = 1.25
|
||||
fire_fuel_worth = 5
|
||||
m_amt = 0
|
||||
|
||||
/obj/structure/stool/bed/chair/wood/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
@@ -93,6 +101,9 @@
|
||||
/obj/structure/stool/bed/chair/comfy
|
||||
name = "comfy chair"
|
||||
desc = "It looks comfy."
|
||||
fire_min_burn_temp = 500
|
||||
fire_burn_multiplier = 1.25
|
||||
fire_fuel_worth = 4
|
||||
|
||||
/obj/structure/stool/bed/chair/comfy/brown
|
||||
icon_state = "comfychair_brown"
|
||||
|
||||
@@ -6,6 +6,10 @@
|
||||
anchored = 1.0
|
||||
flags = FPRINT
|
||||
pressure_resistance = 15
|
||||
m_amt = 3750
|
||||
fire_min_burn_temp = 600
|
||||
fire_burn_multiplier = 1
|
||||
fire_fuel_worth = 2
|
||||
|
||||
/obj/structure/stool/ex_act(severity)
|
||||
switch(severity)
|
||||
|
||||
@@ -373,8 +373,9 @@
|
||||
return
|
||||
|
||||
/obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > T0C + 800)
|
||||
hit(round(exposed_volume / 100), 0)
|
||||
//Since glasslocks are the only thing you can do to prevent spreading atmos issues, this was disabled for the time being
|
||||
//if(exposed_temperature > T0C + 800)
|
||||
// hit(round(exposed_volume / 100), 0)
|
||||
..()
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
|
||||
|
||||
/obj/structure/reagent_dispensers
|
||||
name = "Dispenser"
|
||||
desc = "..."
|
||||
@@ -66,12 +64,6 @@
|
||||
new /obj/effect/effect/water(src.loc)
|
||||
del(src)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//Dispensers
|
||||
/obj/structure/reagent_dispensers/watertank
|
||||
name = "watertank"
|
||||
@@ -79,10 +71,39 @@
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "watertank"
|
||||
amount_per_transfer_from_this = 10
|
||||
|
||||
m_amt = 7500
|
||||
g_amt = 3750
|
||||
fire_min_burn_temp = 800
|
||||
fire_burn_multiplier = 0.75
|
||||
fire_fuel_worth = 0
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("water",1000)
|
||||
|
||||
/obj/structure/reagent_dispensers/watertank/fire_burn()
|
||||
src.reagents.update_total()
|
||||
var/number_of_gusts = src.reagents.total_volume / 50
|
||||
for(var/a=0, a < number_of_gusts , a++)
|
||||
var/obj/effect/effect/water/W = new /obj/effect/effect/water( get_turf(src) )
|
||||
var/turf/my_target = get_step(get_step(get_step(get_step(get_step(get_turf(src),pick(cardinal)),pick(cardinal)),pick(cardinal)),pick(cardinal)),pick(cardinal))
|
||||
var/datum/reagents/R = new/datum/reagents(50)
|
||||
if(!W) return
|
||||
W.reagents = R
|
||||
R.my_atom = W
|
||||
if(!W || !src) return
|
||||
src.reagents.trans_to(W,50)
|
||||
for(var/b=0, b<5, b++)
|
||||
step_towards(W,my_target)
|
||||
if(!W) return
|
||||
W.reagents.reaction(get_turf(W))
|
||||
for(var/atom/atm in get_turf(W))
|
||||
if(!W) return
|
||||
W.reagents.reaction(atm)
|
||||
if(W.loc == my_target) break
|
||||
..()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank
|
||||
name = "fueltank"
|
||||
desc = "A fueltank"
|
||||
@@ -91,6 +112,13 @@
|
||||
amount_per_transfer_from_this = 10
|
||||
var/modded = 0
|
||||
var/obj/item/device/assembly_holder/rig = null
|
||||
|
||||
m_amt = 7500
|
||||
g_amt = 3750
|
||||
fire_min_burn_temp = 800
|
||||
fire_burn_multiplier = 1
|
||||
fire_fuel_worth = 0
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("fuel",1000)
|
||||
@@ -164,6 +192,11 @@
|
||||
if(src)
|
||||
del(src)
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/fire_burn()
|
||||
src.reagents.update_total()
|
||||
new/obj/effect/decal/cleanable/liquid_fuel(src.loc, src.reagents.total_volume)
|
||||
..()
|
||||
|
||||
/obj/structure/reagent_dispensers/peppertank
|
||||
name = "Pepper Spray Refiller"
|
||||
desc = "Refill pepper spray canisters."
|
||||
@@ -214,4 +247,4 @@
|
||||
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("virusfood", 1000)
|
||||
reagents.add_reagent("virusfood", 1000)
|
||||
|
||||
@@ -56,6 +56,15 @@ Changelog Section
|
||||
Stuff which is in development and not yet visible to players or just code related
|
||||
(ie. code improvements for expandability, etc.) should not be listed here. They
|
||||
should be listed in the changelog upon commit though. Thanks. -->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">14/07/2013</h2>
|
||||
<h3 class="author">Lord Braindead updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added fire damaging floors and certain objects</li>
|
||||
<li class="bugfix">fixed fire extingiushers being next to worthless against fire</li>
|
||||
<li class="tweak">made glass locks work against fire</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">2013-11-07</h2>
|
||||
<h3 class="author">Chinsky updated:</h3>
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
Reference in New Issue
Block a user