From c5d283f544010ee0cb7f40da3d5fa1ad823544ea Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 20 Jun 2015 21:03:48 -0400 Subject: [PATCH 1/5] Fixes phoron fire reaction progress The amount of gas burning is already limited by vsc.fire_consuption_rate so there is no need to limit the ratio of gas burning. --- code/ZAS/Fire.dm | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 27011dc7b3..7cf4292c16 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -226,13 +226,14 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) //Returns the firelevel /datum/gas_mixture/proc/zburn(zone/zone, force_burn, no_check = 0) - #ifdef FIREDBG - log_debug("***************** FIREDBG *****************") - if(zone) log_debug("Burning [zone.name]!") - #endif - . = 0 if((temperature > PHORON_MINIMUM_BURN_TEMPERATURE || force_burn) && (no_check ||check_recombustability(zone? zone.fuel_objs : null))) + + #ifdef FIREDBG + log_debug("***************** FIREDBG *****************") + log_debug("Burning [zone? zone.name : "zoneless gas_mixture"]!") + #endif + var/gas_fuel = 0 //in the case of mixed gas/liquid fires, the gas burns first. var/liquid_fuel = 0 var/total_fuel = 0 @@ -270,9 +271,8 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) //calculate the firelevel. var/firelevel = calculate_firelevel(total_fuel, total_oxidizers, reaction_limit) - //vapour fuels are extremely volatile! The reaction progress is a percentage of the total fuel (similar to old zburn). - var/gas_reaction_progress = min(0.2, (firelevel/vsc.fire_firelevel_multiplier))*gas_fuel*FIRE_GAS_BURNRATE_MULT + var/gas_reaction_progress = (firelevel/vsc.fire_firelevel_multiplier)*gas_fuel*FIRE_GAS_BURNRATE_MULT //liquid fuels are not as volatile, and the reaction progress depends on the size of the area that is burning. Limit the burn rate to a certain amount per area. var/liquid_reaction_progress = ((firelevel/vsc.fire_firelevel_multiplier)*0.2 + 0.05)*fuel_area*FIRE_LIQUID_BURNRATE_MULT @@ -282,10 +282,13 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) var/used_oxidizers = used_fuel*(FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT) #ifdef FIREDBG + log_debug("gas_fuel = [gas_fuel], liquid_fuel = [liquid_fuel], total_oxidizers = [total_oxidizers]") + log_debug("fuel_area = [fuel_area], total_fuel = [total_fuel], reaction_limit = [reaction_limit]") log_debug("firelevel -> [firelevel] / [vsc.fire_firelevel_multiplier]") log_debug("liquid_reaction_progress = [liquid_reaction_progress]") log_debug("gas_reaction_progress = [gas_reaction_progress]") - log_debug("used_fuel = [used_fuel]; used_oxidizers = [used_oxidizers]; reaction_limit=[reaction_limit]") + log_debug("total_reaction_progress = [total_reaction_progress]") + log_debug("used_fuel = [used_fuel], used_oxidizers = [used_oxidizers]; ") #endif //if the reaction is progressing too slow then it isn't self-sustaining anymore and burns out @@ -297,8 +300,8 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) //*** Remove fuel and oxidizer, add carbon dioxide and heat //remove and add gasses as calculated - var/used_gas_fuel = between(0.25, used_fuel*(gas_reaction_progress/total_reaction_progress), gas_fuel) //remove in proportion to the relative reaction progress - var/used_liquid_fuel = between(0.25, used_fuel-used_gas_fuel, liquid_fuel) + var/used_gas_fuel = min(max(0.25, used_fuel*(gas_reaction_progress/total_reaction_progress)), gas_fuel) //remove in proportion to the relative reaction progress + var/used_liquid_fuel = min(max(0.25, used_fuel-used_gas_fuel), liquid_fuel) //remove_by_flag() and adjust_gas() handle the group_multiplier for us. remove_by_flag(XGM_GAS_OXIDIZER, used_oxidizers) @@ -309,10 +312,10 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) zone.remove_liquidfuel(used_liquid_fuel, !check_combustability()) //calculate the energy produced by the reaction and then set the new temperature of the mix - temperature = (starting_energy + vsc.fire_fuel_energy_release * used_fuel) / heat_capacity() + temperature = (starting_energy + vsc.fire_fuel_energy_release * (used_gas_fuel + used_liquid_fuel)) / heat_capacity() #ifdef FIREDBG - log_debug("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_gas_fuel+used_liquid_fuel]") + log_debug("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_fuel]") log_debug("new temperature = [temperature]") #endif From e08dbc3080f80cfbde8b4fac80452084bde54837 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 21 Jun 2015 02:23:57 -0400 Subject: [PATCH 2/5] Adjusts gas fires to burn out faster with low concentrations of gas fuel --- code/ZAS/Fire.dm | 12 +++++++----- code/ZAS/_gas_mixture_xgm.dm | 1 + 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 7cf4292c16..d752e14593 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -234,7 +234,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) log_debug("Burning [zone? zone.name : "zoneless gas_mixture"]!") #endif - var/gas_fuel = 0 //in the case of mixed gas/liquid fires, the gas burns first. + var/gas_fuel = 0 var/liquid_fuel = 0 var/total_fuel = 0 var/total_oxidizers = 0 @@ -270,12 +270,14 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) //calculate the firelevel. var/firelevel = calculate_firelevel(total_fuel, total_oxidizers, reaction_limit) + var/firelevel_ratio = firelevel / vsc.fire_firelevel_multiplier - //vapour fuels are extremely volatile! The reaction progress is a percentage of the total fuel (similar to old zburn). - var/gas_reaction_progress = (firelevel/vsc.fire_firelevel_multiplier)*gas_fuel*FIRE_GAS_BURNRATE_MULT + //vapour fuels are extremely volatile! The reaction progress is a percentage of the total fuel (similar to old zburn).) + var/min_burn = 0.30*volume*group_multiplier/CELL_VOLUME //in moles - so that fires with very small gas concentrations burn out fast + var/gas_reaction_progress = max(min_burn, firelevel_ratio*gas_fuel)*FIRE_GAS_BURNRATE_MULT //liquid fuels are not as volatile, and the reaction progress depends on the size of the area that is burning. Limit the burn rate to a certain amount per area. - var/liquid_reaction_progress = ((firelevel/vsc.fire_firelevel_multiplier)*0.2 + 0.05)*fuel_area*FIRE_LIQUID_BURNRATE_MULT + var/liquid_reaction_progress = (firelevel_ratio*0.2 + 0.05)*fuel_area*FIRE_LIQUID_BURNRATE_MULT var/total_reaction_progress = gas_reaction_progress + liquid_reaction_progress var/used_fuel = min(total_reaction_progress, reaction_limit) @@ -356,7 +358,7 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs) . = 0 for(var/g in gas) - if(gas_data.flags[g] & XGM_GAS_FUEL && QUANTIZE(gas[g] * vsc.fire_consuption_rate) >= 0.1) + if(gas_data.flags[g] & XGM_GAS_FUEL && QUANTIZE(gas[g] * vsc.fire_consuption_rate) >= 0.005) . = 1 break diff --git a/code/ZAS/_gas_mixture_xgm.dm b/code/ZAS/_gas_mixture_xgm.dm index 8043be1579..6456d64bc1 100644 --- a/code/ZAS/_gas_mixture_xgm.dm +++ b/code/ZAS/_gas_mixture_xgm.dm @@ -232,6 +232,7 @@ gas[g] = gas[g] * (1 - ratio) removed.temperature = temperature + removed.volume = volume * group_multiplier / out_group_multiplier update_values() removed.update_values() From 9d7a1b9ad637beac13cd406f760707bad7e52c65 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 25 Jun 2015 22:03:01 -0400 Subject: [PATCH 3/5] Fixes misleading path and proc name --- code/TriDimension/Turfs.dm | 4 ++-- code/game/machinery/floorlayer.dm | 2 +- .../objects/items/stacks/tiles/plasteel.dm | 16 +++++++------- code/game/objects/structures/lattice.dm | 2 +- code/game/turfs/simulated/floor.dm | 22 +++++++++---------- code/game/turfs/space/space.dm | 4 ++-- code/game/turfs/turf.dm | 4 ++-- code/modules/admin/verbs/debug.dm | 14 ++++++------ code/modules/materials/material_recipes.dm | 2 +- code/modules/mob/living/bot/floorbot.dm | 16 +++++++------- .../mob/living/silicon/robot/robot_modules.dm | 4 ++-- 11 files changed, 45 insertions(+), 45 deletions(-) diff --git a/code/TriDimension/Turfs.dm b/code/TriDimension/Turfs.dm index 43e33ed3c2..12f7bc7c12 100644 --- a/code/TriDimension/Turfs.dm +++ b/code/TriDimension/Turfs.dm @@ -114,10 +114,10 @@ ReplaceWithLattice() return - if (istype(C, /obj/item/stack/tile/plasteel)) + if (istype(C, /obj/item/stack/tile/steel)) var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) if(L) - var/obj/item/stack/tile/plasteel/S = C + var/obj/item/stack/tile/steel/S = C if (S.get_amount() < 1) return qdel(L) diff --git a/code/game/machinery/floorlayer.dm b/code/game/machinery/floorlayer.dm index 009d1c7694..80d9ea8643 100644 --- a/code/game/machinery/floorlayer.dm +++ b/code/game/machinery/floorlayer.dm @@ -10,7 +10,7 @@ var/list/mode = list("dismantle"=0,"laying"=0,"collect"=0) /obj/machinery/floorlayer/New() - T = new/obj/item/stack/tile/plasteel(src) + T = new/obj/item/stack/tile/steel(src) ..() /obj/machinery/floorlayer/Move(new_turf,M_Dir) diff --git a/code/game/objects/items/stacks/tiles/plasteel.dm b/code/game/objects/items/stacks/tiles/plasteel.dm index 86af65a2fa..548173e52c 100644 --- a/code/game/objects/items/stacks/tiles/plasteel.dm +++ b/code/game/objects/items/stacks/tiles/plasteel.dm @@ -1,7 +1,7 @@ -/obj/item/stack/tile/plasteel +/obj/item/stack/tile/steel name = "floor tile" singular_name = "floor tile" - desc = "Those could work as a pretty decent throwing weapon" + desc = "Those could work as a pretty decent throwing weapon" //why? icon_state = "tile" force = 6.0 matter = list(DEFAULT_WALL_MATERIAL = 937.5) @@ -10,24 +10,24 @@ throw_range = 20 flags = CONDUCT -/obj/item/stack/tile/plasteel/New(var/loc, var/amount=null) +/obj/item/stack/tile/steel/New(var/loc, var/amount=null) ..() src.pixel_x = rand(1, 14) src.pixel_y = rand(1, 14) return -/obj/item/stack/tile/plasteel/cyborg +/obj/item/stack/tile/steel/cyborg name = "floor tile synthesizer" desc = "A device that makes floor tiles." gender = NEUTER matter = null uses_charge = 1 charge_costs = list(250) - stacktype = /obj/item/stack/tile/plasteel - build_type = /obj/item/stack/tile/plasteel + stacktype = /obj/item/stack/tile/steel + build_type = /obj/item/stack/tile/steel /* -/obj/item/stack/tile/plasteel/attack_self(mob/user as mob) +/obj/item/stack/tile/steel/attack_self(mob/user as mob) if (usr.stat) return var/T = user.loc @@ -43,7 +43,7 @@ return */ -/obj/item/stack/tile/plasteel/proc/build(turf/S as turf) +/obj/item/stack/tile/steel/proc/build(turf/S as turf) if (istype(S,/turf/space)) S.ChangeTurf(/turf/simulated/floor/plating/airless) else diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 078f4bc06b..f90bc29b2c 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -53,7 +53,7 @@ /obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob) - if (istype(C, /obj/item/stack/tile/plasteel)) + if (istype(C, /obj/item/stack/tile/steel)) var/turf/T = get_turf(src) T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead return diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index b34144fc39..3fbfe7aff2 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -29,7 +29,7 @@ var/list/wood_icons = list("wood","wood-broken") /turf/simulated/floor //Note to coders, the 'intact' var can no longer be used to determine if the floor is a plating or not. - //Use the is_plating(), is_plasteel_floor() and is_light_floor() procs instead. --Errorage + //Use the is_plating(), is_steel_floor() and is_light_floor() procs instead. --Errorage name = "floor" icon = 'icons/turf/floors.dmi' icon_state = "floor" @@ -42,7 +42,7 @@ var/list/wood_icons = list("wood","wood-broken") var/broken = 0 var/burnt = 0 var/mineral = DEFAULT_WALL_MATERIAL - var/floor_type = /obj/item/stack/tile/plasteel + var/floor_type = /obj/item/stack/tile/steel var/lightfloor_state // for light floors, this is the state of the tile. 0-7, 0x4 is on-bit - use the helper procs below proc/get_lightfloor_state() @@ -122,7 +122,7 @@ var/list/wood_icons = list("wood","wood-broken") turf/simulated/floor/proc/update_icon() if(lava) return - else if(is_plasteel_floor()) + else if(is_steel_floor()) if(!broken && !burnt) icon_state = icon_regular_floor else if(is_plating()) @@ -237,8 +237,8 @@ turf/simulated/floor/proc/update_icon() make_plating() break_tile() -/turf/simulated/floor/is_plasteel_floor() - if(ispath(floor_type, /obj/item/stack/tile/plasteel)) +/turf/simulated/floor/is_steel_floor() + if(ispath(floor_type, /obj/item/stack/tile/steel)) return 1 else return 0 @@ -277,7 +277,7 @@ turf/simulated/floor/proc/update_icon() if(istype(src,/turf/simulated/floor/mech_bay_recharge_floor)) src.ChangeTurf(/turf/simulated/floor/plating) if(broken) return - if(is_plasteel_floor()) + if(is_steel_floor()) src.icon_state = "damaged[pick(1,2,3,4,5)]" broken = 1 else if(is_light_floor()) @@ -300,10 +300,10 @@ turf/simulated/floor/proc/update_icon() if(istype(src,/turf/simulated/floor/engine)) return if(istype(src,/turf/simulated/floor/plating/airless/asteroid)) return//Asteroid tiles don't burn if(broken || burnt) return - if(is_plasteel_floor()) + if(is_steel_floor()) src.icon_state = "damaged[pick(1,2,3,4,5)]" burnt = 1 - else if(is_plasteel_floor()) + else if(is_steel_floor()) src.icon_state = "floorscorched[pick(1,2)]" burnt = 1 else if(is_plating()) @@ -351,13 +351,13 @@ turf/simulated/floor/proc/update_icon() //This proc will make the turf a plasteel floor tile. The expected argument is the tile to make the turf with //If none is given it will make a new object. dropping or unequipping must be handled before or after calling //this proc. -/turf/simulated/floor/proc/make_plasteel_floor(var/obj/item/stack/tile/plasteel/T = null) +/turf/simulated/floor/proc/make_plasteel_floor(var/obj/item/stack/tile/steel/T = null) broken = 0 burnt = 0 intact = 1 set_light(0) if(T) - if(istype(T,/obj/item/stack/tile/plasteel)) + if(istype(T,/obj/item/stack/tile/steel)) floor_type = T.type if (icon_regular_floor) icon_state = icon_regular_floor @@ -368,7 +368,7 @@ turf/simulated/floor/proc/update_icon() levelupdate() return //if you gave a valid parameter, it won't get thisf ar. - floor_type = /obj/item/stack/tile/plasteel + floor_type = /obj/item/stack/tile/steel icon_state = "floor" icon_regular_floor = icon_state diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index b3c545053c..35ca29d2d5 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -39,10 +39,10 @@ var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" = ReplaceWithLattice() return - if (istype(C, /obj/item/stack/tile/plasteel)) + if (istype(C, /obj/item/stack/tile/steel)) var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) if(L) - var/obj/item/stack/tile/plasteel/S = C + var/obj/item/stack/tile/steel/S = C if (S.get_amount() < 1) return qdel(L) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 65d9050617..a99a9265d5 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -2,7 +2,7 @@ icon = 'icons/turf/floors.dmi' level = 1.0 - //for floors, use is_plating(), is_plasteel_floor() and is_light_floor() + //for floors, use is_plating(), is_steel_floor() and is_light_floor() var/intact = 1 //Properties for open tiles (/floor) @@ -160,7 +160,7 @@ return 0 /turf/proc/is_asteroid_floor() return 0 -/turf/proc/is_plasteel_floor() +/turf/proc/is_steel_floor() return 0 /turf/proc/is_light_floor() return 0 diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 0552892f21..ef9c5c6376 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -641,13 +641,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_r_store) M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_l_store) - M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/stack/tile/steel(M), slot_in_backpack) if ("pirate") M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index c24490d6db..ab528d9644 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -46,7 +46,7 @@ recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1) recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1) recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0) - recipes += new/datum/stack_recipe("floor tile", /obj/item/stack/tile/plasteel, 1, 4, 20) + recipes += new/datum/stack_recipe("floor tile", /obj/item/stack/tile/steel, 1, 4, 20) recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60) recipes += new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1) recipes += new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1) diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index 8d61d0bb03..80d6d69df8 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -148,7 +148,7 @@ if(!target && amount < maxAmount && eattiles || maketiles) // Eat tiles if(eattiles) - for(var/obj/item/stack/tile/plasteel/T in view(src)) + for(var/obj/item/stack/tile/steel/T in view(src)) if(T in ignorelist) continue target = T @@ -215,7 +215,7 @@ if(A && (locate(/obj/structure/lattice, A) && building == 1 || !locate(/obj/structure/lattice, A) && building == 2)) // Make sure that it still needs repairs var/obj/item/I if(building == 1) - I = new /obj/item/stack/tile/plasteel(src) + I = new /obj/item/stack/tile/steel(src) else I = PoolOrNew(/obj/item/stack/rods, src) A.attackby(I, src) @@ -230,14 +230,14 @@ visible_message("[src] begins to improve the floor.") if(do_after(src, 50)) if(!F.floor_type) - var/obj/item/stack/tile/plasteel/T = new /obj/item/stack/tile/plasteel(src) + var/obj/item/stack/tile/steel/T = new /obj/item/stack/tile/steel(src) F.attackby(T, src) addTiles(-1) target = null repairing = 0 update_icons() - else if(istype(A, /obj/item/stack/tile/plasteel) && amount < maxAmount) - var/obj/item/stack/tile/plasteel/T = A + else if(istype(A, /obj/item/stack/tile/steel) && amount < maxAmount) + var/obj/item/stack/tile/steel/T = A visible_message("[src] begins to collect tiles.") repairing = 1 update_icons() @@ -269,7 +269,7 @@ new /obj/item/device/assembly/prox_sensor(Tsec) if(prob(50)) new /obj/item/robot_parts/l_arm(Tsec) - var/obj/item/stack/tile/plasteel/T = new /obj/item/stack/tile/plasteel(Tsec) + var/obj/item/stack/tile/steel/T = new /obj/item/stack/tile/steel(Tsec) T.amount = amount var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) @@ -285,8 +285,8 @@ /* Assembly */ -/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/plasteel/T, mob/user as mob) - if(!istype(T, /obj/item/stack/tile/plasteel)) +/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/steel/T, mob/user as mob) + if(!istype(T, /obj/item/stack/tile/steel)) ..() return if(contents.len >= 1) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 527ce35df2..5e6b949a65 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -372,7 +372,7 @@ var/global/list/robot_modules = list( C.synths = list(wire) src.modules += C - var/obj/item/stack/tile/plasteel/cyborg/S = new /obj/item/stack/tile/plasteel/cyborg(src) + var/obj/item/stack/tile/steel/cyborg/S = new /obj/item/stack/tile/steel/cyborg(src) S.synths = list(metal) src.modules += S @@ -695,7 +695,7 @@ var/global/list/robot_modules = list( C.synths = list(wire) src.modules += C - var/obj/item/stack/tile/plasteel/cyborg/S = new /obj/item/stack/tile/plasteel/cyborg(src) + var/obj/item/stack/tile/steel/cyborg/S = new /obj/item/stack/tile/steel/cyborg(src) S.synths = list(metal) src.modules += S From 56065022a753cda5236ec1c3f46ce316da7e7f38 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 25 Jun 2015 22:55:26 -0400 Subject: [PATCH 4/5] Updates fire_act() implementations to work better with lower temperature fires In some cases fire_act() wasn't even checking the applied temperature. Reworks how fire damages flooring. --- code/game/objects/effects/aliens.dm | 4 +- code/game/objects/effects/spiders.dm | 2 +- .../objects/items/devices/floor_painter.dm | 2 +- .../objects/items/stacks/tiles/tile_types.dm | 6 +- code/game/turfs/simulated/floor.dm | 64 ++++++++++++------- code/modules/mob/living/carbon/carbon.dm | 3 +- code/modules/mob/living/carbon/human/life.dm | 4 +- code/modules/mob/living/living_defense.dm | 6 ++ code/modules/reagents/reagent_dispenser.dm | 2 +- 9 files changed, 60 insertions(+), 33 deletions(-) diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 6882f9affa..d34c185d08 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -259,7 +259,7 @@ Alien plants should do something if theres a lot of poison /obj/effect/alien/weeds/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) + if(exposed_temperature > 300 + T0C) health -= 5 healthcheck() @@ -430,7 +430,7 @@ Alien plants should do something if theres a lot of poison Burst() /obj/effect/alien/egg/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 500) + if(exposed_temperature > 500 + T0C) health -= 5 healthcheck() diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 03b5c922d8..62c13c7e61 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -48,7 +48,7 @@ qdel(src) /obj/effect/spider/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) + if(exposed_temperature > 300 + T0C) health -= 5 healthcheck() diff --git a/code/game/objects/items/devices/floor_painter.dm b/code/game/objects/items/devices/floor_painter.dm index 43bc58261b..415a5ec200 100644 --- a/code/game/objects/items/devices/floor_painter.dm +++ b/code/game/objects/items/devices/floor_painter.dm @@ -21,7 +21,7 @@ if(istype(A, /turf/simulated/floor)) var/turf/simulated/floor/F = A - if(F.is_plasteel_floor()) // only tiled floors + if(F.is_steel_floor()) // only tiled floors if(tile_dir_mode) var/D = get_dir(usr, F) if(usr.loc == F) diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index dcac154442..47134c0e75 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -26,7 +26,7 @@ throwforce = 1.0 throw_speed = 5 throw_range = 20 - flags = CONDUCT + flags = 0 origin_tech = "biotech=1" /* @@ -41,7 +41,7 @@ throwforce = 1.0 throw_speed = 5 throw_range = 20 - flags = CONDUCT + flags = 0 /obj/item/stack/tile/wood/cyborg name = "wood floor tile synthesizer" @@ -63,4 +63,4 @@ throwforce = 1.0 throw_speed = 5 throw_range = 20 - flags = CONDUCT + flags = 0 diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 3fbfe7aff2..6cfdbf4470 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -102,13 +102,23 @@ var/list/wood_icons = list("wood","wood-broken") return /turf/simulated/floor/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + + var/temp_destroy = get_damage_temperature() if(!burnt && prob(5)) - burn_tile() - else if(prob(1) && !is_plating()) - make_plating() - burn_tile() + burn_tile(exposed_temperature) + else if(temp_destroy && exposed_temperature >= (temp_destroy + 100) && prob(1) && !is_plating()) + make_plating() //destroy the tile, exposing plating + burn_tile(exposed_temperature) return +//should be a little bit lower than the temperature required to destroy the material +/turf/simulated/floor/proc/get_damage_temperature() + if(is_steel_floor()) return T0C+1400 + if(is_wood_floor()) return T0C+200 + if(is_carpet_floor()) return T0C+200 + if(is_grass_floor()) return T0C+80 + return null + /turf/simulated/floor/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume) var/dir_to = get_dir(src, adj_turf) @@ -296,28 +306,38 @@ turf/simulated/floor/proc/update_icon() src.icon_state = "sand[pick("1","2","3")]" broken = 1 -/turf/simulated/floor/proc/burn_tile() +/turf/simulated/floor/proc/burn_tile(var/exposed_temperature) if(istype(src,/turf/simulated/floor/engine)) return if(istype(src,/turf/simulated/floor/plating/airless/asteroid)) return//Asteroid tiles don't burn - if(broken || burnt) return - if(is_steel_floor()) - src.icon_state = "damaged[pick(1,2,3,4,5)]" - burnt = 1 - else if(is_steel_floor()) + + var/damage_temp = get_damage_temperature() + + if(broken) return + if(burnt) + if(is_steel_floor() && exposed_temperature >= damage_temp) //allow upgrading from scorched tiles to damaged tiles + src.icon_state = "damaged[pick(1,2,3,4,5)]" + broken = 1 + return + + if(is_steel_floor() && exposed_temperature >= T0C+300) //enough to char the floor, but not hot enough to actually burn holes in it src.icon_state = "floorscorched[pick(1,2)]" burnt = 1 - else if(is_plating()) - src.icon_state = "panelscorched" - burnt = 1 - else if(is_wood_floor()) - src.icon_state = "wood-broken" - burnt = 1 - else if(is_carpet_floor()) - src.icon_state = "carpet-broken" - burnt = 1 - else if(is_grass_floor()) - src.icon_state = "sand[pick("1","2","3")]" - burnt = 1 + else if(exposed_temperature >= damage_temp) + if(is_steel_floor()) + src.icon_state = "damaged[pick(1,2,3,4,5)]" + burnt = 1 + else if(is_plating()) + src.icon_state = "panelscorched" + burnt = 1 + else if(is_wood_floor()) + src.icon_state = "wood-broken" + burnt = 1 + else if(is_carpet_floor()) + src.icon_state = "carpet-broken" + burnt = 1 + else if(is_grass_floor()) + src.icon_state = "sand[pick("1","2","3")]" + burnt = 1 //This proc will set floor_type to null and the update_icon() proc will then change the icon_state of the turf //This proc auto corrects the grass tiles' siding. diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 8dc6823726..d8842cdd29 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -381,7 +381,8 @@ /mob/living/carbon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) ..() - bodytemperature = max(bodytemperature, BODYTEMP_HEAT_DAMAGE_LIMIT+10) + var/temp_inc = max(BODYTEMP_HEATING_MAX*(1-get_heat_protection()), 0) + bodytemperature = min(bodytemperature + temp_inc, exposed_temperature) /mob/living/carbon/can_use_hands() if(handcuffed) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index a624b3d18c..8379a5a883 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -764,7 +764,7 @@ return thermal_protection_flags - proc/get_heat_protection(temperature) //Temperature is the temperature you're being exposed to. + get_heat_protection(temperature) //Temperature is the temperature you're being exposed to. var/thermal_protection_flags = get_heat_protection_flags(temperature) var/thermal_protection = 0.0 @@ -821,7 +821,7 @@ return thermal_protection_flags - proc/get_cold_protection(temperature) + get_cold_protection(temperature) if(COLD_RESISTANCE in mutations) return 1 //Fully protected from the cold. diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 32b0235009..986ab14cec 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -239,6 +239,12 @@ adjust_fire_stacks(2) IgniteMob() +/mob/living/proc/get_cold_protection() + return 0 + +/mob/living/proc/get_heat_protection() + return 0 + //Finds the effective temperature that the mob is burning at. /mob/living/proc/fire_burn_temperature() if (fire_stacks <= 0) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 185f6b1342..7fc8ebf8ab 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -165,7 +165,7 @@ explosion(src.loc,1,2,4) else if (reagents.total_volume > 100) explosion(src.loc,0,1,3) - else + else if (reagents.total_volume > 50) explosion(src.loc,-1,1,2) if(src) qdel(src) From aae29d8b6ee83bc80219ec280e83bfd0930800ab Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 25 Jun 2015 23:18:48 -0400 Subject: [PATCH 5/5] Adds 'melting' and ignition points for various materials --- code/modules/materials/materials.dm | 34 ++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 2098c7c776..2f2be81dfa 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -69,7 +69,7 @@ var/list/name_to_material // Attributes var/cut_delay = 0 // Delay in ticks when cutting through this wall. var/radioactivity // Radiation var. Used in wall and object processing to irradiate surroundings. - var/ignition_point // Point at which the material catches on fire. + var/ignition_point // K, point at which the material catches on fire. var/melting_point = 1800 // K, walls will take damage if they're next to a fire hotter than this var/integrity = 150 // General-use HP value for products. var/opacity = 1 // Is the material transparent? 0.5< makes transparent walls/doors. @@ -249,7 +249,7 @@ var/list/name_to_material /material/phoron name = "phoron" stack_type = /obj/item/stack/material/phoron - ignition_point = 100 + ignition_point = PHORON_MINIMUM_BURN_TEMPERATURE icon_base = "stone" icon_colour = "#FC2BC5" shard_type = SHARD_SHARD @@ -432,7 +432,7 @@ var/list/name_to_material name = "phoron glass" stack_type = /obj/item/stack/material/glass/phoronglass flags = MATERIAL_BRITTLE - ignition_point = 300 + ignition_point = PHORON_MINIMUM_BURN_TEMPERATURE+300 integrity = 200 // idk why but phoron windows are strong, so. icon_colour = "#FC2BC5" stack_origin_tech = "materials=3;phorontech=2" @@ -458,6 +458,7 @@ var/list/name_to_material icon_colour = "#CCCCCC" hardness = 10 weight = 12 + melting_point = T0C+371 //assuming heat resistant plastic stack_origin_tech = "materials=3" /material/plastic/holographic @@ -521,6 +522,8 @@ var/list/name_to_material shard_can_repair = 0 // you can't weld splinters back into planks hardness = 15 weight = 18 + melting_point = T0C+300 //okay, not melting in this case, but hot enough to destroy wood + ignition_point = T0C+288 stack_origin_tech = "materials=1;biotech=1" dooropen_noise = 'sound/effects/doorcreaky.ogg' door_icon_base = "wood" @@ -542,6 +545,8 @@ var/list/name_to_material icon_colour = "#AAAAAA" hardness = 1 weight = 1 + ignition_point = T0C+232 //"the temperature at which book-paper catches fire, and burns." close enough + melting_point = T0C+232 //temperature at which cardboard walls would be destroyed stack_origin_tech = "materials=1" door_icon_base = "wood" destruction_desc = "crumples" @@ -550,6 +555,8 @@ var/list/name_to_material name = "cloth" stack_origin_tech = "materials=2" door_icon_base = "wood" + ignition_point = T0C+232 + melting_point = T0C+300 flags = MATERIAL_PADDING /material/cult @@ -578,6 +585,7 @@ var/list/name_to_material icon_colour = "#E85DD8" dooropen_noise = 'sound/effects/attackblob.ogg' door_icon_base = "resin" + melting_point = T0C+300 /material/resin/can_open_material_door(var/mob/living/user) var/mob/living/carbon/M = user @@ -591,6 +599,8 @@ var/list/name_to_material icon_colour = "#5C4831" stack_origin_tech = "materials=2" flags = MATERIAL_PADDING + ignition_point = T0C+300 + melting_point = T0C+300 /material/carpet name = "carpet" @@ -598,12 +608,16 @@ var/list/name_to_material use_name = "red upholstery" icon_colour = "#DA020A" flags = MATERIAL_PADDING + ignition_point = T0C+232 + melting_point = T0C+300 /material/cotton name = "cotton" display_name ="cotton" icon_colour = "#FFFFFF" flags = MATERIAL_PADDING + ignition_point = T0C+232 + melting_point = T0C+300 /material/cloth_teal name = "teal" @@ -611,6 +625,8 @@ var/list/name_to_material use_name = "teal cloth" icon_colour = "#00EAFA" flags = MATERIAL_PADDING + ignition_point = T0C+232 + melting_point = T0C+300 /material/cloth_black name = "black" @@ -618,6 +634,8 @@ var/list/name_to_material use_name = "black cloth" icon_colour = "#505050" flags = MATERIAL_PADDING + ignition_point = T0C+232 + melting_point = T0C+300 /material/cloth_green name = "green" @@ -625,6 +643,8 @@ var/list/name_to_material use_name = "green cloth" icon_colour = "#01C608" flags = MATERIAL_PADDING + ignition_point = T0C+232 + melting_point = T0C+300 /material/cloth_puple name = "purple" @@ -632,6 +652,8 @@ var/list/name_to_material use_name = "purple cloth" icon_colour = "#9C56C4" flags = MATERIAL_PADDING + ignition_point = T0C+232 + melting_point = T0C+300 /material/cloth_blue name = "blue" @@ -639,6 +661,8 @@ var/list/name_to_material use_name = "blue cloth" icon_colour = "#6B6FE3" flags = MATERIAL_PADDING + ignition_point = T0C+232 + melting_point = T0C+300 /material/cloth_beige name = "beige" @@ -646,6 +670,8 @@ var/list/name_to_material use_name = "beige cloth" icon_colour = "#E8E7C8" flags = MATERIAL_PADDING + ignition_point = T0C+232 + melting_point = T0C+300 /material/cloth_lime name = "lime" @@ -653,3 +679,5 @@ var/list/name_to_material use_name = "lime cloth" icon_colour = "#62E36C" flags = MATERIAL_PADDING + ignition_point = T0C+232 + melting_point = T0C+300