Merge pull request #3944 from CHOMPStation2/upstream-merge-12552

[MIRROR] Makes Xenobio Great Again
This commit is contained in:
Razgriz
2022-03-31 00:36:25 -07:00
committed by GitHub
15 changed files with 2252 additions and 277 deletions

View File

@@ -590,3 +590,252 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN,
var/global/list/weavable_structures = list() var/global/list/weavable_structures = list()
var/global/list/weavable_items = list() var/global/list/weavable_items = list()
var/global/list/xenobio_metal_materials_normal = list(
/obj/item/stack/material/steel = 20,
/obj/item/stack/material/glass = 15,
/obj/item/stack/material/plastic = 12,
/obj/item/stack/material/wood = 12,
/obj/item/stack/material/cardboard = 6,
/obj/item/stack/material/sandstone = 5,
/obj/item/stack/material/log = 5,
/obj/item/stack/material/lead = 5,
/obj/item/stack/material/iron = 5,
/obj/item/stack/material/graphite = 5,
/obj/item/stack/material/copper = 4,
/obj/item/stack/material/tin = 4,
/obj/item/stack/material/bronze = 4,
/obj/item/stack/material/aluminium = 4)
var/global/list/xenobio_metal_materials_adv = list(
/obj/item/stack/material/glass/reinforced = 15,
/obj/item/stack/material/marble = 10,
/obj/item/stack/material/plasteel = 10,
/obj/item/stack/material/glass/phoronglass = 10,
/obj/item/stack/material/wood/sif = 5,
/obj/item/stack/material/wood/hard = 5,
/obj/item/stack/material/log/sif = 5,
/obj/item/stack/material/log/hard = 5,
/obj/item/stack/material/glass/phoronrglass = 5,
/obj/item/stack/material/glass/titanium = 3,
/obj/item/stack/material/glass/plastitanium = 3,
/obj/item/stack/material/durasteel = 2,
/obj/item/stack/material/painite = 1,
/obj/item/stack/material/void_opal = 1,
/obj/item/stack/material/quartz = 1)
var/global/list/xenobio_metal_materials_weird = list(
/obj/item/stack/material/cloth = 10,
/obj/item/stack/material/leather = 5,
/obj/item/stack/material/fiber = 5,
/obj/item/stack/material/fur/wool = 7,
/obj/item/stack/material/snow = 3,
/obj/item/stack/material/snowbrick = 3,
/obj/item/stack/material/flint = 3,
/obj/item/stack/material/stick = 3,
/obj/item/stack/material/chitin = 1)
var/global/list/xenobio_silver_materials_basic = list(
/obj/item/stack/material/silver = 10,
/obj/item/stack/material/uranium = 8,
/obj/item/stack/material/gold = 6,
/obj/item/stack/material/titanium = 4,
/obj/item/stack/material/phoron = 1)
var/global/list/xenobio_silver_materials_adv = list(
/obj/item/stack/material/deuterium = 5,
/obj/item/stack/material/tritium = 5,
/obj/item/stack/material/osmium = 5,
/obj/item/stack/material/mhydrogen = 3,
/obj/item/stack/material/diamond = 2,
/obj/item/stack/material/verdantium = 1)
var/global/list/xenobio_silver_materials_special = list(
/obj/item/stack/material/valhollide = 1,
/obj/item/stack/material/morphium = 1,
/obj/item/stack/material/supermatter = 1)
var/global/list/xenobio_gold_mobs_hostile = list(
/mob/living/simple_mob/vore/alienanimals/space_jellyfish,
/mob/living/simple_mob/vore/alienanimals/skeleton,
/mob/living/simple_mob/vore/alienanimals/space_ghost,
/mob/living/simple_mob/vore/alienanimals/startreader,
/mob/living/simple_mob/animal/passive/mouse/operative,
/mob/living/simple_mob/animal/giant_spider,
/mob/living/simple_mob/animal/giant_spider/frost,
/mob/living/simple_mob/animal/giant_spider/electric,
/mob/living/simple_mob/animal/giant_spider/hunter,
/mob/living/simple_mob/animal/giant_spider/lurker,
/mob/living/simple_mob/animal/giant_spider/pepper,
/mob/living/simple_mob/animal/giant_spider/thermic,
/mob/living/simple_mob/animal/giant_spider/tunneler,
/mob/living/simple_mob/animal/giant_spider/webslinger,
/mob/living/simple_mob/animal/giant_spider/phorogenic,
/mob/living/simple_mob/animal/giant_spider/carrier,
/mob/living/simple_mob/animal/giant_spider/nurse,
/mob/living/simple_mob/animal/giant_spider/ion,
/mob/living/simple_mob/animal/giant_spider/nurse/queen,
/mob/living/simple_mob/animal/sif/diyaab,
/mob/living/simple_mob/animal/sif/duck,
/mob/living/simple_mob/animal/sif/frostfly,
/mob/living/simple_mob/animal/sif/glitterfly,
/mob/living/simple_mob/animal/sif/hooligan_crab,
/mob/living/simple_mob/animal/sif/kururak,
/mob/living/simple_mob/animal/sif/leech,
/mob/living/simple_mob/animal/sif/tymisian,
/mob/living/simple_mob/animal/sif/sakimm,
/mob/living/simple_mob/animal/sif/savik,
/mob/living/simple_mob/animal/sif/shantak,
/mob/living/simple_mob/animal/sif/siffet,
/mob/living/simple_mob/animal/space/alien,
/mob/living/simple_mob/animal/space/alien/drone,
/mob/living/simple_mob/animal/space/alien/sentinel,
/mob/living/simple_mob/animal/space/alien/sentinel/praetorian,
/mob/living/simple_mob/animal/space/alien/queen,
/mob/living/simple_mob/animal/space/alien/queen/empress,
/mob/living/simple_mob/animal/space/alien/queen/empress/mother,
/mob/living/simple_mob/animal/space/bats,
/mob/living/simple_mob/animal/space/bear,
/mob/living/simple_mob/animal/space/carp,
/mob/living/simple_mob/animal/space/carp/large,
/mob/living/simple_mob/animal/space/carp/large/huge,
/mob/living/simple_mob/animal/space/goose,
/mob/living/simple_mob/creature,
/mob/living/simple_mob/faithless,
/mob/living/simple_mob/tomato,
/mob/living/simple_mob/animal/space/tree,
/mob/living/simple_mob/vore/aggressive/corrupthound,
/mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi,
/mob/living/simple_mob/vore/aggressive/deathclaw,
/mob/living/simple_mob/vore/aggressive/dino,
/mob/living/simple_mob/vore/aggressive/dragon,
/mob/living/simple_mob/vore/aggressive/frog,
/mob/living/simple_mob/otie,
/mob/living/simple_mob/otie/red,
/mob/living/simple_mob/vore/aggressive/panther,
/mob/living/simple_mob/vore/aggressive/rat,
/mob/living/simple_mob/vore/aggressive/giant_snake,
/mob/living/simple_mob/vore/sect_drone,
/mob/living/simple_mob/vore/sect_queen,
/mob/living/simple_mob/vore/weretiger,
/mob/living/simple_mob/animal/wolf,
/mob/living/simple_mob/vore/xeno_defanged)
var/global/list/xenobio_gold_mobs_bosses = list(
/mob/living/simple_mob/animal/giant_spider/broodmother,
/mob/living/simple_mob/vore/leopardmander,
/mob/living/simple_mob/vore/leopardmander/blue,
/mob/living/simple_mob/vore/leopardmander/exotic,
/mob/living/simple_mob/vore/greatwolf,
/mob/living/simple_mob/vore/greatwolf/black,
/mob/living/simple_mob/vore/greatwolf/grey,
/mob/living/simple_mob/vore/bigdragon)
var/global/list/xenobio_gold_mobs_safe = list(
/mob/living/simple_mob/vore/alienanimals/dustjumper,
/mob/living/simple_mob/vore/alienanimals/teppi,
/mob/living/simple_mob/animal/passive/chicken,
/mob/living/simple_mob/animal/passive/cow,
/mob/living/simple_mob/animal/goat,
/mob/living/simple_mob/animal/passive/crab,
/mob/living/simple_mob/animal/passive/mouse/jerboa,
/mob/living/simple_mob/animal/passive/lizard,
/mob/living/simple_mob/animal/passive/lizard/large,
/mob/living/simple_mob/animal/passive/yithian,
/mob/living/simple_mob/animal/passive/tindalos,
/mob/living/simple_mob/animal/passive/mouse,
/mob/living/simple_mob/animal/passive/penguin,
/mob/living/simple_mob/animal/passive/opossum,
/mob/living/simple_mob/animal/passive/cat,
/mob/living/simple_mob/animal/passive/dog/corgi,
/mob/living/simple_mob/animal/passive/dog/void_puppy,
/mob/living/simple_mob/animal/passive/dog/bullterrier,
/mob/living/simple_mob/animal/passive/dog/tamaskan,
/mob/living/simple_mob/animal/passive/dog/brittany,
/mob/living/simple_mob/animal/passive/fox,
/mob/living/simple_mob/animal/passive/fox/syndicate,
/mob/living/simple_mob/animal/passive/hare,
/mob/living/simple_mob/animal/passive/pillbug,
/mob/living/simple_mob/animal/passive/gaslamp,
/mob/living/simple_mob/animal/passive/snake,
/mob/living/simple_mob/animal/passive/snake/red,
/mob/living/simple_mob/animal/passive/snake/python,
/mob/living/simple_mob/vore/bee,
/mob/living/simple_mob/vore/fennec,
/mob/living/simple_mob/vore/fennix,
/mob/living/simple_mob/vore/hippo,
/mob/living/simple_mob/vore/horse,
/mob/living/simple_mob/animal/space/jelly,
/mob/living/simple_mob/vore/oregrub,
/mob/living/simple_mob/vore/oregrub/lava,
/mob/living/simple_mob/vore/rabbit,
/mob/living/simple_mob/vore/redpanda,
/mob/living/simple_mob/vore/sheep,
/mob/living/simple_mob/vore/solargrub)
var/global/list/xenobio_gold_mobs_birds = list(/mob/living/simple_mob/animal/passive/bird/black_bird,
/mob/living/simple_mob/animal/passive/bird/azure_tit,
/mob/living/simple_mob/animal/passive/bird/european_robin,
/mob/living/simple_mob/animal/passive/bird/goldcrest,
/mob/living/simple_mob/animal/passive/bird/ringneck_dove,
/mob/living/simple_mob/animal/passive/bird/parrot,
/mob/living/simple_mob/animal/passive/bird/parrot/kea,
/mob/living/simple_mob/animal/passive/bird/parrot/eclectus,
/mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot,
/mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique,
/mob/living/simple_mob/animal/passive/bird/parrot/white_caique,
/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar,
/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue,
/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen,
/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel,
/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white,
/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish,
/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey,
/mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo,
/mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo,
/mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo) //There's too dang many
var/global/list/xenobio_cerulean_potions = list(
/obj/item/slimepotion/enhancer,
/obj/item/slimepotion/stabilizer,
/obj/item/slimepotion/mutator,
/obj/item/slimepotion/docility,
/obj/item/slimepotion/steroid,
/obj/item/slimepotion/unity,
/obj/item/slimepotion/loyalty,
/obj/item/slimepotion/friendship,
/obj/item/slimepotion/feeding,
/obj/item/slimepotion/infertility,
/obj/item/slimepotion/fertility,
/obj/item/slimepotion/shrink,
/obj/item/slimepotion/death,
/obj/item/slimepotion/ferality,
/obj/item/slimepotion/reinvigoration,
/obj/item/slimepotion/mimic,
/obj/item/slimepotion/sapience,
/obj/item/slimepotion/obedience)
var/global/list/xenobio_rainbow_extracts = list(
/obj/item/slime_extract/grey = 2,
/obj/item/slime_extract/metal = 3,
/obj/item/slime_extract/blue = 3,
/obj/item/slime_extract/purple = 1,
/obj/item/slime_extract/orange = 3,
/obj/item/slime_extract/yellow = 3,
/obj/item/slime_extract/gold = 3,
/obj/item/slime_extract/silver = 3,
/obj/item/slime_extract/dark_purple = 2,
/obj/item/slime_extract/dark_blue = 3,
/obj/item/slime_extract/red = 3,
/obj/item/slime_extract/green = 3,
/obj/item/slime_extract/pink = 3,
/obj/item/slime_extract/oil = 3,
/obj/item/slime_extract/bluespace = 3,
/obj/item/slime_extract/cerulean = 1,
/obj/item/slime_extract/amber = 3,
/obj/item/slime_extract/sapphire = 3,
/obj/item/slime_extract/ruby = 3,
/obj/item/slime_extract/emerald = 3,
/obj/item/slime_extract/light_pink = 1,
/obj/item/slime_extract/rainbow = 1)

