From adc3c14779faaa4c609345f2d0e1e1989fed1013 Mon Sep 17 00:00:00 2001 From: Mloc-Argent Date: Sat, 20 Jul 2013 18:38:00 +0100 Subject: [PATCH] Revert #3316 from BEF due to compile errors and (assumed) missing files. Signed-off-by: Mloc-Argent --- code/ZAS/Fire.dm | 164 +++++------------ code/defines/obj.dm | 12 +- .../effects/decals/Cleanable/scorchmark.dm | 15 -- code/game/objects/effects/effect_system.dm | 18 +- .../objects/items/stacks/sheets/mineral.dm | 18 +- .../game/objects/items/weapons/power_cells.dm | 8 +- .../game/objects/items/weapons/tanks/tanks.dm | 14 +- .../structures/stool_bed_chair_nest/chairs.dm | 11 -- .../structures/stool_bed_chair_nest/stools.dm | 4 - code/game/objects/structures/window.dm | 5 +- code/modules/reagents/reagent_dispenser.dm | 51 +----- html/changelog.html | 166 +----------------- icons/effects/scorchmark.dmi | Bin 12218 -> 0 bytes 13 files changed, 79 insertions(+), 407 deletions(-) delete mode 100644 code/game/objects/effects/decals/Cleanable/scorchmark.dm delete mode 100644 icons/effects/scorchmark.dmi diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 31c3085f40..023d60acf0 100644 --- a/code/ZAS/Fire.dm +++ b/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,87 +55,28 @@ obj icon = 'fire.dmi' icon_state = "1" - layer = TURF_LAYER + 0.2 + layer = TURF_LAYER 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) @@ -145,29 +86,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,scorch)) + if(!air_contents.check_combustability(liquid)) del src - + //get a firelevel and set the icon - firelevel = air_contents.calculate_firelevel(liquid,scorch) - - if(firelevel > 3) + firelevel = air_contents.calculate_firelevel(liquid) + + if(firelevel > 6) icon_state = "3" SetLuminosity(7) - else if(firelevel > 2) + else if(firelevel > 2.5) 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 @@ -177,7 +118,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(prob( 100 * (1 - min( max( ( (world.time - 30) - enemy_tile.fire_protection ), 0 ) / 30, 1) ) ) ) + if(enemy_tile.fire_protection > world.time-30) firelevel -= 1.5 continue @@ -185,29 +126,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,scorch)) + if(flow.check_combustability(liquid)) //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,scorch,1) - + flow.zburn(liquid,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) ..() @@ -237,15 +178,15 @@ turf/simulated/apply_fire_protection() fire_protection = world.time -datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid, obj/effect/decal/cleanable/scorchmark/scorch, force_burn) +datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid,force_burn) var/value = 0 - - if((temperature > PLASMA_MINIMUM_BURN_TEMPERATURE || force_burn) && check_combustability(liquid,scorch) ) - var/total_fuel = 0 + + if((temperature > PLASMA_MINIMUM_BURN_TEMPERATURE || force_burn) && check_combustability(liquid) ) + 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 @@ -257,12 +198,8 @@ datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid, obj/ 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, scorch) + var/firelevel = calculate_firelevel(liquid) //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 @@ -270,7 +207,7 @@ datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid, obj/ //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 @@ -295,39 +232,33 @@ datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid, obj/ 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, obj/effect/decal/cleanable/scorchmark/scorch) +datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/liquid_fuel/liquid) //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, obj/effect/decal/cleanable/scorchmark/scorch) +datum/gas_mixture/proc/calculate_firelevel(obj/effect/decal/cleanable/liquid_fuel/liquid) //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) @@ -336,20 +267,17 @@ 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) @@ -395,4 +323,6 @@ 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") \ No newline at end of file + apply_damage(0.4*mx*arms_exposure, BURN, "r_arm", 0, 0, "Fire") + + //flash_pain() diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 116136bfaf..661f4c43b3 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -80,17 +80,7 @@ var/name = t.fields["name"] var/rank = t.fields["rank"] var/real_rank = t.fields["real_rank"] - - 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" + isactive[name] = t.fields["p_stat"] //world << "[name]: [rank]" diff --git a/code/game/objects/effects/decals/Cleanable/scorchmark.dm b/code/game/objects/effects/decals/Cleanable/scorchmark.dm deleted file mode 100644 index 9274708d6e..0000000000 --- a/code/game/objects/effects/decals/Cleanable/scorchmark.dm +++ /dev/null @@ -1,15 +0,0 @@ -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 \ No newline at end of file diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 309d667553..d3e7144297 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -39,25 +39,25 @@ would spawn and follow the beaker, even if it is carried or thrown. /obj/effect/effect/water/New() ..() - var/turf/simulated/floor/T = src.loc - if (istype(T, /turf/simulated/floor)) - T.fire_protection = world.time + //var/turf/T = src.loc + //if (istype(T, /turf)) + // T.firelevel = 0 //TODO: FIX spawn( 70 ) delete() return return /obj/effect/effect/water/Del() - var/turf/simulated/floor/T = src.loc - if (istype(T, /turf/simulated/floor)) - T.fire_protection = world.time + //var/turf/T = src.loc + //if (istype(T, /turf)) + // T.firelevel = 0 //TODO: FIX ..() return /obj/effect/effect/water/Move(turf/newloc) - var/turf/simulated/floor/T = src.loc - if (istype(T, /turf/simulated/floor)) - T.fire_protection = world.time + //var/turf/T = src.loc + //if (istype(T, /turf)) + // T.firelevel = 0 //TODO: FIX if (--src.life < 1) //SN src = null delete() diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index f559c7f830..834029e7c4 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -103,9 +103,6 @@ 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), \ @@ -117,18 +114,6 @@ 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" @@ -139,6 +124,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), \ @@ -268,4 +254,4 @@ var/global/list/datum/stack_recipe/silver_recipes = list ( \ throw_speed = 3 throw_range = 3 origin_tech = "materials=4" - perunit = 2000 + perunit = 2000 diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index 0a1cda9b2b..353790d22f 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -20,10 +20,6 @@ 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 [user] is licking the electrodes of the [src.name]! It looks like \he's trying to commit suicide." return (FIRELOSS) @@ -118,7 +114,9 @@ g_amt = 0 /obj/item/weapon/cell/fire_burn() + viewers(src) << "\red Charge: [src.charge]" var/radius = round( (sqrt(charge)/30)+0.5, 1 ) + viewers(src) << "\red Radius: [radius]" if (radius >= 1) explosion(src.loc,0,0,radius) - ..() + ..() diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index ea3f42247d..143ff13a04 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -16,11 +16,6 @@ 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() ..() @@ -266,11 +261,4 @@ integrity-- else if(integrity < 3) - 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) - ..() \ No newline at end of file + integrity++ \ No newline at end of file diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 6e421c9443..762888a4b4 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -76,19 +76,11 @@ 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)) @@ -101,9 +93,6 @@ /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" diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm index fcd404f165..ab7a55e1da 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -6,10 +6,6 @@ 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) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 55a00acfdc..2879122972 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -373,9 +373,8 @@ return /obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - //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) + if(exposed_temperature > T0C + 800) + hit(round(exposed_volume / 100), 0) ..() diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 4762b3212f..93cb235649 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -1,3 +1,5 @@ + + /obj/structure/reagent_dispensers name = "Dispenser" desc = "..." @@ -64,6 +66,12 @@ new /obj/effect/effect/water(src.loc) del(src) + + + + + + //Dispensers /obj/structure/reagent_dispensers/watertank name = "watertank" @@ -71,39 +79,10 @@ 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" @@ -112,13 +91,6 @@ 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) @@ -192,11 +164,6 @@ 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." @@ -247,4 +214,4 @@ New() ..() - reagents.add_reagent("virusfood", 1000) + reagents.add_reagent("virusfood", 1000) diff --git a/html/changelog.html b/html/changelog.html index afa541edf7..9e59bcd6e9 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -40,7 +40,7 @@ Header Section Code: Abi79, Aryn, Cael_Aislinn, Chinsky, cib, CompactNinja, DopeGhoti, Erthilo, Hawk_v3, Head, Ispil, Lexusjjss, Melonstorm, Miniature, Mloc, NerdyBoy1104, SkyMarshal, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty
- Sprites: Apple_Master, Arcalane, Chinsky, CompactNinja, Deus Dactyl, Erthilo, Flashkirby, Miniature, Searif, Xenone, faux
+ Sprites: Apple_Master, Arcalane, Chinsky, CompactNinja, Deus Dactyl, Erthilo, Flashkirby, Miniature, Searif, Xenone
Sounds: Aryn
Thanks To: /tg/ station, Goonstation, Animus Station, Daedalus, and original Spacestation 13 devs. Skibiliano for the IRC bot. @@ -56,6 +56,7 @@ 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. --> +

