Merge branch 'master' into upstream-merge-12560

This commit is contained in:
Razgriz
2022-03-31 00:42:31 -07:00
committed by GitHub
44 changed files with 2416 additions and 361 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_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

@@ -471,7 +471,7 @@ so as to remain in compliance with the most up-to-date laws."
return
if(master)
return usr.client.Click(master, location, control, params)
..() // CHOMPStation Edit: Pass through to click_vr
..() // VOREStation Edit: Pass through to click_vr
/obj/screen/alert/Destroy()
..()

View File

@@ -24,7 +24,6 @@
name = "Low Power"
desc = "Your battery is very low! Low power mode makes all movements slower."
// CHOMPEdit Start
/obj/screen/alert/xenochimera/reconstitution
name = "Reconstructing Form"
desc = "You're still rebuilding your body! Click the alert to find out how long you have left."
@@ -51,5 +50,4 @@
if(istype(H) && istype(H.species, /datum/species/xenochimera)) // If you're somehow able to click this while not a chimera, this should prevent weird runtimes. Will need changing if regeneration is ever opened to non-chimera using the same alert.
if(H.revive_ready == REVIVING_DONE) // Sanity check.
H.hatch() // Hatch.
// CHOMPEdit Finish
*/

View File

@@ -45,14 +45,15 @@
var/turf/T = get_turf(H)
if(T.get_lumcount() <= 0.1)
to_chat(usr, "<span class='notice'>You are slowly calming down in darkness' safety...</span>")
else if(isbelly(H.loc)) // CHOMPEdit: Safety message for if inside a belly.
else if(isbelly(H.loc)) // Safety message for if inside a belly.
to_chat(usr, "<span class='notice'>You are slowly calming down within the darkness of something's belly, listening to their body as it moves around you. ...safe...</span>")
else
to_chat(usr, "<span class='notice'>You are slowly calming down... But safety of darkness is much preferred.</span>")
else
if(H.nutrition < 150)
to_chat(usr, "<span class='warning'>Your hunger is slowly making you unstable.</span>")
if("Reconstructing Form") // CHOMPEdit: Allow Viewing Reconstruction Timer + Hatching for 'chimera
if("Reconstructing Form") // Allow Viewing Reconstruction Timer + Hatching for 'chimera
var/mob/living/carbon/human/H = usr
if(istype(H) && istype(H.species, /datum/species/xenochimera)) // If you're somehow able to click this while not a chimera, this should prevent weird runtimes. Will need changing if regeneration is ever opened to non-chimera using the same alert.
if(H.revive_ready == REVIVING_NOW)
@@ -60,7 +61,7 @@
else if(H.revive_ready == REVIVING_DONE)
to_chat(usr, "<span class='warning'>You should have a notification + alert for this! Bug report that this is still here!</span>")
if("Ready to Hatch") // CHOMPEdit: Allow Viewing Reconstruction Timer + Hatching for 'chimera
if("Ready to Hatch") // Allow Viewing Reconstruction Timer + Hatching for 'chimera
var/mob/living/carbon/human/H = usr
if(istype(H) && istype(H.species, /datum/species/xenochimera)) // If you're somehow able to click this while not a chimera, this should prevent weird runtimes. Will need changing if regeneration is ever opened to non-chimera using the same alert.
if(H.revive_ready == REVIVING_DONE) // Sanity check.

View File

@@ -502,9 +502,11 @@
M.updatehealth()
apply_brain_damage(M)
M.adjustHalLoss(40) // CHOMPEdit: Moderate amount of halloss for EVERYONE being defibbed. Defibs feel like being kicked in the chest by a mule. Shit hurts if you're awake.
if(istype(M.species, /datum/species/xenochimera)) // Only do the following to Xenochimera. Handwave this however you want, this is to balance defibs on an alien race. CHOMPEdit
// VOREStation Edits Start: Defib pain
if(istype(M.species, /datum/species/xenochimera)) // Only do the following to Xenochimera. Handwave this however you want, this is to balance defibs on an alien race.
M.adjustHalLoss(220) // This hurts a LOT, stacks on top of the previous halloss.
M.feral += 100 // If they somehow weren't already feral, force them feral by increasing ferality var directly, to avoid any messy checks. handle_feralness() will immediately set our feral properly according to halloss anyhow.
// VOREStation Edits End
// SSgame_master.adjust_danger(-20) // VOREStation Edit - We don't use SSgame_master yet.
/obj/item/weapon/shockpaddles/proc/apply_brain_damage(mob/living/carbon/human/H)

View File

@@ -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.

View File