View File

@@ -486,30 +486,3 @@
light_range = 8 light_range = 8
light_power = 0.1 light_power = 0.1
light_color = "#49F37C" light_color = "#49F37C"
/*
* Slime Extract
*/
/obj/item/device/flashlight/slime
gender = PLURAL
name = "glowing slime extract"
desc = "A slimy ball that appears to be glowing from bioluminesence."
icon = 'icons/obj/lighting.dmi'
icon_state = "floor1" //not a slime extract sprite but... something close enough!
item_state = "slime"
light_color = "#FFF423"
w_class = ITEMSIZE_TINY
light_range = 6
on = 1 //Bio-luminesence has one setting, on.
power_use = 0
/obj/item/device/flashlight/slime/New()
..()
set_light(light_range, light_power, light_color)
/obj/item/device/flashlight/slime/update_brightness()
return
/obj/item/device/flashlight/slime/attack_self(mob/user)
return //Bio-luminescence does not toggle.

View File

@@ -76,6 +76,10 @@
if(amount > 0) if(amount > 0)
if(rabid) if(rabid)
return return
if(my_slime.untamable)
holder.say("Grrr...")
holder.add_modifier(/datum/modifier/berserk, 30 SECONDS)
enrage()
var/justified = my_slime.is_justified_to_discipline() // This will also consider the AI-side of that proc. var/justified = my_slime.is_justified_to_discipline() // This will also consider the AI-side of that proc.
remove_target() // Stop attacking. remove_target() // Stop attacking.
@@ -95,13 +99,6 @@
discipline = between(0, discipline + amount, 10) discipline = between(0, discipline + amount, 10)
my_slime.update_mood() my_slime.update_mood()
// This slime always enrages if disciplined.
/datum/ai_holder/simple_mob/xenobio_slime/red/adjust_discipline(amount, silent)
if(amount > 0 && !rabid)
holder.say("Grrr...")
holder.add_modifier(/datum/modifier/berserk, 30 SECONDS)
enrage()
/datum/ai_holder/simple_mob/xenobio_slime/handle_special_strategical() /datum/ai_holder/simple_mob/xenobio_slime/handle_special_strategical()
discipline_decay() discipline_decay()
@@ -145,6 +142,16 @@
my_slime.update_mood() my_slime.update_mood()
my_slime.visible_message(span("danger", "\The [my_slime] enrages!")) my_slime.visible_message(span("danger", "\The [my_slime] enrages!"))
// Called to relax from being rabid (when blue slime core was used).
/datum/ai_holder/simple_mob/xenobio_slime/proc/relax()
var/mob/living/simple_mob/slime/xenobio/my_slime = holder
if(my_slime.harmless)
return
if(rabid)
rabid = FALSE
my_slime.update_mood()
my_slime.visible_message(span("danger", "\The [my_slime] calms down."))
// Called when using a pacification agent (or it's Kendrick being initalized). // Called when using a pacification agent (or it's Kendrick being initalized).
/datum/ai_holder/simple_mob/xenobio_slime/proc/pacify() /datum/ai_holder/simple_mob/xenobio_slime/proc/pacify()
remove_target() // So it stops trying to kill them. remove_target() // So it stops trying to kill them.

