Adds more SeCrEt ChEmS (#95952)

This commit is contained in:
Time-Green
2026-05-05 16:25:32 +02:00
committed by GitHub
parent 0394866bec
commit b9dfbcaca3
10 changed files with 163 additions and 16 deletions
@@ -565,7 +565,6 @@
unsuitable_cold_damage = 1
unsuitable_heat_damage = 1
menu_description = "Stronger assassin spider variant with an unmatched speed, high amount of health and very deadly poison, but deals very low amount of damage. It also has ability to ventcrawl."
apply_spider_antag = FALSE
innate_actions = list(
/datum/action/cooldown/mob_cooldown/lay_web/sticky_web,
/datum/action/cooldown/mob_cooldown/lay_web/web_spikes,
@@ -591,7 +590,6 @@
melee_damage_lower = 15
melee_damage_upper = 20
ai_controller = /datum/ai_controller/basic_controller/giant_spider/retaliate
apply_spider_antag = FALSE
/mob/living/basic/spider/giant/sgt_araneus/Initialize(mapload)
. = ..()
@@ -51,8 +51,6 @@
var/directive = ""
/// Short description of what this mob is capable of, for radial menu uses
var/menu_description = "Tanky and strong for the defense of the nest and other spiders."
/// If true then you shouldn't be told that you're a spider antagonist as soon as you are placed into this mob
var/apply_spider_antag = TRUE
/// Commands you can give this spider once it is tamed
var/static/list/tamed_commands = list(
/datum/pet_command/idle,
@@ -221,7 +219,6 @@
response_harm_continuous = "splats"
response_harm_simple = "splat"
ai_controller = /datum/ai_controller/basic_controller/giant_spider/pest
apply_spider_antag = FALSE
///list of pet commands we follow
var/static/list/pet_commands = list(
/datum/pet_command/idle,
@@ -2980,14 +2980,10 @@
/datum/reagent/metalgen
name = "Metalgen"
data = list("material"=null)
description = "A purple metal morphic liquid, said to impose its metallic properties on whatever it touches."
description = "A purple, metallic liquid, said to impose its metallic properties on whatever it touches."
color = "#b000aa"
taste_mult = 0 // oderless and tasteless
chemical_flags = REAGENT_NO_RANDOM_RECIPE
/// The material flags used to apply the transmuted materials
var/applied_material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS
/// The amount of materials to apply to the transmuted objects if they don't contain materials
var/default_material_amount = 100
/datum/reagent/metalgen/expose_obj(obj/exposed_obj, reac_volume, methods=TOUCH, show_message=TRUE)
. = ..()
@@ -3007,6 +3003,10 @@
if(!metal_ref)
return
metal_transmute(target, metal_ref)
/// Change the material type of an object or turf, but with visuals and effects related to the material
/proc/metal_transmute(atom/target, metal_type, default_material_amount = 100, applied_material_flags = MATERIAL_METALGEN)
if(is_type_in_typecache(target, GLOB.blacklisted_metalgen_types)) //some stuff can lead to exploits if transmuted
return
@@ -3021,12 +3021,12 @@
// Delete existing materials first before changing the material flags
if(length(target.custom_materials))
target.set_custom_materials()
var/list/metal_dat = list((metal_ref) = metal_amount)
var/list/metal_dat = list((metal_type) = metal_amount)
target.material_flags = applied_material_flags
if (target.has_material_slots())
var/list/new_slots = target.get_material_slots()
for (var/slot_type in new_slots)
new_slots[slot_type] = metal_ref
new_slots[slot_type] = metal_type
// Safe to call and doesn't do anything as no materials are currently present on the target
target.set_material_slots(new_slots)
target.set_custom_materials(metal_dat)
@@ -3534,3 +3534,48 @@
/datum/reagent/luminescent_fluid/pink
name = "Pink Luminiscent Fluid"
color = LIGHT_COLOR_PINK
/// Reagent that polymorphs you
/datum/reagent/polyjuice
name = "Polyjuice"
description = "A vibrant liquid which causes sudden and irreversible changes in the body plan of living creatures."
color = "#ff00ea"
metabolization_rate = REAGENTS_METABOLISM
taste_description = "magic"
chemical_flags = REAGENT_NO_RANDOM_RECIPE
randomized_spawns = REAGENT_SPAWN_MAINTENANCE_PILL
/// Cycle to polymorph
var/polymorph_cycle = 10
/datum/reagent/polyjuice/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio)
. = ..()
if(current_cycle > polymorph_cycle)
affected_mob.wabbajack()
/// Turns you into STONE
/datum/reagent/metalgen/gorgium
name = "Gorgium"
description = "Turns the affected... into STONE!!!"
color = "#929292"
metabolization_rate = 10 * REAGENTS_METABOLISM
taste_description = "rocks"
chemical_flags = REAGENT_NO_RANDOM_RECIPE
randomized_spawns = REAGENT_SPAWN_MAINTENANCE_PILL
data = list("material" = /datum/material/rock)
/// Less than this and it wont petrify
var/min_volume_to_pretrify = 3
/// So 1u of exposure is 5 seconds of statue time
var/reagent_to_time_conversion = 5 SECONDS
/datum/reagent/metalgen/gorgium/expose_mob(mob/living/exposed_mob, methods, reac_volume, show_message, touch_protection)
. = ..()
if(reac_volume < min_volume_to_pretrify)
return
exposed_mob.Stun(4 SECONDS)
exposed_mob.petrify(reac_volume * reagent_to_time_conversion)
@@ -1671,3 +1671,46 @@
volume = round(volume/2, 0.01)
#undef CRITICAL_CAPACITY
/// Gibs you (lol), after an easily curable disease because WERE COWARDS
/datum/reagent/toxin/gibbium
name = "Gibbium"
description = "Guess what this does."
silent_toxin = TRUE
color = "#ff0000"
metabolization_rate = 4 * REAGENTS_METABOLISM
toxpwr = 0
taste_description = "regret"
chemical_flags = REAGENT_NO_RANDOM_RECIPE
randomized_spawns = REAGENT_SPAWN_MAINTENANCE_PILL
/// On what cycle to gib the person
var/gib_cycle = 5
/datum/reagent/toxin/gibbium/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio)
. = ..()
if(current_cycle >= gib_cycle)
affected_mob.ForceContractDisease(new /datum/disease/gbs/no_transmission ())
/datum/reagent/toxin/spider_serum
name = "Spider Serum"
description = "A horrible mutagen that transmutes flesh into spiders."
color = "#000000"
taste_description = "unending nightmares"
chemical_flags = REAGENT_NO_RANDOM_RECIPE
randomized_spawns = REAGENT_SPAWN_MAINTENANCE_PILL
toxpwr = 0
/// The cycle for when to do the "transformation"
var/transformation_cycle = 30
/datum/reagent/toxin/spider_serum/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio)
. = ..()
if(prob(10))
new /mob/living/basic/spider/growing/spiderling (get_turf(affected_mob))
affected_mob.vomit(VOMIT_CATEGORY_BLOOD, lost_nutrition = 20)
to_chat(affected_mob, span_warning("You feel tiny legs climbing up your throat."))
if(current_cycle >= transformation_cycle)
affected_mob.mind?.add_antag_datum(/datum/antagonist/spider)
affected_mob.change_mob_type(/mob/living/basic/spider/giant, delete_old_mob = TRUE)
@@ -197,8 +197,23 @@
if(RNGCHEM_CATALYSTS)
return list(/datum/reagent/wittel)
///Random recipe that turns stuff into ROCKS
/datum/chemical_reaction/randomized/gorgium
persistence_period = 7
results = list(/datum/reagent/metalgen/gorgium = 20)
/datum/chemical_reaction/randomized/gorgium/GetPossibleReagents(kind)
var/list/possible_ingredients = list()
for(var/datum/reagent/reagent as anything in valid_subtypesof(/datum/reagent))
var/chemical_flags = reagent::chemical_flags
if(VALID_RANDOM_RECIPE_REAGENT(chemical_flags))
possible_ingredients += reagent
return possible_ingredients
/obj/item/paper/secretrecipe
name = "Old Recipe"
/// The recipes we can spawn with
var/list/possible_recipes = list(/datum/chemical_reaction/randomized/metalgen, /datum/chemical_reaction/randomized/secret_sauce)
/obj/item/paper/secretrecipe/Initialize(mapload)
. = ..()
@@ -223,7 +238,7 @@
/obj/item/paper/secretrecipe/proc/UpdateInfo()
PRIVATE_PROC(TRUE)
var/datum/chemical_reaction/recipe = GLOB.chemical_reactions_list[pick(valid_subtypesof(/datum/chemical_reaction/randomized))]
var/datum/chemical_reaction/recipe = GLOB.chemical_reactions_list[pick(possible_recipes)]
if(!recipe)
add_raw_text("This recipe is illegible.")
update_appearance()
@@ -261,6 +276,26 @@
add_raw_text(dat.Join(""))
update_appearance()
/// Paper that spawns a recipe for the petrification serum
/obj/item/paper/secretrecipe/gorgium
name = "paper" //gets affixed by rock
possible_recipes = list(/datum/chemical_reaction/randomized/gorgium)
/obj/item/paper/secretrecipe/gorgium/Initialize(mapload)
. = ..()
metal_transmute(src, /datum/material/rock)
/// Recipe that always has metalgen
/obj/item/paper/secretrecipe/metalgen
name = "paper" //gets affixed by uranium
possible_recipes = list(/datum/chemical_reaction/randomized/metalgen)
/obj/item/paper/secretrecipe/metalgen/Initialize(mapload)
. = ..()
metal_transmute(src, /datum/material/uranium)
#undef RNGCHEM_INPUT
#undef RNGCHEM_CATALYSTS
#undef VALID_RANDOM_RECIPE_REAGENT