@@ -278,7 +278,7 @@ HALOGEN COUNTER - Radcount on mobs
else
dat += "<span class='notice'>Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type]</span><br>"
dat += "<span class='notice'>Subject's pulse: <font color='[H.pulse == PULSE_THREADY || H.pulse == PULSE_NONE ? "red" : "blue"]'>[H.get_pulse(GETPULSE_TOOL)] bpm.</font></span>"
if(istype(H.species, /datum/species/xenochimera)) // CHOMPEdit Start: Visible feedback for medmains on Xenochimera.
if(istype(H.species, /datum/species/xenochimera)) // VOREStation Edit Start: Visible feedback for medmains on Xenochimera.
if(H.stat == DEAD && H.revive_ready == REVIVING_READY && !H.hasnutriment())
dat += "<span class='danger'>WARNING: Protein levels low. Subject incapable of reconstitution.</span>"
else if(H.revive_ready == REVIVING_NOW)
@@ -289,7 +289,7 @@ HALOGEN COUNTER - Radcount on mobs
dat+= "<span class='danger'>WARNING: Defib will cause extreme pain and set subject feral. Sedation recommended prior to defibrillation.</span>"
else // If they bop them and they're not dead or reviving, give 'em a little notice.
dat += "<span class='notice'>Subject is a Xenochimera. Treat accordingly.</span>"
// CHOMPEdit End
// VOREStation Edit End
user.show_message(dat, 1)
/obj/item/device/healthanalyzer/verb/toggle_mode()

View File

@@ -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()
evolve_and_reproduce()
@@ -146,6 +143,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.

View File

@@ -1,4 +1,7 @@
//This file has been disabled in the dme now that the below is actually ported upstream
/*
/decl/emote/audible/coyawoo
key = "coyawoo"
emote_message_3p = "lets out a scraggly awoo."
emote_sound = 'sound/voice/coyoteawoo.ogg'
*/

View File

@@ -179,3 +179,28 @@
else
emote_sound = pick(smolsound)
. = ..()
/decl/emote/audible/coyawoo
key = "coyawoo"
emote_message_3p = "lets out a scraggly awoo."
emote_sound = 'sound/voice/coyoteawoo.ogg'
/decl/emote/audible/coyawoo2
key = "coyawoo2"
emote_message_3p = "lets out a pronounced, scraggly awoo."
emote_sound = 'sound/voice/coyoteawoo2.ogg'
/decl/emote/audible/coyawoo3
key = "coyawoo3"
emote_message_3p = "yaps and lets out a scraggly awoo."
emote_sound = 'sound/voice/coyoteawoo3.ogg'
/decl/emote/audible/coyawoo4
key = "coyawoo4"
emote_message_3p = "yaps several times, and lets out a short, scraggly awoo."
emote_sound = 'sound/voice/coyoteawoo4.ogg'
/decl/emote/audible/coyawoo5
key = "coyawoo5"
emote_message_3p = "lets out a scraggly, whine-awoo."
emote_sound = 'sound/voice/coyoteawoo5.ogg'

View File

@@ -137,10 +137,12 @@ var/list/_human_default_emotes = list(
/decl/emote/audible/prbt,
/decl/emote/audible/gyoh,
/decl/emote/audible/rumble,
/decl/emote/audible/coyawoo,
/decl/emote/audible/coyawoo2,
/decl/emote/audible/coyawoo3,
/decl/emote/audible/coyawoo4,
/decl/emote/audible/coyawoo5
//VOREStation Add End
//CHOMPStation Add Start
/decl/emote/audible/coyawoo
//CHOMPStation End Start
)
//VOREStation Add Start

View File

@@ -34,14 +34,14 @@
//Scary spawnerization.
revive_ready = REVIVING_NOW
revive_finished = (world.time + time SECONDS) // When do we finish reviving? Allows us to find out when we're done, called by the alert currently.
throw_alert("regen", /obj/screen/alert/xenochimera/reconstitution) // CHOMPEdit: Regen
throw_alert("regen", /obj/screen/alert/xenochimera/reconstitution)
spawn(time SECONDS)
// Was dead, now not dead.
if(stat != DEAD)
to_chat(src, "<span class='notice'>Your body has recovered from its ordeal, ready to regenerate itself again.</span>")
revive_ready = REVIVING_READY //reset their cooldown
clear_alert("regen") // CHOMPEdit: Regen
throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) // CHOMPEdit: Regen
clear_alert("regen")
throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch)
// Was dead, still dead.
else
@@ -49,8 +49,8 @@
verbs |= /mob/living/carbon/human/proc/hatch
revive_ready = REVIVING_DONE
src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30)
clear_alert("regen") // CHOMPEdit: Regen
throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) // CHOMPEdit: Regen
clear_alert("regen")
throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch)
//Dead until nutrition injected.
else
@@ -63,7 +63,7 @@
//Waiting for regen after being alive
revive_ready = REVIVING_NOW
revive_finished = (world.time + time SECONDS) // When do we finish reviving? Allows us to find out when we're done, called by the alert currently.
throw_alert("regen", /obj/screen/alert/xenochimera/reconstitution) // CHOMPEdit: Regen
throw_alert("regen", /obj/screen/alert/xenochimera/reconstitution)
spawn(time SECONDS)
//If they're still alive after regenning.
@@ -72,8 +72,8 @@
verbs |= /mob/living/carbon/human/proc/hatch
revive_ready = REVIVING_DONE
src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30)
clear_alert("regen") // CHOMPEdit: Regen
throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) // CHOMPEdit: Regen
clear_alert("regen")
throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch)
//Was alive, now dead
else if(hasnutriment())
@@ -81,14 +81,14 @@
verbs |= /mob/living/carbon/human/proc/hatch
revive_ready = REVIVING_DONE
src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30)
clear_alert("regen") // CHOMPEdit: Regen
throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) // CHOMPEdit: Regen
clear_alert("regen")
throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch)
//Dead until nutrition injected.
else
to_chat(src, "<span class='warning'>Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.</span>")
revive_ready = REVIVING_READY //reset their cooldown
clear_alert("regen") // CHOMPEdit: Regen
clear_alert("regen")
/mob/living/carbon/human/proc/hasnutriment()
if (bloodstr.has_reagent("nutriment", 30) || src.bloodstr.has_reagent("protein", 15)) //protein needs half as much. For reference, a steak contains 9u protein.
@@ -117,7 +117,7 @@
chimera_hatch()
adjustBrainLoss(10) // if they're reviving from dead, they come back with 10 brainloss on top of whatever's unhealed.
visible_message("<span class='danger'><p><font size=4>The lifeless husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.</font></p></span>") //Bloody hell...
clear_alert("hatch") // CHOMPEdit: Regen
clear_alert("hatch")
return
//Don't have nutriment to hatch! Or you somehow died in between completing your revive and hitting hatch.
@@ -125,13 +125,13 @@
to_chat(src, "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.")
verbs -= /mob/living/carbon/human/proc/hatch
revive_ready = REVIVING_READY //reset their cooldown they can try again when they're given a kickstart
clear_alert("hatch") // CHOMPEdit: Regen
clear_alert("hatch")
//Alive when hatching
else
chimera_hatch()
visible_message("<span class='danger'><p><font size=4>The dormant husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.</font></p></span>") //Bloody hell...
clear_alert("hatch") // CHOMPEdit: Regen
clear_alert("hatch")
/mob/living/carbon/human/proc/chimera_hatch()
verbs -= /mob/living/carbon/human/proc/hatch
@@ -166,7 +166,6 @@
playsound(T, 'sound/effects/mob_effects/xenochimera/hatch.ogg', 50)
revive_ready = world.time + 10 MINUTES //set the cooldown CHOMPEdit: Reduced this to 10 minutes, you're playing with fire if you're reviving that often.
// CHOMPEdit End
/mob/living/carbon/human/proc/revivingreset() // keep this as a debug proc or potential future use
revive_ready = REVIVING_READY