View File

@@ -491,6 +491,7 @@
slime_color = "red" slime_color = "red"
coretype = /obj/item/slime_extract/red coretype = /obj/item/slime_extract/red
movement_cooldown = 0 // See above. movement_cooldown = 0 // See above.
untamable = TRUE // Will enrage if disciplined.
description_info = "This slime is faster than the others. Attempting to discipline this slime will always cause it to go rabid and berserk." description_info = "This slime is faster than the others. Attempting to discipline this slime will always cause it to go rabid and berserk."
@@ -501,7 +502,7 @@
/mob/living/simple_mob/slime/xenobio/orange /mob/living/simple_mob/slime/xenobio/orange
) )
ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/red // Will enrage if disciplined. ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime
/mob/living/simple_mob/slime/xenobio/green /mob/living/simple_mob/slime/xenobio/green

View File

@@ -11,6 +11,9 @@
var/mob/living/victim = null // the person the slime is currently feeding on var/mob/living/victim = null // the person the slime is currently feeding on
var/rainbow_core_candidate = TRUE // If false, rainbow cores cannot make this type randomly. var/rainbow_core_candidate = TRUE // If false, rainbow cores cannot make this type randomly.
var/mutation_chance = 30 // CHOMPedit Odds of spawning as a new color when reproducing. Can be modified by certain xenobio products. Carried across generations of slimes. var/mutation_chance = 30 // CHOMPedit Odds of spawning as a new color when reproducing. Can be modified by certain xenobio products. Carried across generations of slimes.
var/split_amount = 4 // Amount of children we will normally have. Half of that for dead adult slimes. Is NOT carried across generations.
var/untamable = FALSE //Makes slime untamable via discipline.
var/untamable_inheirit = FALSE //Makes slime inheirit its untamability.
var/list/slime_mutation = list( var/list/slime_mutation = list(
/mob/living/simple_mob/slime/xenobio/orange, /mob/living/simple_mob/slime/xenobio/orange,
/mob/living/simple_mob/slime/xenobio/metal, /mob/living/simple_mob/slime/xenobio/metal,
@@ -54,7 +57,6 @@
AI.resentment = max(previous_AI.resentment - 1, 0) AI.resentment = max(previous_AI.resentment - 1, 0)
AI.rabid = previous_AI.rabid AI.rabid = previous_AI.rabid
/mob/living/simple_mob/slime/xenobio/update_icon() /mob/living/simple_mob/slime/xenobio/update_icon()
icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"][victim ? " eating" : ""]" icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"][victim ? " eating" : ""]"
icon_dead = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"] dead" icon_dead = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"] dead"
@@ -107,6 +109,21 @@
update_icon() update_icon()
update_name() update_name()
/mob/living/simple_mob/slime/xenobio/proc/make_baby()
if(!is_adult)
return
is_adult = FALSE
melee_damage_lower = round(melee_damage_lower / 2) // 20
melee_damage_upper = round(melee_damage_upper / 2) // 30
maxHealth = initial(maxHealth)
health = clamp(health, 0, maxHealth)
max_nutrition = initial(max_nutrition)
nutrition = 400
amount_grown = 0
update_icon()
update_name()
/mob/living/simple_mob/slime/xenobio/proc/update_name() /mob/living/simple_mob/slime/xenobio/proc/update_name()
if(harmless) // Docile slimes are generally named, so we shouldn't mess with it. if(harmless) // Docile slimes are generally named, so we shouldn't mess with it.
return return
@@ -142,6 +159,13 @@
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
AI.enrage() AI.enrage()
/mob/living/simple_mob/slime/xenobio/proc/relax()
if(harmless)
return
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
AI.relax()
/mob/living/simple_mob/slime/xenobio/proc/pacify() /mob/living/simple_mob/slime/xenobio/proc/pacify()
harmless = TRUE harmless = TRUE
if(has_AI()) if(has_AI())
@@ -208,12 +232,12 @@
if(free) if(free)
free_tiles++ free_tiles++
if(free_tiles < 3) // Three free tiles are needed, as four slimes are made and the 4th tile is from the center tile that the current slime occupies. if(free_tiles < split_amount-1) // Three free tiles are needed, as four slimes are made and the 4th tile is from the center tile that the current slime occupies.
to_chat(src, span("warning", "It is too cramped here to reproduce...")) to_chat(src, span("warning", "It is too cramped here to reproduce..."))
return return
var/list/babies = list() var/list/babies = list()
for(var/i = 1 to 4) for(var/i = 1 to split_amount)
babies.Add(make_new_slime()) babies.Add(make_new_slime())
var/mob/living/simple_mob/slime/new_slime = pick(babies) var/mob/living/simple_mob/slime/new_slime = pick(babies)
@@ -245,6 +269,9 @@
if(!istype(baby, /mob/living/simple_mob/slime/xenobio/rainbow)) if(!istype(baby, /mob/living/simple_mob/slime/xenobio/rainbow))
baby.unity = unity baby.unity = unity
if(untamable_inheirit)
baby.untamable = untamable
baby.untamable_inheirit = untamable_inheirit
baby.faction = faction baby.faction = faction
baby.friends = friends.Copy() baby.friends = friends.Copy()

View File

@@ -204,242 +204,17 @@
required_reagents = list("plantcolony" = 5, "virusfood" = 5) required_reagents = list("plantcolony" = 5, "virusfood" = 5)
result_amount = 60 result_amount = 60
///////////////////////////////////////////////////////////////////////////////////
/// Upstream Adjustments
/decl/chemical_reaction/instant/biomass
result_amount = 6 // Roughly 120u per phoron sheet
/////////////////////////////// ///////////////////////////////
//SLIME CORES BELOW HERE/////// //SLIME-RELATED BELOW HERE///////
/////////////////////////////// ///////////////////////////////
/decl/chemical_reaction/instant/slime_food
name = "Slime Bork"
id = "m_tele2"
result = null
required_reagents = list("phoron" = 10, "slimejelly" = 5, "nutriment" = 20)
result_amount = 1
/decl/chemical_reaction/instant/slime_food/on_reaction(var/datum/reagents/holder)
var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/snacks)
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 100, 1)
for(var/i = 1, i <= 4 + rand(1,2), i++)
var/chosen = pick(borks)
var/obj/B = new chosen
if(B)
B.loc = get_turf(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(B, pick(NORTH,SOUTH,EAST,WEST))
/decl/chemical_reaction/instant/materials
name = "Slime materials"
id = "slimematerial"
result = null
required_reagents = list("phoron" = 20, "slimejelly" = 40, "aluminum" = 20) //Woah there! You have the possibility of making diamonds! 8 ground up slimes required for one of these, and you still have a 10% chance for it to fail.
result_amount = 1
/decl/chemical_reaction/instant/materials/on_reaction(var/datum/reagents/holder)
var/fail_chance = rand(1,1000)
if(fail_chance == 1) // 0.1% chance of exploding, so scientists don't exclusively abuse this to obtain materials.
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The solution begins to vibrate violently!</span>"), 1) // It was at this moment, the Xenobiologist knew... he fucked up.
sleep(30)
playsound(holder.my_atom, 'sound/items/Welder2.ogg', 100, 1)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The reaction begins to rapidly sizzle and swell outwards!</span>"), 1)
sleep(20)
explosion(get_turf(holder.my_atom), 0 ,4, 8) //Enough to cause severe damage in the area, but not so much that it'll instantly gib the person.
empulse(get_turf(holder.my_atom), 3, 7) //Uh oh, it produced some uranium, too! EMP blast!
return
if(fail_chance < 101) // 10% chance of it not working at all.
playsound(holder.my_atom, 'sound/items/Welder.ogg', 100, 1)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The slime core fizzles disappointingly.</span>"), 1)
return
var/blocked = list(
/obj/item/stack/material, //Technical stacks
/obj/item/stack/hairlesshide, //Useless leather production steps
/obj/item/stack/wetleather,
/obj/item/stack/material/algae/ten) //Why is this one even a separate thing
blocked += typesof(/obj/item/stack/material/cyborg) //Borg matter synths, should only exist in borgs
blocked += typesof(/obj/item/stack/animalhide) //Hides which are only used for leather production anyway
var/rare_types = list(
/obj/item/stack/material/morphium, //Complex materials requiring Particle Smasher to create
/obj/item/stack/material/morphium/hull,
/obj/item/stack/material/valhollide,
/obj/item/stack/material/supermatter)
var/list/material = typesof(/obj/item/stack/material) - blocked
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 100, 1)
var/spawn_amount = rand(1,50)
var/chosen = pick(material)
if(chosen in rare_types)
spawn_amount = rand(1,15)
new chosen(get_turf(holder.my_atom), spawn_amount)
/decl/chemical_reaction/instant/slimelight
name = "Slime Glow"
id = "m_glow"
result = null
required_reagents = list("phoron" = 5, "slimejelly" = 5, "water" = 10) //Takes 10 water so it doesn't mess with the frost oil.
result_amount = 1
/decl/chemical_reaction/instant/slimelight/on_reaction(var/datum/reagents/holder)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'> The contents of the slime core harden and begin to emit a warm, bright light.</span>"), 1)
var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime
F.loc = get_turf(holder.my_atom)
/decl/chemical_reaction/instant/slimephoron
name = "Slime Phoron"
id = "m_plasma"
result = null
required_reagents = list("phoron" = 20, "uranium" = 20, "slimejelly" = 20)
result_amount = 1
/decl/chemical_reaction/instant/slimephoron/on_reaction(var/datum/reagents/holder)
new /obj/item/stack/material/phoron(get_turf(holder.my_atom), 10)
/decl/chemical_reaction/instant/slimefreeze
name = "Slime Freeze"
id = "m_freeze"
result = null
required_reagents = list("phoron" = 10, "coolant" = 10, "slimejelly" = 10)
result_amount = 1
/decl/chemical_reaction/instant/slimefreeze/on_reaction(var/datum/reagents/holder)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The slime extract begins to vibrate violently!</span>"), 1)
sleep(50)
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/M in range (get_turf(holder.my_atom), 7))
M.bodytemperature -= 140
to_chat(M, "<span class='notice'> You suddenly feel a chill!</span>")
/decl/chemical_reaction/instant/slimefrost
name = "Slime Frost Oil"
id = "m_frostoil"
result = "frostoil"
required_reagents = list("phoron" = 5, "slimejelly" = 5, "water" = 5, "coolant" = 5)
result_amount = 10
/decl/chemical_reaction/instant/slimefire
name = "Slime fire"
id = "m_fire"
result = null
required_reagents = list("phoron" = 60, "slimejelly" = 30, "potassium" = 30)
result_amount = 1
/decl/chemical_reaction/instant/slimefire/on_reaction(var/datum/reagents/holder)
for(var/mob/O in viewers(get_turf(holder.my_atom), null))
O.show_message(text("<span class='warning'>The slime extract begins to vibrate violently!</span>"), 1)
sleep(50)
var/turf/location = get_turf(holder.my_atom.loc)
for(var/turf/simulated/floor/target_tile in range(0,location))
target_tile.assume_gas("phoron", 25, 1400)
spawn (0) target_tile.hotspot_expose(700, 400)
/decl/chemical_reaction/instant/slimeify /decl/chemical_reaction/instant/slimeify
name = "Advanced Mutation Toxin" name = "Advanced Mutation Toxin"
id = "advmutationtoxin2" id = "advmutationtoxin2"
result = "advmutationtoxin" result = "advmutationtoxin"
required_reagents = list("phoron" = 15, "slimejelly" = 15, "mutationtoxin" = 15) //In case a xenobiologist wants to become a fully fledged slime person. required_reagents = list("phoron" = 15, "slimejelly" = 15, "mutationtoxin" = 15) //In case a xenobiologist wants to become a fully fledged slime person.
result_amount = 1 result_amount = 1
/decl/chemical_reaction/instant/slimeheal //A slime healing mixture. Why not.
name = "Slime Health"
id = "slimeheal"
result = "null"
required_reagents = list("phoron" = 10, "bicaridine" = 10, "kelotane" = 10, "inaprovaline" = 10, "slimejelly" = 10)
/decl/chemical_reaction/instant/slimeheal/on_reaction(var/datum/reagents/holder, var/created_volume)
for (var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null))
to_chat(C, "<span class='notice'>A wave of energy suddenly invigorates you.</span>")
C.adjustBruteLoss(-25)
C.adjustFireLoss(-25)
C.adjustToxLoss(-25)
C.adjustOxyLoss(-25)
C.adjustBrainLoss(-25)
C.adjustCloneLoss(-25)
C.updatehealth()
/decl/chemical_reaction/instant/slimejelly
name = "Slime Jam"
id = "m_jam"
result = "slimejelly"
required_reagents = list("phoron" = 20, "sugar" = 50, "lithium" = 50) //In case a xenobiologist is impatient and is willing to drain their dispenser resources, along with plasma!
result_amount = 5
/decl/chemical_reaction/instant/slimevore
name = "Slime Vore" // Hostile vore mobs only
id = "m_tele"
result = null
required_reagents = list("phoron" = 20, "nutriment" = 20, "sugar" = 20, "mutationtoxin" = 20) //Can't do slime jelly as it'll conflict with another, but mutation toxin will do.
result_amount = 1
/decl/chemical_reaction/instant/slimevore/on_reaction(var/datum/reagents/holder)
var/mob_path = /mob/living/simple_mob
var/blocked = list( //List of things we do NOT want to spawn
/mob/living/simple_mob, //Technical parent mobs
/mob/living/simple_mob/animal,
/mob/living/simple_mob/animal/passive,
/mob/living/simple_mob/animal/space,
/mob/living/simple_mob/blob,
/mob/living/simple_mob/mechanical,
/mob/living/simple_mob/mechanical/mecha,
/mob/living/simple_mob/slime,
/mob/living/simple_mob/vore,
/mob/living/simple_mob/vore/aggressive,
/mob/living/simple_mob/illusion, //Other technical mobs
/mob/living/simple_mob/animal/passive/crab/Coffee, //Unique pets/named mobs
/mob/living/simple_mob/animal/passive/cat/runtime,
/mob/living/simple_mob/animal/passive/cat/bones,
/mob/living/simple_mob/animal/passive/cat/tabiranth,
/mob/living/simple_mob/animal/passive/dog/corgi/puppy/Bockscar,
/mob/living/simple_mob/animal/passive/dog/corgi/Ian,
/mob/living/simple_mob/animal/passive/dog/corgi/Lisa,
/mob/living/simple_mob/animal/passive/dog/tamaskan/Spice,
/mob/living/simple_mob/animal/passive/fox/renault,
/mob/living/simple_mob/animal/passive/bird/azure_tit/tweeter,
/mob/living/simple_mob/animal/passive/bird/parrot/poly,
/mob/living/simple_mob/animal/sif/fluffy,
/mob/living/simple_mob/animal/sif/fluffy/silky,
/mob/living/simple_mob/animal/passive/snake/python/noodle,
/mob/living/simple_mob/slime/xenobio/rainbow/kendrick,
/mob/living/simple_mob/animal/space/space_worm, //Space Worm parts that aren't proper heads
/mob/living/simple_mob/animal/space/space_worm/head/severed,
/mob/living/simple_mob/animal/borer, //Event/player-control-only mobs
/mob/living/simple_mob/vore/hostile/morph
)//exclusion list for things you don't want the reaction to create.
blocked += typesof(/mob/living/simple_mob/mechanical/ward) //Wards that should be created with ward items, are mobs mostly on technicalities
blocked += typesof(/mob/living/simple_mob/construct) //Should only exist
blocked += typesof(/mob/living/simple_mob/vore/demon) //as player-controlled
blocked += typesof(/mob/living/simple_mob/shadekin) //and/or event things
blocked += typesof(/mob/living/simple_mob/horror)
var/list/voremobs = typesof(mob_path) - blocked // list of possible hostile mobs
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 100, 1)
var/spawn_count = rand(1,3)
for(var/i = 1, i <= spawn_count, i++)
var/chosen = pick(voremobs)
var/mob/living/simple_mob/C = new chosen
C.faction = "slimesummon"
C.loc = get_turf(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(C, pick(NORTH,SOUTH,EAST,WEST))
/decl/chemical_reaction/instant/slime/sapphire_mutation
name = "Slime Mutation Toxins"
id = "slime_mutation_tox"
result = "mutationtoxin"
required_reagents = list("blood" = 5)
result_amount = 30
required = /obj/item/slime_extract/sapphire
/decl/chemical_reaction/instant/biomass
result_amount = 6 // Roughly 120u per phoron sheet

View File

@@ -1,3 +1,5 @@
//VOREStation Note - we use different xenobio balance in extracts_vr, keep this unticked.
// Base // Base
/obj/item/slime_extract /obj/item/slime_extract
name = "slime extract" name = "slime extract"

File diff suppressed because it is too large Load Diff

View File

@@ -67,7 +67,6 @@
qdel(src) qdel(src)
// More or less functionally identical to the telecrystal tele. // More or less functionally identical to the telecrystal tele.
/obj/item/slime_crystal /obj/item/slime_crystal
name = "lesser slime cystal" name = "lesser slime cystal"
@@ -101,6 +100,7 @@
safe_blink(AM, 14) safe_blink(AM, 14)
qdel(src) qdel(src)
/obj/item/weapon/disposable_teleporter/slime /obj/item/weapon/disposable_teleporter/slime
name = "greater slime crystal" name = "greater slime crystal"
desc = "A larger, gooier crystal." desc = "A larger, gooier crystal."
@@ -112,7 +112,6 @@
origin_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 4) origin_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 4)
// Very filling food. // Very filling food.
/obj/item/weapon/reagent_containers/food/snacks/slime /obj/item/weapon/reagent_containers/food/snacks/slime
name = "slimy clump" name = "slimy clump"
@@ -126,3 +125,94 @@
/obj/item/weapon/reagent_containers/food/snacks/slime/Initialize() /obj/item/weapon/reagent_containers/food/snacks/slime/Initialize()
. = ..() . = ..()
bitesize = 5 bitesize = 5
//Flashlight
/obj/item/device/flashlight/slime
gender = PLURAL
name = "glowing slime extract"
desc = "A slimy ball that appears to be glowing from bioluminesence."
icon = 'icons/obj/lighting.dmi'
icon_state = "floor1" //not a slime extract sprite but... something close enough!
item_state = "slime"
light_color = "#FFF423"
w_class = ITEMSIZE_TINY
light_range = 6
on = 1 //Bio-luminesence has one setting, on.
power_use = 0
/obj/item/device/flashlight/slime/New()
..()
set_light(light_range, light_power, light_color)
/obj/item/device/flashlight/slime/update_brightness()
return
/obj/item/device/flashlight/slime/attack_self(mob/user)
return //Bio-luminescence does not toggle.
//Radiation Emitter
/obj/item/slime_irradiator
name = "glowing slime extract"
desc = "A slimy ball that appears to be glowing from bioluminesence."
icon = 'icons/mob/slimes_vr.dmi'
icon_state = "irradiator"
light_color = "#00FF00"
light_power = 0.4
light_range = 2
w_class = ITEMSIZE_TINY
/obj/item/slime_irradiator/New()
START_PROCESSING(SSobj, src)
set_light(light_range, light_power, light_color)
return ..()
/obj/item/slime_irradiator/process()
SSradiation.radiate(src, 5)
/obj/item/slime_irradiator/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
//BS Pouch
/obj/item/weapon/storage/backpack/holding/slime
name = "bluespace slime pouch"
desc = "A slimy pouch that opens into a localized pocket of bluespace."
icon_state = "slimepouch"
//Slime Chems
/datum/reagent/myelamine/slime
name = "Agent A"
id = "slime_bleed_fixer"
description = "A slimy liquid which appears to rapidly clot internal hemorrhages by increasing the effectiveness of platelets at low quantities. Toxic in high quantities."
taste_description = "slime"
overdose = 5
/datum/reagent/osteodaxon/slime
name = "Agent B"
id = "slime_bone_fixer"
description = "A slimy liquid which can be used to heal bone fractures at low quantities. Toxic in high quantities."
taste_description = "slime"
overdose = 5
/datum/reagent/peridaxon/slime
name = "Agent C"
id = "slime_organ_fixer"
description = "A slimy liquid which is used to encourage recovery of internal organs and nervous systems in low quantities. Toxic in high quantities."
taste_description = "slime"
overdose = 5
/datum/reagent/nutriment/glucose/slime
name = "Slime Goop"
id = "slime_goop"
description = "A slimy liquid, with very compelling smell. Extremely nutritious."
color = "#FABA3A"
nutriment_factor = 30
taste_description = "slimy nectar"