14/07/2013

Lord Braindead updated:

@@ -66,96 +67,21 @@ should be listed in the changelog upon commit though. Thanks. -->
-

2013-11-07

-

Chinsky updated:

-
    -
  • 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.
  • -
-
-
-

2013/07/06

-

Chinsky updated:

-
    -
  • Humans now can be infected with more than one virus at once.
  • -
  • All analyzed viruses are put into virus DB. You can view it and edit their name and description on medical record consoles.
  • -
  • Only known viruses (ones in DB) will be detected by the machinery and HUDs.
  • -
  • Viruses cause fever, body temperature rising the more stage is.
  • -
  • Humans' body temperature does not drift towards room one unless there's big difference in them.
  • -
  • Virus incubators now can transmit viuses from dishes to blood sample.
  • -
  • New machine - centrifuge. It can isolate antibodies or viruses (spawning virus dish) from a blood sample in vials. Accepts vials only.
  • -
  • Fancy vial boxes in virology, one of them is locked by ID with MD access.
  • -
  • Engineered viruses are now ariborne too.
  • -
-
-
-

05.07.2013

-

Spamcat updated:

-
    -
  • 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.
  • -
-
-
-

03.07.2013

-

Segrain updated:

-
    -
  • Security and medical cyborgs can use their HUDs to access records.
  • -
