Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into upstream-merge-26720

This commit is contained in:
LetterJay
2017-05-02 11:36:27 -05:00
349 changed files with 14689 additions and 9184 deletions
+50 -4
View File
@@ -54,6 +54,7 @@
var/linglink
var/miming = 0 // Mime's vow of silence
var/list/antag_datums = list()
var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state
var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD
var/datum/gang/gang_datum //Which gang this mind belongs to, if any
@@ -86,13 +87,13 @@
if(new_character.mind) //disassociate any mind currently in our new body's mind variable
new_character.mind.current = null
if(istype(current) && islist(current.antag_datums)) //wow apparently current isn't always living good fucking job SOMEONE
for(var/i in current.antag_datums)
var/datum/antagonist/D = i
D.transfer_to_new_body(new_character)
var/datum/atom_hud/antag/hud_to_transfer = antag_hud//we need this because leave_hud() will clear this list
var/mob/living/old_current = current
current = new_character //associate ourself with our new body
new_character.mind = src //and associate our new body with ourself
for(var/a in antag_datums) //Makes sure all antag datums effects are applied in the new body
var/datum/antagonist/A = a
A.on_body_transfer(old_current, current)
if(iscarbon(new_character))
var/mob/living/carbon/C = new_character
C.last_mind = src
@@ -108,6 +109,51 @@
/datum/mind/proc/wipe_memory()
memory = null
// Datum antag mind procs
/datum/mind/proc/add_antag_datum(datum_type, on_gain = TRUE)
if(!datum_type)
return
if(!can_hold_antag_datum(datum_type))
return
var/datum/antagonist/A = new datum_type(src)
antag_datums += A
if(on_gain)
A.on_gain()
/datum/mind/proc/remove_antag_datum(datum_type)
if(!datum_type)
return
var/datum/antagonist/A = has_antag_datum(datum_type)
if(A)
A.on_removal()
/datum/mind/proc/remove_all_antag_datums() //For the Lazy amongst us.
for(var/a in antag_datums)
var/datum/antagonist/A = a
A.on_removal()
/datum/mind/proc/has_antag_datum(datum_type, check_subtypes = TRUE)
if(!datum_type)
return
. = FALSE
for(var/a in antag_datums)
var/datum/antagonist/A = a
if(check_subtypes && istype(A, datum_type))
return A
else if(A.type == datum_type)
return A
/datum/mind/proc/can_hold_antag_datum(datum_type)
if(!datum_type)
return
. = TRUE
if(has_antag_datum(datum_type))
return FALSE
for(var/i in antag_datums)
var/datum/antagonist/A = i
if(is_type_in_typecache(A, A.typecache_datum_blacklist))
return FALSE
/*
Removes antag type's references from a mind.