View File

@@ -11,7 +11,7 @@
/obj/item/slimepotion/enhancer /obj/item/slimepotion/enhancer
name = "extract enhancer agent" name = "extract enhancer agent"
desc = "A potent chemical mix that will give a slime extract an additional two uses." desc = "A potent chemical mix that will give a slime extract an additional two uses."
icon_state = "potpurple" icon_state = "potcyan"
description_info = "This will even work on inert slime extracts, if it wasn't enhanced before. Extracts enhanced cannot be enhanced again." description_info = "This will even work on inert slime extracts, if it wasn't enhanced before. Extracts enhanced cannot be enhanced again."
// Makes slimes less likely to mutate. // Makes slimes less likely to mutate.
@@ -64,7 +64,7 @@
// Makes the slime friendly forever. // Makes the slime friendly forever.
/obj/item/slimepotion/docility /obj/item/slimepotion/docility
name = "docility agent" name = "slime docility agent"
desc = "A potent chemical mix that nullifies a slime's hunger, causing it to become docile and tame. It might also work on other creatures?" desc = "A potent chemical mix that nullifies a slime's hunger, causing it to become docile and tame. It might also work on other creatures?"
icon_state = "potlightpink" icon_state = "potlightpink"
description_info = "The target needs to be alive, not already passive, and be an animal or slime type entity." description_info = "The target needs to be alive, not already passive, and be an animal or slime type entity."
@@ -178,7 +178,7 @@
desc = "A potent chemical mix that makes an animal deeply loyal to the species of whoever applies this, and will attack threats to them." desc = "A potent chemical mix that makes an animal deeply loyal to the species of whoever applies this, and will attack threats to them."
description_info = "The slime or other animal needs to be alive for this to work. The slime this is applied to will have their 'faction' change to \ description_info = "The slime or other animal needs to be alive for this to work. The slime this is applied to will have their 'faction' change to \
the user's faction, which means the slime will attack things that are hostile to the user's faction, such as carp, spiders, and other slimes." the user's faction, which means the slime will attack things that are hostile to the user's faction, such as carp, spiders, and other slimes."
icon_state = "potred" icon_state = "potlightpink"
/obj/item/slimepotion/loyalty/attack(mob/living/simple_mob/M, mob/user) /obj/item/slimepotion/loyalty/attack(mob/living/simple_mob/M, mob/user)
if(!istype(M)) if(!istype(M))
@@ -247,7 +247,7 @@
name = "slime feeding agent" name = "slime feeding agent"
desc = "A potent chemical mix that will instantly sediate the slime." desc = "A potent chemical mix that will instantly sediate the slime."
description_info = "The slime needs to be alive for this to work. It will instantly grow the slime enough to reproduce." description_info = "The slime needs to be alive for this to work. It will instantly grow the slime enough to reproduce."
icon_state = "potyellow" icon_state = "potorange"
/obj/item/slimepotion/feeding/attack(mob/living/simple_mob/slime/xenobio/M, mob/user) /obj/item/slimepotion/feeding/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
if(!istype(M)) if(!istype(M))