-
-
-

June 28th, 2013

-

Segrain updated:

-
    -
  • AIs are now able to examine what they see.
  • -
-
-
-

June 27th, 2013

+

27.06.2013

Segrain updated:

  • ID cards properly setup bloodtype, DNA and fingerprints again.
+
-

June 26th, 2013

-

Whitellama updated:

-
    -
  • One-antag rounds (like wizard/ninja) no longer end automatically upon death
  • -
  • Space ninja has been implemented as a voteable gamemode
  • -
  • 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.)
  • -
  • Five new space ninja directives have been added, old directives have been reworded to be less harsh
  • -
  • Space ninjas have been given their own list as antagonists, and are no longer bundled up with traitors
  • -
  • Space ninjas with a "steal a functional AI" objective will now succeed by downloading one into their suits
  • -
  • Space ninja suits' exploding on death has been nerfed, so as not to cause breaches
  • -
  • A few space ninja titles/names have been added and removed to be slightly more believable
  • -
  • The antagonist selector no longer chooses jobbanned players when it runs out of willing options
  • -
-
-
-

June 26th, 2013

+

26.06.2013

Segrain updated:

  • Autopsy scanner properly displays time of wound infliction and death.
  • Autopsy scanner properly displays wounds by projectile weapons.
-
-

June 23rd, 2013

-

Segrain updated:

-
    -
  • Airlocks of various models can be constructed again.
  • -
-
- -
-

June 23rd, 2013

-

faux updated:

-
    -
  • 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.
  • -
  • 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.
  • -
  • Starboard emergency storage isn't gone now, it's simply located in the escape wing.
  • -
  • 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.
  • -
-

June 22nd 2013

@@ -166,69 +92,6 @@ should be listed in the changelog upon commit though. Thanks. -->
-
-

21.06.2013

-

Jupotter updated:

-
    -
  • Fix the robotiscist preview in the char setupe screen
  • -