View File

@@ -55,7 +55,7 @@
//primitive_form = "Farwa"
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE//Whitelisted as restricted is broken.
flags = NO_SCAN | NO_INFECT // | NO_DEFIB // Dying as a chimera is, quite literally, a death sentence. Well, if it wasn't for their revive, that is. CHOMPEdit: Leaving NO_DEFIB there for the future. // CHOMPEdit: Adds flags
flags = NO_SCAN | NO_INFECT // | NO_DEFIB // Dying as a chimera is, quite literally, a death sentence. Well, if it wasn't for their revive, that is. Leaving NO_DEFIB there for the future/in case reversion to old 'chimera no-defib.
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
genders = list(MALE, FEMALE, PLURAL, NEUTER)
@@ -88,11 +88,10 @@
H.weakened = 5
H.canmove = 0
H.does_not_breathe = TRUE
var/regen_sounds = H.regen_sounds // CHOMPEdit Start: Regen sounds/etc
var/regen_sounds = H.regen_sounds
if(prob(2)) // 2% chance of playing squelchy noise while reviving, which is run roughly every 2 seconds/tick while regenerating.
playsound(H, pick(regen_sounds), 30)
H.visible_message("<span class='danger'><p><font size=4>[H.name]'s motionless form shudders grotesquely, rippling unnaturally.</font></p></span>")
// CHOMPEdit End
//Cold/pressure effects when not regenerating
else
@@ -213,7 +212,7 @@
else
feral = max(0,--feral)
// Being in a belly or in the darkness decreases stress further. :9
// Being in a belly or in the darkness decreases stress further. Helps mechanically reward players for staying in darkness + RP'ing appropriately. :9
var/turf/T = get_turf(H)
if(feral && (isbelly(H.loc) || T.get_lumcount() <= 0.1))
feral = max(0,--feral)
@@ -233,7 +232,7 @@
H.shock_stage = max(H.shock_stage-(feral/20), 0)
//Handle light/dark areas
// var/turf/T = get_turf(H) // CHOMPEdit: Moved up to before the in-belly/dark combined check, should still safely reach here just fine.
// var/turf/T = get_turf(H) // Moved up to before the in-belly/dark combined check, should still safely reach here just fine.
if(!T)
update_xenochimera_hud(H, danger, feral_state)
return //Nullspace
@@ -246,7 +245,7 @@
var/list/nearby = H.living_mobs(world.view)
//Not in the dark, or a belly, and out in the open.
if(!darkish && isturf(H.loc) && !isbelly(H.loc)) // CHOMPEdit: added specific check for if in belly
if(!darkish && isturf(H.loc) && !isbelly(H.loc)) // Added specific check for if in belly
//Always handle feral if nobody's around and not in the dark.
if(!nearby.len)
@@ -260,8 +259,8 @@
update_xenochimera_hud(H, danger, feral_state)
return
// In the darkness, "hidden", or in a belly. No need for custom scene-protection checks as it's just an occational infomessage.
if(darkish || !isturf(H.loc) || isbelly(H.loc)) // CHOMPEdit: added specific check for if in belly
// In the darkness, or "hidden", or in a belly. No need for custom scene-protection checks as it's just an occational infomessage.
if(darkish || !isturf(H.loc) || isbelly(H.loc)) // Specific check for if in belly. !isturf should do this, but JUST in case.
// If hurt, tell 'em to heal up
if (shock)
to_chat(H,"<span class='info'>This place seems safe, secure, hidden, a place to lick your wounds and recover...</span>")