View File

@@ -0,0 +1,189 @@
/obj/item/slimepotion/attackby(obj/item/O, mob/user)
if(istype(O, /obj/item/slimepotion/mimic))
to_chat(user, "<span class='notice'>You apply the mimic to the slime potion as it copies it's effects.</span>")
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
var/newtype = src.type
new newtype(get_turf(src))
qdel(O)
..()
/obj/item/slimepotion/infertility
name = "slime infertility agent"
desc = "A potent chemical mix that will reduce the amount of offspring this slime will have."
icon_state = "potpurple"
description_info = "The slime needs to be alive for this to work. It will reduce the amount of slime babies by 2 (to minimum of 2)."
/obj/item/slimepotion/infertility/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
if(!istype(M))
to_chat(user, "<span class='warning'>The agent only works on slimes!</span>")
return ..()
if(M.stat == DEAD)
to_chat(user, "<span class='warning'>The slime is dead!</span>")
return ..()
if(M.split_amount <= 2)
to_chat(user, "<span class='warning'>The slime cannot get any less fertile!</span>")
return ..()
to_chat(user, "<span class='notice'>You feed the slime the infertility agent. It will now have less offspring.</span>")
M.split_amount = between(2, M.split_amount - 2, 6)
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
qdel(src)
/obj/item/slimepotion/fertility
name = "slime fertility agent"
desc = "A potent chemical mix that will increase the amount of offspring this slime will have."
icon_state = "potpurple"
description_info = "The slime needs to be alive for this to work. It will increase the amount of slime babies by 2 (to maximum of 6)."
/obj/item/slimepotion/fertility/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
if(!istype(M))
to_chat(user, "<span class='warning'>The agent only works on slimes!</span>")
return ..()
if(M.stat == DEAD)
to_chat(user, "<span class='warning'>The slime is dead!</span>")
return ..()
if(M.split_amount >= 6)
to_chat(user, "<span class='warning'>The slime cannot get any more fertile!</span>")
return ..()
to_chat(user, "<span class='notice'>You feed the slime the infertility agent. It will now have less offspring.</span>")
M.split_amount = between(2, M.split_amount + 2, 6)
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
qdel(src)
/obj/item/slimepotion/shrink
name = "slime shrinking agent"
desc = "A potent chemical mix that will turn adult slime into a baby one."
icon_state = "potpurple"
description_info = "The slime needs to be alive for this to work."
/obj/item/slimepotion/shrink/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
if(!istype(M))
to_chat(user, "<span class='warning'>The agent only works on slimes!</span>")
return ..()
if(M.stat == DEAD)
to_chat(user, "<span class='warning'>The slime is dead!</span>")
return ..()
if(!(M.is_adult))
to_chat(user, "<span class='warning'>The slime is already a baby!</span>")
return ..()
to_chat(user, "<span class='notice'>You feed the slime the shrinking agent. It is now back to being a baby.</span>")
M.make_baby()
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
qdel(src)
/obj/item/slimepotion/death
name = "slime death agent"
desc = "A potent chemical mix that will instantly kill a slime."
icon_state = "potblue"
description_info = "The slime needs to be alive for this to work."
/obj/item/slimepotion/death/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
if(!istype(M))
to_chat(user, "<span class='warning'>The agent only works on slimes!</span>")
return ..()
if(M.stat == DEAD)
to_chat(user, "<span class='warning'>The slime is already dead!</span>")
return ..()
to_chat(user, "<span class='notice'>You feed the slime the death agent. Its face flashes pain of betrayal before it goes still.</span>")
M.adjustToxLoss(500)
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
qdel(src)
/obj/item/slimepotion/ferality
name = "slime ferality agent"
desc = "A potent chemical mix that will make a slime untamable."
icon_state = "potred"
description_info = "The slime needs to be alive for this to work."
/obj/item/slimepotion/ferality/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
if(!istype(M))
to_chat(user, "<span class='warning'>The agent only works on slimes!</span>")
return ..()
if(M.stat == DEAD)
to_chat(user, "<span class='warning'>The slime is already dead!</span>")
return ..()
if(M.untamable && M.untamable_inheirit)
to_chat(user, "<span class='warning'>The slime is already untamable!</span>")
return ..()
to_chat(user, "<span class='notice'>You feed the slime the death agent. It will now only get angrier at taming attempts.</span>")
M.untamable = TRUE
M.untamable_inheirit = TRUE
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
qdel(src)
/obj/item/slimepotion/reinvigoration
name = "extract reinvigoration agent"
desc = "A potent chemical mix that will create a slime of appropriate type out of an extract."
icon_state = "potcyan"
description_info = "This will even work on inert extracts. Extract is destroyed in process."
/obj/item/slimepotion/mimic
name = "mimic agent"
desc = "A potent chemical mix that will mimic effects of other slime-produced agents."
icon_state = "potsilver"
description_info = "Warning: avoid combining multiple doses of mimic agent."
/obj/item/slimepotion/mimic/attackby(obj/item/O, mob/user)
if(istype(O, /obj/item/slimepotion/mimic))
to_chat(user, "<span class='warning'>You apply the mimic to the mimic, resulting a mimic that copies a mimic that copies a mimic that copies a mimic that-</span>")
var/location = get_turf(src)
playsound(location, 'sound/weapons/gauss_shoot.ogg', 50, 1)
var/datum/effect/effect/system/grav_pull/s = new /datum/effect/effect/system/grav_pull
s.set_up(3, 3, location)
s.start()
qdel(O)
qdel(src)
return
..()
/obj/item/slimepotion/sapience
name = "slime sapience agent"
desc = "A potent chemical mix that makes an animal capable of developing more advanced, sapient thought."
description_info = "The slime or other animal needs to be alive for this to work. The development is not always immedeate and may take indeterminate time before effects show."
icon_state = "potblue"
/obj/item/slimepotion/sapience/attack(mob/living/simple_mob/M, mob/user)
if(!istype(M))
to_chat(user, "<span class='warning'>The agent only works on creatures!</span>")
return ..()
if(M.stat == DEAD)
to_chat(user, "<span class='warning'>The creature is dead!</span>")
return ..()
if(M.ghostjoin)
to_chat(user, "<span class='warning'>The creature is already developing sapience.</span>")
return ..()
if(M.ckey)
to_chat(user, "<span class='warning'>The creature is already sapient!</span>")
return ..()
to_chat(user, "<span class='notice'>You feed \the [M] the agent. It may now eventually develop proper sapience.</span>")
M.ghostjoin = 1
active_ghost_pods |= M
M.ghostjoin_icon()
log_and_message_admins("[key_name_admin(user)] used a sapience potion on a simple mob: [M]. [ADMIN_FLW(src)]")
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
qdel(src)
/obj/item/slimepotion/obedience
name = "slime obedience agent"
desc = "A potent chemical mix that makes slime extremely obedient."
icon_state = "potlightpink"
description_info = "The target needs to be alive and currently misbehaving. Effect is equivalent to very strong discipline."
/obj/item/slimepotion/obedience/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
if(!istype(M))
to_chat(user, "<span class='warning'>The agent only works on slimes!</span>")
return ..()
if(M.stat == DEAD)
to_chat(user, "<span class='warning'>The slime is dead!</span>")
return ..()
to_chat(user, "<span class='notice'>You feed the slime the agent. It has been disciplined, for better or worse...</span>")
M.adjust_discipline(10)
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
qdel(src)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 124 KiB

