Changing changeling (Refactor) (#17749)

* Begin antag component

* Initial changeling move

* Slow...And...Steady...

* Initial

* remove  toworld testing

* More adjustments

* Update absorb.dm

Changelings get a genetic point per person absorbed

* Fixes losing your markings

* wa

* Update modularchangling.dm

* BETTER LING

WITH TGUI

* Gives all stings a global 1 second cd

Need to come up with a better way for this.

* snake_case

* Update epinephrine_overdose.dm

* Update changeling.dm

* Absorption/digestion absorbs people

Also disabled death sting because gtfo with that, it's unfun for everyone involved.

* prey ling

also DELETES death sting...It didn't even KILL properly

* fixes EMP shriek

* Update vorestation.dme

* Ling

* Unfat sting lowers nutrition more

* Update visible_camouflage.dm

* Update visible_camouflage.dm

* Changeling blades NOT embed

* Armblade fix

* Changeling spacesuit free

* Updates the armor

* Updates

* awa

* More

* Update blind_sting.dm

* Update blind_sting.dm

* Update boost_range.dm

* More adjustments

* Update _reagents.dm

* Update bioelectrogenesis.dm

* more

* all done

* awa

* shhh

* Update visible_camouflage.dm

* Update visible_camouflage.dm

* Update visible_camouflage.dm

* decon

* gets rid of AB+ blood

* Blood rejection and better checks

* changeling holder

* proper del

* Changeling lock

* Stops bodytheft

* yeah

* its reviving time

* Lets them shapeshift

* ah

* check

* Update negative.dm

* Update examine.dm
This commit is contained in:
Cameron Lennox
2025-07-04 21:08:03 +02:00
committed by GitHub
parent cefbb5103d
commit 3c622885c8
81 changed files with 1383 additions and 1380 deletions
+5 -4
View File
@@ -39,8 +39,9 @@
else
L = holder
L.mind.changeling.chem_charges = between(0, L.mind.changeling.chem_charges - chem_maintenance, L.mind.changeling.chem_storage)
if(L)
var/datum/component/antag/changeling/comp = L.GetComponent(/datum/component/antag/changeling)
comp.chem_charges = between(0, comp.chem_charges - chem_maintenance, comp.chem_storage)
/datum/modifier/changeling/thermal_sight
name = "Thermal Adaptation"
@@ -63,7 +64,7 @@
expire()
return
var/datum/changeling/changeling = L.changeling_power(0,0,100,CONSCIOUS)
var/datum/component/antag/changeling/changeling = L.changeling_power(0,0,100,CONSCIOUS)
if(!changeling)
expire()
@@ -85,7 +86,7 @@
L = holder
if(L)
var/datum/changeling/changeling = L.changeling_power(0,0,100,CONSCIOUS)
var/datum/component/antag/changeling/changeling = L.changeling_power(0,0,100,CONSCIOUS)
if(changeling)
changeling.thermal_sight = FALSE
+3 -3
View File
@@ -8,9 +8,9 @@
flags = RESTRICTED | HIVEMIND
/datum/language/ling/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
if(speaker.mind && speaker.mind.changeling)
..(speaker,message,speaker.mind.changeling.changelingID)
var/datum/component/antag/changeling/comp = speaker.GetComponent(/datum/component/antag/changeling)
if(speaker.mind && comp)
..(speaker,message,comp.changelingID)
else
..(speaker,message)
@@ -54,10 +54,11 @@
stop_flying()
//Handle snowflake ling stuff.
if(mind && mind.changeling)
var/datum/component/antag/changeling/comp = is_changeling(src)
if(comp)
// If the ling is capable of revival, don't allow them to see deadchat.
if(mind.changeling.chem_charges >= CHANGELING_STASIS_COST)
if(mind.changeling.max_geneticpoints >= 0) // Absorbed lings don't count, as they can't revive.
if(comp.chem_charges >= CHANGELING_STASIS_COST)
if(comp.max_geneticpoints >= 0) // Absorbed lings don't count, as they can't revive.
forbid_seeing_deadchat = TRUE
//Handle brain slugs.
@@ -123,11 +123,11 @@
if(suit.cell) cell_status = "[suit.cell.charge]/[suit.cell.maxcharge]"
. += "Suit charge: [cell_status]"
if(mind)
if(mind.changeling)
. += "Chemical Storage: [mind.changeling.chem_charges]"
. += "Genetic Damage Time: [mind.changeling.geneticdamage]"
. += "Re-Adaptations: [mind.changeling.readapts]/[mind.changeling.max_readapts]"
var/datum/component/antag/changeling/comp = is_changeling(src)
if(comp)
. += "Chemical Storage: [comp.chem_charges]"
. += "Genetic Damage Time: [comp.geneticdamage]"
. += "Re-Adaptations: [comp.readapts]/[comp.max_readapts]"
if(species)
species.get_status_tab_items(src)
@@ -56,8 +56,9 @@
//This is called when we want different types of 'cloaks' to stop working, e.g. when attacking.
/mob/living/carbon/human/break_cloak()
if(mind && mind.changeling) //Changeling visible camo
mind.changeling.cloaked = 0
var/datum/component/antag/changeling/comp = is_changeling(src)
if(comp) //Changeling visible camo
comp.cloaked = 0
if(istype(back, /obj/item/rig)) //Ninja cloak
var/obj/item/rig/suit = back
for(var/obj/item/rig_module/stealth_field/cloaker in suit.installed_modules)
@@ -67,7 +68,8 @@
dr.uncloak()
/mob/living/carbon/human/is_cloaked()
if(mind && mind.changeling && mind.changeling.cloaked) // Ling camo.
var/datum/component/antag/changeling/comp = is_changeling(src)
if(comp && comp.cloaked) // Ling camo.
return TRUE
else if(istype(back, /obj/item/rig)) //Ninja cloak
var/obj/item/rig/suit = back
+10 -8
View File
@@ -1794,14 +1794,19 @@
playsound_local(src,pick(GLOB.scarySounds),50, 1, -1)
/mob/living/carbon/human/proc/handle_changeling()
if(mind && mind.changeling)
mind.changeling.regenerate()
var/datum/component/antag/changeling/comp = is_changeling(src)
if(!comp)
if(mind && hud_used)
ling_chem_display.invisibility = INVISIBILITY_ABSTRACT
return
else
comp.regenerate()
if(hud_used)
ling_chem_display.invisibility = INVISIBILITY_NONE
// ling_chem_display.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#dd66dd'>[round(mind.changeling.chem_charges)]</font></div>"
switch(mind.changeling.chem_storage)
switch(comp.chem_storage)
if(1 to 50)
switch(mind.changeling.chem_charges)
switch(comp.chem_charges)
if(0 to 9)
ling_chem_display.icon_state = "ling_chems0"
if(10 to 19)
@@ -1815,7 +1820,7 @@
if(50)
ling_chem_display.icon_state = "ling_chems50"
if(51 to 80) //This is a crappy way of checking for engorged sacs...
switch(mind.changeling.chem_charges)
switch(comp.chem_charges)
if(0 to 9)
ling_chem_display.icon_state = "ling_chems0e"
if(10 to 19)
@@ -1834,9 +1839,6 @@
ling_chem_display.icon_state = "ling_chems70e"
if(80)
ling_chem_display.icon_state = "ling_chems80e"
else
if(mind && hud_used)
ling_chem_display.invisibility = INVISIBILITY_ABSTRACT
/mob/living/carbon/human/handle_shock()
..()
+3 -2
View File
@@ -101,8 +101,9 @@
voice_sub = get_id_name()
if(voice_sub)
return voice_sub
if(mind && mind.changeling && mind.changeling.mimicing)
return mind.changeling.mimicing
var/datum/component/antag/changeling/comp = is_changeling(src)
if(comp && comp.mimicing)
return comp.mimicing
if(GetSpecialVoice())
return GetSpecialVoice()
return real_name
@@ -518,14 +518,13 @@
if(H.hallucination >= hallucination_cap && H.loneliness_stage >= warning_cap)
return
// Outpost 21 addition begin - extended loneliness mechanics
if(H.mind && H.mind.changeling) // We are never alone~
var/datum/component/antag/changeling/comp = H.GetComponent(/datum/component/antag/changeling)
if(comp) // We are never alone~
H.loneliness_stage = 0
return
if(H.has_brain_worms()) // Brain friends!
sub_loneliness(H)
return
// Outpost 21 addition end
// Vored? Not gonna get frightened.
if(isbelly(H.loc))