From 6fb91dde6ccd86eb4fb0a773631a2d1b03219931 Mon Sep 17 00:00:00 2001 From: Ghilke Date: Sat, 22 Aug 2020 16:10:26 +0200 Subject: [PATCH] reactions.dm fixes, grammar fix, removed flamethrower.dm changes (dumb dumb changes), added shitty animations for the gas crystals --- code/game/objects/items/flamethrower.dm | 5 +- code/game/objects/structures/statues.dm | 2 +- .../atmospherics/gasmixtures/reactions.dm | 256 +++++++++++++----- icons/obj/grenade.dmi | Bin 29095 -> 34899 bytes 4 files changed, 196 insertions(+), 67 deletions(-) diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index 83514f912b2..440447487ba 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -215,10 +215,7 @@ //Transfer 5% of current tank air contents to turf var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(release_amount) if(air_transfer.gases[/datum/gas/plasma]) - if(air_transfer.gases[/datum/gas/plasma]) - air_transfer.gases[/datum/gas/plasma][MOLES] *= 5 - else - air_transfer.temperature += 15000 + air_transfer.gases[/datum/gas/plasma][MOLES] *= 5 target.assume_air(air_transfer) //Burn it based on transfered gas target.hotspot_expose((ptank.air_contents.temperature*2) + 380,500) diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index ea25c24b197..ae368d7bc12 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -305,7 +305,7 @@ /obj/structure/statue/elder_atmosian name = "Elder Atmosian" - desc = "A statue of an Elder Atmosian, capable of bending the laws of thermodinamics at their will" + desc = "A statue of an Elder Atmosian, capable of bending the laws of thermodinamics to their will" icon_state = "eng" material_drop_type = /obj/item/stack/sheet/mineral/metal_hydrogen max_integrity = 1000 diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 4db11264de0..355aa6ae367 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -27,7 +27,7 @@ sivana_formation = 16 raynar_crystal_production = 17 roinneil_crystal_production = 18 cymar_crystal_production = 19 -roinneil_response = 20 +roinneil_response = 20 - 25 nobiliumsuppression = INFINITY */ @@ -122,6 +122,8 @@ nobiliumsuppression = INFINITY burned_fuel = max(0,0.00002*(temperature-(0.00001*(temperature**2))))*cached_gases[/datum/gas/nitrous_oxide][MOLES] + if(cached_gases[/datum/gas/nitrous_oxide][MOLES] - burned_fuel < 0) + return NO_REACTION cached_gases[/datum/gas/nitrous_oxide][MOLES] -= burned_fuel if(burned_fuel) @@ -399,6 +401,8 @@ nobiliumsuppression = INFINITY var/consumed_fuel = 0 if(temperature > 150 && temperature < T0C && cached_gases[/datum/gas/nitrogen][MOLES] > cached_gases[/datum/gas/hydrogen][MOLES]) consumed_fuel = (cached_gases[/datum/gas/hydrogen][MOLES] / AMMONIA_FORMATION_FACTOR) + if(cached_gases[/datum/gas/nitrogen][MOLES] - consumed_fuel < 0 || cached_gases[/datum/gas/hydrogen][MOLES] - consumed_fuel * 4 < 0) + return NO_REACTION cached_gases[/datum/gas/nitrogen][MOLES] -= consumed_fuel cached_gases[/datum/gas/hydrogen][MOLES] -= consumed_fuel * 4 if(prob(30 * consumed_fuel)) @@ -514,7 +518,7 @@ nobiliumsuppression = INFINITY var/heat_efficency = min(cached_gases[/datum/gas/oxygen][MOLES], cached_gases[/datum/gas/nitrogen][MOLES]) var/energy_used = heat_efficency * NITROUS_FORMATION_ENERGY ASSERT_GAS(/datum/gas/nitrous_oxide,air) - if ((cached_gases[/datum/gas/oxygen][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/nitrogen][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/oxygen][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/nitrogen][MOLES] - heat_efficency * 2 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION if (temperature > 250) //maximum allowed temperature for the reaction return NO_REACTION @@ -549,7 +553,7 @@ nobiliumsuppression = INFINITY var/heat_efficency = min(temperature/(FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 100),cached_gases[/datum/gas/oxygen][MOLES],cached_gases[/datum/gas/nitrogen][MOLES]) var/energy_used = heat_efficency * NITRYL_FORMATION_ENERGY ASSERT_GAS(/datum/gas/nitryl,air) - if ((cached_gases[/datum/gas/oxygen][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/nitrogen][MOLES] - heat_efficency < 0) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/oxygen][MOLES] - heat_efficency * 2 < 0 ) || (cached_gases[/datum/gas/nitrogen][MOLES] - heat_efficency < 0) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency * 0.05 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION cached_gases[/datum/gas/oxygen][MOLES] -= heat_efficency * 2 cached_gases[/datum/gas/nitrogen][MOLES] -= heat_efficency @@ -658,7 +662,7 @@ nobiliumsuppression = INFINITY var/heat_efficency = min(temperature/(FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 10), cached_gases[/datum/gas/plasma][MOLES], cached_gases[/datum/gas/carbon_dioxide][MOLES], cached_gases[/datum/gas/bz][MOLES]) var/energy_used = heat_efficency * 100 ASSERT_GAS(/datum/gas/freon,air) - if ((cached_gases[/datum/gas/plasma][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/carbon_dioxide][MOLES] - heat_efficency < 0) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/plasma][MOLES] - heat_efficency * 5 < 0 ) || (cached_gases[/datum/gas/carbon_dioxide][MOLES] - heat_efficency < 0) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency * 0.25 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION cached_gases[/datum/gas/plasma][MOLES] -= heat_efficency * 5 cached_gases[/datum/gas/carbon_dioxide][MOLES] -= heat_efficency @@ -817,7 +821,7 @@ nobiliumsuppression = INFINITY var/heat_efficency = min(temperature * 0.01, cached_gases[/datum/gas/tritium][MOLES], cached_gases[/datum/gas/bz][MOLES]) var/energy_used = heat_efficency * 100 ASSERT_GAS(/datum/gas/halon,air) - if ((cached_gases[/datum/gas/tritium][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/tritium][MOLES] - heat_efficency * 5 < 0 ) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency * 0.25 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION if(air.temperature >= 250) return NO_REACTION @@ -825,11 +829,11 @@ nobiliumsuppression = INFINITY cached_gases[/datum/gas/bz][MOLES] -= heat_efficency * 0.25 cached_gases[/datum/gas/halon][MOLES] += heat_efficency * 2 - if(energy_used > 0) + if(energy_used) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = max(((temperature * old_heat_capacity + energy_used) / new_heat_capacity),TCMB) - return REACTING + return REACTING /datum/gas_reaction/sivana_formation priority = 16 @@ -850,7 +854,7 @@ nobiliumsuppression = INFINITY var/heat_efficency = min(temperature * 0.01, cached_gases[/datum/gas/tritium][MOLES], cached_gases[/datum/gas/bz][MOLES]) var/energy_used = heat_efficency * 100 ASSERT_GAS(/datum/gas/sivana,air) - if ((cached_gases[/datum/gas/hydrogen][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/hydrogen][MOLES] - heat_efficency * 5 < 0 ) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency * 0.25 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION if(air.temperature >= 250) return NO_REACTION @@ -858,11 +862,11 @@ nobiliumsuppression = INFINITY cached_gases[/datum/gas/bz][MOLES] -= heat_efficency * 0.25 cached_gases[/datum/gas/halon][MOLES] += heat_efficency * 2 - if(energy_used > 0) + if(energy_used) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = max(((temperature * old_heat_capacity + energy_used) / new_heat_capacity),TCMB) - return REACTING + return REACTING /datum/gas_reaction/raynar_formation priority = 12 @@ -883,7 +887,7 @@ nobiliumsuppression = INFINITY var/heat_efficency = min(temperature * 0.3, cached_gases[/datum/gas/freon][MOLES], cached_gases[/datum/gas/bz][MOLES]) var/energy_used = heat_efficency * 100 ASSERT_GAS(/datum/gas/raynar,air) - if ((cached_gases[/datum/gas/freon][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/freon][MOLES] - heat_efficency * 5 < 0 ) || (cached_gases[/datum/gas/bz][MOLES] - heat_efficency * 0.25 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION if(air.temperature >= 100) return NO_REACTION @@ -891,11 +895,11 @@ nobiliumsuppression = INFINITY cached_gases[/datum/gas/bz][MOLES] -= heat_efficency * 0.25 cached_gases[/datum/gas/raynar][MOLES] += heat_efficency * 3 - if(energy_used > 0) + if(energy_used) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = max(((temperature * old_heat_capacity + energy_used) / new_heat_capacity),TCMB) - return REACTING + return REACTING /datum/gas_reaction/roinneil_formation priority = 13 @@ -916,7 +920,7 @@ nobiliumsuppression = INFINITY var/heat_efficency = min(temperature * 0.005, cached_gases[/datum/gas/pluoxium][MOLES], cached_gases[/datum/gas/hydrogen][MOLES]) var/energy_used = heat_efficency * 100 ASSERT_GAS(/datum/gas/roinneil,air) - if ((cached_gases[/datum/gas/pluoxium][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/hydrogen][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/pluoxium][MOLES] - heat_efficency * 0.2 < 0 ) || (cached_gases[/datum/gas/hydrogen][MOLES] - heat_efficency * 2 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION if(air.temperature >= 10000) return NO_REACTION @@ -928,7 +932,7 @@ nobiliumsuppression = INFINITY var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = max(((temperature * old_heat_capacity + energy_used) / new_heat_capacity),TCMB) - return REACTING + return REACTING /datum/gas_reaction/cymar_formation priority = 14 @@ -949,7 +953,7 @@ nobiliumsuppression = INFINITY var/heat_efficency = min(temperature * 0.005, cached_gases[/datum/gas/hypernoblium][MOLES], cached_gases[/datum/gas/stimulum][MOLES]) var/energy_used = heat_efficency * 10 ASSERT_GAS(/datum/gas/cymar,air) - if ((cached_gases[/datum/gas/hypernoblium][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/stimulum][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/hypernoblium][MOLES] - heat_efficency * 0.01 < 0 ) || (cached_gases[/datum/gas/stimulum][MOLES] - heat_efficency * 0.5 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION if(air.temperature >= 290) return NO_REACTION @@ -957,11 +961,11 @@ nobiliumsuppression = INFINITY cached_gases[/datum/gas/stimulum][MOLES] -= heat_efficency * 0.5 cached_gases[/datum/gas/cymar][MOLES] += heat_efficency * 0.5 - if(energy_used > 0) + if(energy_used) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = max(((temperature * old_heat_capacity + energy_used) / new_heat_capacity),TCMB) - return REACTING + return REACTING /datum/gas_reaction/halon_o2removal priority = -1 @@ -982,17 +986,17 @@ nobiliumsuppression = INFINITY var/heat_efficency = min(temperature / ( FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 10), cached_gases[/datum/gas/halon][MOLES], cached_gases[/datum/gas/oxygen][MOLES]) var/energy_used = heat_efficency * 100 ASSERT_GAS(/datum/gas/carbon_dioxide,air) - if ((cached_gases[/datum/gas/halon][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/oxygen][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/halon][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/oxygen][MOLES] - heat_efficency * 10 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION cached_gases[/datum/gas/halon][MOLES] -= heat_efficency cached_gases[/datum/gas/oxygen][MOLES] -= heat_efficency * 10 cached_gases[/datum/gas/carbon_dioxide][MOLES] += heat_efficency * 5 - if(energy_used > 0) + if(energy_used) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = max(((temperature * old_heat_capacity - energy_used) / new_heat_capacity),TCMB) - return REACTING + return REACTING /datum/gas_reaction/sivana_plasma_filtering priority = 9 @@ -1012,17 +1016,17 @@ nobiliumsuppression = INFINITY var/heat_efficency = min(temperature * 0.01, cached_gases[/datum/gas/sivana][MOLES], cached_gases[/datum/gas/plasma][MOLES]) var/energy_used = heat_efficency * 100 ASSERT_GAS(/datum/gas/carbon_dioxide,air) - if ((cached_gases[/datum/gas/sivana][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/plasma][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/sivana][MOLES] - heat_efficency * 0.2 < 0 ) || (cached_gases[/datum/gas/plasma][MOLES] - heat_efficency * 0.5 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION cached_gases[/datum/gas/sivana][MOLES] -= heat_efficency * 0.2 cached_gases[/datum/gas/plasma][MOLES] -= heat_efficency * 0.5 cached_gases[/datum/gas/carbon_dioxide][MOLES] += heat_efficency * 0.4 - if(energy_used > 0) + if(energy_used) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = max(((temperature * old_heat_capacity + energy_used) / new_heat_capacity),TCMB) - return REACTING + return REACTING /datum/gas_reaction/sivana_n2o_filtering priority = 10 @@ -1043,18 +1047,18 @@ nobiliumsuppression = INFINITY var/energy_used = heat_efficency * 100 ASSERT_GAS(/datum/gas/oxygen,air) ASSERT_GAS(/datum/gas/nitrogen,air) - if ((cached_gases[/datum/gas/sivana][MOLES] - heat_efficency < 0 ) || (cached_gases[/datum/gas/nitrous_oxide][MOLES] - heat_efficency < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/sivana][MOLES] - heat_efficency * 0.2 < 0 ) || (cached_gases[/datum/gas/nitrous_oxide][MOLES] - heat_efficency * 0.5 < 0)) //Shouldn't produce gas from nothing. return NO_REACTION cached_gases[/datum/gas/sivana][MOLES] -= heat_efficency * 0.2 cached_gases[/datum/gas/nitrous_oxide][MOLES] -= heat_efficency * 0.5 cached_gases[/datum/gas/oxygen][MOLES] += heat_efficency * 0.4 cached_gases[/datum/gas/nitrogen][MOLES] += heat_efficency * 0.4 - if(energy_used > 0) + if(energy_used) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = max(((temperature * old_heat_capacity + energy_used) / new_heat_capacity),TCMB) - return REACTING + return REACTING /datum/gas_reaction/cymar_decomp priority = 11 @@ -1073,8 +1077,6 @@ nobiliumsuppression = INFINITY var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow var/temperature = air.temperature var/burned_fuel = 0 - - burned_fuel = min(20, cached_gases[/datum/gas/nitrogen][MOLES], cached_gases[/datum/gas/cymar][MOLES]) if(cached_gases[/datum/gas/cymar][MOLES] - burned_fuel < 0) return NO_REACTION @@ -1114,15 +1116,18 @@ nobiliumsuppression = INFINITY var/consumed_fuel = 0 if(temperature > 1000 && temperature < 2500) consumed_fuel = min(cached_gases[/datum/gas/raynar][MOLES] / 10, 20 * (temperature * 0.001)) + if ((cached_gases[/datum/gas/raynar][MOLES] - consumed_fuel * 4 < 0 ) || (cached_gases[/datum/gas/oxygen][MOLES] - consumed_fuel < 0)) //Shouldn't produce gas from nothing. + return NO_REACTION cached_gases[/datum/gas/oxygen][MOLES] -= consumed_fuel cached_gases[/datum/gas/raynar][MOLES] -= consumed_fuel * 4 if(prob(1 * consumed_fuel)) new /obj/item/grenade/gas_crystal/raynar_crystal(location) energy_released += consumed_fuel * 800 - if(energy_released > 0) + if(energy_released) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity + return REACTING /datum/gas_reaction/roinneil_crystal_formation priority = 18 @@ -1144,15 +1149,18 @@ nobiliumsuppression = INFINITY var/consumed_fuel = 0 if(temperature > 100 && temperature < 150) consumed_fuel = min(cached_gases[/datum/gas/roinneil][MOLES] / 10, 20 * (temperature * 0.01)) + if ((cached_gases[/datum/gas/roinneil][MOLES] - consumed_fuel * 4 < 0 ) || (cached_gases[/datum/gas/nitrogen][MOLES] - consumed_fuel < 0)) //Shouldn't produce gas from nothing. + return NO_REACTION cached_gases[/datum/gas/nitrogen][MOLES] -= consumed_fuel cached_gases[/datum/gas/roinneil][MOLES] -= consumed_fuel * 4 if(prob(1 * consumed_fuel)) new /obj/item/grenade/gas_crystal/roinneil_crystal(location) energy_released += consumed_fuel * 800 - if(energy_released > 0) + if(energy_released) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity + return REACTING /datum/gas_reaction/cymar_crystal_formation priority = 19 @@ -1174,51 +1182,75 @@ nobiliumsuppression = INFINITY var/consumed_fuel = 0 if(temperature > 270 && temperature < 280) consumed_fuel = min(cached_gases[/datum/gas/cymar][MOLES] / 10, 20 * (temperature * 0.02)) + if ((cached_gases[/datum/gas/cymar][MOLES] - consumed_fuel * 4 < 0 ) || (cached_gases[/datum/gas/plasma][MOLES] - consumed_fuel < 0)) //Shouldn't produce gas from nothing. + return NO_REACTION cached_gases[/datum/gas/plasma][MOLES] -= consumed_fuel cached_gases[/datum/gas/cymar][MOLES] -= consumed_fuel * 4 if(prob(1 * consumed_fuel)) new /obj/item/grenade/gas_crystal/cymar_crystal(location) energy_released += consumed_fuel * 800 - if(energy_released > 0) + if(energy_released) var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity + return REACTING -/datum/gas_reaction/roinneil_response +/datum/gas_reaction/roinneil_plasma_response priority = 20 - name = "Roinneil response" - id = "roinneil_response" + name = "Roinneil plasma response" + id = "roinneil_plasma_response" -/datum/gas_reaction/roinneil_response/init_reqs() +/datum/gas_reaction/roinneil_plasma_response/init_reqs() min_requirements = list( /datum/gas/roinneil = MINIMUM_MOLE_COUNT, - "TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST + /datum/gas/plasma = MINIMUM_MOLE_COUNT, + "TEMP" = 250 ) -/datum/gas_reaction/roinneil_response/react(datum/gas_mixture/air, datum/holder) +/datum/gas_reaction/roinneil_plasma_response/react(datum/gas_mixture/air, datum/holder) var/energy_released = 0 var/old_heat_capacity = air.heat_capacity() var/list/cached_gases = air.gases var/temperature = air.temperature var/turf/open/location = isturf(holder) ? holder : null - air.assert_gases( /datum/gas/plasma, - /datum/gas/bz, - /datum/gas/freon, - /datum/gas/oxygen, - /datum/gas/tritium, - /datum/gas/hydrogen, - /datum/gas/nitrous_oxide, - /datum/gas/cymar - ) - if(cached_gases[/datum/gas/plasma][MOLES] > MINIMUM_MOLE_COUNT && cached_gases[/datum/gas/plasma][MOLES] < 10) + if(cached_gases[/datum/gas/plasma][MOLES] < 10 && air.temperature < 300) var produced_amount = min(5, cached_gases[/datum/gas/plasma][MOLES], cached_gases[/datum/gas/roinneil][MOLES]) - cached_gases[/datum/gas/plasma][MOLES] = 0 + if(cached_gases[/datum/gas/plasma][MOLES] - produced_amount < 0 || cached_gases[/datum/gas/roinneil][MOLES] - produced_amount * 0.1 <0) + return NO_REACTION + cached_gases[/datum/gas/plasma][MOLES] -= produced_amount cached_gases[/datum/gas/roinneil][MOLES] -= produced_amount * 0.1 energy_released -= produced_amount * 1500 - if(prob(produced_amount * 20)) + if(prob(produced_amount * 15)) new/obj/item/stack/sheet/mineral/plasma(location) - if(cached_gases[/datum/gas/bz][MOLES] > MINIMUM_MOLE_COUNT) + if(energy_released) + var/new_heat_capacity = air.heat_capacity() + if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) + air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity + return REACTING + return NO_REACTION + +/datum/gas_reaction/roinneil_bz_response + priority = 21 + name = "Roinneil bz response" + id = "roinneil_bz_response" + +/datum/gas_reaction/roinneil_bz_response/init_reqs() + min_requirements = list( + /datum/gas/roinneil = MINIMUM_MOLE_COUNT, + /datum/gas/bz = MINIMUM_MOLE_COUNT, + "TEMP" = 260 + ) + +/datum/gas_reaction/roinneil_bz_response/react(datum/gas_mixture/air, datum/holder) + var/energy_released = 0 + var/old_heat_capacity = air.heat_capacity() + var/list/cached_gases = air.gases + var/temperature = air.temperature + var/turf/open/location = isturf(holder) ? holder : null + if(air.temperature < 280) var consumed_amount = min(5, cached_gases[/datum/gas/bz][MOLES], cached_gases[/datum/gas/roinneil][MOLES]) + if(cached_gases[/datum/gas/bz][MOLES] - consumed_amount < 0) + return NO_REACTION if(cached_gases[/datum/gas/bz][MOLES] < 30) location.rad_act(cached_gases[/datum/gas/bz][MOLES]) cached_gases[/datum/gas/bz][MOLES] -= consumed_amount @@ -1226,27 +1258,127 @@ nobiliumsuppression = INFINITY for(var/mob/living/carbon/L in location) L.hallucination += cached_gases[/datum/gas/bz][MOLES] * 0.5 energy_released += 100 - if(cached_gases[/datum/gas/freon][MOLES] > 100 && cached_gases[/datum/gas/oxygen][MOLES] > 100) - cached_gases[/datum/gas/roinneil][MOLES] = 0 - location.air.temperature = 240 - if(cached_gases[/datum/gas/tritium][MOLES] > MINIMUM_MOLE_COUNT) + if(energy_released) + var/new_heat_capacity = air.heat_capacity() + if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) + air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity + return REACTING + return NO_REACTION + +/datum/gas_reaction/roinneil_freon_fire_response + priority = 22 + name = "Roinneil freon fire response" + id = "roinneil_freon_fire_response" + +/datum/gas_reaction/roinneil_freon_fire_response/init_reqs() + min_requirements = list( + /datum/gas/roinneil = MINIMUM_MOLE_COUNT, + /datum/gas/freon = MINIMUM_MOLE_COUNT, + /datum/gas/oxygen = MINIMUM_MOLE_COUNT, + "TEMP" = 260 + ) + +/datum/gas_reaction/roinneil_freon_fire_response/react(datum/gas_mixture/air, datum/holder) + var/energy_released = 0 + var/old_heat_capacity = air.heat_capacity() + var/list/cached_gases = air.gases + var/temperature = air.temperature + if(cached_gases[/datum/gas/freon][MOLES] > 100 && cached_gases[/datum/gas/oxygen][MOLES] > 100 && air.temperature < 300) + var fuel_consumption = min(5, temperature * 0.03, cached_gases[/datum/gas/freon][MOLES], cached_gases[/datum/gas/roinneil][MOLES]) + if(cached_gases[/datum/gas/roinneil][MOLES] - fuel_consumption < 0) + return NO_REACTION + cached_gases[/datum/gas/roinneil][MOLES] -= fuel_consumption + cached_gases[/datum/gas/freon][MOLES] += fuel_consumption * 0.01 + energy_released -= fuel_consumption * 1500 + if(energy_released) + var/new_heat_capacity = air.heat_capacity() + if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) + air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity + return REACTING + return NO_REACTION + +/datum/gas_reaction/roinneil_tritium_response + priority = 23 + name = "Roinneil tritium response" + id = "roinneil_tritium_response" + +/datum/gas_reaction/roinneil_tritium_response/init_reqs() + min_requirements = list( + /datum/gas/roinneil = MINIMUM_MOLE_COUNT, + /datum/gas/tritium = MINIMUM_MOLE_COUNT, + "TEMP" = 200 + ) + +/datum/gas_reaction/roinneil_tritium_response/react(datum/gas_mixture/air, datum/holder) + var/energy_released = 0 + var/old_heat_capacity = air.heat_capacity() + var/list/cached_gases = air.gases + var/temperature = air.temperature + var/turf/open/location = isturf(holder) ? holder : null + if(air.temperature < 1500) var produced_amount = min(5, cached_gases[/datum/gas/tritium][MOLES], cached_gases[/datum/gas/roinneil][MOLES]) + if(cached_gases[/datum/gas/tritium][MOLES] - produced_amount < 0 || cached_gases[/datum/gas/roinneil][MOLES] - produced_amount * 0.01 < 0) + return NO_REACTION location.rad_act(produced_amount * 2.4) cached_gases[/datum/gas/tritium][MOLES] -= produced_amount cached_gases[/datum/gas/hydrogen][MOLES] += produced_amount cached_gases[/datum/gas/roinneil][MOLES] -= produced_amount * 0.01 energy_released += 50 + if(energy_released) + var/new_heat_capacity = air.heat_capacity() + if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) + air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity + return REACTING + return NO_REACTION + + +/datum/gas_reaction/roinneil_hydrogen_response + priority = 24 + name = "Roinneil hydrogen response" + id = "roinneil_hydrogen_response" + +/datum/gas_reaction/roinneil_hydrogen_response/init_reqs() + min_requirements = list( + /datum/gas/roinneil = MINIMUM_MOLE_COUNT, + /datum/gas/hydrogen = MINIMUM_MOLE_COUNT, + ) + +/datum/gas_reaction/roinneil_hydrogen_response/react(datum/gas_mixture/air, datum/holder) + var/energy_released = 0 + var/old_heat_capacity = air.heat_capacity() + var/list/cached_gases = air.gases + var/temperature = air.temperature if(cached_gases[/datum/gas/hydrogen][MOLES] > 150) - var produced_amount = min(5, cached_gases[/datum/gas/tritium][MOLES], cached_gases[/datum/gas/roinneil][MOLES]) + var produced_amount = min(5, cached_gases[/datum/gas/hydrogen][MOLES], cached_gases[/datum/gas/roinneil][MOLES]) + if(cached_gases[/datum/gas/hydrogen][MOLES] - produced_amount <0) + return NO_REACTION cached_gases[/datum/gas/hydrogen][MOLES] -= produced_amount cached_gases[/datum/gas/roinneil][MOLES] += produced_amount * 0.5 - energy_released -= 150 + energy_released -= produced_amount * 2500 + if(energy_released) + var/new_heat_capacity = air.heat_capacity() + if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) + air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity + return REACTING + +/datum/gas_reaction/roinneil_cymar_response + priority = 25 + name = "Roinneil cymar response" + id = "roinneil_cymar_response" + +/datum/gas_reaction/roinneil_cymar_response/init_reqs() + min_requirements = list( + /datum/gas/roinneil = MINIMUM_MOLE_COUNT, + /datum/gas/cymar = MINIMUM_MOLE_COUNT, + "TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST + ) + +/datum/gas_reaction/roinneil_cymar_response/react(datum/gas_mixture/air, datum/holder) + var/list/cached_gases = air.gases + var/turf/open/location = isturf(holder) ? holder : null if(cached_gases[/datum/gas/cymar][MOLES] > MINIMUM_MOLE_COUNT) var max_power = min(5, cached_gases[/datum/gas/cymar][MOLES]) cached_gases[/datum/gas/cymar][MOLES] = 0 explosion(location, max_power * 0.15, max_power * 0.45, max_power * 0.65, max_power, max_power* 2) - - - var/new_heat_capacity = air.heat_capacity() - if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) - air.temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity + return REACTING + return NO_REACTION diff --git a/icons/obj/grenade.dmi b/icons/obj/grenade.dmi index 316541f5a4a0dfb379ef45a9e0c01c78050d3cc1..ab3ded207ce531262f9a592d62c4b38b87bd6772 100644 GIT binary patch delta 15350 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 z zDuQgmcl{IklfchTwTT}q=5d?IW#u*rok}pE#OvVh60ipj?*HBgneLy+!jSS%bRS)( zW)5#J2mg8AV~LtSeAuS(G7nmq{5(f8CuEe*gBxfVwuA&%p0&Iws)0U97~7r@{}d>v ztt8;CbP^UobJr?0+MsjnUqE_<856`_E*R(3bat$nu}%)&KQ;L_|VD|7JTo__4e^?0pRq zj@JAZO`h%d(Uya47~b<>*_DHmPYCBF-~j!%56-vf_lK`zlXl>ZhKUnX0>N)eG_$|P z+>ynirKh)cafuro9ORU+pGOGr;L-a_$fU5sglC0kFGeW!d!C z>?rs}8~O5CHyEy@^~Bxai1*)KuJ|(kA6*dbE1XIg`Zb(i5AGW9b(-N<0^3#Uq1|Ld0OBXP{I=t;Ut3GA z`+6BCmXY>V9xkk|V3uyi@t?)I0i#AjWPCk-{f`9(zL+0R?w#HfL;Fziw;{>UA+nU) z(LX&Fg_piQXbWr}-+!!jj1Evh_h9txb@0<*GglNCIuJ6H>LP)(aZ(< z)M`GCDPLnLk6kgNw~~rpNnUh_Rh>#RjUBgo$US&r7$!T8t7iY8i<*fv5qyF&7eWEC ZnAu#uUld}{|J@6Ds`^}|LdhcR{{h{cawGr% delta 9500 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 OP3euge1)7@=>GxSkne#2