diff --git a/code/game/gamemodes/changeling/helpers/_store.dm b/code/game/gamemodes/changeling/helpers/_store.dm index 6f122fea858..97e23dea1cf 100644 --- a/code/game/gamemodes/changeling/helpers/_store.dm +++ b/code/game/gamemodes/changeling/helpers/_store.dm @@ -38,8 +38,8 @@ var/list/datum/power/changeling/powerinstances = list() /datum/power/changeling/lesser_form name = "Lesser Form" - desc = "We debase ourselves and become lesser. We become a monkey." - genomecost = 4 + desc = "We debase ourselves and become lesser. We become a weaker, but more mobile form." + genomecost = 2 verbpath = /mob/proc/changeling_lesser_form /datum/power/changeling/mimicvoice @@ -54,7 +54,6 @@ var/list/datum/power/changeling/powerinstances = list() desc = "We fake our own death, imperceptible to even the best of doctors. We can choose when to re-animate." helptext = "Can be used before or after death. Duration varies greatly." genomecost = 0 - allowduringlesserform = TRUE verbpath = /mob/proc/changeling_fakedeath //Hivemind diff --git a/code/game/gamemodes/changeling/implements/powers/body.dm b/code/game/gamemodes/changeling/implements/powers/body.dm index cb3fa9ce750..e8aaed52988 100644 --- a/code/game/gamemodes/changeling/implements/powers/body.dm +++ b/code/game/gamemodes/changeling/implements/powers/body.dm @@ -7,6 +7,10 @@ if(!changeling) return + if(!ishuman(src)) + to_chat(src, "We cannot perform this ability as this form!") + return + var/list/names = list() for(var/datum/absorbed_dna/DNA in changeling.absorbed_dna) names += "[DNA.name]" @@ -33,9 +37,8 @@ return TRUE /mob/proc/handle_changeling_transform(var/datum/absorbed_dna/chosen_dna) - src.visible_message("[src] transforms!") - if(ishuman(src)) + src.visible_message("[src] transforms!") var/mob/living/carbon/human/H = src var/newSpecies = chosen_dna.speciesName H.set_species(newSpecies, 1) @@ -75,7 +78,30 @@ H.visible_message("[H] transforms!") changeling.geneticdamage = 30 to_chat(H, "Our genes cry out!") - H = H.monkeyize() + + var/mob/living/simple_animal/hostile/lesser_changeling/ling = new (get_turf(H)) + + if(istype(H,/mob/living/carbon/human)) + for(var/obj/item/I in H.contents) + if(isorgan(I)) + continue + H.drop_from_inventory(I) + + if(H.mind) + H.mind.transfer_to(ling) + else + ling.key = H.key + ling.occupant = H + var/atom/movable/overlay/effect = new /atom/movable/overlay(get_turf(H)) + effect.density = FALSE + effect.anchored = TRUE + effect.icon = 'icons/effects/effects.dmi' + effect.layer = 3 + flick("summoning", effect) + QDEL_IN(effect, 10) + H.forceMove(ling) + H.status_flags |= GODMODE + feedback_add_details("changeling_powers", "LF") return TRUE @@ -338,7 +364,7 @@ if(M.l_hand && M.r_hand) to_chat(M, "Your hands are full.") return - + if(M.handcuffed) var/cuffs = M.handcuffed M.u_equip(M.handcuffed) diff --git a/code/modules/mob/living/simple_animal/hostile/changeling.dm b/code/modules/mob/living/simple_animal/hostile/changeling.dm index 9f5c3547a88..a2e514e1755 100644 --- a/code/modules/mob/living/simple_animal/hostile/changeling.dm +++ b/code/modules/mob/living/simple_animal/hostile/changeling.dm @@ -6,9 +6,9 @@ icon_state = "abomination" icon_living = "abomination" icon_dead = "abomination_dead" - stop_automated_movement = 1 - universal_speak = 1 - universal_understand = 1 + stop_automated_movement = TRUE + universal_speak = TRUE + universal_understand = TRUE mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY mob_push_flags = ALLMOBS @@ -139,3 +139,94 @@ var/obj/item/bone_dart/A = new /obj/item/bone_dart(usr.loc) A.throw_at(target, 10, 20, usr) add_logs(src, target, "launched a bone dart at") + +/mob/living/simple_animal/hostile/lesser_changeling + name = "crawling horror" + desc = "An agile monster made of twisted flesh and bone." + speak_emote = list("gibbers") + icon = 'icons/mob/npc/animal.dmi' + icon_state = "lesser_ling" + icon_living = "lesser_ling" + + stop_automated_movement = TRUE + universal_speak = TRUE + universal_understand = TRUE + + tameable = FALSE + + response_help = "pets" + response_disarm = "shoves" + response_harm = "harmlessly punches" + maxHealth = 150 + health = 150 + harm_intent_damage = 5 + melee_damage_lower = 5 + melee_damage_upper = 10 + mob_size = 15 + attacktext = "mangled" + attack_sound = 'sound/weapons/bloodyslice.ogg' + + see_in_dark = 8 + see_invisible = SEE_INVISIBLE_NOLIGHTING + + pass_flags = PASSTABLE + + density = FALSE + + minbodytemp = 0 + maxbodytemp = 350 + min_oxy = 0 + max_co2 = 0 + max_tox = 0 + + speed = -2 + + var/mob/living/carbon/human/occupant = null + +/mob/living/simple_animal/hostile/lesser_changeling/Initialize() + . = ..() + verbs += /mob/living/proc/ventcrawl + +/mob/living/simple_animal/hostile/lesser_changeling/mind_initialize() + ..() + mind.assigned_role = "Changeling" + +/mob/living/simple_animal/hostile/lesser_changeling/death(gibbed) + ..() + if(!gibbed) + if(occupant) + occupant.forceMove(get_turf(src)) + occupant.status_flags &= ~GODMODE + if(mind) + mind.transfer_to(occupant) + + visible_message("\The [src] explodes into a shower of gore!") + gibs(src.loc) + qdel(src) + return + +/mob/living/simple_animal/hostile/lesser_changeling/verb/untransform() + set name = "Return to original form" + set desc = "Return to your original form." + set category = "Changeling" + + if(!health) + to_chat(usr, "We are dead, we cannot use any abilities!") + return + + if(last_special > world.time) + return + + if(!isturf(loc)) + return + + last_special = world.time + 30 + + if(occupant) + occupant.forceMove(get_turf(src)) + occupant.status_flags &= ~GODMODE + if(mind) + mind.transfer_to(occupant) + visible_message("\The [src] explodes into a shower of gore!") + gibs(src.loc) + qdel(src) \ No newline at end of file diff --git a/code/modules/ventcrawl/ventcrawl.dm b/code/modules/ventcrawl/ventcrawl.dm index e77664b2f08..00c9c936fe2 100644 --- a/code/modules/ventcrawl/ventcrawl.dm +++ b/code/modules/ventcrawl/ventcrawl.dm @@ -11,7 +11,8 @@ var/global/list/can_enter_vent_with = list( /obj/item/holder, /obj/machinery/camera, /mob/living/simple_animal/borer, - /mob/living/simple_animal/rat + /mob/living/simple_animal/rat, + /mob/living/carbon/human ) /mob/living/var/list/icon/pipes_shown = list() diff --git a/code/modules/ventcrawl/ventcrawl_atmospherics.dm b/code/modules/ventcrawl/ventcrawl_atmospherics.dm index 994ab757f0b..4795bfa27b4 100644 --- a/code/modules/ventcrawl/ventcrawl_atmospherics.dm +++ b/code/modules/ventcrawl/ventcrawl_atmospherics.dm @@ -41,14 +41,17 @@ //If its not small or the device isnt enabled, it wont blend if(!issmall(AM) || !use_power) return FALSE - + //Get the things we need to create the "output" var/mob/living/L = AM + if(L.mob_size > MOB_TINY) + return + var/blood_color = "#A10808" if(L.blood_color) blood_color = L.blood_color - + if(iscarbon(AM)) var/mob/living/carbon/C = AM blood_color = C.species.blood_color @@ -58,7 +61,7 @@ //Blend the Mob to_chat(AM, span("danger","\The [src] blends you to a fine dust.")) L.death() - qdel(L) + qdel(L) //Output what´s left through the connected vents if(N) diff --git a/html/changelogs/alberyk_newlesser.yml b/html/changelogs/alberyk_newlesser.yml new file mode 100644 index 00000000000..72ac65e7d73 --- /dev/null +++ b/html/changelogs/alberyk_newlesser.yml @@ -0,0 +1,6 @@ +author: Alberyk, Kyres1 + +delete-after: True + +changes: + - rscadd: "Reworked the changeling lesser form power. It transform the changeling into a small monster, that can ventcrawl and fun fast." diff --git a/icons/mob/npc/animal.dmi b/icons/mob/npc/animal.dmi index 201c735276d..f1de8defea7 100644 Binary files a/icons/mob/npc/animal.dmi and b/icons/mob/npc/animal.dmi differ