Skip to content
This repository has been archived by the owner on Aug 30, 2021. It is now read-only.

Commit

Permalink
[READY]Major explosive rebalanance and changes patch: Edge strikes ba…
Browse files Browse the repository at this point in the history
…ck (tgstation#50775)

* Explosion rebalance patch

* more rebalancing

* reee

* removes ghetto bpp

* next balance

* Exotic Stabilizer

* forgot about this

* Maintainer suggestions

Co-authored-by: moo <[email protected]>

* appveyor ree

Co-authored-by: moo <[email protected]>
  • Loading branch information
Djiq and ExcessiveUseOfCobblestone authored May 3, 2020
1 parent 0eccc0e commit 30dc79d
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 32 deletions.
2 changes: 1 addition & 1 deletion code/game/objects/structures/lavaland/geyser.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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()
. = ..()
Expand Down
12 changes: 12 additions & 0 deletions code/modules/reagents/chemistry/reagents/other_reagents.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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."
Expand Down
4 changes: 2 additions & 2 deletions code/modules/reagents/chemistry/reagents/toxin_reagents.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
..()

Expand All @@ -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
..()

Expand Down
76 changes: 68 additions & 8 deletions code/modules/reagents/chemistry/recipes.dm
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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)
Expand Down
3 changes: 3 additions & 0 deletions code/modules/reagents/chemistry/recipes/others.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
42 changes: 21 additions & 21 deletions code/modules/reagents/chemistry/recipes/pyrotechnics.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
..()
Expand All @@ -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

Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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)
..()
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 30dc79d

Please sign in to comment.