diff --git a/code/modules/mob/living/simple_animal/vore/shadekin/rakshasa_abilities.dm b/code/modules/mob/living/simple_animal/vore/shadekin/rakshasa_abilities.dm new file mode 100644 index 0000000000..57c0bab340 --- /dev/null +++ b/code/modules/mob/living/simple_animal/vore/shadekin/rakshasa_abilities.dm @@ -0,0 +1,661 @@ +/mob/living/simple_animal/shadekin/initialize() + var/list/ability_types = subtypesof(/obj/effect/shadekin_ability) + ability_types += subtypesof(/obj/effect/rakshasa_ability) + shadekin_abilities = list() + for(var/type in ability_types) + shadekin_abilities += new type(src) + + update_icon() + + return ..() + + +/obj/effect/rakshasa_ability + name = "" + desc = "" + icon = 'icons/mob/screen_spells.dmi' + var/ability_name = "FIX ME" + var/cost = 50 + var/mob/living/simple_animal/shadekin/my_kin + var/shift_mode = NOT_WHILE_SHIFTED + var/ab_sound + +/obj/effect/rakshasa_ability/New(var/new_kin) + ..() + my_kin = new_kin + loc = null + +/obj/effect/rakshasa_ability/Destroy() + my_kin = null + return ..() + +/obj/effect/rakshasa_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/rakshasa_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/rakshasa_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/rakshasa_ability/phase_shift2 + ability_name = "Goo Shift" + desc = "Shift yourself with goopy effects." + icon_state = "tech_passwall" + cost = 100 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/phase_shift2/do_ability() + if(!..()) + return + new /obj/effect/decal/cleanable/blood/oil(loc, src) + playsound(src, 'sound/rakshasa/Corrosion1.ogg', 100, 1) + my_kin.phase_shift() + if(my_kin.ability_flags & AB_PHASE_SHIFTED) + cost = 0 //Shifting back is free (but harmful in light) + new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) + var/goo_sounds = list ( + 'sound/rakshasa/Decay1.ogg', + 'sound/rakshasa/Decay2.ogg', + 'sound/rakshasa/Decay3.ogg' + ) + var/sound = pick(goo_sounds) + playsound(my_kin.loc, sound, 100, 1) + else + cost = initial(cost) + new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) + playsound(my_kin.loc, 'sound/rakshasa/Emerge0.ogg', 100, 1) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/phase_shift3 + ability_name = "Goo Shift No Emerge" + desc = "Shift yourself with goopy effects." + icon_state = "tech_passwall" + cost = 100 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/phase_shift3/do_ability() + if(!..()) + return + new /obj/effect/decal/cleanable/blood/oil(loc, src) + playsound(src, 'sound/rakshasa/Corrosion1.ogg', 100, 1) + my_kin.phase_shift() + if(my_kin.ability_flags & AB_PHASE_SHIFTED) + cost = 0 //Shifting back is free (but harmful in light) + new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) + var/goo_sounds = list ( + 'sound/rakshasa/Decay1.ogg', + 'sound/rakshasa/Decay2.ogg', + 'sound/rakshasa/Decay3.ogg' + ) + var/sound = pick(goo_sounds) + playsound(my_kin.loc, sound, 100, 1) + else + cost = initial(cost) + new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) + var/goo_sounds = list ( + 'sound/rakshasa/Decay1.ogg', + 'sound/rakshasa/Decay2.ogg', + 'sound/rakshasa/Decay3.ogg' + ) + var/sound = pick(goo_sounds) + playsound(my_kin.loc, sound, 100, 1) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/drip_oil + ability_name = "Goo Drip" + desc = "Drip some goo." + icon_state = "" + cost = 0 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/drip_oil/do_ability() + if(!..()) + return + new /obj/effect/decal/cleanable/blood/oil(my_kin.loc) + var/goo_sounds = list ( + 'sound/rakshasa/Decay1.ogg', + 'sound/rakshasa/Decay2.ogg', + 'sound/rakshasa/Decay3.ogg' + ) + var/sound = pick(goo_sounds) + playsound(my_kin.loc, sound, 100, 1) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/laugh + ability_name = "Laugh" + desc = "Laugh." + icon_state = "" + cost = 0 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/laugh/do_ability() + if(!..()) + return + playsound(my_kin.loc, 'sound/rakshasa/Laugh.ogg', 100, 1) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/no + ability_name = "Say No" + desc = "Say no!" + icon_state = "" + cost = 0 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/no/do_ability() + if(!..()) + return + playsound(my_kin.loc, 'sound/rakshasa/No.ogg', 100, 1) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/trap + ability_name = "Lay Trap" + desc = "Lay a trap that will notify you when someone steps in it." + icon_state = "" + cost = 0 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/trap/do_ability() + if(!..()) + return + var/goo_sounds = list ( + 'sound/rakshasa/Corrosion1.ogg', + 'sound/rakshasa/Corrosion2.ogg', + 'sound/rakshasa/Corrosion3.ogg' + ) + var/sound = pick(goo_sounds) + playsound(my_kin.loc, sound, 100, 1) + new /obj/structure/gootrap (my_kin.loc) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/* +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// // +// // +// Starting Stuff // +// // +// // +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +var/list/rakshasa_abilities + +/mob/living/simple_animal/shadekin/rakshasa/initialize() + //You spawned the prototype, and want a totally random one. + if(type == /mob/living/simple_animal/shadekin/rakshasa) + + //I'm told by VerySoft these are the liklihood values + var/list/sk_types = list( + /mob/living/simple_animal/shadekin/red = 20, //Actively seek people out to nom, so fairly common to see (relatively speaking), + /mob/living/simple_animal/shadekin/blue = 15, //Explorers that like to interact with people, so still fairly common, + /mob/living/simple_animal/shadekin/purple = 15, //Also explorers that may or may not homf people, + /mob/living/simple_animal/shadekin/yellow = 1 //Very rare, usually never leaves their home + ) + var/new_type = pickweight(sk_types) + + new new_type(loc) + initialized = TRUE + 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/rakshasa_ability) + rakshasa_abilities = list() + for(var/type in ability_types) + rakshasa_abilities += new type(src) + + update_icon() + + return ..() + +/mob/living/simple_animal/shadekin/Destroy() + qdel_null_list(rakshasa_abilities) + . = ..() + + + +/mob/living/simple_animal/shadekin/rakshasa/Stat() + . = ..() + if(statpanel("Rakshasa")) + rakshasa_abilities_stat() + +/mob/living/simple_animal/shadekin/rakshasa/proc/rakshasa_abilities_stat() + for(var/A in rakshasa_abilities) + var/obj/effect/rakshasa_ability/ability = A + stat("[ability.ability_name]",ability.atom_button_text()) + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// // +// // +// Some Procs for Abilities // +// // +// // +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Phase shifting procs (and related procs) +/mob/living/simple_animal/shadekin/rakshasa/proc/rak_phase_shift() + var/turf/T = get_turf(src) + if(!T.CanPass(null,T) || loc != T) + to_chat(src,"You can't use that here!") + return FALSE + + forceMove(T) + var/original_canmove = canmove + SetStunned(0) + SetWeakened(0) + if(buckled) + buckled.unbuckle_mob() + if(pulledby) + pulledby.stop_pulling() + stop_pulling() + canmove = FALSE + + //Shifting in + if(ability_flags & AB_PHASE_SHIFTED) + ability_flags &= ~AB_PHASE_SHIFTED + name = real_name + for(var/belly in vore_organs) + var/obj/belly/B = belly + B.escapable = initial(B.escapable) + + overlays.Cut() + 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 + canmove = original_canmove + + //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 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 + custom_emote(1,"phases out!") + real_name = name + name = "Something" + + for(var/belly in vore_organs) + var/obj/belly/B = belly + B.escapable = FALSE + + overlays.Cut() + flick("tp_out",src) + sleep(5) + invisibility = INVISIBILITY_LEVEL_TWO + see_invisible = INVISIBILITY_LEVEL_TWO + update_icon() + alpha = 127 + + canmove = original_canmove + incorporeal_move = TRUE + density = FALSE + force_max_speed = TRUE + +/mob/living/simple_animal/shadekin/Rakshasa/UnarmedAttack() + if(ability_flags & AB_PHASE_SHIFTED) + return FALSE //Nope. + + . = ..() + +/mob/living/simple_animal/shadekin/rakshasa/can_fall() + if(ability_flags & AB_PHASE_SHIFTED) + return FALSE //Nope! + + return ..() + +/mob/living/simple_animal/shadekin/rakshasa/zMove(direction) + if(ability_flags & AB_PHASE_SHIFTED) + var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src) + if(destination) + forceMove(destination) + return TRUE + + return ..() + +// Healing others +/mob/living/simple_animal/shadekin/rakshasa/proc/rak_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/rakshasa/heal_boop,1 MINUTE) + visible_message("\The [src] gently places a hand on \the [target]...") + face_atom(target) + return TRUE + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// // +// // +// Actual Abilities // +// // +// // +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/obj/effect/rakshasa_ability + name = "" + desc = "" + icon = 'icons/mob/screen_spells.dmi' + var/ability_name = "FIX ME" + var/cost = 50 + var/mob/living/simple_animal/rakshasa/my_rak + var/shift_mode = NOT_WHILE_SHIFTED + var/ab_sound + +/obj/effect/rakshasa_ability/New(var/new_rak) + ..() + my_rak = new_rak + loc = null + +/obj/effect/rakshasa_ability/Destroy() + my_rak = null + return ..() + +/obj/effect/rakshasa_ability/proc/atom_button_text() + var/shift_denial + + if(shift_mode == NOT_WHILE_SHIFTED && (my_rak.ability_flags & AB_PHASE_SHIFTED)) + shift_denial = "Physical Only" + else if(shift_mode == ONLY_WHILE_SHIFTED && !(my_rak.ability_flags & AB_PHASE_SHIFTED)) + shift_denial = "Shifted Only" + + if(shift_denial) + name = shift_denial + else + name = my_rak.energy >= cost ? "Activate" : "No Energy" + return src + +/obj/effect/rakshasa_ability/Click(var/location, var/control, var/params) + if(my_rak.stat) return + + var/list/clickprops = params2list(params) + var/opts = clickprops["shift"] + + if(opts) + to_chat(my_rak,"[name] (Cost: [cost]%) - [desc]") + else + do_ability(my_rak) + +/obj/effect/rakshasa_ability/proc/do_ability() + if(my_rak.stat) + to_chat(my_rak,"Can't use that ability in your state!") + return FALSE + if(shift_mode == NOT_WHILE_SHIFTED && (my_rak.ability_flags & AB_PHASE_SHIFTED)) + to_chat(my_rak,"Can't use that ability while phase shifted!") + return FALSE + else if(shift_mode == ONLY_WHILE_SHIFTED && !(my_rak.ability_flags & AB_PHASE_SHIFTED)) + to_chat(my_rak,"Can only use that ability while phase shifted!") + return FALSE + else if(my_rak.energy < cost) + to_chat(my_rak,"Not enough energy for that ability!") + return FALSE + + my_rak.energy -= cost + if(ab_sound) + playsound(src,ab_sound,75,1) + + return TRUE + +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/rak_phase_shift + ability_name = "Phase Shift" + desc = "Shift yourself out of alignment with realspace to travel quickly between areas." + icon_state = "tech_passwall" + cost = 100 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/rak_phase_shift/do_ability() + if(!..()) + return + my_rak.rak_phase_shift() + if(my_rak.ability_flags & AB_PHASE_SHIFTED) + cost = 0 //Shifting back is free (but harmful in light) + else + cost = initial(cost) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_ability/goo_phase_shift + ability_name = "Goo Shift" + desc = "Shift yourself with goopy effects." + icon_state = "tech_passwall" + cost = 100 + shift_mode = SHIFTED_OR_NOT + ab_sound = 'sound/effects/stealthoff.ogg' +/obj/effect/rakshasa_ability/rak_phase_shift/do_ability() + if(!..()) + return + new /obj/effect/decal/cleanable/blood/oil(loc, src) + playsound(src, 'sound/rakshasa/Corrosion1.ogg', 100, 1) + my_rak.rak_phase_shift() + if(my_rak.ability_flags & AB_PHASE_SHIFTED) + cost = 0 //Shifting back is free (but harmful in light) + else + cost = initial(cost) +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_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/rakshasa_ability/heal_boop/do_ability() + if(!..()) + return + if(!my_rak.rak_mend_other()) + my_rak.energy += cost //Refund due to abort + +/datum/modifier/rakshasa/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/rakshasa/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/rakshasa_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/rakshasa_ability/create_shade/do_ability() + if(!..()) + return + my_rak.add_modifier(/datum/modifier/rakshasa/create_shade,20 SECONDS) +/datum/modifier/rakshasa/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_animal/rakshasa/my_rak + +/datum/modifier/rakshasa/create_shade/tick() + if(my_rak.ability_flags & AB_PHASE_SHIFTED) + expire() + +/datum/modifier/rakshasa/create_shade/on_applied() + my_rak = 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/rakshasa/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_rak = null +/* +///////////////////////////////////////////////////////////////// +/obj/effect/rakshasa_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/rakshasa_ability/energy_feast/do_ability() + if(!..()) + return +*/ + + +*/ + + + + + + + + diff --git a/code/modules/mob/living/simple_animal/vore/shadekin/rakshasa_trap.dm b/code/modules/mob/living/simple_animal/vore/shadekin/rakshasa_trap.dm new file mode 100644 index 0000000000..2d44ca6279 --- /dev/null +++ b/code/modules/mob/living/simple_animal/vore/shadekin/rakshasa_trap.dm @@ -0,0 +1,76 @@ +/obj/structure/gootrap + name = "goo" + throw_speed = 2 + throw_range = 1 + gender = PLURAL + icon = 'icons/effects/blood.dmi' + var/base_icon = 'icons/effects/blood.dmi' + icon_state = "mfloor1" + var/basecolor="#030303" + desc = "" + throwforce = 0 + w_class = ITEMSIZE_NORMAL + matter = list(DEFAULT_WALL_MATERIAL = 18750) + var/deployed = 1 + anchored = 1 + +/obj/structure/gootrap/proc/can_use(mob/user) + return (user.IsAdvancedToolUser() && !issilicon(user) && !user.stat && !user.restrained()) + +/obj/structure/gootrap/update_icon() + ..() + color = basecolor + +/obj/structure/gootrap/New() + ..() + update_icon() + return + +/obj/structure/gootrap/attack_hand(mob/user as mob) + if(has_buckled_mobs() && can_use(user)) + var/victim = english_list(buckled_mobs) + user.visible_message( + "[user] begins freeing [victim] from \the [src].", + "You carefully begin to free [victim] from \the [src].", + ) + if(do_after(user, 5)) + user.visible_message("[victim] has been freed from \the [src] by [user].") + for(var/A in buckled_mobs) + unbuckle_mob(A) + anchored = 0 + else + ..() + +/obj/structure/gootrap/proc/attack_mob(mob/living/L) + //trap the victim in place + set_dir(L.dir) + can_buckle = 1 + buckle_mob(L) + var/goo_sounds = list ( + 'sound/rakshasa/Decay1.ogg', + 'sound/rakshasa/Decay2.ogg', + 'sound/rakshasa/Decay3.ogg' + ) + var/sound = pick(goo_sounds) + playsound(src, sound, 100, 1) + L << "You hear a gooey schlorp as \the [src] ensnares your leg, trapping you in place!" + deployed = 0 + can_buckle = initial(can_buckle) + + +/obj/structure/gootrap/Crossed(AM as mob|obj) + if(deployed && isliving(AM)) + var/mob/living/L = AM + if(L.m_intent == "run") + L.visible_message( + "[L] steps on \the [src].", + "You step on \the [src]!", + "You hear a gooey schlorp as the goo ensnares your leg!" + ) + attack_mob(L) + if(!has_buckled_mobs()) + anchored = 0 + deployed = 0 + message_admins("[key_name(usr)] has stepped in the goo trap.") + ..() + diff --git a/icons/mob/vore_shadekin64.dmi b/icons/mob/vore_shadekin64.dmi index e2da6db20a..7c209923b1 100644 Binary files a/icons/mob/vore_shadekin64.dmi and b/icons/mob/vore_shadekin64.dmi differ diff --git a/sound/rakshasa/Corrosion1.ogg b/sound/rakshasa/Corrosion1.ogg new file mode 100644 index 0000000000..912e535639 Binary files /dev/null and b/sound/rakshasa/Corrosion1.ogg differ diff --git a/sound/rakshasa/Corrosion2.ogg b/sound/rakshasa/Corrosion2.ogg new file mode 100644 index 0000000000..dfd24cc9d8 Binary files /dev/null and b/sound/rakshasa/Corrosion2.ogg differ diff --git a/sound/rakshasa/Corrosion3.ogg b/sound/rakshasa/Corrosion3.ogg new file mode 100644 index 0000000000..cef4bf5c2d Binary files /dev/null and b/sound/rakshasa/Corrosion3.ogg differ diff --git a/sound/rakshasa/Decay1.ogg b/sound/rakshasa/Decay1.ogg new file mode 100644 index 0000000000..e65a838e48 Binary files /dev/null and b/sound/rakshasa/Decay1.ogg differ diff --git a/sound/rakshasa/Decay2.ogg b/sound/rakshasa/Decay2.ogg new file mode 100644 index 0000000000..b1e0a10e2f Binary files /dev/null and b/sound/rakshasa/Decay2.ogg differ diff --git a/sound/rakshasa/Decay3.ogg b/sound/rakshasa/Decay3.ogg new file mode 100644 index 0000000000..cfe8b52925 Binary files /dev/null and b/sound/rakshasa/Decay3.ogg differ diff --git a/sound/rakshasa/Emerge0.ogg b/sound/rakshasa/Emerge0.ogg new file mode 100644 index 0000000000..bf665de908 Binary files /dev/null and b/sound/rakshasa/Emerge0.ogg differ diff --git a/sound/rakshasa/Laugh.ogg b/sound/rakshasa/Laugh.ogg new file mode 100644 index 0000000000..13b6bc8e5d Binary files /dev/null and b/sound/rakshasa/Laugh.ogg differ diff --git a/sound/rakshasa/No.ogg b/sound/rakshasa/No.ogg new file mode 100644 index 0000000000..1b835e46bc Binary files /dev/null and b/sound/rakshasa/No.ogg differ