[MIRROR] Add 5 new gases, related interactions/items/content, changes parts of fusion (#736)

* Merge pull request #53013 from Ghilker/reactions-go-BRRRR

The scope of this PR is to add new and interesting stuff to the atmos crew and to bring more people to it both old and new.
This PR adds 5 new gases, a bunch of reactions (i'm still working on this but suggestions are useful), new recipes and items to the atmosians arsenal. These gases have high utility for everyone, atmosians will find them useful to do their job both as firefighters and air maintenance.
FINAL GAS NAMES (will change only if a maintainer ask about it)

Healium
Proto Nitrate
Cyrion B
Halon
Hexane

reactions avaiable in this PR: https://drive.google.com/file/d/1e6DZlBaKSCNdCADKnrH3F3aDWvl0iZr4/view

What the PR add:
-Healium: a red gas, stronger than n2o if breathed, with healing properties
-Proto Nitrate: a green inert gas if breathed but with different reactions with various gases at high temperatures
-Cyrion B: a black deadly gas if breathed that decompones very fast if exposed to N2 even at minimal amounts
-Halon: a light blue gas that when used in a fire it will suck up the O2 and will help cool the room, helping fighting the fire
-Hexane: a purple gas that has the ability to filter from the air plasma and n2o, useful to clean distro from the harmful gases quickly
-Healium Crystal: a reddish crystal that when broken will explode cooling the room and removing the plasma from the air (act like a grenade)
-Proto Nitrate Crystal: a greenish crystal that when broken will explode refilling a space with O2 and N2
-Cyrion B Crystal: a blackish crystal that when broken will explode dealing damage around it
-Metallic hydrogen recipe addition (atmosian armor and fireaxe)
-Statue of an elder atmosian (for bragging rights)
-Supermatter Interactions
-More gas interactions (Roinnel have multiple and different interactions)
-New RPD device: the pressure valve, a device that allow gas flow in a pipenet if the input pressure is higher than the set pressure it's getting atomized
-Fusion is a bit "easier" to start (minor changes to the math so that the instability is more reasonable)
-pluox can be also made without using rads
-cyrion-b bounty
-all 5 gases can be sold to cargo

More stuff needs to be added (like the SM interactions(added) and probably more reactions and breathe reactions)
Please leave suggestions and feedbacks as it helps improve the PR

Atmos desperately need more content and need to be proactive in the making of its tools, with this PR is a start to more atmos content

🆑
add: hydrogen + rads = trit
add: 5 new gases
add: Healium : made from Bz + Freon + cold, it knocks people down but have healing properties
add: Proto Nitrate : made from pluox and H2 + heat, it has different reaction with a bunch of other gases
add: Cyrion B : made from hypernoblium + stimulum around 0°C, it has heavy damage if breathed but is decomposed rapidly by N2
add: Halon : made from bz + trit + cold, it reacts with O2 at high temperature removing it and cooling the air, helping putting out fires
add: Hexane : made from bz + H2 + cold, it reacts with plasma and n2o and removes them from the air mix, filtering them.
tweak: stimulum no longer require plasma
add: canister sprites, gas sprites
add: crystal from gases formation and reaction
add: new metallic hydrogen recipes
add: elder atmosian statue
add: supermatter interactions
tweak: minor changes to fusion math to make it "easier" to start
add : pluoxium can be also made without using rads (not removing the rad production one) (this also produces a minimal amount of h2)
tweak: lowered hypernoblium min temperature of reaction
tweak: metallic hydrogen production more common
add: cyrion-b bounty
add: all 5 gases are up to selling
/🆑

* Add 5 new gases, related interactions/items/content, changes parts of fusion

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
This commit is contained in:
SkyratBot
2020-09-11 23:02:34 +02:00
committed by GitHub
co-authored by LemonInTheDark
parent 32592ec8e2
commit 5504cc9b36
29 changed files with 1259 additions and 164 deletions
@@ -448,12 +448,14 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache())
var/datum/gas_reaction/reaction = r
var/list/min_reqs = reaction.min_requirements
if((min_reqs["TEMP"] && temp < min_reqs["TEMP"]) \
|| (min_reqs["ENER"] && ener < min_reqs["ENER"]))
if( (min_reqs["TEMP"] && temp < min_reqs["TEMP"]) || \
(min_reqs["ENER"] && ener < min_reqs["ENER"]) || \
(min_reqs["MAX_TEMP"] && temp > min_reqs["MAX_TEMP"])
)
continue
for(var/id in min_reqs)
if (id == "TEMP" || id == "ENER")
if (id == "TEMP" || id == "ENER" || id == "MAX_TEMP")
continue
if(!cached_gases[id] || cached_gases[id][MOLES] < min_reqs[id])
continue reaction_loop
@@ -170,6 +170,51 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
dangerous = TRUE
rarity = 700
/datum/gas/healium
id = "healium"
specific_heat = 10
name = "Healium"
dangerous = TRUE
gas_overlay = "healium"
moles_visible = MOLES_GAS_VISIBLE
rarity = 100
/datum/gas/proto_nitrate
id = "proto_nitrate"
specific_heat = 30
name = "Proto Nitrate"
dangerous = TRUE
gas_overlay = "proto_nitrate"
moles_visible = MOLES_GAS_VISIBLE
rarity = 100
/datum/gas/cyrion_b
id = "cyrion_b"
specific_heat = 350
name = "Cyrion B"
dangerous = TRUE
gas_overlay = "cyrion_b"
moles_visible = MOLES_GAS_VISIBLE
rarity = 100
/datum/gas/halon
id = "halon"
specific_heat = 175
name = "Halon"
dangerous = TRUE
gas_overlay = "halon"
moles_visible = MOLES_GAS_VISIBLE
rarity = 100
/datum/gas/hexane
id = "hexane"
specific_heat = 5
name = "Hexane"
dangerous = TRUE
gas_overlay = "hexane"
moles_visible = MOLES_GAS_VISIBLE
rarity = 100
/obj/effect/overlay/gas
icon = 'icons/effects/atmospherics.dmi'
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
File diff suppressed because it is too large Load Diff
@@ -101,7 +101,12 @@
/datum/gas/nitryl = new/datum/tlv/dangerous,
/datum/gas/pluoxium = new/datum/tlv(-1, -1, 1000, 1000), // Unlike oxygen, pluoxium does not fuel plasma/tritium fires
/datum/gas/freon = new/datum/tlv/dangerous,
/datum/gas/hydrogen = new/datum/tlv/dangerous
/datum/gas/hydrogen = new/datum/tlv/dangerous,
/datum/gas/healium = new/datum/tlv/dangerous,
/datum/gas/proto_nitrate = new/datum/tlv/dangerous,
/datum/gas/cyrion_b = new/datum/tlv/dangerous,
/datum/gas/halon = new/datum/tlv/dangerous,
/datum/gas/hexane = new/datum/tlv/dangerous
)
/obj/machinery/airalarm/server // No checks here.
@@ -122,7 +127,12 @@
/datum/gas/nitryl = new/datum/tlv/no_checks,
/datum/gas/pluoxium = new/datum/tlv/no_checks,
/datum/gas/freon = new/datum/tlv/no_checks,
/datum/gas/hydrogen = new/datum/tlv/no_checks
/datum/gas/hydrogen = new/datum/tlv/no_checks,
/datum/gas/healium = new/datum/tlv/dangerous,
/datum/gas/proto_nitrate = new/datum/tlv/dangerous,
/datum/gas/cyrion_b = new/datum/tlv/dangerous,
/datum/gas/halon = new/datum/tlv/dangerous,
/datum/gas/hexane = new/datum/tlv/dangerous
)
/obj/machinery/airalarm/kitchen_cold_room // Kitchen cold rooms start off at -80°C or 193.15°K.
@@ -143,7 +153,12 @@
/datum/gas/nitryl = new/datum/tlv/dangerous,
/datum/gas/pluoxium = new/datum/tlv(-1, -1, 1000, 1000), // Unlike oxygen, pluoxium does not fuel plasma/tritium fires
/datum/gas/freon = new/datum/tlv/dangerous,
/datum/gas/hydrogen = new/datum/tlv/dangerous
/datum/gas/hydrogen = new/datum/tlv/dangerous,
/datum/gas/healium = new/datum/tlv/dangerous,
/datum/gas/proto_nitrate = new/datum/tlv/dangerous,
/datum/gas/cyrion_b = new/datum/tlv/dangerous,
/datum/gas/halon = new/datum/tlv/dangerous,
/datum/gas/hexane = new/datum/tlv/dangerous
)
/obj/machinery/airalarm/unlocked
@@ -531,7 +546,12 @@
/datum/gas/stimulum,
/datum/gas/pluoxium,
/datum/gas/freon,
/datum/gas/hydrogen
/datum/gas/hydrogen,
/datum/gas/healium,
/datum/gas/proto_nitrate,
/datum/gas/cyrion_b,
/datum/gas/halon,
/datum/gas/hexane,
),
"scrubbing" = 1,
"widenet" = 1
@@ -64,7 +64,12 @@
"caution" = /obj/machinery/portable_atmospherics/canister,
"miasma" = /obj/machinery/portable_atmospherics/canister/miasma,
"freon" = /obj/machinery/portable_atmospherics/canister/freon,
"hydrogen" = /obj/machinery/portable_atmospherics/canister/hydrogen
"hydrogen" = /obj/machinery/portable_atmospherics/canister/hydrogen,
"healium" = /obj/machinery/portable_atmospherics/canister/healium,
"proto_nitrate" = /obj/machinery/portable_atmospherics/canister/proto_nitrate,
"cyrion_b" = /obj/machinery/portable_atmospherics/canister/cyrion_b,
"halon" = /obj/machinery/portable_atmospherics/canister/halon,
"hexane" = /obj/machinery/portable_atmospherics/canister/hexane
)
/obj/machinery/portable_atmospherics/canister/interact(mob/user)
@@ -80,28 +85,28 @@
. += "<span class='notice'>This canister is [mode]. A sticker on its side says <b>MAX PRESSURE: [siunit(pressure_limit, "Pa", 0)]</b>.</span>"
/obj/machinery/portable_atmospherics/canister/nitrogen
name = "n2 canister"
name = "Nitrogen canister"
desc = "Nitrogen gas. Reportedly useful for something."
icon_state = "red"
base_icon_state = "red"
gas_type = /datum/gas/nitrogen
/obj/machinery/portable_atmospherics/canister/oxygen
name = "o2 canister"
name = "Oxygen canister"
desc = "Oxygen. Necessary for human life."
icon_state = "blue"
base_icon_state = "blue"
gas_type = /datum/gas/oxygen
/obj/machinery/portable_atmospherics/canister/carbon_dioxide
name = "co2 canister"
name = "Carbon dioxide canister"
desc = "Carbon dioxide. What the fuck is carbon dioxide?"
icon_state = "black"
base_icon_state = "black"
gas_type = /datum/gas/carbon_dioxide
/obj/machinery/portable_atmospherics/canister/toxins
name = "plasma canister"
name = "Plasma canister"
desc = "Plasma gas. The reason YOU are here. Highly toxic."
icon_state = "orange"
base_icon_state = "orange"
@@ -115,55 +120,55 @@
gas_type = /datum/gas/bz
/obj/machinery/portable_atmospherics/canister/nitrous_oxide
name = "n2o canister"
name = "Nitrous oxide canister"
desc = "Nitrous oxide gas. Known to cause drowsiness."
icon_state = "redws"
base_icon_state = "redws"
gas_type = /datum/gas/nitrous_oxide
/obj/machinery/portable_atmospherics/canister/air
name = "air canister"
name = "Air canister"
desc = "Pre-mixed air."
icon_state = "grey"
base_icon_state = "grey"
/obj/machinery/portable_atmospherics/canister/tritium
name = "tritium canister"
name = "Tritium canister"
desc = "Tritium. Inhalation might cause irradiation."
icon_state = "green"
base_icon_state = "green"
gas_type = /datum/gas/tritium
/obj/machinery/portable_atmospherics/canister/nob
name = "hyper-noblium canister"
name = "Hyper-noblium canister"
desc = "Hyper-Noblium. More noble than all other gases."
icon_state = "nob"
base_icon_state = "nob"
gas_type = /datum/gas/hypernoblium
/obj/machinery/portable_atmospherics/canister/nitryl
name = "nitryl canister"
name = "Nitryl canister"
desc = "Nitryl gas. Feels great 'til the acid eats your lungs."
icon_state = "brown"
base_icon_state = "brown"
gas_type = /datum/gas/nitryl
/obj/machinery/portable_atmospherics/canister/stimulum
name = "stimulum canister"
name = "Stimulum canister"
desc = "Stimulum. High energy gas, high energy people."
icon_state = "darkpurple"
base_icon_state = "darkpurple"
gas_type = /datum/gas/stimulum
/obj/machinery/portable_atmospherics/canister/pluoxium
name = "pluoxium canister"
name = "Pluoxium canister"
desc = "Pluoxium. Like oxygen, but more bang for your buck."
icon_state = "darkblue"
base_icon_state = "darkblue"
gas_type = /datum/gas/pluoxium
/obj/machinery/portable_atmospherics/canister/water_vapor
name = "water vapor canister"
name = "Water vapor canister"
desc = "Water Vapor. We get it, you vape."
icon_state = "water_vapor"
base_icon_state = "water_vapor"
@@ -171,7 +176,7 @@
filled = 1
/obj/machinery/portable_atmospherics/canister/miasma
name = "miasma canister"
name = "Miasma canister"
desc = "Miasma. Makes you wish your nose were blocked."
icon_state = "miasma"
base_icon_state = "miasma"
@@ -179,7 +184,7 @@
filled = 1
/obj/machinery/portable_atmospherics/canister/freon
name = "freon canister"
name = "Freon canister"
desc = "Freon. Can absorb heat"
icon_state = "freon"
base_icon_state = "freon"
@@ -187,13 +192,52 @@
filled = 1
/obj/machinery/portable_atmospherics/canister/hydrogen
name = "hydrogen canister"
name = "Hydrogen canister"
desc = "Hydrogen, highly flammable"
icon_state = "h2"
base_icon_state = "h2"
gas_type = /datum/gas/hydrogen
filled = 1
/obj/machinery/portable_atmospherics/canister/healium
name = "Healium canister"
desc = "Healium, causes deep sleep"
icon_state = "healium"
base_icon_state = "healium"
gas_type = /datum/gas/healium
filled = 1
/obj/machinery/portable_atmospherics/canister/proto_nitrate
name = "Proto Nitrate canister"
desc = "Proto Nitrate, react differently with various gases"
icon_state = "proto_nitrate"
base_icon_state = "proto_nitrate"
gas_type = /datum/gas/proto_nitrate
filled = 1
/obj/machinery/portable_atmospherics/canister/cyrion_b
name = "Cyrion B canister"
desc = "Cyrion B, highly toxic"
icon_state = "cyrion_b"
base_icon_state = "cyrion_b"
gas_type = /datum/gas/cyrion_b
filled = 1
/obj/machinery/portable_atmospherics/canister/halon
name = "Halon canister"
desc = "Halon, remove oxygen from high temperature fires and cool down the area"
icon_state = "halon"
base_icon_state = "halon"
gas_type = /datum/gas/halon
filled = 1
/obj/machinery/portable_atmospherics/canister/hexane
name = "Hexane canister"
desc = "hexane, highly flammable"
icon_state = "hexane"
base_icon_state = "hexane"
gas_type = /datum/gas/hexane
filled = 1
/obj/machinery/portable_atmospherics/canister/fusion_test
name = "fusion test canister"
@@ -207,7 +251,7 @@
air_contents.gases[/datum/gas/hydrogen][MOLES] = 500
air_contents.gases[/datum/gas/plasma][MOLES] = 500
air_contents.gases[/datum/gas/tritium][MOLES] = 350
air_contents.temperature = 15000
air_contents.temperature = 10000
/obj/machinery/portable_atmospherics/canister/proc/get_time_left()
if(timing)
@@ -24,6 +24,11 @@
/datum/gas/water_vapor,
/datum/gas/freon,
/datum/gas/hydrogen,
/datum/gas/healium,
/datum/gas/proto_nitrate,
/datum/gas/cyrion_b,
/datum/gas/halon,
/datum/gas/hexane,
)
/obj/machinery/portable_atmospherics/scrubber/Destroy()
@@ -34,6 +34,12 @@
description = "Our R&D department is working on the development of more efficient electrical batteries using hydrogen as a catalyst. Ship us a tank full of it. (20 Moles)"
gas_type = /datum/gas/hydrogen
/datum/bounty/item/engineering/gas/cyrion_b_tank
name = "Full Tank of Cyrion-B"
description = "The main planet of \[REDACTED] has been chosen as testing grounds for the new weapon that uses the Cyrion-B gas. Ship us a tank full of it. (20 Moles)"
reward = 10000
gas_type = /datum/gas/cyrion_b
/datum/bounty/item/engineering/emitter
name = "Emitter"
description = "We think there may be a defect in your station's emitter designs, based on the sheer number of delaminations your sector seems to see. Ship us one of yours."
+19 -1
View File
@@ -110,7 +110,20 @@
var/obj/machinery/portable_atmospherics/canister/C = O
var/worth = 10
var/gases = C.air_contents.gases
C.air_contents.assert_gases(/datum/gas/bz,/datum/gas/stimulum,/datum/gas/hypernoblium,/datum/gas/miasma,/datum/gas/tritium,/datum/gas/pluoxium,/datum/gas/freon,/datum/gas/hydrogen)
C.air_contents.assert_gases(/datum/gas/bz,
/datum/gas/stimulum,
/datum/gas/hypernoblium,
/datum/gas/miasma,
/datum/gas/tritium,
/datum/gas/pluoxium,
/datum/gas/freon,
/datum/gas/hydrogen,
/datum/gas/healium,
/datum/gas/proto_nitrate,
/datum/gas/cyrion_b,
/datum/gas/halon,
/datum/gas/hexane
)
worth += gases[/datum/gas/hypernoblium][MOLES]*1000
worth += gases[/datum/gas/stimulum][MOLES]*100
@@ -120,4 +133,9 @@
worth += gases[/datum/gas/bz][MOLES]*4
worth += gases[/datum/gas/miasma][MOLES]*2
worth += gases[/datum/gas/hydrogen][MOLES]*1
worth += gases[/datum/gas/healium][MOLES]*19
worth += gases[/datum/gas/proto_nitrate][MOLES]*5
worth += gases[/datum/gas/cyrion_b][MOLES]*1050
worth += gases[/datum/gas/halon][MOLES]*9
worth += gases[/datum/gas/hexane][MOLES]*6
return worth
+10
View File
@@ -370,6 +370,16 @@
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
strip_delay = 80
/obj/item/clothing/head/helmet/elder_atmosian
name = "Elder Atmosian Helmet"
desc = "A superb helmet made with the thoughest and rarest materials avaiable to man."
icon_state = "knight_greyscale"
inhand_icon_state = "knight_greyscale"
armor = list(MELEE = 15, BULLET = 10, LASER = 30, ENERGY = 30, BOMB = 10, BIO = 10, RAD = 20, FIRE = 65, ACID = 40, WOUND = 15)
material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS //Can change color and add prefix
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
//monkey sentience caps
/obj/item/clothing/head/helmet/monkey_sentience
+11
View File
@@ -287,3 +287,14 @@
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
armor = list(MELEE = 25, BULLET = 20, LASER = 20, ENERGY = 30, BOMB = 20, BIO = 50, RAD = 20, FIRE = -10, ACID = 50, WOUND = 10)
/obj/item/clothing/suit/armor/elder_atmosian
name = "Elder Atmosian Armor"
desc = "A superb armor made with the thoughest and rarest materials avaiable to man."
icon_state = "knight_grey"
inhand_icon_state = "knight_greyscale"
material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS//Can change color and add prefix
armor = list(MELEE = 15, BULLET = 10, LASER = 30, ENERGY = 30, BOMB = 10, BIO = 10, RAD = 20, FIRE = 65, ACID = 40, WOUND = 15)
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
@@ -28,6 +28,9 @@
/datum/movespeed_modifier/reagent/freon
multiplicative_slowdown = 1.6
/datum/movespeed_modifier/reagent/halon
multiplicative_slowdown = 1.8
/datum/movespeed_modifier/reagent/lenturi
multiplicative_slowdown = 1.5
+28 -1
View File
@@ -22,7 +22,9 @@
#define H2O_HEAT_PENALTY 12 //This'll get made slowly over time, I want my spice rock spicy god damnit
#define FREON_HEAT_PENALTY -10 //very good heat absorbtion and less plasma and o2 generation
#define HYDROGEN_HEAT_PENALTY 10 // similar heat penalty as tritium (dangerous)
#define HEALIUM_HEAT_PENALTY 4
#define PROTO_NITRATE_HEAT_PENALTY -3
#define CYRION_B_HEAT_PENALTY 8
//All of these get divided by 10-bzcomp * 5 before having 1 added and being multiplied with power to determine rads
//Keep the negative values here above -10 and we won't get negative rads
@@ -33,11 +35,15 @@
#define PLUOXIUM_TRANSMIT_MODIFIER -5 //Should halve the power output
#define H2O_TRANSMIT_MODIFIER 2
#define HYDROGEN_TRANSMIT_MODIFIER 25 //increase the radiation emission, but less than the trit (2.5)
#define HEALIUM_TRANSMIT_MODIFIER 2.4
#define PROTO_NITRATE_TRANSMIT_MODIFIER 15
#define CYRION_B_TRANSMIT_MODIFIER 20
#define BZ_RADIOACTIVITY_MODIFIER 5 //Improves the effect of transmit modifiers
#define N2O_HEAT_RESISTANCE 6 //Higher == Gas makes the crystal more resistant against heat damage.
#define HYDROGEN_HEAT_RESISTANCE 2 // just a bit of heat resistance to spice it up
#define PROTO_NITRATE_HEAT_RESISTANCE 5
#define POWERLOSS_INHIBITION_GAS_THRESHOLD 0.20 //Higher == Higher percentage of inhibitor gas needed before the charge inertia chain reaction effect starts.
#define POWERLOSS_INHIBITION_MOLE_THRESHOLD 20 //Higher == More moles of the gas are needed before the charge inertia chain reaction effect starts. //Scales powerloss inhibition down until this amount of moles is reached
@@ -159,6 +165,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
/datum/gas/bz,
/datum/gas/freon,
/datum/gas/hydrogen,
/datum/gas/healium,
/datum/gas/proto_nitrate,
/datum/gas/cyrion_b,
)
///The list of gases mapped against their current comp. We use this to calculate different values the supermatter uses, like power or heat resistance. It doesn't perfectly match the air around the sm, instead moving up at a rate determined by gas_change_rate per call. Ranges from 0 to 1
var/list/gas_comp = list(
@@ -173,6 +182,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
/datum/gas/bz = 0,
/datum/gas/freon = 0,
/datum/gas/hydrogen = 0,
/datum/gas/healium = 0,
/datum/gas/proto_nitrate = 0,
/datum/gas/cyrion_b = 0,
)
///The list of gases mapped against their transmit values. We use it to determine the effect different gases have on radiation
var/list/gas_trans = list(
@@ -183,6 +195,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
/datum/gas/tritium = TRITIUM_TRANSMIT_MODIFIER,
/datum/gas/bz = BZ_TRANSMIT_MODIFIER,
/datum/gas/hydrogen = HYDROGEN_TRANSMIT_MODIFIER,
/datum/gas/healium = HEALIUM_TRANSMIT_MODIFIER,
/datum/gas/proto_nitrate = PROTO_NITRATE_TRANSMIT_MODIFIER,
/datum/gas/cyrion_b = CYRION_B_TRANSMIT_MODIFIER,
)
///The list of gases mapped against their heat penaltys. We use it to determin molar and heat output
var/list/gas_heat = list(
@@ -196,11 +211,15 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
/datum/gas/bz = BZ_HEAT_PENALTY,
/datum/gas/freon = FREON_HEAT_PENALTY,
/datum/gas/hydrogen = HYDROGEN_HEAT_PENALTY,
/datum/gas/healium = HEALIUM_HEAT_PENALTY,
/datum/gas/proto_nitrate = PROTO_NITRATE_HEAT_PENALTY,
/datum/gas/cyrion_b = CYRION_B_HEAT_PENALTY,
)
///The list of gases mapped against their heat resistance. We use it to moderate heat damage.
var/list/gas_resist = list(
/datum/gas/nitrous_oxide = N2O_HEAT_RESISTANCE,
/datum/gas/hydrogen = HYDROGEN_HEAT_RESISTANCE,
/datum/gas/proto_nitrate = PROTO_NITRATE_HEAT_RESISTANCE,
)
///The list of gases mapped against their powermix ratio
var/list/gas_powermix = list(
@@ -214,6 +233,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
/datum/gas/bz = 1,
/datum/gas/freon = -1,
/datum/gas/hydrogen = 1,
/datum/gas/healium = 1,
/datum/gas/proto_nitrate = 1,
/datum/gas/cyrion_b = 1,
)
///The last air sample's total molar count, will always be above or equal to 0
var/combined_gas = 0
@@ -624,6 +646,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
if(prob(50))
//(1 + (tritRad + pluoxDampen * bzDampen * o2Rad * plasmaRad / (10 - bzrads))) * freonbonus
radiation_pulse(src, power * max(0, (1 + (power_transmission_bonus/(10-(gas_comp[/datum/gas/bz] * BZ_RADIOACTIVITY_MODIFIER)))) * freonbonus))// RadModBZ(500%)
if(prob(gas_comp[/datum/gas/cyrion_b]))
playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, TRUE, extrarange = 10)
supermatter_zap(src, 6, clamp(power*2, 4000, 20000), ZAP_MOB_STUN)
if(gas_comp[/datum/gas/bz] >= 0.4 && prob(30 * gas_comp[/datum/gas/bz]))
src.fire_nuclear_particle() // Start to emit radballs at a maximum of 30% chance per tick
@@ -1362,6 +1362,61 @@
if(isplasmaman(L))
REMOVE_TRAIT(L, TRAIT_NOFIRE, type)
return ..()
/datum/reagent/healium
name = "Healium"
description = "A Powerful sleeping agent with healing properties"
reagent_state = GAS
metabolization_rate = REAGENTS_METABOLISM * 0.5
color = "90560B"
taste_description = "rubbery"
/datum/reagent/healium/on_mob_metabolize(mob/living/L)
. = ..()
ADD_TRAIT(L, TRAIT_KNOCKEDOUT, type)
/datum/reagent/healium/on_mob_end_metabolize(mob/living/L)
REMOVE_TRAIT(L, TRAIT_KNOCKEDOUT, type)
return ..()
/datum/reagent/halon
name = "Halon"
description = "A firefighter gas that remove oxygen and cool down the area"
reagent_state = GAS
metabolization_rate = REAGENTS_METABOLISM * 0.5
color = "90560B"
taste_description = "minty"
/datum/reagent/halon/on_mob_metabolize(mob/living/L)
. = ..()
L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/halon)
ADD_TRAIT(L, TRAIT_RESISTHEAT, type)
/datum/reagent/halon/on_mob_end_metabolize(mob/living/L)
L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/halon)
REMOVE_TRAIT(L, TRAIT_RESISTHEAT, type)
return ..()
/datum/reagent/hexane
name = "Hexane"
description = "A filtering gas, don't breathe it if you suffer from brain conditions"
reagent_state = GAS
metabolization_rate = REAGENTS_METABOLISM * 0.5
color = "90560B"
taste_description = "fresh"
/datum/reagent/hexane/on_mob_metabolize(mob/living/L)
. = ..()
L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/halon)
ADD_TRAIT(L, CHANGELING_HIVEMIND_MUTE, type)
ADD_TRAIT(L, TRAIT_SIXTHSENSE, type)
/datum/reagent/hexane/on_mob_end_metabolize(mob/living/L)
L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/halon)
REMOVE_TRAIT(L, CHANGELING_HIVEMIND_MUTE, type)
REMOVE_TRAIT(L, TRAIT_SIXTHSENSE, type)
return ..()
/////////////////////////Colorful Powder////////////////////////////
//For colouring in /proc/mix_color_from_reagents
+59 -1
View File
@@ -99,7 +99,24 @@
var/list/breath_gases = breath.gases
breath.assert_gases(/datum/gas/oxygen, /datum/gas/plasma, /datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide, /datum/gas/bz, /datum/gas/nitrogen, /datum/gas/tritium, /datum/gas/nitryl, /datum/gas/pluoxium, /datum/gas/stimulum, /datum/gas/freon, /datum/gas/hypernoblium)
breath.assert_gases(/datum/gas/oxygen,
/datum/gas/plasma,
/datum/gas/carbon_dioxide,
/datum/gas/nitrous_oxide,
/datum/gas/bz,
/datum/gas/nitrogen,
/datum/gas/tritium,
/datum/gas/nitryl,
/datum/gas/pluoxium,
/datum/gas/stimulum,
/datum/gas/freon,
/datum/gas/hypernoblium,
/datum/gas/healium,
/datum/gas/proto_nitrate,
/datum/gas/cyrion_b,
/datum/gas/halon,
/datum/gas/hexane
)
//Partial pressures in our breath
var/O2_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/oxygen][MOLES])+(8*breath.get_breath_partial_pressure(breath_gases[/datum/gas/pluoxium][MOLES]))
@@ -314,6 +331,47 @@
breath_gases[/datum/gas/freon][MOLES]-=gas_breathed
// Healium
var/healium_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/healium][MOLES])
if(healium_pp > gas_stimulation_min)
var/existing = H.reagents.get_reagent_amount(/datum/reagent/healium)
H.reagents.add_reagent(/datum/reagent/healium,max(0, 1 - existing))
H.adjustOxyLoss(-5)
H.adjustFireLoss(-7)
H.adjustToxLoss(-7)
H.adjustBruteLoss(-10)
gas_breathed = breath_gases[/datum/gas/healium][MOLES]
breath_gases[/datum/gas/healium][MOLES]-=gas_breathed
// Proto Nitrate
// Inert
// Cyrion B
var/cyrion_b_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/cyrion_b][MOLES])
if(cyrion_b_pp > gas_stimulation_min)
H.adjustBruteLoss(25)
H.adjustOxyLoss(5)
H.adjustFireLoss(8)
H.adjustToxLoss(8)
gas_breathed = breath_gases[/datum/gas/cyrion_b][MOLES]
breath_gases[/datum/gas/cyrion_b][MOLES]-=gas_breathed
// Halon
var/halon_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/halon][MOLES])
if(halon_pp > gas_stimulation_min)
H.adjustOxyLoss(5)
var/existing = H.reagents.get_reagent_amount(/datum/reagent/halon)
H.reagents.add_reagent(/datum/reagent/halon,max(0, 1 - existing))
gas_breathed = breath_gases[/datum/gas/halon][MOLES]
breath_gases[/datum/gas/halon][MOLES]-=gas_breathed
// Hexane
var/hexane_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/hexane][MOLES])
if(hexane_pp > gas_stimulation_min)
H.hallucination += 50
H.reagents.add_reagent(/datum/reagent/hexane,5)
if(prob(33))
H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150)
// Stimulum
gas_breathed = breath_gases[/datum/gas/stimulum][MOLES]
if (gas_breathed > gas_stimulation_min)