View File

@@ -27,7 +27,7 @@
/datum/trait/negative/endurance_low
name = "Low Endurance"
desc = "Reduces your maximum total hitpoints to 75."
desc = "Reduces your maximum total hitpoints to 75. You require only 150 damage in total to die, compared to 200 normally. You will go into crit after losing 75 HP, compared to crit at 100 HP." // CHOMPEdit: Clarity for players' sake.
cost = -4 //Chompedit makes you a lot squishier, should not be only 2 points. (based on the brute and burn vulnerability costs)
var_changes = list("total_health" = 75)
@@ -37,7 +37,7 @@
/datum/trait/negative/endurance_very_low
name = "Low Endurance, Major"
desc = "Reduces your maximum total hitpoints to 50."
desc = "Reduces your maximum total hitpoints to 50. You require only 100 damage in total to die, compared to 200 normally. You will go into crit after losing 50 HP, compared to crit at 100 HP." // CHOMPEdit: Clarity for players' sake.
cost = -8 //Teshari HP. This makes the person a lot more suseptable to getting stunned, killed, etc. //Chompedit: Has no business being only 3 points, while others that function similarly but are nowhere near as crippling are 3 as well.
var_changes = list("total_health" = 50)
@@ -82,9 +82,9 @@
var_changes = list("burn_mod" = 1.5)
//YW ADDITIONS START
/datum/trait/negative/reduced_biocompat
name = "Reduced Biocompatibility"
desc = "For whatever reason, you're one of the unlucky few who don't get as much benefit from modern-day chemicals. Remember to note this down in your medical records!"
/datum/trait/negative/reduced_biocompat_minor // CHOMPEdit: Changed name of trait + desc.
name = "Reduced Biocompatibility, Minor"
desc = "For whatever reason, you're one of the unlucky few who don't get as much benefit from modern-day chemicals. Remember to note this down in your medical records! Chems are only 80% as effective on you!"
cost = -1
var_changes = list("chem_strength_heal" = 0.8)

View File

@@ -35,7 +35,7 @@
var_changes = list("grab_resist_divisor_victims" = 0.5, "grab_resist_divisor_self" = 3, "grab_power_victims" = 1, "grab_power_self" = -1)
/datum/trait/negative/extreme_slowdown
name = "Extreme slowdown"
name = "Slowdown, Extreme"
desc = "You move EXTREMELY slower than baseline"
cost = -8
var_changes = list("slowdown" = 4.0)
@@ -376,3 +376,25 @@
if(ms != "")
to_chat(H, ms)
H.next_loneliness_time = world.time+500
/datum/trait/negative/endurance_glass // Glass Cannon
name = "Glass Endurance"
desc = "Your body is very fragile. Reduces your maximum hitpoints to 25. Beware sneezes. You require only 50 damage in total to die, compared to 200 normally. You will go into crit after losing 25 HP, compared to crit at 100 HP."
cost = -12 // Similar to Very Low Endurance, this straight up will require you NEVER getting in a fight. This is extremely crippling. I salute the madlad that takes this.
var_changes = list("total_health" = 25)
/datum/trait/negative/endurance_glass/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.setMaxHealth(S.total_health)
/datum/trait/negative/reduced_biocompat
name = "Reduced Biocompatibility"
desc = "For whatever reason, you're one of the unlucky few who don't get as much benefit from modern-day chemicals. Remember to note this down in your medical records! Chems are only 60% as effective on you!"
cost = -4
var_changes = list("chem_strength_heal" = 0.6)
/datum/trait/negative/reduced_biocompat_extreme
name = "Reduced Biocompatibility, Major"
desc = "For whatever reason, you're one of the unlucky few who don't get as much benefit from modern-day chemicals. Remember to note this down in your medical records! Chems are only 30% as effective on you!"
cost = -8
var_changes = list("chem_strength_heal" = 0.3)

View File

