Adds Trait Genetics (#16921)

* Adds Trait Genetics from Outpost21

Adds trait genetics from Outpost 21
- Tried to update each file it touched to be equivalent to their Chomp specific variants in order to maintain functionality and make sure no oddities would happen due to code differences. (Some things like the eardeaf loop were left there but commented out)

* Morph trait

* Fixes a server crashing bug with flip

aa

* flip

* Makes morph superpower better

- Makes it use the appearance_changer instead of 1000 different  procs

- Makes cocoon weaver able to change eye and skin color.

I did NOT select you. BAD

* begone

* fix dna modifier

* Fixes massive memory leak

* Brain Runtime Fix

* There was no reason for this to be a spawn(0)

And no I didn't spawn with no blood - https://i.imgur.com/vPizqCD.png

* revert

revert the dna changes there

* Deconf

* gets rid of unused proc vars that did nothing

* expects enough free slots

* glob

* fixed and added two other tests

* another few tests

* this is a list

* fixed bad injector

* lets wrap these for sanity

* better feedback

* wrong name

* don't allow multiple occupants into the dna pod

* future traits will have activation levels instead of binary on/off

---------

Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
Co-authored-by: Willburd <7099514+Willburd@users.noreply.github.com>
This commit is contained in:
Cameron Lennox
2025-02-11 02:01:27 -05:00
committed by GitHub
co-authored by Kashargul Willburd
parent 408b765def
commit cdafe425a5
108 changed files with 3805 additions and 2014 deletions
+5 -4
View File
@@ -33,7 +33,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
if(!owner || owner.stat == DEAD)
defib_timer = max(--defib_timer, 0)
else
defib_timer = min(++defib_timer, (CONFIG_GET(number/defib_timer) MINUTES) / 20) // Time vars measure things in ticks. Life tick happens every ~2 seconds, therefore dividing by 20
defib_timer = min(++defib_timer, (CONFIG_GET(number/defib_timer) MINUTES) / 2)
/obj/item/organ/internal/brain/proc/can_assist()
return can_assist
@@ -108,7 +108,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
if(istype(H))
qdel_swap(brainmob.dna, H.dna.Clone())
brainmob.timeofhostdeath = H.timeofdeath
brainmob.ooc_notes = H.ooc_notes //VOREStation Edit
brainmob.ooc_notes = H.ooc_notes
brainmob.ooc_notes_likes = H.ooc_notes_likes
brainmob.ooc_notes_dislikes = H.ooc_notes_dislikes
@@ -144,7 +144,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
var/obj/item/organ/internal/brain/B = src
if(istype(B) && owner)
if(istype(owner, /mob/living/carbon))
if(istype(owner, /mob/living/carbon) && owner.ckey)
B.transfer_identity(owner)
..()
@@ -184,7 +184,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
can_assist = FALSE
/obj/item/organ/internal/brain/slime
icon = 'icons/obj/surgery_vr.dmi' // Vorestation edit
icon = 'icons/obj/surgery_vr.dmi'
name = "slime core"
desc = "A complex, organic knot of jelly and crystalline particles."
icon_state = "core"
@@ -258,6 +258,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
qdel_swap(H.dna, R.dna.Clone())
H.UpdateAppearance()
H.sync_dna_traits(FALSE) // Traitgenes Sync traits to genetics if needed
H.sync_organ_dna()
if(!R.dna.real_name) //to prevent null names
R.dna.real_name = "promethean ([rand(0,999)])"
+18
View File
@@ -960,6 +960,16 @@ Note that amputating the affected organ does in fact remove the infection from t
span_bolddanger("Your [src.name] explodes[gore]!"),\
span_danger("You hear the [gore_sound]."))
if(DROPLIMB_ACID)
if(cannot_gib)
return
var/gore = "[(robotic >= ORGAN_ROBOT) ? "": " in gush of gore"]"
var/gore_sound = "[(status >= ORGAN_ROBOT) ? "sizzling sound of melting metal" : "sickening drips of melting flesh"]"
owner.visible_message(
span_danger("\The [owner]'s [src.name] sloughs off[gore]!"),\
span_bolddanger("<b>Your [src.name] sloughs off of your body[gore]!</b>"),\
span_danger("You hear the [gore_sound]."))
var/mob/living/carbon/human/victim = owner //Keep a reference for post-removed().
var/obj/item/organ/external/parent_organ = parent
@@ -1038,6 +1048,14 @@ Note that amputating the affected organ does in fact remove the infection from t
qdel(src)
if(DROPLIMB_ACID)
appearance_flags &= ~PIXEL_SCALE
compile_icon()
add_blood(victim)
var/matrix/M = matrix()
M.Turn(rand(180))
transform = M
if(victim.l_hand)
if(istype(victim.l_hand,/obj/item/material/twohanded)) //if they're holding a two-handed weapon, drop it now they've lost a hand
victim.l_hand.update_held_icon()
+9
View File
@@ -396,6 +396,15 @@
"scarred stump" = 0
)
if(DROPLIMB_ACID)
damage_type = BURN
stages = list(
"disfigured mass" = damage_amt*1.3,
"melted stump" = damage_amt,
"deformed stump" = damage_amt*0.5,
"scarred stump" = 0
)
..(damage_amt)
/datum/wound/lost_limb/can_merge(var/datum/wound/other)