diff --git a/citadel.dme b/citadel.dme
index 91cbf1b6423b..898d2771d3f1 100644
--- a/citadel.dme
+++ b/citadel.dme
@@ -3933,10 +3933,6 @@
#include "code\modules\mob\living\simple_mob\subtypes\vore\demon\demon_subtypes.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\demon\~defines.dm"
#include "code\modules\mob\living\simple_mob\subtypes\vore\morph\morph.dm"
-#include "code\modules\mob\living\simple_mob\subtypes\vore\shadekin\ability_objects.dm"
-#include "code\modules\mob\living\simple_mob\subtypes\vore\shadekin\ability_procs.dm"
-#include "code\modules\mob\living\simple_mob\subtypes\vore\shadekin\shadekin.dm"
-#include "code\modules\mob\living\simple_mob\subtypes\vore\shadekin\types.dm"
#include "code\modules\mob\living\voice\voice.dm"
#include "code\modules\mob\new_player\join_menu.dm"
#include "code\modules\mob\new_player\login.dm"
diff --git a/code/game/rendering/screen.dm b/code/game/rendering/screen.dm
index 480f07350067..77bd443fe473 100644
--- a/code/game/rendering/screen.dm
+++ b/code/game/rendering/screen.dm
@@ -422,9 +422,6 @@
var/darkness = round(1 - T.get_lumcount(),0.1)
to_chat(usr,"Darkness: [darkness]")
if("energy")
- var/mob/living/simple_mob/shadekin/SK = usr
- if(istype(SK))
- to_chat(usr,"Energy: [SK.energy] ([SK.dark_gains])")
var/mob/living/carbon/human/H = usr
if(istype(H) && istype(H.species, /datum/species/shadekin))
to_chat(usr,"Energy: [H.shadekin_get_energy(H)]")
diff --git a/code/modules/maps/_shim/away_spawner.dm b/code/modules/maps/_shim/away_spawner.dm
index beff6090453e..08ed95275c1c 100644
--- a/code/modules/maps/_shim/away_spawner.dm
+++ b/code/modules/maps/_shim/away_spawner.dm
@@ -92,22 +92,6 @@ For now this is still usable but bad.
depleted = TRUE
return
-//Shadekin spawner. Could have them show up on any mission, so it's here.
-//Make sure to put them away from others, so they don't get demolished by rude mobs.
-/obj/tether_away_spawner/shadekin
- name = "Shadekin Spawner"
- icon = 'icons/mob/vore_shadekin.dmi'
- icon_state = "spawner"
-
- faction = "shadekin"
- prob_spawn = 1
- prob_fall = 1
- //guard = 10 //Don't wander too far, to stay alive.
- mobs_to_pick_from = list(
- /mob/living/simple_mob/shadekin
- )
-
-
// Underdark mob spawners
/obj/tether_away_spawner/underdark_drone_swarm
name = "Underdark Drone Swarm Spawner"
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_objects.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_objects.dm
deleted file mode 100644
index b59ca72eea99..000000000000
--- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_objects.dm
+++ /dev/null
@@ -1,168 +0,0 @@
-/obj/effect/shadekin_ability
- name = ""
- desc = ""
- icon = 'icons/mob/screen_spells.dmi'
- var/ability_name = "FIX ME"
- var/cost = 50
- var/mob/living/simple_mob/shadekin/my_kin
- var/shift_mode = NOT_WHILE_SHIFTED
- var/ab_sound
-
-/obj/effect/shadekin_ability/Initialize(mapload)
- . = ..()
- my_kin = loc
- moveToNullspace()
-
-/obj/effect/shadekin_ability/Destroy()
- my_kin = null
- return ..()
-
-/obj/effect/shadekin_ability/proc/atom_button_text()
- var/shift_denial
-
- if(shift_mode == NOT_WHILE_SHIFTED && (my_kin.ability_flags & AB_PHASE_SHIFTED))
- shift_denial = "Physical Only"
- else if(shift_mode == ONLY_WHILE_SHIFTED && !(my_kin.ability_flags & AB_PHASE_SHIFTED))
- shift_denial = "Shifted Only"
-
- if(shift_denial)
- name = shift_denial
- else
- name = my_kin.energy >= cost ? "Activate" : "No Energy"
- return src
-
-/obj/effect/shadekin_ability/Click(var/location, var/control, var/params)
- if(my_kin.stat) return
-
- var/list/clickprops = params2list(params)
- var/opts = clickprops["shift"]
-
- if(opts)
- to_chat(my_kin,"[name] (Cost: [cost]%) - [desc]")
- else
- do_ability(my_kin)
-
-/obj/effect/shadekin_ability/proc/do_ability()
- if(my_kin.stat)
- to_chat(my_kin,"Can't use that ability in your state!")
- return FALSE
- if(shift_mode == NOT_WHILE_SHIFTED && (my_kin.ability_flags & AB_PHASE_SHIFTED))
- to_chat(my_kin,"Can't use that ability while phase shifted!")
- return FALSE
- else if(shift_mode == ONLY_WHILE_SHIFTED && !(my_kin.ability_flags & AB_PHASE_SHIFTED))
- to_chat(my_kin,"Can only use that ability while phase shifted!")
- return FALSE
- else if(my_kin.energy < cost)
- to_chat(my_kin,"Not enough energy for that ability!")
- return FALSE
-
- my_kin.energy -= cost
- if(ab_sound)
- playsound(src,ab_sound,75,1)
-
- return TRUE
-
-/////////////////////////////////////////////////////////////////
-/obj/effect/shadekin_ability/phase_shift
- ability_name = "Phase Shift"
- desc = "Shift yourself out of alignment with realspace to travel quickly between dark areas (or light areas, with a price)."
- icon_state = "tech_passwall"
- cost = 100
- shift_mode = SHIFTED_OR_NOT
- ab_sound = 'sound/effects/stealthoff.ogg'
-/obj/effect/shadekin_ability/phase_shift/do_ability()
- if(!..())
- return
- my_kin.phase_shift()
- if(my_kin.ability_flags & AB_PHASE_SHIFTED)
- cost = 0 //Shifting back is free (but harmful in light)
- else
- cost = initial(cost)
-/////////////////////////////////////////////////////////////////
-/obj/effect/shadekin_ability/heal_boop
- ability_name = "Regenerate Other"
- desc = "Spend energy to heal physical wounds in another creature."
- icon_state = "tech_biomedaura"
- cost = 50
- shift_mode = NOT_WHILE_SHIFTED
- ab_sound = 'sound/effects/EMPulse.ogg'
-/obj/effect/shadekin_ability/heal_boop/do_ability()
- if(!..())
- return
- if(!my_kin.mend_other())
- my_kin.energy += cost //Refund due to abort
-/*
-/datum/modifier/shadekin/heal_boop
- name = "Shadekin Regen"
- desc = "You feel serene and well rested."
- mob_overlay_state = "green_sparkles"
-
- on_created_text = "Sparkles begin to appear around you, and all your ills seem to fade away."
- on_expired_text = "The sparkles have faded, although you feel much healthier than before."
- stacks = MODIFIER_STACK_EXTEND
-
-/datum/modifier/shadekin/heal_boop/tick()
- if(!holder.getBruteLoss() && !holder.getFireLoss() && !holder.getToxLoss() && !holder.getOxyLoss() && !holder.getCloneLoss()) // No point existing if the spell can't heal.
- expire()
- return
- holder.adjustBruteLoss(-2)
- holder.adjustFireLoss(-2)
- holder.adjustToxLoss(-2)
- holder.adjustOxyLoss(-2)
- holder.adjustCloneLoss(-2)
-*/
-/////////////////////////////////////////////////////////////////
-/obj/effect/shadekin_ability/create_shade
- ability_name = "Create Shade"
- desc = "Create a field of darkness that follows you."
- icon_state = "tech_dispelold"
- cost = 25
- shift_mode = NOT_WHILE_SHIFTED
- ab_sound = 'sound/effects/bamf.ogg'
-/obj/effect/shadekin_ability/create_shade/do_ability()
- if(!..())
- return
- my_kin.add_modifier(/datum/modifier/shadekin/create_shade,20 SECONDS)
-/*
-/datum/modifier/shadekin/create_shade
- name = "Shadekin Shadegen"
- desc = "Darkness envelops you."
- mob_overlay_state = ""
-
- on_created_text = "You drag part of The Dark into realspace, enveloping yourself."
- on_expired_text = "You lose your grasp on The Dark and realspace reasserts itself."
- stacks = MODIFIER_STACK_EXTEND
- var/mob/living/simple_mob/shadekin/my_kin
-
-/datum/modifier/shadekin/create_shade/tick()
- if(my_kin.ability_flags & AB_PHASE_SHIFTED)
- expire()
-
-/datum/modifier/shadekin/create_shade/on_applied()
- my_kin = holder
- holder.glow_toggle = TRUE
- holder.glow_range = 8
- holder.glow_intensity = -10
- holder.glow_color = "#FFFFFF"
- holder.set_light(8, -10, "#FFFFFF")
-
-/datum/modifier/shadekin/create_shade/on_expire()
- holder.glow_toggle = initial(holder.glow_toggle)
- holder.glow_range = initial(holder.glow_range)
- holder.glow_intensity = initial(holder.glow_intensity)
- holder.glow_color = initial(holder.glow_color)
- holder.set_light(0)
- my_kin = null
-*/
-/*
-/////////////////////////////////////////////////////////////////
-/obj/effect/shadekin_ability/energy_feast
- ability_name = "Devour Energy"
- desc = "Devour the energy from another creature (potentially fatal)."
- icon_state = "gen_eat"
- cost = 25
- shift_mode = NOT_WHILE_SHIFTED
-/obj/effect/shadekin_ability/energy_feast/do_ability()
- if(!..())
- return
-*/
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm
deleted file mode 100644
index cd42c0628b68..000000000000
--- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm
+++ /dev/null
@@ -1,131 +0,0 @@
-// Phase shifting procs (and related procs)
-/mob/living/simple_mob/shadekin/proc/phase_shift()
- var/turf/T = get_turf(src)
- if(!T.CanPass(src,T) || loc != T)
- to_chat(src,"You can't use that here!")
- return FALSE
-
- forceMove(T)
- set_stunned(0)
- set_paralyzed(0)
- if(buckled)
- buckled.unbuckle_mob()
- if(pulledby)
- pulledby.stop_pulling()
- stop_pulling()
-
- //Shifting in
- if(ability_flags & AB_PHASE_SHIFTED)
- ability_flags &= ~AB_PHASE_SHIFTED
- mouse_opacity = 2
- name = real_name
- for(var/belly in vore_organs)
- var/obj/belly/B = belly
- B.escapable = initial(B.escapable)
-
- cut_overlays()
- alpha = initial(alpha)
- invisibility = initial(invisibility)
- see_invisible = initial(see_invisible)
- incorporeal_move = initial(incorporeal_move)
- density = initial(density)
- force_max_speed = initial(force_max_speed)
-
- //Cosmetics mostly
- flick("tp_in",src)
- custom_emote(1,"phases in!")
- sleep(5) //The duration of the TP animation
-
- //Potential phase-in vore
- if(can_be_drop_pred) //Toggleable in vore panel
- var/list/potentials = living_mobs(0)
- if(potentials.len)
- var/mob/living/target = pick(potentials)
- if(istype(target) && vore_selected)
- target.forceMove(vore_selected)
- to_chat(target,"\The [src] phases in around you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!")
-
- // Do this after the potential vore, so we get the belly
- update_icon()
-
- //Affect nearby lights
- var/destroy_lights = 0
- if(eye_state == RED_EYES)
- destroy_lights = 80
- if(eye_state == PURPLE_EYES)
- destroy_lights = 25
-
- for(var/obj/machinery/light/L in GLOB.machines)
- if(L.z != z || get_dist(src,L) > 10)
- continue
-
- if(prob(destroy_lights))
- spawn(rand(5,25))
- L.broken()
- else
- L.flicker(10)
-
- //Shifting out
- else
- ability_flags |= AB_PHASE_SHIFTED
- mouse_opacity = 0
- custom_emote(1,"phases out!")
- real_name = name
- name = "Something"
-
- for(var/belly in vore_organs)
- var/obj/belly/B = belly
- B.escapable = FALSE
-
- cut_overlays()
- flick("tp_out",src)
- sleep(5)
- invisibility = INVISIBILITY_LEVEL_TWO
- see_invisible = INVISIBILITY_LEVEL_TWO
- update_icon()
- alpha = 127
-
- incorporeal_move = TRUE
- density = FALSE
- force_max_speed = TRUE
-
-/mob/living/simple_mob/shadekin/UnarmedAttack()
- if(ability_flags & AB_PHASE_SHIFTED)
- return FALSE //Nope.
-
- . = ..()
-
-/mob/living/simple_mob/shadekin/can_fall()
- if(ability_flags & AB_PHASE_SHIFTED)
- return FALSE //Nope!
-
- return ..()
-
-/mob/living/simple_mob/shadekin/zMove(direction)
- if(ability_flags & AB_PHASE_SHIFTED)
- var/turf/destination = get_vertical_step(src, direction)
- if(destination)
- forceMove(destination)
- return TRUE
-
- return ..()
-
-// Healing others
-/mob/living/simple_mob/shadekin/proc/mend_other()
- //I hate to crunch a view() but I only want ones I can see
- var/list/viewed = oview(1)
- var/list/targets = list()
- for(var/mob/living/L in viewed)
- targets += L
- if(!targets.len)
- to_chat(src,"Nobody nearby to mend!")
- return FALSE
-
- var/mob/living/target = input(src,"Pick someone to mend:","Mend Other") as null|anything in targets
- if(!target)
- return FALSE
-
- target.add_modifier(/datum/modifier/shadekin/heal_boop,1 MINUTE)
- visible_message("\The [src] gently places a hand on \the [target]...")
- face_atom(target)
- return TRUE
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm
deleted file mode 100644
index f3229b147d27..000000000000
--- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm
+++ /dev/null
@@ -1,388 +0,0 @@
-/datum/vision/baseline/shadekin
- hard_darksight = 0
-
-/mob/living/simple_mob/shadekin //Spawning the prototype spawns a random one, see initialize()
- name = "shadekin"
- desc = "Some sort of fluffer. Big ears, long tail."
- catalogue_data = list(/datum/category_item/catalogue/fauna/shadekin)
- icon = 'icons/mob/vore_shadekin.dmi'
- icon_state = "map_example"
- icon_living = "map_example"
- faction = "shadekin"
- ui_icons = 'icons/screen/hud/common/shadekin.dmi'
- mob_class = MOB_CLASS_HUMANOID
- mob_bump_flag = HUMAN
-
- maxHealth = 200
- health = 200
-
- movement_cooldown = 2
- vision_innate = /datum/vision/baseline/shadekin
- attack_sound = 'sound/weapons/bladeslice.ogg'
- has_langs = list(LANGUAGE_GALCOM,LANGUAGE_SHADEKIN)
-
- legacy_melee_damage_lower = 10
- legacy_melee_damage_upper = 20
-
- min_oxy = 0
- max_oxy = 0
- min_tox = 0
- max_tox = 0
- min_co2 = 0
- max_co2 = 0
- min_n2 = 0
- max_n2 = 0
- minbodytemp = 0
- maxbodytemp = 900
-
- say_list_type = /datum/say_list/shadekin
-
- response_help = "pets the"
- response_disarm = "bops the"
- response_harm = "hits the"
-
- attacktext = list("mauled","slashed","clawed")
- friendly = list("boops", "pawbs", "mars softly at", "sniffs on")
-
- vore_active = TRUE
- vore_pounce_chance = 10
- vore_icons = SA_ICON_LIVING
- swallowTime = 2 SECONDS
- vore_escape_chance = 25
-
- //None, they stay as their defaults.
- vore_digest_chance = 0
- vore_absorb_chance = 0
- vore_bump_chance = 0 //They follow people, this would be DENGEROUS
-
- var/eye_state = RED_EYES //Eye color/energy gain/loss mode
- var/eye_icon_state = null //Default, changed in init
- var/eye_desc //Eye color description added to examine
-
- var/mob/living/carbon/human/henlo_human //Human we're stalking currently
-
- //Behavior
- var/stalker = TRUE //Do we creep up on humans
- var/shy_approach = FALSE //Do we creep up slowly on humans to boop them
-
- //Icon handling
- var/image/tailimage //Cached tail image
-
- //Darknesssss
- var/energy = 100 //For abilities
- var/energy_adminbuse = FALSE //For adminbuse infinite energy
- var/dark_gains = 0 //Last tick's change in energy
- var/ability_flags = 0 //Flags for active abilities
- var/atom/movable/screen/darkhud //Holder to update this icon
- var/atom/movable/screen/energyhud //Holder to update this icon
-
- var/list/shadekin_abilities
-
-/mob/living/simple_mob/shadekin/Initialize(mapload)
- //You spawned the prototype, and want a totally random one.
- if(type == /mob/living/simple_mob/shadekin)
-
- //I'm told by VerySoft these are the liklihood values
- var/list/sk_types = list(
- /mob/living/simple_mob/shadekin/red = 20, //Actively seek people out to nom, so fairly common to see (relatively speaking),
- /mob/living/simple_mob/shadekin/blue = 15, //Explorers that like to interact with people, so still fairly common,
- /mob/living/simple_mob/shadekin/purple = 15, //Also explorers that may or may not homf people,
- /mob/living/simple_mob/shadekin/yellow = 1 //Very rare, usually never leaves their home
- )
- var/new_type = pickweight(sk_types)
-
- new new_type(loc)
- return INITIALIZE_HINT_QDEL
-
- if(icon_state == "map_example")
- icon_state = pick("white","dark","brown")
-
- icon_living = icon_state
-
- switch(eye_state)
- if(BLUE_EYES)
- eye_icon_state = "e_blue"
- if(RED_EYES)
- eye_icon_state = "e_red"
- if(PURPLE_EYES)
- eye_icon_state = "e_purple"
- if(YELLOW_EYES)
- eye_icon_state = "e_yellow"
- if(GREEN_EYES)
- eye_icon_state = "e_green"
- if(ORANGE_EYES)
- eye_icon_state = "e_orange"
- else
- eye_icon_state = "e_red"
-
- tailimage = image('icons/mob/vore_shadekin64.dmi',null,icon_state)
- tailimage.pixel_x = -16
-
- if(eye_desc)
- desc += " This one has [eye_desc]!"
-
- var/list/ability_types = subtypesof(/obj/effect/shadekin_ability)
- shadekin_abilities = list()
- for(var/type in ability_types)
- shadekin_abilities += new type(null, src)
-
- update_icon()
-
- return ..()
-
-/mob/living/simple_mob/shadekin/Destroy()
- QDEL_LIST_NULL(shadekin_abilities)
- . = ..()
-
-/mob/living/simple_mob/shadekin/init_vore()
- if(LAZYLEN(vore_organs))
- return
-
- var/obj/belly/B = new /obj/belly(src)
- vore_selected = B
- B.immutable = 1
- B.name = vore_stomach_name ? vore_stomach_name : "stomach"
- B.desc = vore_stomach_flavor ? vore_stomach_flavor : "Your surroundings are warm, soft, and slimy. Makes sense, considering you're inside \the [name]."
- B.digest_mode = vore_default_mode
- B.escapable = vore_escape_chance > 0
- B.escapechance = vore_escape_chance
- B.digestchance = vore_digest_chance
- B.absorbchance = vore_absorb_chance
- B.human_prey_swallow_time = swallowTime
- B.nonhuman_prey_swallow_time = swallowTime
- B.vore_verb = "swallow"
- // TODO - Customizable per mob
- B.emote_lists[DM_HOLD] = list(
- "The walls gently squeeze against you. The wet sounds of shifting flesh against your form fill the air.",
- "The hot, humid air rushes around you for a moment as the creature urps. The walls clench in around you for a moment, before relaxing again.",
- "Your body is soaked in the fluids that cling to the churning walls. They squeeze across your form gently, conforming to your shape.",
- "You can feel the world around you shift and sway as the creature moves! The flesh is stretchy, doughy. You can sink into it a little ways before it bounces back, curling you into a small shape."
- )
- B.emote_lists[DM_DIGEST] = list(
- "The walls slop thick slime across your body! It tingles briefly before the sting and ache sets in!",
- "The sound of your body slipping and sliding against the powerfully churning stomach fills the air!",
- "The grip of that stomach is harsh. Eagerly mushing and rubbing that slime into your body in attempts to break you down!",
- "The intense churning and grinding jostles your around within the thick slime as you're slowly broken down!"
- )
- B.emote_lists[DM_ABSORB] = list(
- "The walls cling to you awfully close... It's almost like you're sinking into them.",
- "You can feel the walls press in tightly against you, clinging to you posessively!",
- "It almost feels like you're sinking into the soft, doughy flesh!",
- "You can feel the walls press in around you. Almost molten, so squishy!!"
- )
- B.emote_lists[DM_DRAIN] = list(
- "The walls churn down on you heavily!! It's hard to move!",
- "You can feel yourself getting weaker with every moment! The doughy walls sap your strength!",
- "You're practically smothered in the oppressive heat of the creature's stomach!",
- "It's hot, wet and tight!"
- )
- B.emote_lists[DM_HEAL] = list(
- "The walls pulse against you almost rhythmically. It feels nice, almost like a massage.",
- "You're gently squeezed in pleasant warmth, softly churned.",
- "The doughy feel of the heavy flesh clinging to you makes you feel a little stronger with every passing moment.",
- "The flesh caresses across your body gently as you're held."
- )
- B.digest_messages_prey = list(
- "Your body is steadily softened more and more over time! Eventually you pass out. The creature's stomach rumbles powerfully as you are reduced to paste, processed for energy!",
- "The creature's slimy gut lets out a heavy groan as you're slowly melted away. Gushing deeper through the creature.",
- "The stinging and aching gives way to numbness as you're slowly smothered out. Your body is steadily reduced to nutrients and energy for the creature to continue on its way.",
- "The chaos of being digested fades as you're snuffed out by a harsh clench! You're steadily broken down into a thick paste, processed and absorbed by the predator!"
- )
-
-/mob/living/simple_mob/shadekin/Life(seconds, times_fired)
- if((. = ..()))
- return
-
- if(ability_flags & AB_PHASE_SHIFTED)
- density = FALSE
-
-/mob/living/simple_mob/shadekin/BiologicalLife(seconds, times_fired)
- if((. = ..()))
- return
-
- //Convert spare nutrition into energy at a certain ratio
- if(. && nutrition > initial(nutrition) && energy < 100)
- nutrition = max(0, nutrition-5)
- energy = min(100,energy+1)
-
-/mob/living/simple_mob/shadekin/update_icon()
- . = ..()
-
- cut_overlay(tailimage)
-
- tailimage.icon_state = icon_state
-
- add_overlay(tailimage)
- add_overlay(eye_icon_state)
-
-/mob/living/simple_mob/shadekin/statpanel_data(client/C)
- . = ..()
- if(C.statpanel_tab("Shadekin"))
- STATPANEL_DATA_LINE("")
- for(var/A in shadekin_abilities)
- var/obj/effect/shadekin_ability/ability = A
- ability.atom_button_text()
- STATPANEL_DATA_CLICK("[ability.ability_name]", "[ability.name]", "\ref[ability]")
-
-//They phase back to the dark when killed
-/mob/living/simple_mob/shadekin/death(gibbed, deathmessage = "phases to somewhere far away!")
- cut_overlays()
- icon_state = ""
- flick("tp_out",src)
- spawn(1 SECOND)
- qdel(src) //Back from whence you came!
-
- . = ..(FALSE, deathmessage)
-
-//They reach nutritional equilibrium (important for blue-eyes healbelly)
-/mob/living/simple_mob/shadekin/Life(seconds, times_fired)
- if((. = ..()))
- handle_shade()
-
-/mob/living/simple_mob/shadekin/is_incorporeal()
- if(ability_flags & AB_PHASE_SHIFTED)
- return TRUE
- return FALSE
-
-/mob/living/simple_mob/shadekin/handle_atmos()
- if(ability_flags & AB_PHASE_SHIFTED)
- return
- else
- return .=..()
-
-/mob/living/simple_mob/shadekin/proc/handle_shade()
- //Shifted kin don't gain/lose energy (and save time if we're at the cap)
- var/darkness = 1
-
-
- var/turf/T = get_turf(src)
- if(!T)
- dark_gains = 0
- return
-
- var/brightness = T.get_lumcount() //Brightness in 0.0 to 1.0
- darkness = 1-brightness //Invert
-
- if(ability_flags & AB_PHASE_SHIFTED)
- dark_gains = 0
- else
- //Heal (very) slowly in good darkness
- if(darkness >= 0.75)
- adjustFireLoss(-0.05)
- adjustBruteLoss(-0.05)
- adjustToxLoss(-0.05)
-
- switch(eye_state)
- //Blue has constant, steady (slow) regen and ignores darkness.
- if(BLUE_EYES)
- dark_gains = 0.5
- //Red has extremely tiny energy buildup in dark, none in light, and hunts for energy.
- if(RED_EYES)
- if(darkness >= 0.75)
- dark_gains = 0.25
- //Purple eyes have moderate gains in darkness and loss in light.
- if(PURPLE_EYES)
- dark_gains = round((darkness - 0.5) * 2, 0.1)
- //Yellow has extreme gains in darkness and loss in light.
- if(YELLOW_EYES)
- dark_gains = round((darkness - 0.5) * 4, 0.1)
- //Similar to blues, but passive is less, and affected by dark
- if(GREEN_EYES)
- dark_gains = 0.25
- dark_gains += round((darkness - 0.5), 0.1)
- //More able to get energy out of the dark, worse attack gains tho
- if(ORANGE_EYES)
- if(darkness >= 0.65)
- dark_gains = 0.30
-
- energy = max(0,min(initial(energy),energy + dark_gains))
-
- if(energy_adminbuse)
- energy = 100
-
- //Update turf darkness hud
- if(darkhud)
- switch(darkness)
- if(0.80 to 1.00)
- darkhud.icon_state = "dark2"
- if(0.60 to 0.80)
- darkhud.icon_state = "dark1"
- if(0.40 to 0.60)
- darkhud.icon_state = "dark"
- if(0.20 to 0.40)
- darkhud.icon_state = "dark-1"
- if(0.00 to 0.20)
- darkhud.icon_state = "dark-2"
-
- //Update energy storage hud
- if(energyhud)
- switch(energy)
- if(80 to INFINITY)
- energyhud.icon_state = "energy0"
- if(60 to 80)
- energyhud.icon_state = "energy1"
- if(40 to 60)
- energyhud.icon_state = "energy2"
- if(20 to 40)
- energyhud.icon_state = "energy3"
- if(0 to 20)
- energyhud.icon_state = "energy4"
-
-/mob/living/simple_mob/shadekin/speech_bubble_appearance()
- return "ghost"
-
-/mob/living/simple_mob/shadekin/apply_melee_effects(var/atom/A)
- . = ..(A)
- if(isliving(A)) //We punched something!
- var/mob/living/L = A
- if(L.stat != DEAD)
- var/gains = 0
- switch(eye_state)
- if(RED_EYES)
- gains = 8
- if(BLUE_EYES)
- gains = 1
- if(PURPLE_EYES)
- gains = 4
- if(YELLOW_EYES)
- gains = 3
- if(GREEN_EYES)
- gains = 1
- if(ORANGE_EYES)
- gains = 5
-
- energy += gains
-
-//Special hud elements for darkness and energy gains
-/mob/living/simple_mob/shadekin/extra_huds(var/datum/hud/hud,var/icon/ui_style,var/list/hud_elements)
- //Darkness hud
- darkhud = new /atom/movable/screen()
- darkhud.icon = ui_style
- darkhud.icon_state = "dark"
- darkhud.name = "darkness"
- darkhud.screen_loc = "CENTER-2:16,SOUTH:5" //Left of the left hand
- darkhud.alpha = 150
- hud_elements |= darkhud
-
- //Energy hud
- energyhud = new /atom/movable/screen()
- energyhud.icon = ui_style
- energyhud.icon_state = "energy0"
- energyhud.name = "energy"
- energyhud.screen_loc = "CENTER+1:16,SOUTH:5" //Right of the right hand
- energyhud.alpha = 150
- hud_elements |= energyhud
-
-// When someone clicks us with an empty hand
-/mob/living/simple_mob/shadekin/attack_hand(mob/user, list/params)
- . = ..()
- if(user.a_intent == INTENT_HELP)
- shy_approach = FALSE //ACCLIMATED
-
-/datum/say_list/shadekin
- speak = list("Marrr.", "Marrr?", "Marrr!")
- emote_hear = list("chrrrrrs", "wurbles", "wrrrrbles")
- emote_see = list("tailtwitches", "earflicks")
- say_maybe_target = list("...mar?")
- say_got_target = list("MAR!!!")
- //reactions = list("Mar?" = "Marrr!", "Mar!" = "Marrr???", "Mar." = "Marrr.")
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/types.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/types.dm
deleted file mode 100644
index 810735642908..000000000000
--- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/types.dm
+++ /dev/null
@@ -1,326 +0,0 @@
-/////////////////////////////////////////////////////////////////
-/mob/living/simple_mob/shadekin/red
- name = "red-eyed shadekin"
- eye_state = RED_EYES
- //hostile = TRUE
- //animal = TRUE
- //stop_when_pulled = FALSE
- //destroy_surroundings = TRUE
- armor_legacy_mob = list(
- "melee" = 30,
- "bullet" = 20,
- "laser" = 20,
- "energy" = 50,
- "bomb" = 10,
- "bio" = 100,
- "rad" = 100)
-
- eye_desc = "red eyes"
-
- vore_stomach_flavor = "You slip past pointy triangle teeth and down the slick, \
- slippery gullet of the creature. It's warm, and the air is thick. You can hear \
- its body squelch and shift around you as you settle into its stomach! Thick digestive \
- enzymes cling to you within that dark space, tingling and stinging immediately! The weight of \
- the doughy walls press in around you instantly, churning you up as you begin to digest!"
-
- player_msg = "You hunt for energy to fuel yourself, not minding in the least \
- if you strip it off unsuspecting prey. You're stronger than other shadekin, faster, and more capable in \
- a brawl, but you barely generate any of your own energy. You can stand in a dark spot to gather scraps \
- of energy in a pinch, but otherwise need to take it, by force if necessary."
-
-/mob/living/simple_mob/shadekin/red/white
- icon_state = "white"
-/mob/living/simple_mob/shadekin/red/dark
- icon_state = "dark"
-/mob/living/simple_mob/shadekin/red/brown
- icon_state = "brown"
-
-/mob/living/simple_mob/shadekin/red/ai
- ai_holder_type = /datum/ai_holder/polaris/simple_mob/melee
-
-/mob/living/simple_mob/shadekin/red/ai/white
- icon_state = "white"
-/mob/living/simple_mob/shadekin/red/ai/dark
- icon_state = "dark"
-/mob/living/simple_mob/shadekin/red/ai/brown
- icon_state = "brown"
-
-/////////////////////////////////////////////////////////////////
-/mob/living/simple_mob/shadekin/blue
- name = "blue-eyed shadekin"
- eye_state = BLUE_EYES
- health = 100
- //hostile = FALSE
- //animal = FALSE
- //stop_when_pulled = TRUE
- //specific_targets = TRUE //For finding injured people
- //destroy_surroundings = FALSE
- vore_default_mode = DM_HEAL
- vore_escape_chance = 75
- vore_standing_too = 1
- vore_pounce_chance = 100
- swallowTime = 4 SECONDS //A little longer to compensate for the above
- vore_ignores_undigestable = FALSE
- attacktext = list("shoved")
- armor_legacy_mob = list(
- "melee" = 5,
- "bullet" = 5,
- "laser" = 5,
- "energy" = 5,
- "bomb" = 0,
- "bio" = 100,
- "rad" = 100)
-
- eye_desc = "blue eyes"
- shy_approach = TRUE
- stalker = TRUE
- vore_stomach_flavor = "You slip past pointy triangle teeth and down the slick, \
- slippery gullet of the creature. It's warm, and the air is thick. You can hear its body \
- squelch and shift around you as you settle into its stomach! It's oddly calm, and very dark. \
- The doughy flesh rolls across your form in gentle waves. The aches and pains across your form slowly begin to \
- diminish, your body is healing much faster than normal! You're also soon soaked in harmless slime."
-
- player_msg = "You've chosen to generate your own energy rather than taking \
- it from others. Most of the time, anyway. You don't have a need to steal energy from others, and gather it up \
- without doing so, albeit slowly. Dark and light are irrelevant to you, they are just different places to explore and \
- discover new things and new people."
-
-/mob/living/simple_mob/shadekin/blue/white
- icon_state = "white"
-/mob/living/simple_mob/shadekin/blue/dark
- icon_state = "dark"
-/mob/living/simple_mob/shadekin/blue/brown
- icon_state = "brown"
-
-/mob/living/simple_mob/shadekin/blue/ai
- ai_holder_type = /datum/ai_holder/polaris/simple_mob/passive
-
-/mob/living/simple_mob/shadekin/blue/ai/white
- icon_state = "white"
-/mob/living/simple_mob/shadekin/blue/ai/dark
- icon_state = "dark"
-/mob/living/simple_mob/shadekin/blue/ai/brown
- icon_state = "brown"
-
-/////////////////////////////////////////////////////////////////
-/mob/living/simple_mob/shadekin/purple
- name = "purple-eyed shadekin"
- eye_state = PURPLE_EYES
- health = 150
- //hostile = FALSE
- //animal = TRUE
- //stop_when_pulled = FALSE
- //destroy_surroundings = TRUE
- vore_default_mode = DM_HOLD
- vore_digest_chance = 25
- vore_absorb_chance = 25
- armor_legacy_mob = list(
- "melee" = 15,
- "bullet" = 15,
- "laser" = 15,
- "energy" = 15,
- "bomb" = 15,
- "bio" = 100,
- "rad" = 100)
-
- eye_desc = "purple eyes"
- shy_approach = TRUE
- stalker = TRUE
- vore_stomach_flavor = "You slip past pointy triangle teeth and down the slick, slippery gullet of the creature. \
- It's warm, and the air is thick. You can hear its body squelch and shift around you as you settle into its stomach! \
- It's relatively calm inside the dark organ. Wet and almost molten for how gooey your surroundings feel. \
- You can feel the doughy walls cling to you posessively... It's almost like you could sink into them. \
- There is also an ominous gurgling from somewhere nearby..."
-
- player_msg = "You're familiar with generating your own energy, but occasionally \
- steal it from others when it suits you. You generate energy at a moderate pace in dark areas, and staying in well-lit \
- areas is taxing on your energy. You can harvest energy from others in a fight, but since you don't need to, you may \
- just choose to simply not fight."
-
-/mob/living/simple_mob/shadekin/purple/white
- icon_state = "white"
-/mob/living/simple_mob/shadekin/purple/dark
- icon_state = "dark"
-/mob/living/simple_mob/shadekin/purple/brown
- icon_state = "brown"
-
-/mob/living/simple_mob/shadekin/purple/ai
- ai_holder_type = /datum/ai_holder/polaris/simple_mob/retaliate
-
-/mob/living/simple_mob/shadekin/purple/ai/white
- icon_state = "white"
-/mob/living/simple_mob/shadekin/purple/ai/dark
- icon_state = "dark"
-/mob/living/simple_mob/shadekin/purple/ai/brown
- icon_state = "brown"
-
-/////////////////////////////////////////////////////////////////
-/mob/living/simple_mob/shadekin/yellow
- name = "yellow-eyed shadekin"
- eye_state = YELLOW_EYES
- health = 100
- //hostile = FALSE
- //animal = TRUE
- //stop_when_pulled = FALSE
- //destroy_surroundings = TRUE
- vore_default_mode = DM_DRAIN
- vore_digest_chance = 5
- vore_ignores_undigestable = FALSE
- armor_legacy_mob = list(
- "melee" = 5,
- "bullet" = 5,
- "laser" = 5,
- "energy" = 5,
- "bomb" = 0,
- "bio" = 100,
- "rad" = 100)
-
- eye_desc = "yellow eyes"
- stalker = FALSE
- vore_stomach_flavor = "You slip past pointy triangle teeth and down the slick, slippery gullet \
- of the creature. It's warm, and the air is thick. You can hear its body squelch and shift around you \
- as you settle into its stomach! The doughy walls within cling to you heavily, churning down on you, wearing \
- you out!! There doesn't appear to be any actual danger here, harmless slime clings to you, but it's getting \
- harder and harder to move as those walls press in on you insistently!"
-
- player_msg = "Your kind rarely ventures into realspace. Being in any well-lit \
- area is very taxing on you, but you gain energy extremely fast in any very dark area. You're weaker than other \
- shadekin, but your fast energy generation in the dark allows you to phase shift more often."
-
-/mob/living/simple_mob/shadekin/yellow/white
- icon_state = "white"
-/mob/living/simple_mob/shadekin/yellow/dark
- icon_state = "dark"
-/mob/living/simple_mob/shadekin/yellow/brown
- icon_state = "brown"
-
-/mob/living/simple_mob/shadekin/yellow/ai
- ai_holder_type = /datum/ai_holder/polaris/simple_mob/melee/hit_and_run
-
-/mob/living/simple_mob/shadekin/yellow/ai/white
- icon_state = "white"
-/mob/living/simple_mob/shadekin/yellow/ai/dark
- icon_state = "dark"
-/mob/living/simple_mob/shadekin/yellow/ai/brown
- icon_state = "brown"
-
-/mob/living/simple_mob/shadekin/yellow/ai/retaliate
- ai_holder_type = /datum/ai_holder/polaris/simple_mob/retaliate
-
-/mob/living/simple_mob/shadekin/yellow/ai/retaliate/white
- icon_state = "white"
-/mob/living/simple_mob/shadekin/yellow/ai/retaliate/dark
- icon_state = "dark"
-/mob/living/simple_mob/shadekin/yellow/ai/retaliate/brown
- icon_state = "brown"
-
-/////////////////////////////////////////////////////////////////
-/mob/living/simple_mob/shadekin/green
- name = "green-eyed shadekin"
- eye_state = GREEN_EYES
- health = 125
- //hostile = FALSE
- //animal = TRUE
- //stop_when_pulled = FALSE
- //destroy_surroundings = TRUE
- vore_default_mode = DM_DRAIN
- vore_digest_chance = 0
- vore_ignores_undigestable = FALSE
- armor_legacy_mob = list(
- "melee" = 5,
- "bullet" = 5,
- "laser" = 5,
- "energy" = 5,
- "bomb" = 0,
- "bio" = 100,
- "rad" = 100)
-
- eye_desc = "green eyes"
- stalker = TRUE
- vore_stomach_flavor = "You slip past pointy triangle teeth and down the slick, slippery gullet \
- of the creature. It's warm, and the air is thick. You can hear its body squelch and shift around you \
- as you settle into its stomach! The doughy walls within cling to you heavily, churning down on you, wearing \
- you out!! There doesn't appear to be any actual danger here, harmless slime clings to you, but it's getting \
- harder and harder to move as those walls press in on you insistently!"
-
- player_msg = "Your kind rarely ventures into realspace. Being in any well-lit area is very taxing on you, but you \
- have more experience than your yellow-eyed cousins. You gain energy decently fast in any very dark area. You're weaker than other \
- shadekin, but your slight energy generation constnatly, and especially in the dark allows for a good mix of uses."
-
-/mob/living/simple_mob/shadekin/green/white
- icon_state = "white"
-/mob/living/simple_mob/shadekin/green/dark
- icon_state = "dark"
-/mob/living/simple_mob/shadekin/green/brown
- icon_state = "brown"
-
-/mob/living/simple_mob/shadekin/green/ai
- ai_holder_type = /datum/ai_holder/polaris/simple_mob/passive
-
-/mob/living/simple_mob/shadekin/green/ai/white
- icon_state = "white"
-/mob/living/simple_mob/shadekin/green/ai/dark
- icon_state = "dark"
-/mob/living/simple_mob/shadekin/green/ai/brown
- icon_state = "brown"
-
-/////////////////////////////////////////////////////////////////
-/mob/living/simple_mob/shadekin/orange
- name = "orange-eyed shadekin"
- eye_state = ORANGE_EYES
- health = 175
- //hostile = TRUE
- //animal = TRUE
- //stop_when_pulled = FALSE
- //destroy_surroundings = TRUE
- armor_legacy_mob = list(
- "melee" = 20,
- "bullet" = 15,
- "laser" = 15,
- "energy" = 25,
- "bomb" = 10,
- "bio" = 100,
- "rad" = 100)
-
- eye_desc = "orange eyes"
-
- vore_stomach_flavor = "You slip past pointy triangle teeth and down the slick, \
- slippery gullet of the creature. It's warm, and the air is thick. You can hear \
- its body squelch and shift around you as you settle into its stomach! Thick digestive \
- enzymes cling to you within that dark space, tingling and stinging immediately! The weight of \
- the doughy walls press in around you instantly, churning you up as you begin to digest!"
-
- player_msg = "You usually hunt for energy to fuel yourself, though not as often as your red-eyed cousins. \
- You're stronger than most shadekin, faster, and more capable in a brawl, but you don't generate much of your own energy. \
- You can stand in a dark spot to gather some energy, but otherwise need to take it, by force if necessary."
-
-/mob/living/simple_mob/shadekin/orange/white
- icon_state = "white"
-/mob/living/simple_mob/shadekin/orange/dark
- icon_state = "dark"
-/mob/living/simple_mob/shadekin/orange/brown
- icon_state = "brown"
-
-/mob/living/simple_mob/shadekin/orange/ai
- ai_holder_type = /datum/ai_holder/polaris/simple_mob/melee
-
-/mob/living/simple_mob/shadekin/orange/ai/white
- icon_state = "white"
-/mob/living/simple_mob/shadekin/orange/ai/dark
- icon_state = "dark"
-/mob/living/simple_mob/shadekin/orange/ai/brown
- icon_state = "brown"
-
-/////////////////////////////////////////////////////////////////
-//Fluffy specific fluffer
-/mob/living/simple_mob/shadekin/blue/rivyr
- name = "Rivyr"
- desc = "She appears to be a fluffer of some sort. Deep blue eyes and curious attitude."
- icon_state = "rivyr"
- eye_desc = ""
- vore_stomach_flavor = "Blue flesh gleams in the fading light as you slip down the little mar's gullet! \
- Gooey flesh and heat surrounds your form as you're tucked away into the darkness of her stomach! Thick slimes cling \
- to you, but they seem to be harmless. The organ gently churns around you, clinging to your shape and forcing \
- you to curl up a bit. You can feel her rub at you some through the layers of flesh and fluff, while aches \
- and pains begin to fade away across your body."
- player_msg = "Mar? Mar mar. Mar mar mar. Mar. Mar mar? Mar! Mar. Marrrr."
diff --git a/code/modules/species/shadekin/crew_shadekin_abilities.dm b/code/modules/species/shadekin/crew_shadekin_abilities.dm
index 359b1eca0824..e6b878cb70a0 100644
--- a/code/modules/species/shadekin/crew_shadekin_abilities.dm
+++ b/code/modules/species/shadekin/crew_shadekin_abilities.dm
@@ -109,7 +109,7 @@
on_created_text = "You drag part of The Dark into realspace, enveloping yourself."
on_expired_text = "You lose your grasp on The Dark and realspace reasserts itself."
stacks = MODIFIER_STACK_EXTEND
- var/mob/living/simple_mob/shadekin/my_kin
+ var/mob/living/carbon/human/my_kin
/datum/modifier/crew_shadekin/create_shade/tick()
if(my_kin.ability_flags & AB_PHASE_SHIFTED)
diff --git a/code/modules/species/shadekin/shadekin_abilities.dm b/code/modules/species/shadekin/shadekin_abilities.dm
index 79842dfb72b4..218cb4d4cd25 100644
--- a/code/modules/species/shadekin/shadekin_abilities.dm
+++ b/code/modules/species/shadekin/shadekin_abilities.dm
@@ -287,7 +287,7 @@
on_created_text = "You drag part of The Dark into realspace, enveloping yourself."
on_expired_text = "You lose your grasp on The Dark and realspace reasserts itself."
stacks = MODIFIER_STACK_EXTEND
- var/mob/living/simple_mob/shadekin/my_kin
+ var/mob/living/carbon/human/my_kin
/datum/modifier/shadekin/create_shade/tick()
if(my_kin.ability_flags & AB_PHASE_SHIFTED)