@@ -5,7 +5,7 @@
name = "Haste"
desc = "Allows you to move faster on average than baseline."
cost = 4 //CHOMPEdit
var_changes = list("slowdown" = -0.5)
var_changes = list("slowdown" = -0.45)
excludes = list(/datum/trait/positive/hardy,/datum/trait/positive/hardy_extreme,/datum/trait/positive/hardy_plus,/datum/trait/positive/speed_fast_minor)
//ChompEdit
@@ -45,8 +45,8 @@
/datum/trait/positive/endurance_high
name = "High Endurance"
desc = "Increases your maximum total hitpoints to 125"
cost = 2
desc = "Increases your maximum total hitpoints to 125. You require 250 damage in total to die, compared to 200 normally. You will still go into crit after losing 125 HP, compared to crit at 100 HP." // CHOMPEdit: Clarity for players' sake.
cost = 3 // CHOMPEdit
var_changes = list("total_health" = 125)
/datum/trait/positive/endurance_high/apply(var/datum/species/S,var/mob/living/carbon/human/H)
@@ -55,13 +55,13 @@
/datum/trait/positive/nonconductive
name = "Non-Conductive"
desc = "Decreases your susceptibility to electric shocks by a 25% amount." //CHOMP Edit
desc = "Decreases your susceptibility to electric shocks by 25%." //CHOMP Edit - GRAMMAR PLS.
cost = 2 //This effects tasers!
var_changes = list("siemens_coefficient" = 0.75) //CHOMP Edit
/datum/trait/positive/nonconductive_plus
name = "Non-Conductive, Major"
desc = "Decreases your susceptibility to electric shocks by a 50% amount." //CHOMP Edit
desc = "Decreases your susceptibility to electric shocks by 50%." //CHOMP Edit - GRAMMAR PLS.
cost = 3 //Let us not forget this effects tasers!
var_changes = list("siemens_coefficient" = 0.5) //CHOMP Edit
/* //Chompedit, moving to Positive_ch.dm so it wont be messed with from upstream
@@ -128,8 +128,8 @@
cost = 2
var_changes = list("chem_strength_heal" = 1.2)
/datum/trait/positive/pain_tolerance_advanced
name = "High Pain Tolerance"
/datum/trait/positive/pain_tolerance // CHOMPEdit: There is no "basic" pain tolerance, so I'm reducing this to regular pain tolerance.
name = "Increased Pain Tolerance"
desc = "You are noticeably more resistant to pain than most, and experience 20% less pain from all sources."
cost = 2
var_changes = list("pain_mod" = 0.8)
@@ -173,9 +173,8 @@
cost = 1 //CHOMP Edit
var_changes = list("flags" = NO_MINOR_CUT) //Checked the flag is only used by shard stepping.
//CHOMPStation Removal Start
/*
// CHOMPEdit: This has been removed for two years, since Jan 2020, pending "review". Uncommenting as per tankiness increase PR.
/datum/trait/positive/antiseptic_saliva
name = "Antiseptic Saliva"
desc = "Your saliva has especially strong antiseptic properties that can be used to heal small wounds."
@@ -184,8 +183,7 @@
/datum/trait/positive/antiseptic_saliva/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..()
H.verbs |= /mob/living/carbon/human/proc/lick_wounds
*/
//CHOMPStation Removal End
/datum/trait/positive/traceur
name = "Traceur"

View File

@@ -110,19 +110,21 @@
/datum/trait/positive/endurance_high
cost = 3
excludes = list(/datum/trait/positive/brute_resist, /datum/trait/positive/minor_brute_resist, /datum/trait/positive/minor_burn_resist, /datum/trait/positive/burn_resist)
excludes = list(/datum/trait/positive/endurance_very_high) // CHOMPEdit: Increased Endurance.
// excludes = list(/datum/trait/positive/brute_resist, /datum/trait/positive/minor_brute_resist, /datum/trait/positive/minor_burn_resist, /datum/trait/positive/burn_resist)
// Tankiness at the cost of severe downsides should be allowed - we have a large number of negatives that hurt hard, but you can't take many positives.
/datum/trait/positive/brute_resist
excludes = list(/datum/trait/positive/minor_brute_resist, /datum/trait/positive/burn_resist, /datum/trait/positive/endurance_high)
excludes = list(/datum/trait/positive/minor_brute_resist, /datum/trait/positive/brute_resist_plus) // Tankiness at the cost of severe downsides should be allowed - we have a large number of negatives that hurt hard, but you can't take many positives.
/datum/trait/positive/minor_brute_resist
excludes = list(/datum/trait/positive/brute_resist, /datum/trait/positive/endurance_high)
excludes = list(/datum/trait/positive/brute_resist, /datum/trait/positive/brute_resist_plus) // Tankiness at the cost of severe downsides should be allowed - we have a large number of negatives that hurt hard, but you can't take many positives.
/datum/trait/positive/burn_resist
excludes = list(/datum/trait/positive/minor_burn_resist, /datum/trait/positive/brute_resist, /datum/trait/positive/endurance_high)
excludes = list(/datum/trait/positive/minor_burn_resist, /datum/trait/positive/burn_resist_plus) // Tankiness at the cost of severe downsides should be allowed - we have a large number of negatives that hurt hard, but you can't take many positives.
/datum/trait/positive/minor_burn_resist
excludes = list(/datum/trait/positive/burn_resist, /datum/trait/positive/endurance_high)
excludes = list(/datum/trait/positive/burn_resist, /datum/trait/positive/burn_resist_plus) // Tankiness at the cost of severe downsides should be allowed - we have a large number of negatives that hurt hard, but you can't take many positives.
/datum/trait/positive/absorbent/handle_environment_special(var/mob/living/carbon/human/H)
var/turf/T = get_turf(H)
@@ -249,3 +251,45 @@
..(S,H)
H.verbs |= /mob/living/proc/insect_sting
// TANKINESS LETS GOOOOOOOOO
/datum/trait/positive/burn_resist_plus // Equivalent to Burn Weakness Major, cannot be taken at the same time.
name = "Major Burn Resist"
desc = "Adds 40% resistance to burn damage sources."
cost = 3 // Exact Opposite of Burn Weakness Major, except Weakness Major is 50% incoming, this is -40% incoming.
var_changes = list("burn_mod" = 0.6)
excludes = list(/datum/trait/positive/burn_resist, /datum/trait/positive/minor_burn_resist)
/datum/trait/positive/brute_resist_plus // Equivalent to Brute Weakness Major, cannot be taken at the same time.
name = "Major Brute Resist"
desc = "Adds 40% resistance to brute damage sources."
cost = 3 // Exact Opposite of Brute Weakness Major, except Weakness Major is 50% incoming, this is -40% incoming.
var_changes = list("brute_mod" = 0.6)
excludes = list(/datum/trait/positive/brute_resist, /datum/trait/positive/minor_brute_resist)
/datum/trait/positive/endurance_very_high
name = "Very High Endurance"
desc = "Increases your maximum total hitpoints to 150. You require 300 damage in total to die, compared to 200 normally. You will still go into crit after losing 150 HP, compared to crit at 100 HP."
cost = 6 // This should cost a LOT, because your total health becomes 300 to be fully dead, rather than 200 normally, or 250 for High Endurance. HE costs 2, double it here.
var_changes = list("total_health" = 150)
excludes = list(/datum/trait/positive/endurance_high)
/datum/trait/positive/endurance_very_high/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.setMaxHealth(S.total_health)
/datum/trait/positive/endurance_extremely_high
name = "Extremely High Endurance"
desc = "Increases your maximum total hitpoints to 175"
cost = 9 // This should cost a LOT, because your total health becomes 350 to be fully dead, rather than 200 normally, or 250 for High Endurance. HE costs 2, this costs 3x it.
var_changes = list("total_health" = 175)
/datum/trait/positive/endurance_extremely_high/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.setMaxHealth(S.total_health)
/datum/trait/positive/pain_tolerance_advanced // High Pain Intolerance is 50% incoming pain, but this is 40% reduced incoming pain.
name = "Increased Pain Tolerance"
desc = "You are noticeably more resistant to pain than most, and experience 40% less pain from all sources."
cost = 3 // Equivalent to High Pain Intolerance, but less pain resisted for balance reasons.
var_changes = list("pain_mod" = 0.6)

