mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-12 08:27:13 +01:00
Adds changeling horror form (#2819)
Adds an end game power for changelings (15 genomes points), allowing them to turn into a robust mob for around five minutes. Fixes some issues with arm blades and shields, also adds a chem costs to using them. Adds new changeling related sounds.
This commit is contained in:
@@ -1620,6 +1620,7 @@
|
||||
#include "code\modules\mob\living\simple_animal\hostile\bat.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\bear.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\carp.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\changeling.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\creature.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\faithless.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm"
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
welcome_text = "Use say \"#g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them."
|
||||
flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE
|
||||
antaghud_indicator = "hudchangeling"
|
||||
|
||||
faction = "Changeling"
|
||||
|
||||
/datum/antagonist/changeling/get_special_objective_text(var/datum/mind/player)
|
||||
return "<br><b>Changeling ID:</b> [player.changeling.changelingID].<br><b>Genomes Absorbed:</b> [player.changeling.absorbedcount]"
|
||||
@@ -73,4 +75,4 @@
|
||||
if(player.current.client.prefs.organ_data["torso"] == "cyborg") // Full synthetic.
|
||||
return 0
|
||||
return 1
|
||||
return 0
|
||||
return 0
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/melee/arm_blade/dropped()
|
||||
/obj/item/weapon/melee/arm_blade/dropped(var/mob/living/user)
|
||||
visible_message("<span class='danger'>With a sickening crunch, [user] reforms their arm blade into an arm!</span>",
|
||||
"<span class='warning'>You hear organic matter ripping and tearing!</span>")
|
||||
playsound(loc, 'sound/effects/blobattack.ogg', 30, 1)
|
||||
@@ -69,8 +69,8 @@
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/shield/riot/changeling/dropped()
|
||||
visible_message("<span class='danger'>With a sickening crunch, [user] reforms their arm blade into an arm!</span>",
|
||||
/obj/item/weapon/shield/riot/changeling/dropped(var/mob/living/user)
|
||||
visible_message("<span class='danger'>With a sickening crunch, [user] reforms their shield into an arm!</span>",
|
||||
"<span class='warning'>You hear organic matter ripping and tearing!</span>")
|
||||
playsound(loc, 'sound/effects/blobattack.ogg', 30, 1)
|
||||
QDEL_IN(src, 1)
|
||||
@@ -89,3 +89,14 @@
|
||||
host.embedded -= src
|
||||
host.drop_from_inventory(src)
|
||||
QDEL_IN(src, 1)
|
||||
|
||||
/obj/item/weapon/bone_dart
|
||||
name = "bone dart"
|
||||
desc = "A sharp piece of bone shapped as small dart."
|
||||
icon = 'icons/obj/changeling.dmi'
|
||||
icon_state = "bone_dart"
|
||||
item_state = "bolt"
|
||||
sharp = 1
|
||||
edge = 0
|
||||
throwforce = 5
|
||||
w_class = 2
|
||||
|
||||
@@ -184,10 +184,12 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
|
||||
if(2)
|
||||
src << "<span class='notice'>We extend a proboscis.</span>"
|
||||
src.visible_message("<span class='warning'>[src] extends a proboscis!</span>")
|
||||
playsound(get_turf(src), 'sound/effects/lingextends.ogg', 50, 1)
|
||||
if(3)
|
||||
src << "<span class='notice'>We stab [T] with the proboscis.</span>"
|
||||
src.visible_message("<span class='danger'>[src] stabs [T] with the proboscis!</span>")
|
||||
T << "<span class='danger'>You feel a sharp stabbing pain!</span>"
|
||||
playsound(get_turf(src), 'sound/effects/lingstabs.ogg', 50, 1)
|
||||
var/obj/item/organ/external/affecting = T.get_organ(src.zone_sel.selecting)
|
||||
if(affecting.take_damage(39,0,1,0,"large organic needle"))
|
||||
T:UpdateDamageIcon()
|
||||
@@ -201,6 +203,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
|
||||
src << "<span class='notice'>We have absorbed [T]!</span>"
|
||||
src.visible_message("<span class='danger'>[src] sucks the fluids from [T]!</span>")
|
||||
T << "<span class='danger'>You have been absorbed by the changeling!</span>"
|
||||
playsound(get_turf(src), 'sound/effects/lingabsorbs.ogg', 50, 1)
|
||||
|
||||
changeling.chem_charges += 10
|
||||
changeling.geneticpoints += 2
|
||||
@@ -853,9 +856,13 @@ var/list/datum/absorbed_dna/hivemind_bank = list()
|
||||
|
||||
/mob/proc/armblades()
|
||||
set category = "Changeling"
|
||||
set name = "Form Blades"
|
||||
set name = "Form Blades (20)"
|
||||
set desc="Rupture the flesh and mend the bone of your hand into a deadly blade."
|
||||
|
||||
var/datum/changeling/changeling = changeling_power(20,0,0)
|
||||
if(!changeling) return 0
|
||||
src.mind.changeling.chem_charges -= 20
|
||||
|
||||
var/mob/living/M = src
|
||||
|
||||
if(M.l_hand && M.r_hand)
|
||||
@@ -865,7 +872,7 @@ var/list/datum/absorbed_dna/hivemind_bank = list()
|
||||
var/obj/item/weapon/melee/arm_blade/blade = new(M)
|
||||
blade.creator = M
|
||||
M.put_in_hands(blade)
|
||||
playsound(loc, 'sound/effects/blobattack.ogg', 30, 1)
|
||||
playsound(loc, 'sound/weapons/bloodyslice.ogg', 30, 1)
|
||||
src.visible_message("<span class='danger'>A grotesque blade forms around [M]\'s arm!</span>",
|
||||
"<span class='danger'>Our arm twists and mutates, transforming it into a deadly blade.</span>",
|
||||
"<span class='danger'>You hear organic matter ripping and tearing!</span>")
|
||||
@@ -873,9 +880,13 @@ var/list/datum/absorbed_dna/hivemind_bank = list()
|
||||
|
||||
/mob/proc/changeling_shield()
|
||||
set category = "Changeling"
|
||||
set name = "Form Shield"
|
||||
set name = "Form Shield (20)"
|
||||
set desc="Bend the flesh and bone of your hand into a grotesque shield."
|
||||
|
||||
var/datum/changeling/changeling = changeling_power(20,0,0)
|
||||
if(!changeling) return 0
|
||||
src.mind.changeling.chem_charges -= 20
|
||||
|
||||
var/mob/living/M = src
|
||||
|
||||
if(M.l_hand && M.r_hand)
|
||||
@@ -886,11 +897,67 @@ var/list/datum/absorbed_dna/hivemind_bank = list()
|
||||
shield.creator = M
|
||||
M.put_in_hands(shield)
|
||||
playsound(loc, 'sound/effects/blobattack.ogg', 30, 1)
|
||||
src.visible_message("<span class='warning'>The end of [M]\'s hand inflates rapidly, forming a huge shield-like mass!</span>",
|
||||
src.visible_message("<span class='danger'>The end of [M]\'s hand inflates rapidly, forming a huge shield-like mass!</span>",
|
||||
"<span class='warning'>We inflate our hand into a robust shield.</span>",
|
||||
"<span class='warning'>You hear organic matter ripping and tearing!</span>")
|
||||
gibs(src.loc)
|
||||
|
||||
/mob/proc/horror_form()
|
||||
set category = "Changeling"
|
||||
set name = "Horror Form (40)"
|
||||
set desc = "Tear apart your human disguise, revealing your true form."
|
||||
|
||||
var/datum/changeling/changeling = changeling_power(40,0,0)
|
||||
if(!changeling) return 0
|
||||
src.mind.changeling.chem_charges -= 40
|
||||
|
||||
var/mob/living/M = src
|
||||
|
||||
M.visible_message("<span class='danger'>[M] writhes and contorts, their body expanding to inhuman proportions!</span>", \
|
||||
"<span class='danger'>We begin our transformation to our true form!</span>")
|
||||
if(!do_after(src,60))
|
||||
M.visible_message("<span class='danger'>[M]'s transformation abruptly reverts itself!</span>", \
|
||||
"<span class='danger'>Our transformation has been interrupted!</span>")
|
||||
return 0
|
||||
|
||||
M.visible_message("<span class='danger'>[M] grows into an abomination and lets out an awful scream!</span>")
|
||||
playsound(loc, 'sound/effects/greaterling.ogg', 100, 1)
|
||||
|
||||
var/mob/living/simple_animal/hostile/true_changeling/ling = new (get_turf(M))
|
||||
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
for(var/obj/item/I in M.contents)
|
||||
if(isorgan(I))
|
||||
continue
|
||||
M.drop_from_inventory(I)
|
||||
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(ling)
|
||||
else
|
||||
ling.key = M.key
|
||||
var/atom/movable/overlay/effect = new /atom/movable/overlay(get_turf(M))
|
||||
effect.density = 0
|
||||
effect.anchored = 1
|
||||
effect.icon = 'icons/effects/effects.dmi'
|
||||
effect.layer = 3
|
||||
flick("summoning",effect)
|
||||
QDEL_IN(effect, 10)
|
||||
M.forceMove(ling) //move inside the new dude to hide him.
|
||||
M.status_flags |= GODMODE //dont want him to die or breathe or do ANYTHING
|
||||
addtimer(CALLBACK(src, .proc/revert_horror_form,ling), 10 MINUTES)
|
||||
|
||||
/mob/proc/revert_horror_form(var/mob/living/ling)
|
||||
if(QDELETED(ling))
|
||||
return
|
||||
src.status_flags &= ~GODMODE //no more godmode.
|
||||
if(ling.mind)
|
||||
ling.mind.transfer_to(src)
|
||||
else
|
||||
src.key = ling.key
|
||||
playsound(get_turf(src),'sound/effects/blobattack.ogg',50,1)
|
||||
src.forceMove(get_turf(ling))
|
||||
qdel(ling)
|
||||
|
||||
//dna related datum
|
||||
|
||||
/datum/absorbed_dna
|
||||
|
||||
@@ -192,6 +192,12 @@ var/list/datum/power/changeling/powerinstances = list()
|
||||
genomecost = 3
|
||||
verbpath = /mob/proc/changeling_shield
|
||||
|
||||
/datum/power/changeling/horror_form
|
||||
name = "Horror Form"
|
||||
desc = "We tear apart our human disguise, revealing our true form."
|
||||
genomecost = 15
|
||||
verbpath = /mob/proc/horror_form
|
||||
|
||||
// Modularchangling, totally stolen from the new player panel. YAYY
|
||||
/datum/changeling/proc/EvolutionMenu()//The new one
|
||||
set category = "Changeling"
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
/mob/living/simple_animal/hostile/true_changeling
|
||||
name = "shambling horror"
|
||||
desc = "A monstrous creature, made of twisted flesh and bone."
|
||||
speak_emote = list("gibbers")
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
icon_state = "horror"
|
||||
icon_living = "horror"
|
||||
icon_dead = "horror_dead"
|
||||
stop_automated_movement = 1
|
||||
universal_speak =1
|
||||
universal_understand = 1
|
||||
|
||||
mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY
|
||||
mob_push_flags = ALLMOBS
|
||||
|
||||
response_help = "pets"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "harmlessly punches"
|
||||
maxHealth = 750
|
||||
health = 750
|
||||
harm_intent_damage = 0
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 30
|
||||
mob_size = 25
|
||||
environment_smash = 2
|
||||
attacktext = "mangled"
|
||||
attack_sound = 'sound/weapons/bloodyslice.ogg'
|
||||
|
||||
see_in_dark = 8
|
||||
see_invisible = SEE_INVISIBLE_NOLIGHTING
|
||||
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 350
|
||||
min_oxy = 0
|
||||
max_co2 = 0
|
||||
max_tox = 0
|
||||
|
||||
var/is_devouring = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/true_changeling/Initialize()
|
||||
. = ..()
|
||||
if(prob(25))
|
||||
icon_state = "horror_alt"
|
||||
icon_living = "horror_alt"
|
||||
|
||||
/mob/living/simple_animal/hostile/true_changeling/Life()
|
||||
..()
|
||||
adjustBruteLoss(-10) //it will slowly heal brute damage, making fire/laser a stronger option
|
||||
|
||||
/mob/living/simple_animal/hostile/true_changeling/mind_initialize()
|
||||
..()
|
||||
mind.assigned_role = "Changeling"
|
||||
|
||||
/mob/living/simple_animal/hostile/true_changeling/death(gibbed)
|
||||
..()
|
||||
if(!gibbed)
|
||||
visible_message("<b>[src]</b> lets out a waning scream as it falls, twitching, to the floor!")
|
||||
playsound(loc, 'sound/effects/creepyshriek.ogg', 30, 1)
|
||||
gibs(src.loc)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/true_changeling/verb/ling_devour(mob/living/target as mob in oview())
|
||||
set category = "Changeling"
|
||||
set name = "Devour"
|
||||
set desc = "Devours a creature, destroying its body and regenerating health."
|
||||
|
||||
if(!Adjacent(target))
|
||||
return
|
||||
|
||||
if(target.isSynthetic())
|
||||
return
|
||||
|
||||
if(src.is_devouring)
|
||||
src << "<span class='warning'>We are already feasting on something!</span>"
|
||||
return 0
|
||||
|
||||
if(!health)
|
||||
src << "<span class='notice'>We are dead, we cannot use any abilities!</span>"
|
||||
return
|
||||
|
||||
if(last_special > world.time)
|
||||
src << "<span class='warning'>We must wait a little while before we can use this ability again!</span>"
|
||||
return
|
||||
|
||||
src.visible_message("<span class='warning'>[src] begins ripping apart and feasting on [target]!</span>")
|
||||
src.is_devouring = TRUE
|
||||
|
||||
target.adjustBruteLoss(35)
|
||||
|
||||
if(!do_after(src,150))
|
||||
src<< "<span class='warning'>You need to wait longer to devour \the [target]!</span>"
|
||||
src.is_devouring = FALSE
|
||||
return 0
|
||||
|
||||
src.visible_message("<span class='warning'>[src] tears a chunk from \the [target]'s flesh!</span>")
|
||||
|
||||
target.adjustBruteLoss(35)
|
||||
|
||||
if(!do_after(src,150))
|
||||
src<< "<span class='warning'>You need to wait longer to devour \the [target]!</span>"
|
||||
src.is_devouring = FALSE
|
||||
return 0
|
||||
|
||||
src.visible_message("<span class='warning'>[target] is completely devoured by [src]!</span>", \
|
||||
"<span class='danger'>You completely devour \the [target]!</span>")
|
||||
target.gib()
|
||||
rejuvenate()
|
||||
updatehealth()
|
||||
last_special = world.time + 100
|
||||
src.is_devouring = FALSE
|
||||
return
|
||||
|
||||
/mob/living/simple_animal/hostile/true_changeling/verb/dart(mob/living/target as mob in oview())
|
||||
set name = "Launch Bone Dart"
|
||||
set desc = "Launches a Bone Dart at a target."
|
||||
set category = "Changeling"
|
||||
|
||||
if(!health)
|
||||
usr << "<span class='notice'>We are dead, we cannot use any abilities!</span>"
|
||||
return
|
||||
|
||||
if(last_special > world.time)
|
||||
return
|
||||
|
||||
last_special = world.time + 30
|
||||
|
||||
visible_message("<span class='warning'>\The [src]'s skin bulges and tears, launching a bone-dart at [target]!</span>")
|
||||
|
||||
playsound(src.loc, 'sound/weapons/bloodyslice.ogg', 50, 1)
|
||||
var/obj/item/weapon/bone_dart/A = new /obj/item/weapon/bone_dart(usr.loc)
|
||||
A.throw_at(target, 10, 20, user)
|
||||
add_logs(src, target, "launched a bone dart at")
|
||||
@@ -1082,13 +1082,15 @@
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/space,
|
||||
/mob/living/simple_animal/hostile/alien/queen/large,
|
||||
/mob/living/simple_animal/hostile/faithless,
|
||||
/mob/living/simple_animal/hostile/faithless/wizard,
|
||||
/mob/living/simple_animal/hostile/retaliate,
|
||||
/mob/living/simple_animal/hostile/retaliate/clown,
|
||||
/mob/living/simple_animal/hostile/alien,
|
||||
/mob/living/simple_animal/hostile/alien/drone,
|
||||
/mob/living/simple_animal/hostile/alien/sentinel,
|
||||
/mob/living/simple_animal/hostile/alien/queen,
|
||||
/mob/living/simple_animal/hostile/alien/queen/large
|
||||
/mob/living/simple_animal/hostile/alien/queen/large,
|
||||
/mob/living/simple_animal/hostile/true_changeling
|
||||
)//exclusion list for things you don't want the reaction to create.
|
||||
var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
|
||||
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
author: Alberyk
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- rscadd: "Added a new changeling power, horror form."
|
||||
- soundadd: "Added new changeling related sounds."
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 203 KiB After Width: | Height: | Size: 215 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user