mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-29 16:10:02 +01:00
Unapologetic Diona Buffs (#3829)
Dionaea nymphs will now follow a player dionaea nymph spawned from a gestalt splitting, instead of just shuffling aimlessly in place. The player furthermore can switch to any uncontrolled nymph that split from them originally at will, and automatically switches at death. Dionaea gestalts can use the station variant of devour, just like their nymphs will. Dionaea regrowing severed limbs has been fixed. Dionaea and nymphs not gaining biomass from consumed food has been fixed. Devouring will now actually finish instead of stalling on the penultimate stage forever, no longer leaving the devouree in a perpetually near-death state. Fixes #3701 Fixes #3698 Fixes #3703
This commit is contained in:
@@ -38,6 +38,30 @@
|
||||
var/dark_survival = 216 // How long this diona can survive in darkness after energy is gone, before it dies
|
||||
var/datum/dionastats/DS
|
||||
var/mob/living/carbon/gestalt = null // If set, then this nymph is inside a gestalt
|
||||
var/kept_clean = 0
|
||||
|
||||
var/mob/living/carbon/alien/diona/master_nymph //nymph who owns this nymph if split. AI diona nymphs will follow this nymph, and these nymphs can be controlled by the master.
|
||||
var/list/mob/living/carbon/alien/diona/birds_of_feather = list() //list of all related nymphs
|
||||
|
||||
/mob/living/carbon/alien/diona/proc/cleanupTransfer()
|
||||
if(!kept_clean)
|
||||
for(var/mob/living/carbon/alien/diona/D in birds_of_feather)
|
||||
if(D.master_nymph == src)
|
||||
D.master_nymph = null
|
||||
if(!master_nymph && D != src)
|
||||
master_nymph = D
|
||||
D.master_nymph = master_nymph
|
||||
D.birds_of_feather -= src
|
||||
if(master_nymph && mind && !master_nymph.mind)
|
||||
mind.transfer_to(master_nymph)
|
||||
master_nymph.stunned = 0//Switching mind seems to temporarily stun mobs
|
||||
message_admins("\The [src] has died with nymphs remaining; player now controls [key_name_admin(master_nymph)]")
|
||||
log_admin("\The [src] has died with nymphs remaining; player now controls [key_name(master_nymph)]", ckey=key_name(master_nymph))
|
||||
master_nymph = null
|
||||
birds_of_feather.Cut()
|
||||
|
||||
kept_clean = 1
|
||||
|
||||
|
||||
/mob/living/carbon/alien/diona/flowery/Initialize(var/mapload)
|
||||
. = ..(mapload, 100)
|
||||
@@ -277,6 +301,7 @@
|
||||
handle_stunned()
|
||||
handle_weakened()
|
||||
if(health <= 0)
|
||||
cleanupTransfer()
|
||||
death()
|
||||
blinded = 1
|
||||
silent = 0
|
||||
@@ -324,6 +349,10 @@
|
||||
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/alien/diona/Destroy()
|
||||
walk_to(src,0)
|
||||
cleanupTransfer()
|
||||
. = ..()
|
||||
|
||||
/mob/living/carbon/alien/diona/proc/wear_hat(var/obj/item/new_hat)
|
||||
if(hat)
|
||||
@@ -331,3 +360,14 @@
|
||||
hat = new_hat
|
||||
new_hat.forceMove(src)
|
||||
update_icons()
|
||||
|
||||
/mob/living/carbon/alien/diona/MiddleClickOn(var/atom/A)
|
||||
if(istype(A, /mob/living/carbon/alien/diona))
|
||||
var/mob/living/carbon/alien/diona/D = A
|
||||
if(D.master_nymph == src) //if the nymph is subservient to you
|
||||
mind.transfer_to(D)
|
||||
D.stunned = 0//Switching mind seems to temporarily stun mobs
|
||||
for(var/mob/living/carbon/alien/diona/DIO in src.birds_of_feather) //its me!
|
||||
DIO.master_nymph = D
|
||||
return 1
|
||||
. = ..()
|
||||
@@ -298,3 +298,18 @@
|
||||
add_language(i)
|
||||
src << "<span class='notice'><font size=3>You have mastered the [i] language!</font></span>"
|
||||
language_progress.Remove(i)
|
||||
|
||||
/mob/living/carbon/alien/diona/proc/transferMind(var/atom/A)
|
||||
set category = "Abilities"
|
||||
set name = "Switch Nymph"
|
||||
set desc = "Transfer your control manually to another nymph in sight."
|
||||
|
||||
for(var/mob/living/carbon/alien/diona/D in view(7))
|
||||
if(D.master_nymph == src && mind && !client) //if the nymph is subservient to you
|
||||
mind.transfer_to(D)
|
||||
D.stunned = 0//Switching mind seems to temporarily stun mobs
|
||||
for(var/mob/living/carbon/alien/diona/DIO in src.birds_of_feather) //its me!
|
||||
DIO.master_nymph = D
|
||||
break
|
||||
return 1
|
||||
..()
|
||||
|
||||
@@ -34,6 +34,10 @@
|
||||
check_status_as_organ()
|
||||
|
||||
if (!gestalt)
|
||||
if(master_nymph && !client && master_nymph != src)
|
||||
walk_to(src,master_nymph,1,movement_delay())
|
||||
else
|
||||
walk_to(src,0)
|
||||
..()
|
||||
|
||||
|
||||
|
||||
@@ -366,7 +366,7 @@ var/list/diona_banned_languages = list(
|
||||
updatehealth()
|
||||
|
||||
/mob/living/carbon/human/proc/diona_regen_callback(organ_path, /datum/dionastats/DS)
|
||||
if (!organ_path || !DS || DS.regening_organ)
|
||||
if (!organ_path || !DS)
|
||||
return
|
||||
|
||||
var/obj/item/organ/O = new organ_path(src)
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
setup_dionastats()
|
||||
verbs += /mob/living/carbon/human/proc/check_light
|
||||
verbs += /mob/living/carbon/human/proc/diona_split_nymph
|
||||
verbs += /mob/living/proc/devour
|
||||
|
||||
|
||||
spawn(10)
|
||||
@@ -40,7 +41,6 @@
|
||||
src << "<span class=notice>We are named [real_name] for now, but we can choose a new name for our gestalt. (Check the Abilities Tab)</span>"
|
||||
//This allows a gestalt to rename itself -once- upon reforming
|
||||
|
||||
verbs.Remove(/mob/living/proc/devour)//Gestalts cant devour
|
||||
verbs.Add(/mob/living/carbon/proc/absorb_nymph)
|
||||
|
||||
topup_nymphs()
|
||||
@@ -223,12 +223,13 @@
|
||||
//Start the splitting sound
|
||||
playsound(src.loc, 'sound/species/diona/gestalt_split.ogg', 100, 1)
|
||||
sleep(20)
|
||||
var/list/nymphos = list()
|
||||
for(var/mob/living/carbon/alien/diona/D in src)
|
||||
if ((!D.key) && bestNymph == null)
|
||||
//As a safety, we choose the first unkeyed one to begin with, even if its dead.
|
||||
//We'll replace this choice when/if we find a better one
|
||||
bestNymph = D
|
||||
|
||||
nymphos += D
|
||||
D.forceMove(T)
|
||||
D.split_languages(src)
|
||||
D.set_dir(pick(NORTH, SOUTH, EAST, WEST))
|
||||
@@ -244,12 +245,16 @@
|
||||
else //If a nymph is too heavily damaged, it cannot survive and will be born dead
|
||||
D.visible_message("[D] is too damaged to survive outside a gestalt, and expires with a pitiful chirrup", "You are too damaged to survive outside of your gestalt!", "You hear a pitiful chirrup!")
|
||||
D.stat = DEAD
|
||||
//D.tumble(2)//So they're not all dumped on one tile
|
||||
|
||||
for(var/obj/item/W in src)
|
||||
drop_from_inventory(W)
|
||||
|
||||
if (bestNymph)
|
||||
for(var/mob/living/carbon/alien/diona/D in nymphos)
|
||||
D.master_nymph = bestNymph
|
||||
D.birds_of_feather += nymphos
|
||||
D.pixel_y += rand(-10,10)
|
||||
D.pixel_x += rand(-10,10)
|
||||
bestNymph.set_dir(dir)
|
||||
transfer_languages(src, bestNymph)
|
||||
if(mind)
|
||||
|
||||
@@ -299,9 +299,7 @@
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right/diona),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot/diona),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right/diona)
|
||||
)
|
||||
|
||||
//inherent_verbs = list()
|
||||
)
|
||||
|
||||
warning_low_pressure = 50
|
||||
hazard_low_pressure = -1
|
||||
|
||||
@@ -132,11 +132,11 @@
|
||||
|
||||
src.visible_message("<span class='danger'>[src] starts devouring [victim]</span>","<span class='danger'>You start devouring [victim], this will take approximately [time_needed_string]. You and the victim must remain still to continue, but you can interrupt feeding anytime and leave with what you've already eaten.</span>")
|
||||
|
||||
for (var/i = 1 to num_bites_needed)
|
||||
for (var/i = 0 to num_bites_needed)
|
||||
if(do_mob(src, victim, bite_delay*10, extra_checks = CALLBACK(src, .proc/devouring_equals, victim)))
|
||||
face_atom(victim)
|
||||
victim.adjustCloneLoss(victim_maxhealth*PEPB)
|
||||
victim.adjustHalLoss(victim_maxhealth*PEPB*5)//Being eaten hurts!
|
||||
victim.apply_damage(victim_maxhealth*PEPB,HALLOSS)
|
||||
victim.apply_damage(victim_maxhealth*PEPB*5,CLONE)
|
||||
ingested.add_reagent(victim.composition_reagent, victim.composition_reagent_quantity*PEPB)
|
||||
visible_message("<span class='danger'>[src] bites a chunk out of [victim]</span>","<span class='danger'>[bitemessage(victim)]</span>")
|
||||
if (messes < victim.mob_size - 1 && prob(50))
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
var/regen_factor = 0.8
|
||||
var/injectable = 0
|
||||
color = "#664330"
|
||||
unaffected_species = IS_MACHINE
|
||||
|
||||
/datum/reagent/nutriment/mix_data(var/list/newdata, var/newamount)
|
||||
if(!islist(newdata) || !newdata.len)
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
|
||||
author: Lord Fowl
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- rscadd: "Diona nymphs produced from a gestalt's death will now follow the player diona nymph."
|
||||
- rscadd: "The player can freely control any of their constituent nymphs after they split at will by middle-clicking on them, and will switch to any living nymph should their active nymph die."
|
||||
- rscadd: "Diona gestalts can now devour mobs as well as their constituent nymphs can."
|
||||
- bugfix: "Diona will once again regrow severed limbs."
|
||||
- bugfix: "Diona and nymphs will once again gain biomass from eating food."
|
||||
- bugfix: "Devouring will now actually devour the target."
|
||||
Reference in New Issue
Block a user