View File

@@ -1,4 +1,4 @@
/mob/living/carbon/human/proc/lick_wounds(var/mob/living/carbon/M) //YWedit, originally, living/carbon/M in living_mobs(1), However, living_mobs does not include src as possible target.
/mob/living/carbon/human/proc/lick_wounds(var/mob/living/carbon/M) // Allows the user to lick themselves. Given how rarely this trait is used, I don't see an issue with a slight buff.
set name = "Lick Wounds"
set category = "Abilities"
set desc = "Disinfect and heal small wounds with your saliva."
@@ -11,6 +11,10 @@
to_chat(src, "<span class='warning'>You need to be closer to do that.</span>") // CHOMPEdit - don't use src << unless you have to.
return
if (get_dist(src,M) >= 2)
to_chat(src, "<span class='warning'>You need to be closer to do that.</span>")
return
if ( ! (istype(src, /mob/living/carbon/human) || \
istype(src, /mob/living/silicon)) )
to_chat(src, "<span class='warning'>If you even have a tongue, it doesn't work that way.</span>")

View File

@@ -1,3 +1,29 @@
/mob/living/simple_mob
//vars for vore_icons toggle control
var/vore_icons_toggle = 1 // on by default, as is legacy
var/vore_icons_cache = 0 // 0 by default. Going from ON to OFF should store vore_icons val here.
mob/living/simple_mob/verb/toggle_vore_icons()
set name = "Toggle Vore Sprite"
set desc = "Toggle visibility of changed mob sprite when you have eaten other things."
set category = "Abilities"
if(!vore_icons && !vore_icons_cache)
to_chat(src,"<span class='warning'>This simplemob has no vore sprite.</span>")
else if(vore_icons_toggle)
vore_icons_cache = vore_icons
vore_icons = 0
vore_icons_toggle = 0
to_chat(src,"<span class='warning'>Vore sprite disabled.</span>")
else
vore_icons = vore_icons_cache
vore_icons_toggle = 1
to_chat(src,"<span class='warning'>Vore sprite enabled.</span>")
update_icon()
// a unique named update_transforms override to allow simplemobs going horizontal on lay/stun.
// This will not make the mob horizontal if the mob has a icon_rest != null
// To use this, add an override in your simplemob subtype of update_transforms with NO . = ..()

View File

@@ -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"

View File

@@ -491,6 +491,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."
@@ -501,7 +502,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

View File