-
- -
-

18.06.2013

-

Segrain updated:

-
    -
  • Fixed some bugs in windoor construction.
  • -
  • Secure windoors are made with rods again.
  • -
  • Windoors drop their electronics when broken. Emagged windoors can have theirs removed by crowbar.
  • -
  • Airlock electronics can be configured to make door open for any single access on it instead of all of them.
  • -
  • Cyborgs can preview their icons before choosing.
  • -
-
- -
-

13.06.2013

-

Kilakk updated:

-
    -
  • Added the Xenobiologist job. Has access to the research hallway and to xenobiology.
  • -
  • Removed Xenobiology access from Scientists.
  • -
  • Removed the Xenobiologist alternate title from Scientists.
  • -
  • Added "Xenoarchaeology" to the RD, Scientists, and to the ID computer.
  • -
  • Changed the Research Outpost doors to use "Xenoarchaeology" access.
  • -
-
- -
-

6-13-13

-

Asanadas updated:

-
    -
  • Added a whimsical suit to the head of personnel's secret clothing locker.
  • -
-
- -
-

12/06/2013

-

Zuhayr updated:

-
    -
  • Added pneumatic cannon and harpoons.
  • -
  • 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.
  • -
-
- - -
-

6/11/13

-

Meyar updated:

-
    -
  • Fixes a security door with a firedoor ontop of it.
  • -
  • Fixed a typo relating to the admin Select Equipment Verb. (It's RESPONSE team not RESCUE team)
  • -
  • ERT are now automated, from their spawn to their shuttle. Admin intervention no longer required! (Getting to the mechs still requires admin permission generally)
  • -
  • Added flashlights to compensate for the weakened PDA lights
  • -
  • ERT Uniforms updated to be in line with Centcom uniforms. No more turtlenecks, no sir.
  • -
-
- -

09.06.2013

Segrain updated:

@@ -278,25 +141,6 @@ should be listed in the changelog upon commit though. Thanks. -->
-
-

5.06.2013

-

Chinsky updated:

-
    -
  • Load bearing equipment - webbings and vests for engineers and sec. Attach to jumpsuit, use 'Look in storage' verb (object tab) to open.
  • -
-
- - - - - - - - - - - -

1.06.2013

Chinsky updated:

diff --git a/icons/effects/scorchmark.dmi b/icons/effects/scorchmark.dmi deleted file mode 100644 index eb4e21cc12f927e341afa3d6a0f63190b655edef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12218 zcmV;rFGbLaP)V=-0C=2*$~y{#Fce1NI(HR6+7IJ%#v+YGB!%ulFf&P^LK1ZQ7J{AJ?i~11 zv|X=9s6o?id~n+eiSqR(akx2JNEA5hV7-yniL zii#+RiilW1jEV)L2WetQ0mTNWfSslYiWEg`SP&IOnhmi6Dk7qrlb&^xY%D-E8Xbk8{p<&NJT!-RJdsUUTov+_`h-&YU^rbIt`=qpHLoc(6LZ6u1Dm)z6=< z%Acstj|3hC4o!KtrQ=I-{p#9#fSrM(fMuSyRiwaOetcN84=nQZd`|}e3;RI&jAJjr#9)^)xdM8Gj}i^!Y64}cwj{|Ee4RU7K1-x0tH5xGlMr>A=#1^lzBegOQ7 z|54SyiO5KQfH@*^tg3!RM3#!kB;a}x*$wCitX9>}ipb%>01;UYyzlKS5RtX2x=KWb z0Q&&jRDJu0s=g^A?Y&RqunE<}2m3pzZdafaFjPcd1|Cw?i~U~jiO678-K?s2q-T6m zRWI^!zBuyR13UOz*@v_OfSu|YoXUm*Gl4t&d}dWX1vmycD&9CY!*)n@mI8YK9sT^Y zRJI|{;3oG!4_NNUcL6Vc%*yHutN^B`yy#b~u(Lhw0bG;%ycw7ZJOs4EX7qNcotLY7 zT?srM?Rs8sU^`$pU=nbT=O5U#!(Mokrw{v$&jJQ`-oC)6Q{B6&YdZrAfx|I!F&fyp zsNl#ylNdUa$$L)cGfmy&L&pQXWAzgnVMmFyNuGqq}bpdX!@`eFN1DD6( zc-qzPw+uMK^CF$%FC@syMZjb~UJIPy$9pyD!x-TFIB8!MKH}*fDeqZeQ&sOlU}Tlo z&C>;*-s0)?p1x7lKM`9^ZTDRUeDwfVr@GsFdez5F)~&tcrb zQ>yxxs^0agdbfyN0(@Cje<&iSV@vEKRUIQDZB+FiUjHmrT_+--XGBRo8pj(Lf(neXQwVTAl5H(}1r6C#&jGfHuG> z*e3W?s=N=zt^6FgOjReQvR8pcz&on?u852P{zp|eh)8=?{j-Q%2K?4vrwmy~bt*Sp4k%xgdF_Lk87L6OtbRUEc zz%<}~jP2YFquYA{eK1;oAaFYHm|y!wYG)X5F=;;lF7kApr?JsLjIHVeQr&Ysy%nSL z+r@;#CP;T|qr9Iq(Qq!%kM9G<<`?PtS-_l}#%@D37Qqd51@=k#mytS@Z+<7RgtBQI zSl#$l3b%78#yhX^!MxoEei*QOeh5zw!uaBstNhKt0^mj9#=IKi0rEttXMQ?<%KJ1i zW-B&(FRusC%V%N?$l?AXP9xZ3UORI?trn8)gNypW zTd92Obo>G)XKdA^o#0%Kz_`19RFlDvgG0J9&DIT=KowlvzSt@novzC>{1TkBZ|M(Z z*$<=ewXdWK=Ky>A@%|})Bd|7|PxQf^>>cfe=|JXCq~#e@GZ9#rj!(m75^Pm1!s({x z9pve1U>&x>g9&GIQ#*TjdO*A+Y;p}recuXSIo{rLxSk5*(_>=ZK(z;IbE+^H=m5 zkccM&hcxNqpmf~T)2SHS3~*!=&c--{+bJB({rT;BnrGSgG<#~A*}>DEb*DT(>zjso zIuBndem=qbwb0Km#5U1+e*SWkc6ax5Q?vVe*;opBd8#U#)TI8sluduFr_W--*HE0J zqe#p>)AKLKsKQ;Ty(u`Cg^_xO(?nO1E(n(Ec5LSC90Ld}#yF=FQ~hl)vJuLyITS8x z35{eda|(OVIAh|$uERK+y}b{Yk~p_ie|w;vA0H3g0-Qmad7;YQxyiLhVw>=-DepW_ zPxmyW=OaCR8n~cpXLWV{8Gl)!w_1*=vByTc?NoKGh#Vv$H~B-3Rn^~%$Th&{RP}o7 zw^3C;?<(5YJnwl`{XC7oCo!c|cNfyuVLUv*Pc%uUs``s`{A=LX>HJ?s`AP(*I`>&^rIqN?9l)ffC_ob1x(ow>sza+{~; zdfMI71HH=kY5YAcB1$=_7h%CZ5 zCNRA{z*G^Lt*YM;kq1R&y0`r{@Fh$RK}1%I8DnY{|m(yS#f=RDYe{LF&|7`MN-T-dP86tA0h)nRl{4n)*l=p43s$LQG4|e*r zo+AD)XhJ97!1;ZQ^Z-0l)fq@Ja6HvExO~W|HFo9lx$syTjGrYP_ zY|?9~JK+UgFs^7X;CjlYJHlU7=uGazShjeHAs{{2q|Gd8cck#ySuZpu9;CWL7shi%Sb@_Y*u z(J#d~k}D{NkwK){h9PYX4qOCpVc4 z{qrCLmy@i6p7%nN>rMnt^5bJtev6qgw1by=r$Sg7iSf4QRt*NZ=-A|D2Q|rCiLt1! zro8jh@mcBkC``BsR&W5OZ@CXMgl~;4`!P5f#Ej-W{dlvdPo*}G!=%*-RUekseQox~ zCy^iTnMv+ntd@_@;-jP7+Ym6)SxZ!QxUmXZFg>?s>@aNKLC3@#yb8;RiCBt z_q2$t2X=M+dCN~#e;^`rMdXc?y$1L*@F9SRdsOqJ>-i;&oB*6DBKu;bD}FsOdcMK?ezu4luBw-Lf1VSOgYt8T$PMZA zn)G}>@x$jtq!aKi@PXSN5RtXcF;2yFW!=2~IyGixKQZGGZB_MM%z}iv)yjXL7m-sj z0Vz5(DRtsY*zP|M_(H1lX%X2~&C>L)hzu2x&j4?#@!SD}IZ0K2p{llBO-GQqxPGDb(ZsnS^wAy?63P!(!GgyU5);nQKZ6>C5ygOZc5hfAW_Jctba*_=l z?QuIbMUk}|rpFlqJdcshkreJCD-&ab?SdJP-XH;|g5*`_vnj@xxV{hY2u23O(0^^Z zW+F*n=KYR+sw;`ydfucUK|un(sH%g3Kdb6P7|Zw*RXy8Z)XzlZBCq>rPfrKFqpDM! zr2H9M4NHOl#guw`W9p0ey@5%De*+#BkwGHT2lzWqLR9rPss3P94dL(-G28PbAM7_& zbtLe%sy?r(|LX$Z=^_%V`dYvCAys`H)8FhLjf==ps`@YKeyGVio&5B15t)LK#miN7 z3dThNd_&A;jjBGXsw+e!$jt!Yzr{dUzfjfHB67QkoFgI|G0iXWHilxGQw=-Z0b91g zd&fq-6|Sk&vT+Zf%#6jJ-cq&KlM3lTQ8AxRqsB5Ig*Ra~imn)U^h$O8d`yPe2e((m z{ZpN-F&ci0x3Q4s98P8_$B`He8f^trG3pRTsnGQtiODBVq`J>FxzARZa&ZPgk0uqa ztIpp{#}DPkF%s~4$_qAce9G&Ft6=?HFftWF+qpF2bY@Y=(YZdbBdR`)OveEtJ1ON2 z_4^!-k)J+5=TyEC$3HcB{(Y-SI4hk$PT_)%!;DNB2fH1~f`?6xPzd(WLaLXlDs8a0 zzLfM6k;Ry5_bYA@}a7_i7ou3AOd=*>c6M_>##lNw<0n_RqqgkfBcsg#KX<1 zdaH=MstNTVB6k2k##Ff@o7^*?C|6;t=`KvD`@NUd<5vDu zej3Zz(f5<@(%0{#U26!su&s{V_b>b5hc`>B89^WcN=>>|=lM3#uiG!c2) z@3A0NnZeorUKSBuEysZU?TR26H1uZqZx7>cf6Q~}02nFHhI zm`Eevyu{NM>y)1d>NfyfOFg|2x6e}e-q$IH`D3t6Z~z6XIUdvDyqPw$*mMJkH7wu1 z>dWIz^7>=u(N-HPrmwl2V%?KeHXLIlCX%?I>Y0}|X|ojM$~(u?b)V4Inp}^@_?BL^g zAka^p3%UX`+5KKsza%32W4et~F?IA~np6}bGD=mS6Ojj0^;%!{2Vi*5?}?c*y8!R2 z>SA&89Mw;p3-aSPFn<3yRbAvHp`)r^*yOrJ>fD5wy5dhFvV*FAnCgtjaIL3l;|6@Z z8kvamr?HjVSydbKSzf-2s{WzM+ZwayzU1c(41<^n@;xUr9eo_1RujZ7#MJpSRn=4* z{$|4HaWKZp9Z3RPd0B^aJcEycrPGM5?CEJIY!3JCd=ezy%SO>SYpa}K7r%J|YJoAiAKW&>G(t@gkeJw$<;AA`vmi_ GUP!_)>sfL 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 IM6N<$f;@CJi~s-t