Makes Xenobio Great Again

This commit is contained in:
Casey
2022-03-27 14:58:25 -04:00
committed by CHOMPStation2
parent 4bab64bc68
commit 9609511e87
15 changed files with 2263 additions and 47 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

@@ -10,7 +10,14 @@
var/power_charge = 0 // Disarm attacks can shock someone if high/lucky enough. var/power_charge = 0 // Disarm attacks can shock someone if high/lucky enough.
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.
<<<<<<< HEAD
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/mutation_chance = 25 // 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.
>>>>>>> ed28fbac1a... Merge pull request #12552 from Heroman3003/xenobio-rework
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 +61,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 +113,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 +163,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 +236,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 +273,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,9 +204,15 @@
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///////
/////////////////////////////// ///////////////////////////////
<<<<<<< HEAD
/decl/chemical_reaction/instant/slime_food /decl/chemical_reaction/instant/slime_food
name = "Slime Bork" name = "Slime Bork"
id = "m_tele2" id = "m_tele2"
@@ -343,11 +349,14 @@
target_tile.assume_gas("phoron", 25, 1400) target_tile.assume_gas("phoron", 25, 1400)
spawn (0) target_tile.hotspot_expose(700, 400) spawn (0) target_tile.hotspot_expose(700, 400)
=======
>>>>>>> ed28fbac1a... Merge pull request #12552 from Heroman3003/xenobio-rework
/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.
<<<<<<< HEAD
result_amount = 1 result_amount = 1
/decl/chemical_reaction/instant/slimeheal //A slime healing mixture. Why not. /decl/chemical_reaction/instant/slimeheal //A slime healing mixture. Why not.
@@ -443,3 +452,6 @@
/decl/chemical_reaction/instant/biomass /decl/chemical_reaction/instant/biomass
result_amount = 6 // Roughly 120u per phoron sheet result_amount = 6 // Roughly 120u per phoron sheet
=======
result_amount = 1
>>>>>>> ed28fbac1a... Merge pull request #12552 from Heroman3003/xenobio-rework

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

@@ -4378,9 +4378,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"