@@ -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 = 30 // CHOMPedit Odds of spawning as a new color when reproducing. Can be modified by certain xenobio products. Carried across generations of slimes.
var/split_amount = 4 // Amount of children we will normally have. Half of that for dead adult slimes. Is NOT carried across generations.
var/untamable = FALSE //Makes slime untamable via discipline.
var/untamable_inheirit = FALSE //Makes slime inheirit its untamability.
var/list/slime_mutation = list(
/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()

View File

@@ -28,7 +28,7 @@ var/list/organ_cache = list()
// Damage vars.
var/min_bruised_damage = 10 // Damage before considered bruised
var/min_broken_damage = 30 // Damage before becoming broken
var/min_broken_damage = 60 // Damage before becoming broken CHOMPEdit: Flat doubling of all min_broken_damage
var/max_damage // Damage cap
var/can_reject = 1 // Can this organ reject?
var/rejecting // Is this organ already being rejected?
@@ -361,7 +361,7 @@ var/list/organ_cache = list()
robotize()
robotic = ORGAN_ASSISTED
min_bruised_damage = 15
min_broken_damage = 35
min_broken_damage = 60 // CHOMPEdit: Flat doubling of all min_broken_damage
butcherable = FALSE
/obj/item/organ/proc/digitize() //Used to make the circuit-brain. On this level in the event more circuit-organs are added/tweaks are wanted.

View File

@@ -9,7 +9,7 @@
/obj/item/organ/external
name = "external"
min_broken_damage = 30
min_broken_damage = 60 // CHOMPEdit: Flat doubling of all min_broken_damage
max_damage = 0
dir = SOUTH
organ_tag = "limb"

View File

@@ -9,7 +9,7 @@
organ_tag = BP_TORSO
icon_name = "torso"
max_damage = 100
min_broken_damage = 35
min_broken_damage = 60 // CHOMPEdit: Increase all min_broken_damage (Ribs should take more force to break)
w_class = ITEMSIZE_HUGE
body_part = UPPER_TORSO
vital = 1
@@ -59,7 +59,7 @@
organ_tag = BP_GROIN
icon_name = "groin"
max_damage = 100
min_broken_damage = 35
min_broken_damage = 50 // CHOMPEdit: Increase all min_broken_damage
w_class = ITEMSIZE_LARGE
body_part = LOWER_TORSO
vital = 1
@@ -89,7 +89,7 @@
name = "left arm"
icon_name = "l_arm"
max_damage = 80
min_broken_damage = 30
min_broken_damage = 40 // CHOMPEdit: Flat doubling of all min_broken_damage
w_class = ITEMSIZE_NORMAL
body_part = ARM_LEFT
parent_organ = BP_TORSO
@@ -129,7 +129,7 @@
name = "left leg"
icon_name = "l_leg"
max_damage = 80
min_broken_damage = 30
min_broken_damage = 40 // CHOMPEdit: Increase all min_broken_damage
w_class = ITEMSIZE_NORMAL
body_part = LEG_LEFT
icon_position = LEFT
@@ -168,7 +168,7 @@
name = "left foot"
icon_name = "l_foot"
max_damage = 50
min_broken_damage = 15
min_broken_damage = 30 // CHOMPEdit: Increase all min_broken_damage
w_class = ITEMSIZE_SMALL
body_part = FOOT_LEFT
icon_position = LEFT
@@ -213,7 +213,7 @@
name = "left hand"
icon_name = "l_hand"
max_damage = 50
min_broken_damage = 15
min_broken_damage = 30 // CHOMPEdit: Increase all min_broken_damage
w_class = ITEMSIZE_SMALL
body_part = HAND_LEFT
parent_organ = BP_L_ARM
@@ -262,7 +262,7 @@
name = "head"
slot_flags = SLOT_BELT
max_damage = 75
min_broken_damage = 35
min_broken_damage = 50 // CHOMPEdit: Increase all min_broken_damage
w_class = ITEMSIZE_NORMAL
body_part = HEAD
vital = 1

View File

@@ -1,16 +1,16 @@
/obj/item/organ/external/chest/unathi
max_damage = 100
min_broken_damage = 40
min_broken_damage = 80 // CHOMPEdit: Flat doubling of all min_broken_damage
encased = "upper ribplates"
/obj/item/organ/external/groin/unathi
max_damage = 100
min_broken_damage = 40
min_broken_damage = 80 // CHOMPEdit: Flat doubling of all min_broken_damage
encased = "lower ribplates"
/obj/item/organ/external/head/unathi
max_damage = 75
min_broken_damage = 35
min_broken_damage = 70 // CHOMPEdit: Flat doubling of all min_broken_damage
eye_icon = "eyes_s"
force = 5
throwforce = 10

View File

@@ -204,242 +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
blocked += typesof(/mob/living/simple_mob/horror)
var/list/voremobs = typesof(mob_path) - blocked // list of possible hostile mobs
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 100, 1)
var/spawn_count = rand(1,3)
for(var/i = 1, i <= spawn_count, i++)
var/chosen = pick(voremobs)
var/mob/living/simple_mob/C = new chosen
C.faction = "slimesummon"
C.loc = get_turf(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(C, pick(NORTH,SOUTH,EAST,WEST))
/decl/chemical_reaction/instant/slime/sapphire_mutation
name = "Slime Mutation Toxins"
id = "slime_mutation_tox"
result = "mutationtoxin"
required_reagents = list("blood" = 5)
result_amount = 30
required = /obj/item/slime_extract/sapphire
/decl/chemical_reaction/instant/biomass
result_amount = 6 // Roughly 120u per phoron sheet

View File

@@ -20,7 +20,7 @@
var/vore_egg_type = "egg" // Default egg type.
var/feral = 0 // How feral the mob is, if at all. Does nothing for non xenochimera at the moment.
var/revive_ready = REVIVING_READY // Only used for creatures that have the xenochimera regen ability, so far.
var/revive_finished = 0 // CHOMPEdit: Only used for xenochimera regen, allows us to find out when the regen will finish.
var/revive_finished = 0 // Only used for xenochimera regen, allows us to find out when the regen will finish.
var/metabolism = 0.0015
var/vore_taste = null // What the character tastes like
var/vore_smell = null // What the character smells like
@@ -45,11 +45,10 @@
var/regen_sounds = list(
'sound/effects/mob_effects/xenochimera/regen_1.ogg',
'sound/effects/mob_effects/xenochimera/regen_2.ogg',
'sound/effects/mob_effects/xenochimera/regen_3.ogg',
'sound/effects/mob_effects/xenochimera/regen_4.ogg',
'sound/effects/mob_effects/xenochimera/regen_3.ogg',
'sound/effects/mob_effects/xenochimera/regen_5.ogg'
)
// CHOMPEdit: Regen Sounds
//
// Hook for generic creation of stuff on new creatures

View File

@@ -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"

File diff suppressed because it is too large Load Diff

View File

@@ -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"
@@ -126,3 +125,94 @@
/obj/item/weapon/reagent_containers/food/snacks/slime/Initialize()
. = ..()
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
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))

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 26 KiB