BIN
icons/mob/slimes_vr.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

View File

@@ -4376,9 +4376,10 @@
#include "code\modules\xenoarcheaology\tools\tools_pickaxe.dm" #include "code\modules\xenoarcheaology\tools\tools_pickaxe.dm"
#include "code\modules\xenoarcheaology\tools\tools_pickaxe_vr.dm" #include "code\modules\xenoarcheaology\tools\tools_pickaxe_vr.dm"
#include "code\modules\xenoarcheaology\tools\tools_vr.dm" #include "code\modules\xenoarcheaology\tools\tools_vr.dm"
#include "code\modules\xenobio\items\extracts.dm" #include "code\modules\xenobio\items\extracts_vr.dm"
#include "code\modules\xenobio\items\slime_objects.dm" #include "code\modules\xenobio\items\slime_objects.dm"
#include "code\modules\xenobio\items\slimepotions.dm" #include "code\modules\xenobio\items\slimepotions.dm"
#include "code\modules\xenobio\items\slimepotions_vr.dm"
#include "code\modules\xenobio\items\weapons.dm" #include "code\modules\xenobio\items\weapons.dm"
#include "code\modules\xenobio\machinery\processor.dm" #include "code\modules\xenobio\machinery\processor.dm"
#include "code\modules\xgm\xgm_gas_data.dm" #include "code\modules\xgm\xgm_gas_data.dm"