Merge branch 'release' of https://github.com/VOREStation/VOREStation into izac
@@ -566,3 +566,252 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN,
|
||||
|
||||
var/global/list/weavable_structures = 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)
|
||||
@@ -486,30 +486,3 @@
|
||||
light_range = 8
|
||||
light_power = 0.1
|
||||
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.
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/weapon/material/butterfly
|
||||
name = "butterfly knife"
|
||||
desc = "A basic metal blade concealed in a lightweight plasteel grip. Small enough when folded to fit in a pocket."
|
||||
description_fluff = "This could be used to engrave messages on suitable surfaces if you really put your mind to it! Alt-click a floor or wall to engrave with it." //This way it's not a completely hidden, arcane art to engrave.
|
||||
icon_state = "butterflyknife"
|
||||
item_state = null
|
||||
hitsound = null
|
||||
@@ -63,6 +64,7 @@
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "knife"
|
||||
desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come."
|
||||
description_fluff = "This could be used to engrave messages on suitable surfaces if you really put your mind to it! Alt-click a floor or wall to engrave with it." //This way it's not a completely hidden, arcane art to engrave.
|
||||
sharp = TRUE
|
||||
edge = TRUE
|
||||
force_divisor = 0.15 // 9 when wielded with hardness 60 (steel)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
/obj/item/weapon/tool/screwdriver
|
||||
name = "screwdriver"
|
||||
desc = "You can be totally screwwy with this."
|
||||
description_fluff = "This could be used to engrave messages on suitable surfaces if you really put your mind to it! Alt-click a floor or wall to engrave with it." //This way it's not a completely hidden, arcane art to engrave.
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "screwdriver"
|
||||
center_of_mass = list("x" = 13,"y" = 7)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
/obj/item/weapon/tool/wirecutters
|
||||
name = "wirecutters"
|
||||
desc = "This cuts wires."
|
||||
description_fluff = "This could be used to engrave messages on suitable surfaces if you really put your mind to it! Alt-click a floor or wall to engrave with it." //This way it's not a completely hidden, arcane art to engrave.
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "cutters"
|
||||
item_state = "cutters"
|
||||
|
||||
@@ -8,13 +8,15 @@
|
||||
if(L.a_intent != I_HELP)
|
||||
attack_tile(C, L) // Be on help intent if you want to decon something.
|
||||
return
|
||||
|
||||
/*
|
||||
//By god, no I do NOT want to engrave when trying to cut wires, can't get this working with non-help intent either else you just swipe the tools over the floors.
|
||||
if(!(C.has_tool_quality(TOOL_SCREWDRIVER) && flooring && (flooring.flags & TURF_REMOVE_SCREWDRIVER)))
|
||||
if(isliving(user))
|
||||
var/mob/living/L = user
|
||||
if(L.a_intent == I_HELP)
|
||||
if(try_graffiti(L, C)) // back by unpopular demand
|
||||
return
|
||||
*/
|
||||
|
||||
// Multi-z roof building
|
||||
if(istype(C, /obj/item/stack/tile/roofing))
|
||||
|
||||
@@ -131,9 +131,12 @@
|
||||
|
||||
user.setClickCooldown(user.get_attack_speed(W))
|
||||
|
||||
/*
|
||||
//As with the floors, only this time it works AND tries pushing the wall after it's done.
|
||||
if(!construction_stage && user.a_intent == I_HELP)
|
||||
if(try_graffiti(user,W))
|
||||
return
|
||||
*/
|
||||
|
||||
if (!user.IsAdvancedToolUser())
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
|
||||
@@ -76,6 +76,10 @@
|
||||
if(amount > 0)
|
||||
if(rabid)
|
||||
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.
|
||||
remove_target() // Stop attacking.
|
||||
|
||||
@@ -95,13 +99,6 @@
|
||||
discipline = between(0, discipline + amount, 10)
|
||||
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()
|
||||
discipline_decay()
|
||||
|
||||
@@ -145,6 +142,16 @@
|
||||
my_slime.update_mood()
|
||||
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).
|
||||
/datum/ai_holder/simple_mob/xenobio_slime/proc/pacify()
|
||||
remove_target() // So it stops trying to kill them.
|
||||
|
||||
@@ -278,3 +278,113 @@
|
||||
/obj/item/weapon/holder/catslug/Initialize(mapload, mob/held)
|
||||
. = ..()
|
||||
color = held.color
|
||||
|
||||
/datum/category_item/catalogue/fauna/catslug/spaceslug
|
||||
name = "Alien Wildlife - Catslug - Miros"
|
||||
desc = "This catslug serves as the Fuel Depots resident attendant,\
|
||||
despite the facility being fully automated and self-serve. - \
|
||||
The Catslug is an omnivorous terrestrial creature.\
|
||||
Exhibiting properties of both a cat and a slug (hence its name)\
|
||||
it moves somewhat awkwardly. However, the unique qualities of\
|
||||
its body make it exceedingly flexible and smooth, allowing it to\
|
||||
wiggle into and move effectively in even extremely tight spaces.\
|
||||
Additionally, it has surprisingly capable hands, and moves quite\
|
||||
well on two legs or four. Caution is advised when interacting\
|
||||
with these creatures, they are quite intelligent, and proficient\
|
||||
tool users."
|
||||
value = CATALOGUER_REWARD_MEDIUM //Should offer a measure of incentive for people to visit the depot more often.
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/spaceslug
|
||||
name = "Miros"
|
||||
desc = "Looks like catslugs can into space after all! This little chap seems to have gotten their mitts on a tiny spacesuit, there's a nametag on it that reads \"Miros\" alongside the Aether Atmospherics logo."
|
||||
tt_desc = "Mollusca Felis Stellaris"
|
||||
icon_state = "spaceslug"
|
||||
icon_living = "spaceslug"
|
||||
icon_rest = "spaceslug_rest"
|
||||
icon_dead = "spaceslug_dead"
|
||||
digestable = 0
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/spaceslug)
|
||||
holder_type = /obj/item/weapon/holder/catslug/spaceslug
|
||||
makes_dirt = 0
|
||||
say_list_type = /datum/say_list/catslug/spaceslug
|
||||
|
||||
minbodytemp = 0 // Shamelessly stolen temp & atmos tolerances from the space cat.
|
||||
maxbodytemp = 900
|
||||
heat_damage_per_tick = 3
|
||||
cold_damage_per_tick = 2
|
||||
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
|
||||
player_msg = "You are an intelligent creature capable of more than most think, clad in a spacesuit that protects you from the ravages of vacuum and hostile atmospheres alike. You can pick up and use many things, and even carry some of them with you into the vents, which you can use to move around quickly. You're quiet and capable, you speak with your hands and your deeds! <br>- - - - -<br> <span class='notice'>Keep in mind, your goal should generally be to survive. You're expected to follow the same rules as everyone else, so don't go self antagging without permission from the staff team, but you are able and capable of defending yourself from those who would attack you for no reason.</span>"
|
||||
|
||||
has_langs = list("Sign Language")
|
||||
|
||||
/datum/say_list/catslug/spaceslug
|
||||
speak = list("Have any porl?", "What is that?", "What kind of ship is that?", "What are you doing?", "How did you get here?", "Don't take off your helmet.", "SPAAAAAACE!", "WAOW!", "Nice weather we're having, isn't it?")
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/spaceslug/Initialize()
|
||||
. = ..()
|
||||
verbs += /mob/living/proc/ventcrawl
|
||||
verbs += /mob/living/proc/hide
|
||||
verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //I don't even want to imagine what the colour change proc would do to their sprite, not to mention ghosts would need to be forced into the catslug so this is more just a safety net than anything
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/spaceslug/attack_hand(mob/living/carbon/human/M as mob)
|
||||
|
||||
if(stat == DEAD)
|
||||
return ..()
|
||||
if(M.a_intent != I_HELP)
|
||||
return ..()
|
||||
playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
if(resting)
|
||||
M.visible_message("<span class='notice'>\The [M.name] shakes \the [src] awake from their nap.</span>","<span class='notice'>You shake \the [src] awake!</span>")
|
||||
lay_down()
|
||||
ai_holder.go_wake()
|
||||
return
|
||||
if(M.zone_sel.selecting == BP_HEAD)
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] pats \the [src] on their helmet.</span>", \
|
||||
"<span class='notice'>You pat \the [src] on their helmet.</span>", )
|
||||
if(client)
|
||||
return
|
||||
if(prob(10))
|
||||
visible_message("<span class='notice'>\The [src] purrs and leans into [M]'s hand.</span>")
|
||||
else if(M.zone_sel.selecting == BP_R_HAND || M.zone_sel.selecting == BP_L_HAND)
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] shakes \the [src]'s hand.</span>", \
|
||||
"<span class='notice'>You shake \the [src]'s hand.</span>", )
|
||||
if(client)
|
||||
return
|
||||
if(prob(10))
|
||||
visible_message("<span class='notice'>\The [src]'s looks a little confused and bonks their helmet's faceplate against [M]'s hand experimentally, attempting to nibble at it.</span>")
|
||||
else if(M.zone_sel.selecting == "mouth")
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] attempts to boop \the [src]'s nose, defeated only by the helmet they wear.</span>", \
|
||||
"<span class='notice'>You attempt to boop \the [src] on the nose, stopped only by that helmet they wear.</span>", )
|
||||
if(client)
|
||||
return
|
||||
if(prob(10))
|
||||
visible_message("<span class='notice'>\The [src]'s eyes widen as they stare at [M]. After a moment they rub at the faint mark [M]'s digit left upon the surface of their helmet's faceplate.</span>")
|
||||
else if(M.zone_sel.selecting == BP_GROIN)
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] rubs \the [src]'s tummy...</span>", \
|
||||
"<span class='notice'>You rub \the [src]'s tummy, accidently pressing a few of the buttons on their chestpiece in the process... You feel the danger.</span>", )
|
||||
if(client)
|
||||
return
|
||||
visible_message("<span class='notice'>\The [src] pushes [M]'s hand away from their tummy and furrows their brow, frantically pressing at the buttons [M] so carelessly pushed!</span>")
|
||||
if(prob(5))
|
||||
ai_holder.target = M
|
||||
ai_holder.track_target_position()
|
||||
ai_holder.set_stance(STANCE_FIGHT)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/holder/catslug/spaceslug
|
||||
item_state = "spaceslug"
|
||||
|
||||
|
||||
@@ -439,15 +439,16 @@
|
||||
/mob/living/simple_mob/slime/xenobio/amber
|
||||
)
|
||||
|
||||
/* VOREStation Edit. We've had enough server crashes.
|
||||
/mob/living/simple_mob/slime/xenobio/amber/handle_special()
|
||||
if(stat != DEAD)
|
||||
feed_aura()
|
||||
..()
|
||||
|
||||
/mob/living/simple_mob/slime/xenobio/amber/proc/feed_aura()
|
||||
for(var/mob/living/L in view(2, src))
|
||||
if(L == src) // Don't feed themselves, or it is impossible to stop infinite slimes without killing all of the ambers.
|
||||
for(var/mob/living/L in view(1, src))
|
||||
if(L.stat == DEAD || !IIsAlly(L))
|
||||
continue
|
||||
if(L == src || istype(L, /mob/living/simple_mob/slime/xenobio/amber)) // Don't feed themselves, or it is impossible to stop infinite slimes without killing all of the ambers.
|
||||
continue
|
||||
if(istype(L, /mob/living/simple_mob/slime/xenobio))
|
||||
var/mob/living/simple_mob/slime/xenobio/X = L
|
||||
@@ -457,7 +458,6 @@
|
||||
if(H.isSynthetic())
|
||||
continue
|
||||
H.nutrition = between(0, H.nutrition + rand(15, 25), 800)
|
||||
*/
|
||||
|
||||
/mob/living/simple_mob/slime/xenobio/cerulean
|
||||
desc = "This slime is generally superior in a wide range of attributes, compared to the common slime. The jack of all trades, but master of none."
|
||||
@@ -489,6 +489,7 @@
|
||||
slime_color = "red"
|
||||
coretype = /obj/item/slime_extract/red
|
||||
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."
|
||||
|
||||
@@ -499,7 +500,7 @@
|
||||
/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
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
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/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.
|
||||
var/list/slime_mutation = list(
|
||||
/mob/living/simple_mob/slime/xenobio/orange,
|
||||
/mob/living/simple_mob/slime/xenobio/metal,
|
||||
@@ -54,7 +57,6 @@
|
||||
AI.resentment = max(previous_AI.resentment - 1, 0)
|
||||
AI.rabid = previous_AI.rabid
|
||||
|
||||
|
||||
/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_dead = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"] dead"
|
||||
@@ -107,6 +109,21 @@
|
||||
update_icon()
|
||||
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()
|
||||
if(harmless) // Docile slimes are generally named, so we shouldn't mess with it.
|
||||
return
|
||||
@@ -142,6 +159,13 @@
|
||||
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
|
||||
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()
|
||||
harmless = TRUE
|
||||
if(has_AI())
|
||||
@@ -208,12 +232,12 @@
|
||||
if(free)
|
||||
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..."))
|
||||
return
|
||||
|
||||
var/list/babies = list()
|
||||
for(var/i = 1 to 4)
|
||||
for(var/i = 1 to split_amount)
|
||||
babies.Add(make_new_slime())
|
||||
|
||||
var/mob/living/simple_mob/slime/new_slime = pick(babies)
|
||||
@@ -245,6 +269,9 @@
|
||||
|
||||
if(!istype(baby, /mob/living/simple_mob/slime/xenobio/rainbow))
|
||||
baby.unity = unity
|
||||
if(untamable_inheirit)
|
||||
baby.untamable = untamable
|
||||
baby.untamable_inheirit = untamable_inheirit
|
||||
baby.faction = faction
|
||||
baby.friends = friends.Copy()
|
||||
|
||||
|
||||
@@ -204,240 +204,17 @@
|
||||
required_reagents = list("plantcolony" = 5, "virusfood" = 5)
|
||||
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
|
||||
name = "Advanced Mutation Toxin"
|
||||
id = "advmutationtoxin2"
|
||||
result = "advmutationtoxin"
|
||||
required_reagents = list("phoron" = 15, "slimejelly" = 15, "mutationtoxin" = 15) //In case a xenobiologist wants to become a fully fledged slime person.
|
||||
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
|
||||
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
|
||||
result_amount = 1
|
||||
@@ -8,6 +8,7 @@
|
||||
/obj/item/weapon/reagent_containers/syringe
|
||||
name = "syringe"
|
||||
desc = "A syringe."
|
||||
description_fluff = "This could be used to engrave messages on suitable surfaces if you really put your mind to it! Alt-click a floor or wall to engrave with it." //This way it's not a completely hidden, arcane art to engrave.
|
||||
icon = 'icons/obj/syringe.dmi'
|
||||
item_state = "syringe_0"
|
||||
icon_state = "0"
|
||||
|
||||
@@ -76,6 +76,20 @@
|
||||
|
||||
var/client/ghost_client = ghost.client
|
||||
|
||||
if(!is_alien_whitelisted(ghost, GLOB.all_species[ghost_client?.prefs?.species]) && !check_rights(R_ADMIN, 0)) // Prevents a ghost ghosting in on a slot and spawning via a resleever with race they're not whitelisted for, getting around normal join restrictions.
|
||||
to_chat(ghost, "<span class='warning'>You are not whitelisted to spawn as this species!</span>")
|
||||
return
|
||||
|
||||
/* // Comments out NO_SCAN restriction, as per headmin/maintainer request.
|
||||
var/datum/species/chosen_species
|
||||
if(ghost.client.prefs.species) // In case we somehow don't have a species set here.
|
||||
chosen_species = GLOB.all_species[ghost_client.prefs.species]
|
||||
|
||||
if(chosen_species.flags && NO_SCAN) // Sanity. Prevents species like Xenochimera, Proteans, etc from rejoining the round via resleeve, as they should have their own methods of doing so already, as agreed to when you whitelist as them.
|
||||
to_chat(ghost, "<span class='warning'>This species cannot be resleeved!</span>")
|
||||
return
|
||||
*/
|
||||
|
||||
//Name matching is ugly but mind doesn't persist to look at.
|
||||
var/charjob
|
||||
var/datum/data/record/record_found
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
desc = "Another crewmember, small enough to fit in your hand."
|
||||
icon_state = "micro"
|
||||
icon_override = 'icons/inventory/head/mob_vr.dmi'
|
||||
slot_flags = SLOT_FEET | SLOT_HEAD | SLOT_ID
|
||||
slot_flags = SLOT_FEET | SLOT_HEAD | SLOT_ID | SLOT_HOLSTER
|
||||
w_class = ITEMSIZE_SMALL
|
||||
item_icons = null // No in-hand sprites (for now, anyway, we could totally add some)
|
||||
pixel_y = 0 // Override value from parent.
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
//VOREStation Note - we use different xenobio balance in extracts_vr, keep this unticked.
|
||||
|
||||
// Base
|
||||
/obj/item/slime_extract
|
||||
name = "slime extract"
|
||||
|
||||
@@ -67,7 +67,6 @@
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
// More or less functionally identical to the telecrystal tele.
|
||||
/obj/item/slime_crystal
|
||||
name = "lesser slime cystal"
|
||||
@@ -101,6 +100,7 @@
|
||||
safe_blink(AM, 14)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/weapon/disposable_teleporter/slime
|
||||
name = "greater slime crystal"
|
||||
desc = "A larger, gooier crystal."
|
||||
@@ -112,7 +112,6 @@
|
||||
origin_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 4)
|
||||
|
||||
|
||||
|
||||
// Very filling food.
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slime
|
||||
name = "slimy clump"
|
||||
@@ -125,4 +124,95 @@
|
||||
|
||||
/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"
|
||||
@@ -11,7 +11,7 @@
|
||||
/obj/item/slimepotion/enhancer
|
||||
name = "extract enhancer agent"
|
||||
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."
|
||||
|
||||
// Makes slimes less likely to mutate.
|
||||
@@ -64,7 +64,7 @@
|
||||
|
||||
// Makes the slime friendly forever.
|
||||
/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?"
|
||||
icon_state = "potlightpink"
|
||||
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."
|
||||
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."
|
||||
icon_state = "potred"
|
||||
icon_state = "potlightpink"
|
||||
|
||||
/obj/item/slimepotion/loyalty/attack(mob/living/simple_mob/M, mob/user)
|
||||
if(!istype(M))
|
||||
@@ -247,7 +247,7 @@
|
||||
name = "slime feeding agent"
|
||||
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."
|
||||
icon_state = "potyellow"
|
||||
icon_state = "potorange"
|
||||
|
||||
/obj/item/slimepotion/feeding/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
|
||||
if(!istype(M))
|
||||
|
||||
@@ -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)
|
||||
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 480 B |
@@ -1295,6 +1295,10 @@
|
||||
},
|
||||
/turf/simulated/shuttle/plating/airless,
|
||||
/area/tether_away/fueldepot)
|
||||
"ow" = (
|
||||
/obj/machinery/vending/weeb,
|
||||
/turf/simulated/floor/tiled/techmaint/airless,
|
||||
/area/tether_away/fueldepot)
|
||||
"rE" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/visible/aux{
|
||||
dir = 1
|
||||
@@ -1340,6 +1344,10 @@
|
||||
/obj/random/powercell,
|
||||
/turf/simulated/floor/tiled/techmaint/airless,
|
||||
/area/tether_away/fueldepot)
|
||||
"Gh" = (
|
||||
/obj/machinery/vending/fitness,
|
||||
/turf/simulated/floor/tiled/techmaint/airless,
|
||||
/area/tether_away/fueldepot)
|
||||
"IR" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/visible/aux{
|
||||
dir = 8
|
||||
@@ -1366,6 +1374,14 @@
|
||||
/obj/item/weapon/storage/toolbox/mechanical,
|
||||
/turf/simulated/floor/tiled/techmaint/airless,
|
||||
/area/tether_away/fueldepot)
|
||||
"QY" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/visible/universal{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/catwalk,
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/spaceslug,
|
||||
/turf/simulated/shuttle/plating/airless,
|
||||
/area/tether_away/fueldepot)
|
||||
"Vy" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-8"
|
||||
@@ -1373,6 +1389,12 @@
|
||||
/obj/structure/catwalk,
|
||||
/turf/simulated/shuttle/plating/airless,
|
||||
/area/tether_away/fueldepot)
|
||||
"XR" = (
|
||||
/obj/machinery/vending/foodfast{
|
||||
dir = 0
|
||||
},
|
||||
/turf/simulated/floor/tiled/techmaint/airless,
|
||||
/area/tether_away/fueldepot)
|
||||
"Ys" = (
|
||||
/obj/structure/table/steel_reinforced,
|
||||
/turf/simulated/floor/tiled/techmaint/airless,
|
||||
@@ -11246,7 +11268,7 @@ ao
|
||||
aS
|
||||
bc
|
||||
bo
|
||||
bC
|
||||
QY
|
||||
rE
|
||||
cc
|
||||
cn
|
||||
@@ -11954,12 +11976,12 @@ aa
|
||||
aG
|
||||
aa
|
||||
aF
|
||||
aG
|
||||
Gh
|
||||
aG
|
||||
bz
|
||||
IR
|
||||
aG
|
||||
aG
|
||||
XR
|
||||
aF
|
||||
aa
|
||||
aG
|
||||
@@ -12238,7 +12260,7 @@ aD
|
||||
aM
|
||||
aa
|
||||
aF
|
||||
aG
|
||||
ow
|
||||
bs
|
||||
bz
|
||||
bN
|
||||
|
||||
@@ -30484,7 +30484,12 @@
|
||||
/obj/effect/floor_decal/corner/paleblue/border{
|
||||
dir = 9
|
||||
},
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/on,
|
||||
/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{
|
||||
external_pressure_bound = 101.3;
|
||||
external_pressure_bound_default = 101.3;
|
||||
pressure_checks = 1;
|
||||
pressure_checks_default = 1
|
||||
},
|
||||
/turf/simulated/floor/tiled/white,
|
||||
/area/tether/surfacebase/medical/autoresleeving)
|
||||
"bbJ" = (
|
||||
@@ -32852,12 +32857,7 @@
|
||||
/obj/effect/floor_decal/corner/paleblue/border{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
|
||||
dir = 6
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/universal,
|
||||
/turf/simulated/floor/tiled/white,
|
||||
/area/tether/surfacebase/medical/autoresleeving)
|
||||
"fLB" = (
|
||||
@@ -34005,6 +34005,12 @@
|
||||
/obj/effect/floor_decal/corner/paleblue/border{
|
||||
dir = 6
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
|
||||
dir = 9
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
|
||||
dir = 9
|
||||
},
|
||||
/turf/simulated/floor/tiled/white,
|
||||
/area/tether/surfacebase/medical/autoresleeving)
|
||||
"iue" = (
|
||||
@@ -34934,8 +34940,9 @@
|
||||
/obj/effect/floor_decal/borderfloorwhite/corner,
|
||||
/obj/effect/floor_decal/corner/paleblue/bordercorner,
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
|
||||
dir = 8
|
||||
dir = 6
|
||||
},
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/on,
|
||||
/turf/simulated/floor/tiled/white,
|
||||
/area/tether/surfacebase/medical/autoresleeving)
|
||||
"lbu" = (
|
||||
@@ -35299,11 +35306,9 @@
|
||||
dir = 10
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
|
||||
dir = 9
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
|
||||
dir = 9
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
|
||||
/turf/simulated/floor/tiled/white,
|
||||
/area/tether/surfacebase/medical/autoresleeving)
|
||||
"lQu" = (
|
||||
@@ -36235,6 +36240,15 @@
|
||||
},
|
||||
/turf/simulated/floor/tiled,
|
||||
/area/tether/surfacebase/security/brig)
|
||||
"ogh" = (
|
||||
/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{
|
||||
external_pressure_bound = 101.3;
|
||||
external_pressure_bound_default = 101.3;
|
||||
pressure_checks = 1;
|
||||
pressure_checks_default = 1
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
/area/maintenance/lowmedbaymaint)
|
||||
"ohi" = (
|
||||
/obj/structure/catwalk,
|
||||
/turf/simulated/floor/plating,
|
||||
@@ -54517,7 +54531,7 @@ acA
|
||||
axP
|
||||
aeF
|
||||
axK
|
||||
aAI
|
||||
ogh
|
||||
uVK
|
||||
joK
|
||||
xts
|
||||
|
||||
@@ -5618,7 +5618,7 @@
|
||||
/area/storage/tech)
|
||||
"amb" = (
|
||||
/obj/structure/table/rack/steel,
|
||||
/obj/item/weapon/circuitboard/skills{
|
||||
/obj/item/weapon/circuitboard/skills/pcu{
|
||||
pixel_x = -3;
|
||||
pixel_y = 3
|
||||
},
|
||||
|
||||
@@ -4177,9 +4177,10 @@
|
||||
#include "code\modules\xenoarcheaology\tools\tools_pickaxe.dm"
|
||||
#include "code\modules\xenoarcheaology\tools\tools_pickaxe_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\slimepotions.dm"
|
||||
#include "code\modules\xenobio\items\slimepotions_vr.dm"
|
||||
#include "code\modules\xenobio\items\weapons.dm"
|
||||
#include "code\modules\xenobio\machinery\processor.dm"
|
||||
#include "code\modules\xgm\xgm_gas_data.dm"
|
||||
|
||||