[READY]Major explosive rebalanance and changes patch: Edge strikes back (#50775)

* Explosion rebalance patch

* more rebalancing

* reee

* removes ghetto bpp

* next balance

* Exotic Stabilizer

* forgot about this

* Maintainer suggestions

Co-authored-by: moo <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com>

* appveyor ree

Co-authored-by: moo <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com>
This commit is contained in:
EdgeLordExe
2020-05-03 13:43:57 -04:00
committed by GitHub
co-authored by moo
parent 0eccc0e4f0
commit 30dc79dc66
6 changed files with 107 additions and 32 deletions
@@ -44,7 +44,7 @@
/obj/structure/geyser/random
erupting_state = null
var/list/options = list(/datum/reagent/clf3 = 10, /datum/reagent/water/hollowwater = 10, /datum/reagent/medicine/omnizine/protozine = 6, /datum/reagent/wittel = 1)
var/list/options = list(/datum/reagent/clf3 = 10, /datum/reagent/water/hollowwater = 10,/datum/reagent/plasma_oxide = 8, /datum/reagent/medicine/omnizine/protozine = 6, /datum/reagent/wittel = 1)
/obj/structure/geyser/random/Initialize()
. = ..()
@@ -2174,6 +2174,18 @@
taste_description = "bananas"
can_synth = TRUE
/datum/reagent/plasma_oxide
name = "Hyper-Plasmium Oxide"
description = "Compound created deep in the cores of demon-class planets. Commonly found through deep geysers."
color = "#470750" // rgb: 255, 255, 255
taste_description = "hell"
/datum/reagent/exotic_stabilizer
name = "Exotic Stabilizer"
description = "Advanced compound created by mixing stabilizing agent and hyper-plasmium oxide."
color = "#180000" // rgb: 255, 255, 255
taste_description = "blood"
/datum/reagent/wittel
name = "Wittel"
description = "An extremely rare metallic-white substance only found on demon-class planets."
@@ -852,7 +852,7 @@
mytray.adjustWeeds(-rand(1,4))
/datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/carbon/M)
M.adjustFireLoss(current_cycle/10, 0)
M.adjustFireLoss(current_cycle/15, 0)
. = 1
..()
@@ -864,7 +864,7 @@
acidpwr = 5.0
/datum/reagent/toxin/acid/nitracid/on_mob_life(mob/living/carbon/M)
M.adjustFireLoss(current_cycle/15, FALSE) //here you go nervar
M.adjustFireLoss(volume/10, FALSE) //here you go nervar
. = TRUE
..()
+68 -8
View File
@@ -1,23 +1,74 @@
/**
* #Chemical Reaction
*
* Datum that makes the magic between reagents happen.
*
* Chemical reactions is a class that is instantiated and stored in a global list 'chemical_reactions_list'
*/
/datum/chemical_reaction
///Results of the chemical reactions
var/list/results = new/list()
///Required chemicals that are USED in the reaction
var/list/required_reagents = new/list()
///Required chemicals that must be present in the container but are not USED.
var/list/required_catalysts = new/list()
// Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things
var/required_container = null // the exact container path required for the reaction to happen
var/required_other = 0 // an integer required for the reaction to happen
var/mob_react = TRUE //Determines if a chemical reaction can occur inside a mob
/// the exact container path required for the reaction to happen
var/required_container
/// an integer required for the reaction to happen
var/required_other = 0
///Determines if a chemical reaction can occur inside a mob
var/mob_react = TRUE
///Required temperature for the reaction to begin
var/required_temp = 0
var/is_cold_recipe = 0 // Set to 1 if you want the recipe to only react when it's BELOW the required temp.
var/mix_message = "The solution begins to bubble." //The message shown to nearby people upon mixing, if applicable
var/mix_sound = 'sound/effects/bubbles.ogg' //The sound played upon mixing, if applicable
/// Set to TRUE if you want the recipe to only react when it's BELOW the required temp.
var/is_cold_recipe = FALSE
///The message shown to nearby people upon mixing, if applicable
var/mix_message = "The solution begins to bubble."
///The sound played upon mixing, if applicable
var/mix_sound = 'sound/effects/bubbles.ogg'
/datum/chemical_reaction/New()
. = ..()
SSticker.OnRoundstart(CALLBACK(src,.proc/update_info))
/**
* Updates information during the roundstart
*
* This proc is mainly used by explosives but can be used anywhere else
* You should generally use the special reactions in [/datum/chemical_reaction/randomized]
* But for simple variable edits, like changing the temperature or adding/subtracting required reagents it is better to use this.
*/
/datum/chemical_reaction/proc/update_info()
return
/**
* Shit that happens on reaction
*
* Proc where the additional magic happens.
* You dont want to handle mob spawning in this since there is a dedicated proc for that.client
* Arguments:
* * holder - the datum that holds this reagent, be it a beaker or anything else
* * created_volume - volume created when this is mixed. look at 'var/list/results'.
*/
/datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, created_volume)
return
//I recommend you set the result amount to the total volume of all components.
/**
* Magical mob spawning when chemicals react
*
* Your go to proc when you want to create new mobs from chemicals. please dont use on_reaction.
* Arguments:
* * holder - the datum that holds this reagent, be it a beaker or anything else
* * amount_to_spawn - how much /mob to spawn
* * reaction_name - what is the name of this reaction. be creative, the world is your oyster after all!
* * mob_class - determines if the mob will be friendly, neutral or hostile
* * mob_faction - used in determining targets, mobs from the same faction wont harm eachother.
* * random - creates random mobs. self explanatory.
*/
/datum/chemical_reaction/proc/chemical_mob_spawn(datum/reagents/holder, amount_to_spawn, reaction_name, mob_class = HOSTILE_SPAWN, mob_faction = "chemicalsummon", random = TRUE)
if(holder && holder.my_atom)
var/atom/A = holder.my_atom
@@ -50,7 +101,16 @@
for(var/j = 1, j <= rand(1, 3), j++)
step(S, pick(NORTH,SOUTH,EAST,WEST))
///Simulates a vortex that moves nearby movable atoms towards or away from the turf T. Range also determines the strength of the effect. High values cause nearby objects to be thrown.
/**
* Magical move-wooney that happens sometimes.
*
* Simulates a vortex that moves nearby movable atoms towards or away from the turf T.
* Range also determines the strength of the effect. High values cause nearby objects to be thrown.
* Arguments:
* * T - turf where it happens
* * setting_type - does it suck or does it blow?
* * range - range.
*/
/proc/goonchem_vortex(turf/T, setting_type, range)
for(var/atom/movable/X in orange(range, T))
if(X.anchored)
@@ -578,3 +578,6 @@
results = list(/datum/reagent/consumable/gravy = 3)
required_reagents = list(/datum/reagent/consumable/milk = 1, /datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/flour = 1)
/datum/chemical_reaction/exotic_stabilizer
results = list(/datum/reagent/exotic_stabilizer = 2)
required_reagents = list(/datum/reagent/plasma_oxide = 1,/datum/reagent/stabilizing_agent = 1)
@@ -30,7 +30,8 @@
strengthdiv = 2
/datum/chemical_reaction/reagent_explosion/nitroglycerin/on_reaction(datum/reagents/holder, created_volume)
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
if(holder.has_reagent(/datum/reagent/exotic_stabilizer,round(created_volume / 25, CHEMICAL_QUANTISATION_LEVEL)))
return
holder.remove_reagent(/datum/reagent/nitroglycerin, created_volume*2)
..()
@@ -43,6 +44,7 @@
/datum/chemical_reaction/reagent_explosion/rdx
results = list(/datum/reagent/rdx= 2)
required_reagents = list(/datum/reagent/phenol = 2, /datum/reagent/toxin/acid/nitracid = 1, /datum/reagent/acetone_oxide = 1 )
required_catalysts = list(/datum/reagent/gold) //royal explosive
required_temp = 404
strengthdiv = 8
@@ -55,15 +57,15 @@
/datum/chemical_reaction/reagent_explosion/rdx_explosion
required_reagents = list(/datum/reagent/rdx = 1)
required_temp = 474
strengthdiv = 8
strengthdiv = 7
/datum/chemical_reaction/reagent_explosion/rdx_explosion2 //makes rdx unique , on its own it is a good bomb, but when combined with liquid electricity it becomes truly destructive
required_reagents = list(/datum/reagent/rdx = 1 , /datum/reagent/consumable/liquidelectricity = 1)
strengthdiv = 4
strengthdiv = 3.5 //actually a decrease of 1 becaused of how explosions are calculated. This is due to the fact we require 2 reagents
modifier = 2
/datum/chemical_reaction/reagent_explosion/rdx_explosion2/on_reaction(datum/reagents/holder, created_volume)
var/fire_range = round(created_volume/100)
var/fire_range = round(created_volume/50)
var/turf/T = get_turf(holder.my_atom)
for(var/turf/turf in range(fire_range,T))
new /obj/effect/hotspot(turf)
@@ -72,11 +74,12 @@
/datum/chemical_reaction/reagent_explosion/rdx_explosion3
required_reagents = list(/datum/reagent/rdx = 1 , /datum/reagent/teslium = 1)
strengthdiv = 3.5 //actually a decrease of 1 becaused of how explosions are calculated. This is due to the fact we require 2 reagents
modifier = 4
strengthdiv = 4
/datum/chemical_reaction/reagent_explosion/rdx_explosion3/on_reaction(datum/reagents/holder, created_volume)
var/fire_range = round(created_volume/50)
var/fire_range = round(created_volume/30)
var/turf/T = get_turf(holder.my_atom)
for(var/turf/turf in range(fire_range,T))
new /obj/effect/hotspot(turf)
@@ -89,15 +92,11 @@
required_temp = 450
strengthdiv = 3
/datum/chemical_reaction/reagent_explosion/tatp/New()
SSticker.OnRoundstart(CALLBACK(src,.proc/UpdateInfo)) //method used by secret sauce.
/datum/chemical_reaction/reagent_explosion/tatp/proc/UpdateInfo()
/datum/chemical_reaction/reagent_explosion/tatp/update_info()
required_temp = 450 + rand(-49,49) //this gets loaded only on round start
/datum/chemical_reaction/reagent_explosion/tatp/on_reaction(datum/reagents/holder, created_volume)
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
if(holder.has_reagent(/datum/reagent/exotic_stabilizer,round(created_volume / 50, CHEMICAL_QUANTISATION_LEVEL))) // we like exotic stabilizer
return
holder.remove_reagent(/datum/reagent/tatp, created_volume)
..()
@@ -107,14 +106,15 @@
required_temp = 550 // this makes making tatp before pyro nades, and extreme pain in the ass to make
strengthdiv = 3
/datum/chemical_reaction/reagent_explosion/tatp_explosion/New()
SSticker.OnRoundstart(CALLBACK(src,.proc/UpdateInfo))
/datum/chemical_reaction/reagent_explosion/tatp_explosion/on_reaction(datum/reagents/holder, created_volume)
var/strengthdiv_adjust = created_volume / ( 2100 / initial(strengthdiv))
strengthdiv = max(initial(strengthdiv) - strengthdiv_adjust + 1.5 ,1.5) //Slightly better than nitroglycerin
. = ..()
return
/datum/chemical_reaction/reagent_explosion/tatp_explosion/proc/UpdateInfo()
/datum/chemical_reaction/reagent_explosion/tatp_explosion/update_info()
required_temp = 550 + rand(-49,49)
/datum/chemical_reaction/reagent_explosion/penthrite_explosion_epinephrine
required_reagents = list(/datum/reagent/medicine/C2/penthrite = 1, /datum/reagent/medicine/epinephrine = 1)
strengthdiv = 5
@@ -162,8 +162,8 @@
/datum/chemical_reaction/reagent_explosion/gunpowder_explosion
required_reagents = list(/datum/reagent/gunpowder = 1)
required_temp = 474
strengthdiv = 6
modifier = 1
strengthdiv = 10
modifier = 5
mix_message = "<span class='boldannounce'>Sparks start flying around the gunpowder!</span>"
/datum/chemical_reaction/reagent_explosion/gunpowder_explosion/on_reaction(datum/reagents/holder, created_volume)
@@ -224,8 +224,8 @@
/datum/chemical_reaction/reagent_explosion/methsplosion
required_temp = 380 //slightly above the meth mix time.
required_reagents = list(/datum/reagent/drug/methamphetamine = 1)
strengthdiv = 6
modifier = 1
strengthdiv = 12
modifier = 5
mob_react = FALSE
/datum/chemical_reaction/reagent_explosion/methsplosion/on_reaction(datum/reagents/holder, created_volume)