mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
fire update
enabled fire to destroy floors and objects also tweaked the behaviour of glass to enable glasslocks against fire also made fire extingiushers stop being useless
This commit is contained in:
164
code/ZAS/Fire.dm
164
code/ZAS/Fire.dm
@@ -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")
|
||||
@@ -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]"
|
||||
|
||||
|
||||
15
code/game/objects/effects/decals/Cleanable/scorchmark.dm
Normal file
15
code/game/objects/effects/decals/Cleanable/scorchmark.dm
Normal file
@@ -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"
|
||||
@@ -124,6 +139,7 @@ var/global/list/datum/stack_recipe/plasma_recipes = list ( \
|
||||
throw_range = 3
|
||||
origin_tech = "materials=3"
|
||||
perunit = 2000
|
||||
sheettype = "plastic"
|
||||
|
||||
var/global/list/datum/stack_recipe/plastic_recipes = list ( \
|
||||
new/datum/stack_recipe("plastic crate", /obj/structure/closet/pcrate, 10, one_per_turf = 1, on_floor = 1), \
|
||||
|
||||
@@ -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,12 @@
|
||||
maxcharge = 10000
|
||||
maxcharge = 10000
|
||||
m_amt = 0
|
||||
g_amt = 0
|
||||
g_amt = 0
|
||||
|
||||
/obj/item/weapon/cell/fire_burn()
|
||||
viewers(src) << "\red <b>Charge: [src.charge]</b>"
|
||||
var/radius = round( (sqrt(charge)/30)+0.5, 1 )
|
||||
viewers(src) << "\red <b>Radius: [radius]</b>"
|
||||
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)
|
||||
|
||||
@@ -40,7 +40,7 @@ Header Section
|
||||
<tr>
|
||||
<td valign='top'>
|
||||
<font size='2'><b>Code:</b> Abi79, Aryn, Cael_Aislinn, Chinsky, cib, CompactNinja, DopeGhoti, Erthilo, Hawk_v3, Head, Ispil, Lexusjjss, Melonstorm, Miniature, Mloc, NerdyBoy1104, SkyMarshal, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty<br></font>
|
||||
<font size='2'><b>Sprites:</b> Apple_Master, Arcalane, Chinsky, CompactNinja, Deus Dactyl, Erthilo, Flashkirby, Miniature, Searif, Xenone, faux<br></font>
|
||||
<font size='2'><b>Sprites:</b> Apple_Master, Arcalane, Chinsky, CompactNinja, Deus Dactyl, Erthilo, Flashkirby, Miniature, Searif, Xenone<br></font>
|
||||
<font size='2'><b>Sounds:</b> Aryn<br></font>
|
||||
<font size='2'><b>Thanks To:</b> /tg/ station, Goonstation, Animus Station, Daedalus, and original Spacestation 13 devs. Skibiliano for the IRC bot.</font>
|
||||
</td>
|
||||
@@ -56,97 +56,32 @@ 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">2013-11-07</h2>
|
||||
<h3 class="author">Chinsky updated:</h3>
|
||||
<h2 class="date">14/07/2013</h2>
|
||||
<h3 class="author">Lord Braindead updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Gun delays. All guns now have delays between shots. Most have less than second, lasercannons and pulse rifles have around 2 seconds delay. Automatics have zero, click-speed.</li>
|
||||
<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/07/06</h2>
|
||||
<h3 class="author">Chinsky updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Humans now can be infected with more than one virus at once.</li>
|
||||
<li class="rscadd">All analyzed viruses are put into virus DB. You can view it and edit their name and description on medical record consoles.</li>
|
||||
<li class="tweak">Only known viruses (ones in DB) will be detected by the machinery and HUDs. </li>
|
||||
<li class="rscadd">Viruses cause fever, body temperature rising the more stage is.</li>
|
||||
<li class="bugfix">Humans' body temperature does not drift towards room one unless there's big difference in them.</li>
|
||||
<li class="tweak">Virus incubators now can transmit viuses from dishes to blood sample.</li>
|
||||
<li class="rscadd">New machine - centrifuge. It can isolate antibodies or viruses (spawning virus dish) from a blood sample in vials. Accepts vials only.</li>
|
||||
<li class="rscadd">Fancy vial boxes in virology, one of them is locked by ID with MD access.</li>
|
||||
<li class="tweak">Engineered viruses are now ariborne too.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">05.07.2013</h2>
|
||||
<h3 class="author">Spamcat updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Pulse! Humans now have hearbeat rate, which can be measured by right-clicking someone - Check pulse or by health analyzer. Medical machinery also has heartbeat monitors. Certain meds and conditions can influence it.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">03.07.2013</h2>
|
||||
<h3 class="author">Segrain updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Security and medical cyborgs can use their HUDs to access records.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">June 28th, 2013</h2>
|
||||
<h3 class="author">Segrain updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">AIs are now able to examine what they see.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">June 27th, 2013</h2>
|
||||
<h2 class="date">27.06.2013</h2>
|
||||
<h3 class="author">Segrain updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">ID cards properly setup bloodtype, DNA and fingerprints again.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">June 26th, 2013</h2>
|
||||
<h3 class="author">Whitellama updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">One-antag rounds (like wizard/ninja) no longer end automatically upon death</li>
|
||||
<li class="wip">Space ninja has been implemented as a voteable gamemode</li>
|
||||
<li class="rscadd">Space ninja spawn landmarks have been implemented (but not yet placed on the map), still spawn at carps-pawns instead. (The code will warn you about this and ask you to report it, it's a known issue.)</li>
|
||||
<li class="rscadd">Five new space ninja directives have been added, old directives have been reworded to be less harsh</li>
|
||||
<li class="wip">Space ninjas have been given their own list as antagonists, and are no longer bundled up with traitors</li>
|
||||
<li class="bugfix">Space ninjas with a "steal a functional AI" objective will now succeed by downloading one into their suits</li>
|
||||
<li class="tweak">Space ninja suits' exploding on death has been nerfed, so as not to cause breaches</li>
|
||||
<li class="rscadd">A few space ninja titles/names have been added and removed to be slightly more believable</li>
|
||||
<li class="bugfix">The antagonist selector no longer chooses jobbanned players when it runs out of willing options</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">June 26th, 2013</h2>
|
||||
<h2 class="date">26.06.2013</h2>
|
||||
<h3 class="author">Segrain updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Autopsy scanner properly displays time of wound infliction and death.</li>
|
||||
<li class="bugfix">Autopsy scanner properly displays wounds by projectile weapons.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">June 23rd, 2013</h2>
|
||||
<h3 class="author">Segrain updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Airlocks of various models can be constructed again.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">June 23rd, 2013</h2>
|
||||
<h3 class="author">faux updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="experiment">There has been a complete medbay renovation spearheaded by Vetinarix. http://baystation12.net/forums/viewtopic.php?f=20&t=7847 <-- Please put any commentary good or bad, here.</li>
|
||||
<li class="tweak">Some maintenance doors within RnD and Medbay have had their accesses changed. Maintenance doors in the joint areas (leading to the research shuttle, virology, and xenobiology) are now zero access. Which means anyone in those joints can enter the maintenance tunnels. This was done to add additional evacuation locations during radiation storms. Additional maintenance doors were added to the tunnels in these areas to prevent docs and scientists from running about.</li>
|
||||
<li class="tweak">Starboard emergency storage isn't gone now, it's simply located in the escape wing.</li>
|
||||
<li class="experiment">An engineering training room has been added to engineering. This location was previously where surgery was located. If you are new to engineering or need to brush up on your skills, please use this area for testing.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">June 22nd 2013</h2>
|
||||
@@ -157,69 +92,6 @@ should be listed in the changelog upon commit though. Thanks. -->
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">21.06.2013</h2>
|
||||
<h3 class="author">Jupotter updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fix the robotiscist preview in the char setupe screen</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">18.06.2013</h2>
|
||||
<h3 class="author">Segrain updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed some bugs in windoor construction.</li>
|
||||
<li class="tweak">Secure windoors are made with rods again.</li>
|
||||
<li class="rscadd">Windoors drop their electronics when broken. Emagged windoors can have theirs removed by crowbar.</li>
|
||||
<li class="rscadd">Airlock electronics can be configured to make door open for any single access on it instead of all of them.</li>
|
||||
<li class="rscadd">Cyborgs can preview their icons before choosing.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">13.06.2013</h2>
|
||||
<h3 class="author">Kilakk updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added the Xenobiologist job. Has access to the research hallway and to xenobiology.</li>
|
||||
<li class="rscdel">Removed Xenobiology access from Scientists.</li>
|
||||
<li class="rscdel">Removed the Xenobiologist alternate title from Scientists.</li>
|
||||
<li class="rscadd">Added "Xenoarchaeology" to the RD, Scientists, and to the ID computer.</li>
|
||||
<li class="tweak">Changed the Research Outpost doors to use "Xenoarchaeology" access.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">6-13-13</h2>
|
||||
<h3 class="author">Asanadas updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added a whimsical suit to the head of personnel's secret clothing locker.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">12/06/2013</h2>
|
||||
<h3 class="author">Zuhayr updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added pneumatic cannon and harpoons.</li>
|
||||
<li class="experiment">Added embedded projectiles. Bullets and thrown weapons may stick in targets. Throwing them by hand won't make them stick, firing them from a cannon might. Implant removal surgery will get rid of shrapnel and stuck items.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">6/11/13</h2>
|
||||
<h3 class="author">Meyar updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixes a security door with a firedoor ontop of it.</li>
|
||||
<li class="bugfix">Fixed a typo relating to the admin Select Equipment Verb. (It's RESPONSE team not RESCUE team)</li>
|
||||
<li class="rscadd">ERT are now automated, from their spawn to their shuttle. Admin intervention no longer required! (Getting to the mechs still requires admin permission generally)</li>
|
||||
<li class="rscadd">Added flashlights to compensate for the weakened PDA lights</li>
|
||||
<li class="tweak">ERT Uniforms updated to be in line with Centcom uniforms. No more turtlenecks, no sir. </li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">09.06.2013</h2>
|
||||
<h3 class="author">Segrain updated:</h3>
|
||||
@@ -269,25 +141,6 @@ should be listed in the changelog upon commit though. Thanks. -->
|
||||
</div>
|
||||
|
||||
<!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here -->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">5.06.2013</h2>
|
||||
<h3 class="author">Chinsky updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Load bearing equipment - webbings and vests for engineers and sec. Attach to jumpsuit, use 'Look in storage' verb (object tab) to open.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class='commit sansserif'>
|
||||
<h2 class='date'>1.06.2013</h2>
|
||||
<h3 class='author'>Chinsky updated:</h3>
|
||||
|
||||
BIN
icons/effects/scorchmark.dmi
Normal file
BIN
icons/effects/scorchmark.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
Reference in New Issue
Block a user