BIN
icons/mob/slimes_vr.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

View File

@@ -1294,7 +1294,15 @@
icon_state = "1-4"
},
/turf/simulated/shuttle/plating/airless,
<<<<<<< HEAD
/area/sc_away/fueldepot)
=======
/area/tether_away/fueldepot)
"ow" = (
/obj/machinery/vending/weeb,
/turf/simulated/floor/tiled/techmaint/airless,
/area/tether_away/fueldepot)
>>>>>>> bd65b8dc0f... Merge pull request #12551 from BonniePandora/spaceslug
"rE" = (
/obj/machinery/atmospherics/pipe/manifold/visible/aux{
dir = 1
@@ -1339,7 +1347,15 @@
/obj/structure/table/rack/shelf/steel,
/obj/random/powercell,
/turf/simulated/floor/tiled/techmaint/airless,
<<<<<<< HEAD
/area/sc_away/fueldepot)
=======
/area/tether_away/fueldepot)
"Gh" = (
/obj/machinery/vending/fitness,
/turf/simulated/floor/tiled/techmaint/airless,
/area/tether_away/fueldepot)
>>>>>>> bd65b8dc0f... Merge pull request #12551 from BonniePandora/spaceslug
"IR" = (
/obj/machinery/atmospherics/pipe/simple/visible/aux{
dir = 8
@@ -1365,14 +1381,36 @@
/obj/structure/table/rack/steel,
/obj/item/weapon/storage/toolbox/mechanical,
/turf/simulated/floor/tiled/techmaint/airless,
<<<<<<< HEAD
/area/sc_away/fueldepot)
=======
/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)
>>>>>>> bd65b8dc0f... Merge pull request #12551 from BonniePandora/spaceslug
"Vy" = (
/obj/structure/cable{
icon_state = "2-8"
},
/obj/structure/catwalk,
/turf/simulated/shuttle/plating/airless,
<<<<<<< HEAD
/area/sc_away/fueldepot)
=======
/area/tether_away/fueldepot)
"XR" = (
/obj/machinery/vending/foodfast{
dir = 0
},
/turf/simulated/floor/tiled/techmaint/airless,
/area/tether_away/fueldepot)
>>>>>>> bd65b8dc0f... Merge pull request #12551 from BonniePandora/spaceslug
"Ys" = (
/obj/structure/table/steel_reinforced,
/turf/simulated/floor/tiled/techmaint/airless,
@@ -11246,7 +11284,7 @@ ao
aS
bc
bo
bC
QY
rE
cc
cn
@@ -11954,12 +11992,12 @@ aa
aG
aa
aF
aG
Gh
aG
bz
IR
aG
aG
XR
aF
aa
aG
@@ -12238,7 +12276,7 @@ aD
aM
aa
aF
aG
ow
bs
bz
bN

BIN
sound/voice/coyoteawoo2.ogg Normal file

Binary file not shown.

BIN
sound/voice/coyoteawoo3.ogg Normal file

Binary file not shown.

BIN
sound/voice/coyoteawoo4.ogg Normal file

Binary file not shown.

BIN
sound/voice/coyoteawoo5.ogg Normal file

Binary file not shown.

View File

@@ -2291,7 +2291,6 @@
#include "code\modules\emotes\definitions\audible.dm"
#include "code\modules\emotes\definitions\audible_belch.dm"
#include "code\modules\emotes\definitions\audible_cough.dm"
#include "code\modules\emotes\definitions\audible_furry_ch.dm"
#include "code\modules\emotes\definitions\audible_furry_vr.dm"
#include "code\modules\emotes\definitions\audible_scream.dm"
#include "code\modules\emotes\definitions\audible_scream_ch.dm"
@@ -4378,9 +4377,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"