diff --git a/code/ATMOSPHERICS/hvac/spaceheater.dm b/code/ATMOSPHERICS/hvac/spaceheater.dm index c1f2a28779c..bfe9124636f 100644 --- a/code/ATMOSPHERICS/hvac/spaceheater.dm +++ b/code/ATMOSPHERICS/hvac/spaceheater.dm @@ -411,7 +411,7 @@ if(istype(user,/mob/living/carbon) && on) var/mob/living/carbon/absolutemadman = user absolutemadman.adjust_fire_stacks(1) - if(absolutemadman.IgniteMob()) + if(absolutemadman.ignite()) absolutemadman.visible_message("[user] walks into \the [src], and is set alight!", "You walk into \the [src], and are set alight!") /obj/machinery/space_heater/campfire/stove/fireplace diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 4c26ca0574b..14785fee075 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -613,6 +613,10 @@ var/ZAS_fuel_energy_release_rate = zas_settings.Get(/datum/ZAS_Setting/fire_fuel /obj/effect/fire/burnLiquidFuel() return 0 +/obj/effect/fire/Crossed(atom/movable/AM) + AM.ignite() + ..() + /obj/effect/fire/process() if(timestopped) return 0 @@ -657,7 +661,7 @@ var/ZAS_fuel_energy_release_rate = zas_settings.Get(/datum/ZAS_Setting/fire_fuel for(var/mob/living/carbon/human/M in S) if(M.mutations.Find(M_UNBURNABLE)) continue - M.FireBurn(firelevel, FLAME_TEMPERATURE_PLASTIC, air_contents.return_pressure()) + M.fire_act(air_contents, FLAME_TEMPERATURE_PLASTIC, air_contents.return_volume()) //Burn items in the turf. for(var/atom/A in S) @@ -880,53 +884,3 @@ var/ZAS_fuel_energy_release_rate = zas_settings.Get(/datum/ZAS_Setting/fire_fuel firelevel = ZAS_firelevel_multiplier * mix_multiplier * dampening_multiplier return max(0, firelevel) - - -/////////////////////////////////////////////// -// BURNING MOBS -/////////////////////////////////////////////// -/mob/living/proc/FireBurn(var/firelevel, var/last_temperature, var/pressure) - var/mx = 5 * firelevel/ZAS_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1) - apply_damage(2.5*mx, BURN) - -/mob/living/carbon/human/FireBurn(var/firelevel, var/last_temperature, var/pressure) - var/head_exposure = 1 - var/chest_exposure = 1 - var/groin_exposure = 1 - var/legs_exposure = 1 - var/arms_exposure = 1 - - //Get heat transfer coefficients for clothing. - for(var/obj/item/clothing/C in src) - if(is_holding_item(C)) - continue - if(C.max_heat_protection_temperature >= last_temperature) - if(!is_slot_hidden(C.body_parts_covered,FULL_HEAD)) - head_exposure = 0 - if(!is_slot_hidden(C.body_parts_covered,UPPER_TORSO)) - chest_exposure = 0 - if(!is_slot_hidden(C.body_parts_covered,LOWER_TORSO)) - groin_exposure = 0 - if(!is_slot_hidden(C.body_parts_covered,LEGS)) - legs_exposure = 0 - if(!is_slot_hidden(C.body_parts_covered,ARMS)) - arms_exposure = 0 - - //minimize this for low-pressure enviroments - var/mx = 5 * max(firelevel,1.5)/ZAS_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1) - - //Always check these damage procs first if fire damage isn't working. They're probably what's wrong. - var/fire_tile_modifier = 4 //multiplier for damage received while standing on a fire tile - apply_damage(fire_tile_modifier*HEAD_FIRE_DAMAGE_MULTIPLIER*mx*head_exposure, BURN, LIMB_HEAD, 0, 0, used_weapon = "Fire") - apply_damage(fire_tile_modifier*CHEST_FIRE_DAMAGE_MULTIPLIER*mx*chest_exposure, BURN, LIMB_CHEST, 0, 0, used_weapon ="Fire") - apply_damage(fire_tile_modifier*GROIN_FIRE_DAMAGE_MULTIPLIER*mx*groin_exposure, BURN, LIMB_GROIN, 0, 0, used_weapon ="Fire") - apply_damage(fire_tile_modifier*LEGS_FIRE_DAMAGE_MULTIPLIER*mx*legs_exposure, BURN, LIMB_LEFT_LEG, 0, 0, used_weapon = "Fire") - apply_damage(fire_tile_modifier*LEGS_FIRE_DAMAGE_MULTIPLIER*mx*legs_exposure, BURN, LIMB_RIGHT_LEG, 0, 0, used_weapon = "Fire") - apply_damage(fire_tile_modifier*ARMS_FIRE_DAMAGE_MULTIPLIER*mx*arms_exposure, BURN, LIMB_LEFT_ARM, 0, 0, used_weapon = "Fire") - apply_damage(fire_tile_modifier*ARMS_FIRE_DAMAGE_MULTIPLIER*mx*arms_exposure, BURN, LIMB_RIGHT_ARM, 0, 0, used_weapon = "Fire") - - if(head_exposure || chest_exposure || groin_exposure || legs_exposure || arms_exposure) - dizziness = 5 - confused = 5 - if(prob(25)) - audible_scream() diff --git a/code/datums/gamemode/factions/bloodcult/bloodcult_items.dm b/code/datums/gamemode/factions/bloodcult/bloodcult_items.dm index c3ae1767941..4e91d6d2bc0 100644 --- a/code/datums/gamemode/factions/bloodcult/bloodcult_items.dm +++ b/code/datums/gamemode/factions/bloodcult/bloodcult_items.dm @@ -1402,7 +1402,7 @@ var/list/arcane_tomes = list() next_extinguish = world.time + extinguish_cooldown to_chat(H, "Your armor automatically extinguishes the fire.") - H.ExtinguishMob() + H.extinguish() //plasmaman stuff /obj/item/clothing/suit/cultrobes/regulate_temp_of_wearer(var/mob/living/carbon/human/H) @@ -1519,7 +1519,7 @@ var/list/arcane_tomes = list() next_extinguish = world.time + extinguish_cooldown to_chat(H, "Your armor automatically extinguishes the fire.") - H.ExtinguishMob() + H.extinguish() //plasmaman stuff /obj/item/clothing/suit/space/cult/regulate_temp_of_wearer(var/mob/living/carbon/human/H) diff --git a/code/datums/gamemode/role/vampire_role.dm b/code/datums/gamemode/role/vampire_role.dm index 71f001c9ed2..63a35bb0e64 100644 --- a/code/datums/gamemode/role/vampire_role.dm +++ b/code/datums/gamemode/role/vampire_role.dm @@ -407,7 +407,7 @@ else if(prob(35)) to_chat(H, "The holy flames continue to burn your flesh!") H.fire_stacks += 5 - H.IgniteMob() + H.ignite() /datum/role/vampire/proc/remove_blood(var/amount) blood_usable = max(0, blood_usable - amount) @@ -532,13 +532,13 @@ else to_chat(src, "You continue to burn!") fire_stacks += 5 - IgniteMob() + ignite() audible_scream() else switch(health) if((-INFINITY) to 60) fire_stacks++ - IgniteMob() + ignite() adjustFireLoss(3) /* diff --git a/code/datums/religions.dm b/code/datums/religions.dm index 84acf148585..ba62b11fb64 100755 --- a/code/datums/religions.dm +++ b/code/datums/religions.dm @@ -261,7 +261,7 @@ var/list/tgui_religion_data if (B.my_rel != src) // BLASPHEMY to_chat(preacher, "You are a heathen to this God. You feel [B.my_rel.deity_name]'s wrath strike you for this blasphemy.") preacher.fire_stacks += 5 - preacher.IgniteMob() + preacher.ignite() preacher.audible_scream() return FALSE if (preacher != religiousLeader.current) diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm index 07ee1be8327..75b8b20aac0 100644 --- a/code/game/dna/genes/goon_powers.dm +++ b/code/game/dna/genes/goon_powers.dm @@ -182,7 +182,7 @@ if(!handle_suit) target.bodytemperature = max(T0C + 29, target.bodytemperature - 5) target.adjustFireLoss(10) - target.ExtinguishMob() + target.extinguish() target.visible_message("A cloud of fine ice crystals engulfs [target]!") diff --git a/code/game/gamemodes/wizard/spellbook_oneuse.dm b/code/game/gamemodes/wizard/spellbook_oneuse.dm index 562cf20868b..86cfeeee661 100644 --- a/code/game/gamemodes/wizard/spellbook_oneuse.dm +++ b/code/game/gamemodes/wizard/spellbook_oneuse.dm @@ -419,7 +419,7 @@ /obj/item/weapon/spellbook/oneuse/ringoffire/recoil(mob/living/carbon/user as mob) user.adjust_fire_stacks(10) - user.IgniteMob() + user.ignite() to_chat(user, "The book sets you alight!") /obj/item/weapon/spellbook/oneuse/mirror_of_pain @@ -462,7 +462,7 @@ /obj/item/weapon/spellbook/oneuse/firebreath/recoil(mob/living/carbon/user) to_chat(user, "You burst into flames!") user.adjust_fire_stacks(0.5) - user.IgniteMob() + user.ignite() /obj/item/weapon/spellbook/oneuse/snakes spell = /spell/aoe_turf/conjure/snakes diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 456f37db0e2..03f3b050025 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -33,7 +33,7 @@ var/global/list/cryo_health_indicator = list( "full" = image("icon" = 'icons/obj /obj/machinery/atmospherics/unary/cryo_cell/Entered(var/atom/movable/Obj, var/atom/OldLoc) . = ..() - + if(OldLoc.type != src.type) spawn(rand(0,6)) if(OldLoc.type != src.type) @@ -641,7 +641,7 @@ var/global/list/cryo_health_indicator = list( "full" = image("icon" = 'icons/obj M.drop_item(I) // to avoid visual fuckery bobing. Doesn't do anything to items with cant_drop to avoid magic healing tube abuse. update_icon() nanomanager.update_uis(src) - M.ExtinguishMob() + M.extinguish() M.throw_alert(SCREEN_ALARM_CRYO, /obj/abstract/screen/alert/object/cryo, new_master = src) if(user) if(M == user) diff --git a/code/game/machinery/firefoam_popper.dm b/code/game/machinery/firefoam_popper.dm index 307b29931a4..b98185f163a 100644 --- a/code/game/machinery/firefoam_popper.dm +++ b/code/game/machinery/firefoam_popper.dm @@ -165,7 +165,7 @@ if(F.reagents.has_reagent(WATER)) if(isliving(atm)) var/mob/living/M = atm - M.ExtinguishMob() + M.extinguish() if(atm.on_fire) atm.extinguish() explosion(get_turf(src),0,0,0) diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index f0fbeeaf201..0cb04d9dc38 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -388,7 +388,7 @@ if(W.reagents.has_reagent(WATER)) if(isliving(atm)) // For extinguishing mobs on fire var/mob/living/M = atm // Why isn't this handled by the reagent? - N3X - M.ExtinguishMob() + M.extinguish() if(atm.on_fire) // For extinguishing objects on fire atm.extinguish() if(atm.molten) // Molten shit. diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 4124d52ce8b..1c6a1a07429 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -775,7 +775,7 @@ for(var/mob/living/cookedalive as anything in occupant) if(cookedalive.fire_stacks < 5) cookedalive.adjust_fire_stacks(1) - cookedalive.IgniteMob() + cookedalive.ignite() return @@ -802,7 +802,7 @@ if(equipment.len >= max_equip) return 0 return max_equip - equipment.len - + /obj/mecha/proc/is_killdozer() for(var/obj/I in equipment) if(istype(I, /obj/item/mecha_parts/mecha_equipment/passive/killdozer_kit)) diff --git a/code/game/objects/effects/fire_blast.dm b/code/game/objects/effects/fire_blast.dm index 03bf0872304..e4b8c23835f 100644 --- a/code/game/objects/effects/fire_blast.dm +++ b/code/game/objects/effects/fire_blast.dm @@ -105,7 +105,7 @@ /obj/effect/fire_blast/proc/burn_mob(mob/living/L, var/adjusted_fire_damage) if(!L.on_fire) L.adjust_fire_stacks(0.5) - L.IgniteMob() + L.ignite() if(L.mutations.Find(M_RESIST_HEAT)) //Heat resistance protects you from damage, but you still get set on fire return diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index a63d0e47abf..9f6e02a5dbc 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -194,7 +194,7 @@ return SUICIDE_ACT_BRUTELOSS else if (is_hot()) user.visible_message("[user] is immolating \himself with \the [src]! It looks like \he's trying to commit suicide.") - user.IgniteMob() + user.ignite() return SUICIDE_ACT_FIRELOSS else if (force >= 10) user.visible_message("[user] is bludgeoning \himself with \the [src]! It looks like \he's trying to commit suicide.") diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 4a7bf05f8e6..bc9d5a1846a 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -390,7 +390,7 @@ var/list/obj/item/device/flashlight/lamp/lamps = list() qdel(src) if(!fuel) return (SUICIDE_ACT_TOXLOSS) - user.IgniteMob() + user.ignite() return (SUICIDE_ACT_TOXLOSS|SUICIDE_ACT_FIRELOSS) /obj/item/device/flashlight/flare/ever_bright/New() diff --git a/code/game/objects/items/robot/robot_items/robot_axe.dm b/code/game/objects/items/robot/robot_items/robot_axe.dm index 02fc63970bb..fda3ff4bcbc 100644 --- a/code/game/objects/items/robot/robot_items/robot_axe.dm +++ b/code/game/objects/items/robot/robot_items/robot_axe.dm @@ -64,7 +64,7 @@ /obj/item/weapon/pickaxe/plasmacutter/heat_axe/proc/HellFire(var/mob/living/victim) if(isliving(victim) && active) //Just to be sure. victim.adjust_fire_stacks(1) - if(victim.IgniteMob()) + if(victim.ignite()) to_chat(victim, "You are lit on fire from the intense heat of the [name]!") /obj/item/weapon/pickaxe/plasmacutter/heat_axe/preattack(atom/target, mob/user, proximity_flag) @@ -79,4 +79,4 @@ /obj/item/weapon/pickaxe/plasmacutter/heat_axe/attack(mob/living/target, mob/living/user) if(target) HellFire(target) - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index afa9cd8093d..d9195c5dbe7 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -467,7 +467,7 @@ MATCHBOXES ARE ALSO IN FANCY.DM var/turf/location = get_turf(src) var/mob/living/M = get_holder_of_type(src,/mob/living) if(isliving(loc)) - M.IgniteMob() + M.ignite() smoketime-- if (smoketime == 5 && ismob(loc)) to_chat(M, "Your [name] is about to go out.") diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index af008ebb23d..97b5b25a92f 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -294,7 +294,7 @@ if(W.reagents.has_reagent(WATER)) if(isliving(atm)) // For extinguishing mobs on fire var/mob/living/M = atm // Why isn't this handled by the reagent? - N3X - M.ExtinguishMob() + M.extinguish() if(atm.on_fire) // For extinguishing objects on fire atm.extinguish() if(atm.molten) // Molten shit. diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index 6b846bb0995..99d574eb49f 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -23,7 +23,7 @@ user.emote("fart") sleep(1 SECONDS) //Wait for it user.fire_stacks += 5 - user.IgniteMob() + user.ignite() user.audible_scream() return SUICIDE_ACT_FIRELOSS //Set ablaze and burned to crisps @@ -127,13 +127,13 @@ if(V) //Vampire trying to use it to_chat(user, "[my_rel.deity_name] channels through \the [src] and sets you ablaze for your blasphemy!") user.fire_stacks += 5 - user.IgniteMob() + user.ignite() user.audible_scream() V.smitecounter += 50 //Once we are extinguished, we will be quite vulnerable regardless else if(isanycultist(user)) //Cultist trying to use it to_chat(user, "[my_rel.deity_name] channels through \the [src] and sets you ablaze for your blasphemy!") user.fire_stacks += 5 - user.IgniteMob() + user.ignite() user.audible_scream() else //Literally anyone else than a Cultist using it, at this point it's just a big book ..() //WHACK diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 112e843c8b6..65cdb4eeb3c 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -437,7 +437,7 @@ if (src.welding) if(isliving(A)) var/mob/living/L = A - L.IgniteMob() + L.ignite() remove_fuel(1) /obj/item/tool/weldingtool/attack_self(mob/user as mob) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 0050bb82526..368dc7cd3f1 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -411,7 +411,7 @@ var/global/list/reagents_to_log = list(FUEL, PLASMA, PACID, SACID, AMUTATIONTOXI /obj/suicide_act(var/mob/living/user) if (is_hot()) user.visible_message("[user] is immolating \himself on \the [src]! It looks like \he's trying to commit suicide.") - user.IgniteMob() + user.ignite() return SUICIDE_ACT_FIRELOSS else if (sharpness >= 1) user.visible_message("[user] impales himself on \the [src]! It looks like \he's trying to commit suicide.") diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 9243490cdba..5a5b0ed02a2 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -582,7 +582,7 @@ else visible_message("\The [user] attempts to put out the fire on \the [target] with \the [src].") if(prob(extinguishingProb)) - M.ExtinguishMob() + M.extinguish() visible_message("\The [user] puts out the fire on \the [target].") return diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 492e54b1c68..70e311bd96c 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -26,7 +26,7 @@ next_extinguish = world.time + extinguish_cooldown to_chat(H, "Your suit automatically extinguishes the fire.") - H.ExtinguishMob() + H.extinguish() /obj/item/clothing/suit/space/plasmaman/regulate_temp_of_wearer(var/mob/living/carbon/human/H) if(H.bodytemperature < T0C+37) diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 93b5e751883..c53a00c5032 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -75,7 +75,7 @@ for(var/atom/atm in T) //extinguishing things if(isliving(atm)) // For extinguishing mobs on fire var/mob/living/M = atm - M.ExtinguishMob() + M.extinguish() if(atm.on_fire) // For extinguishing objects on fire atm.extinguish() diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 1d0d44325af..16784dae7be 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -624,3 +624,45 @@ emp_act /mob/living/carbon/human/beam_defense(var/obj/effect/beam/B) return is_wearing_item(/obj/item/clothing/suit/reticulatedvest) ? 0.4 : 1 + +/mob/living/carbon/human/FireBurn(firelevel = 0, temperature, pressure) + var/head_exposure = 1 + var/chest_exposure = 1 + var/groin_exposure = 1 + var/legs_exposure = 1 + var/arms_exposure = 1 + + //Get heat transfer coefficients for clothing. + for(var/obj/item/clothing/C in src) + if(is_holding_item(C)) + continue + if(C.max_heat_protection_temperature >= temperature) + if(!is_slot_hidden(C.body_parts_covered,FULL_HEAD)) + head_exposure = 0 + if(!is_slot_hidden(C.body_parts_covered,UPPER_TORSO)) + chest_exposure = 0 + if(!is_slot_hidden(C.body_parts_covered,LOWER_TORSO)) + groin_exposure = 0 + if(!is_slot_hidden(C.body_parts_covered,LEGS)) + legs_exposure = 0 + if(!is_slot_hidden(C.body_parts_covered,ARMS)) + arms_exposure = 0 + + //minimize this for low-pressure enviroments + var/mx = 5 * max(firelevel,1.5)/ZAS_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1) + + //Always check these damage procs first if fire damage isn't working. They're probably what's wrong. + var/fire_tile_modifier = 4 //multiplier for damage received while standing on a fire tile + apply_damage(fire_tile_modifier*HEAD_FIRE_DAMAGE_MULTIPLIER*mx*head_exposure, BURN, LIMB_HEAD, 0, 0, used_weapon = "Fire") + apply_damage(fire_tile_modifier*CHEST_FIRE_DAMAGE_MULTIPLIER*mx*chest_exposure, BURN, LIMB_CHEST, 0, 0, used_weapon ="Fire") + apply_damage(fire_tile_modifier*GROIN_FIRE_DAMAGE_MULTIPLIER*mx*groin_exposure, BURN, LIMB_GROIN, 0, 0, used_weapon ="Fire") + apply_damage(fire_tile_modifier*LEGS_FIRE_DAMAGE_MULTIPLIER*mx*legs_exposure, BURN, LIMB_LEFT_LEG, 0, 0, used_weapon = "Fire") + apply_damage(fire_tile_modifier*LEGS_FIRE_DAMAGE_MULTIPLIER*mx*legs_exposure, BURN, LIMB_RIGHT_LEG, 0, 0, used_weapon = "Fire") + apply_damage(fire_tile_modifier*ARMS_FIRE_DAMAGE_MULTIPLIER*mx*arms_exposure, BURN, LIMB_LEFT_ARM, 0, 0, used_weapon = "Fire") + apply_damage(fire_tile_modifier*ARMS_FIRE_DAMAGE_MULTIPLIER*mx*arms_exposure, BURN, LIMB_RIGHT_ARM, 0, 0, used_weapon = "Fire") + + if(head_exposure || chest_exposure || groin_exposure || legs_exposure || arms_exposure) + dizziness = 5 + confused = 5 + if(prob(25)) + audible_scream() diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index 3b9443e03a3..a4fab8819d3 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -69,7 +69,7 @@ if(!host.on_fire) to_chat(host, "Your body reacts with the atmosphere and bursts into flame!") host.adjust_fire_stacks(0.5) - host.IgniteMob() + host.ignite() else var/obj/item/clothing/suit/PS=host.wear_suit if(istype(PS)) diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index d33594e3a62..f25b4ea2eb3 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -1022,7 +1022,7 @@ qdel (src) -/mob/living/carbon/slime/IgniteMob() +/mob/living/carbon/slime/ignite() return 0 /mob/living/carbon/slime/ApplySlip(var/obj/effect/overlay/puddle/P) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 14472604b62..dec23dbc91a 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -86,7 +86,7 @@ if(istype(get_turf(src),/turf/unsimulated/floor/brimstone)) FireBurn(11, 9001, ONE_ATMOSPHERE) // lag free weird way of doing it fire_stacks = 11 - IgniteMob() // ffffFIRE!!!! FIRE!!! FIRE!! + ignite() // ffffFIRE!!!! FIRE!!! FIRE!! return 1 // Apply connect damage @@ -567,7 +567,7 @@ Thanks. else reagents.clear_reagents() heal_overall_damage(1000, 1000) - ExtinguishMob() + extinguish() fire_stacks = 0 /* if(locked_to) @@ -1136,7 +1136,7 @@ Thanks. sleep(1 SECONDS) CM.fire_stacks = 0 CM.visible_message("[CM] has successfully extinguished themselves!","You extinguish yourself.") - ExtinguishMob() + extinguish() return CM.resist_restraints() diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index d7fecbe3e47..88091a85391 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -277,21 +277,30 @@ // End BS12 momentum-transfer code. //Mobs on Fire -/mob/living/proc/IgniteMob() - if(fire_stacks > 0 && !on_fire) - on_fire = 1 - set_light(src.light_range + 3) - update_fire() +/mob/living/ignite() + if(on_fire) + return 0 + if(check_fire_protection()) + return 0 + if(!firelightdummy) + firelightdummy = new (src) + on_fire = 1 + update_fire() + return 1 + +/mob/living/extinguish() + ..() + update_fire() + +/mob/living/check_fire_protection() + if(fire_stacks<0) + fire_stacks++ return 1 else return 0 -/mob/living/proc/ExtinguishMob() - if(on_fire) - on_fire = 0 - fire_stacks = 0 - set_light(src.light_range - 3) - update_fire() +/mob/living/burnSolidFuel() + return /mob/living/proc/update_fire() return @@ -313,23 +322,31 @@ return 1 var/oxy=0 - var/turf/T=loc + var/turf/T=get_turf(src) if(istype(T)) - var/datum/gas_mixture/G = loc.return_air() // Check if we're standing in an oxygenless environment + var/datum/gas_mixture/G = T.return_air() // Check if we're standing in an oxygenless environment if(G) oxy = G.molar_density(GAS_OXYGEN) - if(oxy < (1 / CELL_VOLUME) || fire_stacks <= 0) - ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire + if(oxy < (1 / CELL_VOLUME) || fire_stacks < 0) + extinguish() //If there's no oxygen in the tile we're on, put out the fire return 1 - var/turf/location = get_turf(src) - location.hotspot_expose(700, SMALL_FLAME, 1) + T.hotspot_expose(700, SMALL_FLAME, 1) -/mob/living/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/mob/living/fire_act(datum/gas_mixture/air, temperature, exposed_volume) if(mutations.Find(M_UNBURNABLE)) return adjust_fire_stacks(0.5) - IgniteMob() + ignite() + + var/turf/T = get_turf(src) + var/flevel = air.calculate_firelevel(T) + var/pressure = air.return_pressure() + FireBurn(flevel,temperature, pressure) + +/mob/living/proc/FireBurn(var/firelevel = 0, var/temperature, var/pressure) + var/mx = 5 * max(firelevel,1.5)/ZAS_firelevel_multiplier * min(pressure / ONE_ATMOSPHERE, 1) + apply_damage(2.5*mx, BURN) //Mobs on Fire end diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 89998a3229c..a909b23d70a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -819,7 +819,7 @@ /mob/living/simple_animal/hostile/asteroid/magmaw/fire_act(var/datum/gas_mixture/air, var/exposed_temperature, var/exposed_volume) fire_resurrect(exposed_temperature) -/mob/living/simple_animal/hostile/asteroid/magmaw/IgniteMob() +/mob/living/simple_animal/hostile/asteroid/magmaw/ignite() fire_resurrect(PLASMA_MINIMUM_BURN_TEMPERATURE) /mob/living/simple_animal/hostile/asteroid/magmaw/FireBurn(var/firelevel, var/last_temperature, var/pressure) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 49afb944580..8bc61cd7d62 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -710,9 +710,9 @@ var/global/list/animal_count = list() //Stores types, and amount of animals of t /mob/living/simple_animal/update_fire() return -/mob/living/simple_animal/IgniteMob() +/mob/living/simple_animal/ignite() return 0 -/mob/living/simple_animal/ExtinguishMob() +/mob/living/simple_animal/extinguish() return /mob/living/simple_animal/revive(refreshbutcher = 1) diff --git a/code/modules/reagents/reagents/reagents_basic.dm b/code/modules/reagents/reagents/reagents_basic.dm index 1b8f8de4b29..824fc95a30c 100644 --- a/code/modules/reagents/reagents/reagents_basic.dm +++ b/code/modules/reagents/reagents/reagents_basic.dm @@ -265,7 +265,7 @@ M.remove_silence() if(isliving(M)) var/mob/living/L = M - L.ExtinguishMob() + L.extinguish() //Water now directly damages slimes instead of being a turf check if(isslime(M)) diff --git a/code/modules/reagents/reagents/reagents_religious.dm b/code/modules/reagents/reagents/reagents_religious.dm index abf127968f3..a7eb0cf67a4 100644 --- a/code/modules/reagents/reagents/reagents_religious.dm +++ b/code/modules/reagents/reagents/reagents_religious.dm @@ -33,7 +33,7 @@ M.make_visible(INVISIBLESPRAY) if(isliving(M)) var/mob/living/L = M - L.ExtinguishMob() + L.extinguish() //Water now directly damages slimes instead of being a turf check if(isslime(M)) diff --git a/code/modules/spells/targeted/ethereal_jaunt.dm b/code/modules/spells/targeted/ethereal_jaunt.dm index 8533af3aaae..93908195d14 100644 --- a/code/modules/spells/targeted/ethereal_jaunt.dm +++ b/code/modules/spells/targeted/ethereal_jaunt.dm @@ -53,7 +53,7 @@ //Begin jaunting with an animation anim(location = mobloc, a_icon = 'icons/mob/mob.dmi', flick_anim = enteranim, direction = target.dir, name = target.name,lay = target.layer+1,plane = target.plane) if(mist) - target.ExtinguishMob() + target.extinguish() var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread() steam.set_up(10, 0, mobloc) steam.start() diff --git a/code/modules/spells/targeted/feint.dm b/code/modules/spells/targeted/feint.dm index 9c08377a6e3..ed93ce94128 100644 --- a/code/modules/spells/targeted/feint.dm +++ b/code/modules/spells/targeted/feint.dm @@ -23,7 +23,7 @@ L.unlock_from() anim(location = mobloc, target = L, a_icon = 'icons/mob/mob.dmi', flick_anim = "liquify", direction = L.dir, name = "water") - L.ExtinguishMob() + L.extinguish() var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread() steam.set_up(10, 0, mobloc) steam.start()