From 0da8419e5af2351554768c732fef2b52a07c56cf Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Sun, 1 Sep 2024 15:02:12 -0400 Subject: [PATCH] removes simplemob shadekins (#6713) --- citadel.dme | 4 - code/game/rendering/screen.dm | 3 - code/modules/maps/_shim/away_spawner.dm | 16 - .../subtypes/vore/shadekin/ability_objects.dm | 168 -------- .../subtypes/vore/shadekin/ability_procs.dm | 131 ------ .../subtypes/vore/shadekin/shadekin.dm | 388 ------------------ .../subtypes/vore/shadekin/types.dm | 326 --------------- .../shadekin/crew_shadekin_abilities.dm | 2 +- .../species/shadekin/shadekin_abilities.dm | 2 +- 9 files changed, 2 insertions(+), 1038 deletions(-) delete mode 100644 code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_objects.dm delete mode 100644 code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm delete mode 100644 code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm delete mode 100644 code/modules/mob/living/simple_mob/subtypes/vore/shadekin/types.dm diff --git a/citadel.dme b/citadel.dme index 91cbf1b6423..898d2771d3f 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 480f0735006..77bd443fe47 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 beff6090453..08ed95275c1 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 b59ca72eea9..00000000000 --- 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 cd42c0628b6..00000000000 --- 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 f3229b147d2..00000000000 --- 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 81073564290..00000000000 --- 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 359b1eca082..e6b878cb70a 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 79842dfb72b..218cb4d4cd2 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)