Merge pull request #3833 from Citadel-Station-13/upstream-merge-32183

[MIRROR] Ling datum antag standarization.
This commit is contained in:
LetterJay
2017-11-15 15:00:46 -06:00
committed by GitHub
38 changed files with 546 additions and 991 deletions
+6 -17
View File
@@ -442,12 +442,15 @@
dat += "<td><A href='?priv_msg=[N.key]'>PM</A></td></tr>"
dat += "</table>"
if(SSticker.mode.changelings.len > 0)
var/list/lings = get_antagonists(/datum/antagonist/changeling)
if(lings.len > 0)
dat += "<br><table cellspacing=5><tr><td><B>Changelings</B></td><td></td><td></td></tr>"
for(var/datum/mind/changeling in SSticker.mode.changelings)
for(var/datum/mind/changeling in lings)
var/datum/antagonist/changeling/lingantag = changeling.has_antag_datum(/datum/antagonist/changeling)
var/mob/M = changeling.current
if(M)
dat += "<tr><td>[M.mind.changeling.changelingID] as <a href='?_src_=holder;[HrefToken()];adminplayeropts=[REF(M)]'>[M.real_name]</a>[M.client ? "" : " <i>(No Client)</i>"][M.stat == DEAD ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
dat += "<tr><td>[lingantag.changelingID]([lingantag.name]) as <a href='?_src_=holder;[HrefToken()];adminplayeropts=[REF(M)]'>[M.real_name]</a>[M.client ? "" : " <i>(No Client)</i>"][M.stat == DEAD ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
dat += "<td><A href='?priv_msg=[M.ckey]'>PM</A></td>"
dat += "<td><A href='?_src_=holder;[HrefToken()];adminplayerobservefollow=[REF(M)]'>FLW</a></td>"
dat += "<td><A HREF='?_src_=holder;[HrefToken()];traitor=[REF(M)]'>Show Objective</A></td></tr>"
@@ -607,20 +610,6 @@
dat += "<td><A href='?priv_msg=[blob.key]'>PM</A></td></tr>"
dat += "</table>"
var/list/pirates = get_antagonists(/datum/antagonist/pirate)
if(pirates.len > 0)
dat += "<br><table cellspacing=5><tr><td><B>Pirates</B></td><td></td></tr>"
for(var/datum/mind/N in pirates)
var/mob/M = N.current
if(!M)
dat += "<tr><td><a href='?_src_=vars;[HrefToken()];Vars=\ref[N]'>[N.name]([N.key])</a><i>No body.</i></td>"
dat += "<td><A href='?priv_msg=[N.key]'>PM</A></td></tr>"
else
dat += "<tr><td><a href='?_src_=holder;[HrefToken()];adminplayeropts=\ref[M]'>[M.real_name]</a>[M.client ? "" : " <i>(No Client)</i>"][M.stat == DEAD ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
dat += "<td><A href='?priv_msg=[M.ckey]'>PM</A></td>"
dat += "<td><A href='?_src_=holder;[HrefToken()];adminplayerobservefollow=\ref[M]'>FLW</a></td></tr>"
dat += "</table>"
if(istype(SSticker.mode, /datum/game_mode/monkey))
var/datum/game_mode/monkey/mode = SSticker.mode
-2
View File
@@ -106,8 +106,6 @@
/obj/item/clothing/Destroy()
if(isliving(loc))
dropped(loc)
if(pockets)
qdel(pockets)
pockets = null
+1 -1
View File
@@ -23,7 +23,7 @@
name = "brain"
if(C.mind && C.mind.changeling && !no_id_transfer) //congrats, you're trapped in a body you don't control
if(C.mind && C.mind.has_antag_datum(/datum/antagonist/changeling) && !no_id_transfer) //congrats, you're trapped in a body you don't control
if(brainmob && !(C.stat == DEAD || (C.status_flags & FAKEDEATH)))
to_chat(brainmob, "<span class = danger>You can't feel your body! You're still just a brain!</span>")
loc = C
+1 -1
View File
@@ -770,7 +770,7 @@
/mob/living/carbon/can_be_revived()
. = ..()
if(!getorgan(/obj/item/organ/brain) && (!mind || !mind.changeling))
if(!getorgan(/obj/item/organ/brain) && (!mind || !mind.has_antag_datum(/datum/antagonist/changeling)))
return 0
/mob/living/carbon/harvest(mob/living/user)
@@ -60,9 +60,10 @@
stat("Chemicals", B.chemicals)
if(mind)
if(mind.changeling)
stat("Chemical Storage", "[mind.changeling.chem_charges]/[mind.changeling.chem_storage]")
stat("Absorbed DNA", mind.changeling.absorbedcount)
var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
stat("Chemical Storage", "[changeling.chem_charges]/[changeling.chem_storage]")
stat("Absorbed DNA", changeling.absorbedcount)
//NINJACODE
+4 -2
View File
@@ -39,8 +39,10 @@
return real_name
else
return real_name
if(mind && mind.changeling && mind.changeling.mimicing)
return mind.changeling.mimicing
if(mind)
var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling && changeling.mimicing )
return changeling.mimicing
if(GetSpecialVoice())
return GetSpecialVoice()
return real_name
+5 -3
View File
@@ -251,12 +251,14 @@
if(stat != DEAD)
D.stage_act()
//todo generalize this and move hud out
/mob/living/carbon/proc/handle_changeling()
if(mind && hud_used && hud_used.lingchemdisplay)
if(mind.changeling)
mind.changeling.regenerate(src)
var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
changeling.regenerate()
hud_used.lingchemdisplay.invisibility = 0
hud_used.lingchemdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#dd66dd'>[round(mind.changeling.chem_charges)]</font></div>"
hud_used.lingchemdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='#dd66dd'>[round(changeling.chem_charges)]</font></div>"
else
hud_used.lingchemdisplay.invisibility = INVISIBILITY_ABSTRACT
@@ -74,9 +74,10 @@
stat(null, "Intent: [a_intent]")
stat(null, "Move Mode: [m_intent]")
if(client && mind)
if(mind.changeling)
stat("Chemical Storage", "[mind.changeling.chem_charges]/[mind.changeling.chem_storage]")
stat("Absorbed DNA", mind.changeling.absorbedcount)
var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
stat("Chemical Storage", "[changeling.chem_charges]/[changeling.chem_storage]")
stat("Absorbed DNA", changeling.absorbedcount)
return
+9 -6
View File
@@ -336,8 +336,9 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
if(prob(40))
to_chat(M, "<i><font color=#800080>We can faintly sense an outsider trying to communicate through the hivemind...</font></i>")
if(2)
var/msg = "<i><font color=#800080><b>[mind.changeling.changelingID]:</b> [message]</font></i>"
log_talk(src,"[mind.changeling.changelingID]/[key] : [message]",LOGSAY)
var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling)
var/msg = "<i><font color=#800080><b>[changeling.changelingID]:</b> [message]</font></i>"
log_talk(src,"[changeling.changelingID]/[key] : [message]",LOGSAY)
for(var/_M in GLOB.mob_list)
var/mob/M = _M
if(M in GLOB.dead_mob_list)
@@ -413,10 +414,12 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
return 0
/mob/living/lingcheck() //1 is ling w/ no hivemind. 2 is ling w/hivemind. 3 is ling victim being linked into hivemind.
if(mind && mind.changeling)
if(mind.changeling.changeling_speak)
return 2
return 1
if(mind)
var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
if(changeling.changeling_speak)
return 2
return 1
if(mind && mind.linglink)
return 3
return 0
@@ -486,7 +486,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
if(guardians.len && !allowmultiple)
to_chat(user, "<span class='holoparasite'>You already have a [mob_name]!</span>")
return
if(user.mind && user.mind.changeling && !allowling)
if(user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling) && !allowling)
to_chat(user, "[ling_failure]")
return
if(used == TRUE)
@@ -74,12 +74,13 @@
if(origin && origin.current && (origin.current.stat == DEAD))
origin.transfer_to(M)
if(!origin.changeling)
M.make_changeling()
if(origin.changeling.can_absorb_dna(M, owner))
origin.changeling.add_new_profile(owner, M)
var/datum/antagonist/changeling/C = origin.has_antag_datum(/datum/antagonist/changeling)
if(!C)
C = origin.add_antag_datum(/datum/antagonist/changeling/xenobio)
if(C.can_absorb_dna(owner))
C.add_new_profile(owner)
origin.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
C.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
M.key = origin.key
owner.gib()
+3 -2
View File
@@ -651,8 +651,9 @@
if(mind)
add_spells_to_statpanel(mind.spell_list)
if(mind.changeling)
add_stings_to_statpanel(mind.changeling.purchasedpowers)
var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
add_stings_to_statpanel(changeling.purchasedpowers)
add_spells_to_statpanel(mob_spell_list)
/mob/proc/add_spells_to_statpanel(list/spells)
+1 -1
View File
@@ -365,7 +365,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
if(M.mind in SSticker.mode.syndicates)
return 2
if("changeling")
if(M.mind in SSticker.mode.changelings)
if(M.mind.has_antag_datum(/datum/antagonist/changeling,TRUE))
return 2
if("wizard")
if(iswizard(M))
+16 -12
View File
@@ -94,8 +94,9 @@
if(mind)
mind.transfer_to(O)
if(O.mind.changeling)
O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
var/datum/antagonist/changeling/changeling = O.mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
for(var/X in internal_organs)
var/obj/item/organ/I = X
@@ -118,7 +119,7 @@
for(var/X in O.internal_organs)
var/obj/item/organ/G = X
if(BP.body_zone == check_zone(G.zone))
if(mind && mind.changeling && istype(G, /obj/item/organ/brain))
if(mind && mind.has_antag_datum(/datum/antagonist/changeling) && istype(G, /obj/item/organ/brain))
continue //so headless changelings don't lose their brain when transforming
qdel(G) //we lose the organs in the missing limbs
qdel(BP)
@@ -126,8 +127,9 @@
//transfer mind if we didn't yet
if(mind)
mind.transfer_to(O)
if(O.mind.changeling)
O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
var/datum/antagonist/changeling/changeling = O.mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
if (tr_flags & TR_DEFAULTMSG)
@@ -248,9 +250,10 @@
if(mind)
mind.transfer_to(O)
if(O.mind.changeling)
for(var/obj/effect/proc_holder/changeling/humanform/HF in O.mind.changeling.purchasedpowers)
O.mind.changeling.purchasedpowers -= HF
var/datum/antagonist/changeling/changeling = O.mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
for(var/obj/effect/proc_holder/changeling/humanform/HF in changeling.purchasedpowers)
changeling.purchasedpowers -= HF
for(var/X in internal_organs)
var/obj/item/organ/I = X
@@ -274,16 +277,17 @@
for(var/X in O.internal_organs)
var/obj/item/organ/G = X
if(BP.body_zone == check_zone(G.zone))
if(mind && mind.changeling && istype(G, /obj/item/organ/brain))
if(mind && mind.has_antag_datum(/datum/antagonist/changeling) && istype(G, /obj/item/organ/brain))
continue //so headless changelings don't lose their brain when transforming
qdel(G) //we lose the organs in the missing limbs
qdel(BP)
if(mind)
mind.transfer_to(O)
if(O.mind.changeling)
for(var/obj/effect/proc_holder/changeling/humanform/HF in O.mind.changeling.purchasedpowers)
O.mind.changeling.purchasedpowers -= HF
var/datum/antagonist/changeling/changeling = O.mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
for(var/obj/effect/proc_holder/changeling/humanform/HF in changeling.purchasedpowers)
changeling.purchasedpowers -= HF
O.a_intent = INTENT_HELP
if (tr_flags & TR_DEFAULTMSG)
@@ -957,9 +957,11 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "A stingy drink."
/datum/reagent/consumable/ethanol/changelingsting/on_mob_life(mob/living/M)
if(M.mind && M.mind.changeling) //Changeling Sting assists in the recharging of changeling chemicals.
M.mind.changeling.chem_charges += metabolization_rate
M.mind.changeling.chem_charges = Clamp(M.mind.changeling.chem_charges, 0, M.mind.changeling.chem_storage)
if(M.mind) //Changeling Sting assists in the recharging of changeling chemicals.
var/datum/antagonist/changeling/changeling = M.mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
changeling.chem_charges += metabolization_rate
changeling.chem_charges = Clamp(changeling.chem_charges, 0, changeling.chem_storage)
return ..()
/datum/reagent/consumable/ethanol/irishcarbomb