mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 12:41:09 +01:00
[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:
@@ -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
|
||||
..()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user