Bleeding edgy refresh (#303)

* not code stuff

* other things

* global vars, defines, helpers

* onclick hud stuff, orphans, world.dm

* controllers and datums

* game folder

* everything not client/mobs in modules

* client folder

* stage 1 mob stuff

* simple animal things

* silicons

* carbon things

* ayylmaos and monkeys

* hyoomahn

* icons n shit

* sprite fixes

* compile fixes

* some fixes I cherrypicked.

* qdel fixes

* forgot brain refractors
This commit is contained in:
Poojawa
2017-03-21 11:44:10 -05:00
committed by GitHub
parent 099a6c8764
commit f67e9f6d87
1476 changed files with 344416 additions and 40694 deletions
+100 -65
View File
@@ -36,7 +36,6 @@
var/active = 0
var/memory
var/attack_log
var/assigned_role
var/special_role
@@ -69,6 +68,9 @@
src.key = key
soulOwner = src
/datum/mind/Destroy()
ticker.minds -= src
return ..()
/datum/mind/proc/transfer_to(mob/new_character, var/force_key_move = 0)
if(current) // remove ourself from our old body's mind variable
@@ -228,11 +230,12 @@
enslaved_to = creator
current.faction = creator.faction.Copy()
current.faction |= creator.faction
creator.faction |= current.faction
if(creator.mind.special_role)
message_admins("[key_name_admin(current)](<A HREF='?_src_=holder;adminmoreinfo=\ref[current]'>?</A>) has been created by [key_name_admin(creator)](<A HREF='?_src_=holder;adminmoreinfo=\ref[creator]'>?</A>), an antagonist.")
current << "<span class='userdanger'>Despite your creators current allegiances, your true master remains [creator.real_name]. If their loyalities change, so do yours. This will never change unless your creator's body is destroyed.</span>"
to_chat(current, "<span class='userdanger'>Despite your creators current allegiances, your true master remains [creator.real_name]. If their loyalities change, so do yours. This will never change unless your creator's body is destroyed.</span>")
/datum/mind/proc/show_memory(mob/recipient, window=1)
if(!recipient)
@@ -248,8 +251,8 @@
if(window)
recipient << browse(output,"window=memory")
else
recipient << "<i>[output]</i>"
else if(objectives.len || memory)
to_chat(recipient, "<i>[output]</i>")
/datum/mind/proc/edit_memory()
if(!ticker || !ticker.mode)
@@ -542,11 +545,14 @@
text = uppertext(text)
text = "<i><b>[text]</b></i>: "
if(src in ticker.mode.devils)
text += "<b>DEVIL</b>|sintouched|<a href='?src=\ref[src];devil=clear'>human</a>"
if(devilinfo && !devilinfo.ascendable)
text += "<b>DEVIL</b>|<a href='?src=\ref[src];devil=ascendable_devil'>Ascendable Devil</a>|sintouched|<a href='?src=\ref[src];devil=clear'>human</a>"
else
text += "<a href='?src=\ref[src];devil=devil'>DEVIL</a>|<b>ASCENDABLE DEVIL</b>|sintouched|<a href='?src=\ref[src];devil=clear'>human</a>"
else if(src in ticker.mode.sintouched)
text += "devil|<b>SINTOUCHED</b>|<a href='?src=\ref[src];devil=clear'>human</a>"
text += "devil|Ascendable Devil|<b>SINTOUCHED</b>|<a href='?src=\ref[src];devil=clear'>human</a>"
else
text += "<a href='?src=\ref[src];devil=devil'>devil</a>|<a href='?src=\ref[src];devil=sintouched'>sintouched</a>|<b>HUMAN</b>"
text += "<a href='?src=\ref[src];devil=devil'>devil</a>|<a href='?src=\ref[src];devil=ascendable_devil'>Ascendable Devil</a>|<a href='?src=\ref[src];devil=sintouched'>sintouched</a>|<b>HUMAN</b>"
if(current && current.client && (ROLE_DEVIL in current.client.prefs.be_special))
text += "|Enabled in Prefs"
@@ -695,7 +701,7 @@
new_objective.owner = src
new_objective.update_explanation_text()
else
usr << "No active AIs with minds"
to_chat(usr, "No active AIs with minds")
if ("prevent")
new_objective = new /datum/objective/block
@@ -793,16 +799,16 @@
switch(href_list["revolution"])
if("clear")
remove_rev()
current << "<span class='userdanger'>You have been brainwashed! You are no longer a revolutionary!</span>"
to_chat(current, "<span class='userdanger'>You have been brainwashed! You are no longer a revolutionary!</span>")
message_admins("[key_name_admin(usr)] has de-rev'ed [current].")
log_admin("[key_name(usr)] has de-rev'ed [current].")
if("rev")
if(src in ticker.mode.head_revolutionaries)
ticker.mode.head_revolutionaries -= src
ticker.mode.update_rev_icons_removed(src)
current << "<span class='userdanger'>Revolution has been disappointed of your leader traits! You are a regular revolutionary now!</span>"
to_chat(current, "<span class='userdanger'>Revolution has been disappointed of your leader traits! You are a regular revolutionary now!</span>")
else if(!(src in ticker.mode.revolutionaries))
current << "<span class='danger'><FONT size = 3> You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</FONT></span>"
to_chat(current, "<span class='danger'><FONT size = 3> You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</FONT></span>")
else
return
ticker.mode.revolutionaries += src
@@ -815,9 +821,9 @@
if(src in ticker.mode.revolutionaries)
ticker.mode.revolutionaries -= src
ticker.mode.update_rev_icons_removed(src)
current << "<span class='userdanger'>You have proved your devotion to revoltion! Yea are a head revolutionary now!</span>"
to_chat(current, "<span class='userdanger'>You have proved your devotion to revoltion! Yea are a head revolutionary now!</span>")
else if(!(src in ticker.mode.head_revolutionaries))
current << "<span class='userdanger'>You are a member of the revolutionaries' leadership now!</span>"
to_chat(current, "<span class='userdanger'>You are a member of the revolutionaries' leadership now!</span>")
else
return
if (ticker.mode.head_revolutionaries.len>0)
@@ -840,24 +846,24 @@
if("autoobjectives")
ticker.mode.forge_revolutionary_objectives(src)
ticker.mode.greet_revolutionary(src,0)
usr << "<span class='notice'>The objectives for revolution have been generated and shown to [key]</span>"
to_chat(usr, "<span class='notice'>The objectives for revolution have been generated and shown to [key]</span>")
if("flash")
if (!ticker.mode.equip_revolutionary(current))
usr << "<span class='danger'>Spawning flash failed!</span>"
to_chat(usr, "<span class='danger'>Spawning flash failed!</span>")
if("takeflash")
var/list/L = current.get_contents()
var/obj/item/device/assembly/flash/flash = locate() in L
if (!flash)
usr << "<span class='danger'>Deleting flash failed!</span>"
to_chat(usr, "<span class='danger'>Deleting flash failed!</span>")
qdel(flash)
if("repairflash")
var/list/L = current.get_contents()
var/obj/item/device/assembly/flash/flash = locate() in L
if (!flash)
usr << "<span class='danger'>Repairing flash failed!</span>"
to_chat(usr, "<span class='danger'>Repairing flash failed!</span>")
else
flash.crit_fail = 0
flash.update_icon()
@@ -876,11 +882,11 @@
if("equip")
switch(ticker.mode.equip_gang(current,gang_datum))
if(1)
usr << "<span class='warning'>Unable to equip territory spraycan!</span>"
to_chat(usr, "<span class='warning'>Unable to equip territory spraycan!</span>")
if(2)
usr << "<span class='warning'>Unable to equip recruitment pen and spraycan!</span>"
to_chat(usr, "<span class='warning'>Unable to equip recruitment pen and spraycan!</span>")
if(3)
usr << "<span class='warning'>Unable to equip gangtool, pen, and spraycan!</span>"
to_chat(usr, "<span class='warning'>Unable to equip gangtool, pen, and spraycan!</span>")
if("takeequip")
var/list/L = current.get_contents()
@@ -912,7 +918,7 @@
gang_datum = G
special_role = "[G.name] Gang Boss"
G.add_gang_hud(src)
current << "<FONT size=3 color=red><B>You are a [G.name] Gang Boss!</B></FONT>"
to_chat(current, "<FONT size=3 color=red><B>You are a [G.name] Gang Boss!</B></FONT>")
message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang leadership.")
log_admin("[key_name(usr)] has added [current] to the [G.name] Gang leadership.")
ticker.mode.forge_gang_objectives(src)
@@ -944,11 +950,11 @@
log_admin("[key_name(usr)] has cult'ed [current].")
if("tome")
if (!ticker.mode.equip_cultist(current,1))
usr << "<span class='danger'>Spawning tome failed!</span>"
to_chat(usr, "<span class='danger'>Spawning tome failed!</span>")
if("amulet")
if (!ticker.mode.equip_cultist(current))
usr << "<span class='danger'>Spawning amulet failed!</span>"
to_chat(usr, "<span class='danger'>Spawning amulet failed!</span>")
else if(href_list["clockcult"])
switch(href_list["clockcult"])
@@ -963,15 +969,15 @@
log_admin("[key_name(usr)] has made [current] into a servant of Ratvar.")
if("slab")
if(!ticker.mode.equip_servant(current))
usr << "<span class='warning'>Failed to outfit [current] with a slab!</span>"
to_chat(usr, "<span class='warning'>Failed to outfit [current] with a slab!</span>")
else
usr << "<span class='notice'>Successfully gave [current] a clockwork slab!</span>"
to_chat(usr, "<span class='notice'>Successfully gave [current] a clockwork slab!</span>")
else if (href_list["wizard"])
switch(href_list["wizard"])
if("clear")
remove_wizard()
current << "<span class='userdanger'>You have been brainwashed! You are no longer a wizard!</span>"
to_chat(current, "<span class='userdanger'>You have been brainwashed! You are no longer a wizard!</span>")
log_admin("[key_name(usr)] has de-wizard'ed [current].")
ticker.mode.update_wiz_icons_removed(src)
if("wizard")
@@ -979,7 +985,7 @@
ticker.mode.wizards += src
special_role = "Wizard"
//ticker.mode.learn_basic_spells(current)
current << "<span class='boldannounce'>You are the Space Wizard!</span>"
to_chat(current, "<span class='boldannounce'>You are the Space Wizard!</span>")
message_admins("[key_name_admin(usr)] has wizard'ed [current].")
log_admin("[key_name(usr)] has wizard'ed [current].")
ticker.mode.update_wiz_icons_added(src)
@@ -991,13 +997,13 @@
ticker.mode.name_wizard(current)
if("autoobjectives")
ticker.mode.forge_wizard_objectives(src)
usr << "<span class='notice'>The objectives for wizard [key] have been generated. You can edit them and anounce manually.</span>"
to_chat(usr, "<span class='notice'>The objectives for wizard [key] have been generated. You can edit them and anounce manually.</span>")
else if (href_list["changeling"])
switch(href_list["changeling"])
if("clear")
remove_changeling()
current << "<span class='userdanger'>You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!</span>"
to_chat(current, "<span class='userdanger'>You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!</span>")
message_admins("[key_name_admin(usr)] has de-changeling'ed [current].")
log_admin("[key_name(usr)] has de-changeling'ed [current].")
if("changeling")
@@ -1005,17 +1011,17 @@
ticker.mode.changelings += src
current.make_changeling()
special_role = "Changeling"
current << "<span class='boldannounce'>Your powers are awoken. A flash of memory returns to us...we are [changeling.changelingID], a changeling!</span>"
to_chat(current, "<span class='boldannounce'>Your powers are awoken. A flash of memory returns to us...we are [changeling.changelingID], a changeling!</span>")
message_admins("[key_name_admin(usr)] has changeling'ed [current].")
log_admin("[key_name(usr)] has changeling'ed [current].")
ticker.mode.update_changeling_icons_added(src)
if("autoobjectives")
ticker.mode.forge_changeling_objectives(src)
usr << "<span class='notice'>The objectives for changeling [key] have been generated. You can edit them and anounce manually.</span>"
to_chat(usr, "<span class='notice'>The objectives for changeling [key] have been generated. You can edit them and anounce manually.</span>")
if("initialdna")
if( !changeling || !changeling.stored_profiles.len || !istype(current, /mob/living/carbon))
usr << "<span class='danger'>Resetting DNA failed!</span>"
to_chat(usr, "<span class='danger'>Resetting DNA failed!</span>")
else
var/mob/living/carbon/C = current
changeling.first_prof.dna.transfer_identity(C, transfer_SE=1)
@@ -1027,7 +1033,7 @@
switch(href_list["nuclear"])
if("clear")
remove_nukeop()
current << "<span class='userdanger'>You have been brainwashed! You are no longer a syndicate operative!</span>"
to_chat(current, "<span class='userdanger'>You have been brainwashed! You are no longer a syndicate operative!</span>")
message_admins("[key_name_admin(usr)] has de-nuke op'ed [current].")
log_admin("[key_name(usr)] has de-nuke op'ed [current].")
if("nuclear")
@@ -1040,7 +1046,7 @@
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
special_role = "Syndicate"
assigned_role = "Syndicate"
current << "<span class='notice'>You are a [syndicate_name()] agent!</span>"
to_chat(current, "<span class='notice'>You are a [syndicate_name()] agent!</span>")
ticker.mode.forge_syndicate_objectives(src)
ticker.mode.greet_syndicate(src)
message_admins("[key_name_admin(usr)] has nuke op'ed [current].")
@@ -1060,7 +1066,7 @@
qdel(H.w_uniform)
if (!ticker.mode.equip_syndicate(current))
usr << "<span class='danger'>Equipping a syndicate failed!</span>"
to_chat(usr, "<span class='danger'>Equipping a syndicate failed!</span>")
if("tellcode")
var/code
for (var/obj/machinery/nuclearbomb/bombue in machines)
@@ -1069,15 +1075,15 @@
break
if (code)
store_memory("<B>Syndicate Nuclear Bomb Code</B>: [code]", 0, 0)
current << "The nuclear authorization code is: <B>[code]</B>"
to_chat(current, "The nuclear authorization code is: <B>[code]</B>")
else
usr << "<span class='danger'>No valid nuke found!</span>"
to_chat(usr, "<span class='danger'>No valid nuke found!</span>")
else if (href_list["traitor"])
switch(href_list["traitor"])
if("clear")
remove_traitor()
current << "<span class='userdanger'>You have been brainwashed! You are no longer a traitor!</span>"
to_chat(current, "<span class='userdanger'>You have been brainwashed! You are no longer a traitor!</span>")
message_admins("[key_name_admin(usr)] has de-traitor'ed [current].")
log_admin("[key_name(usr)] has de-traitor'ed [current].")
ticker.mode.update_traitor_icons_removed(src)
@@ -1086,7 +1092,7 @@
if(!(src in ticker.mode.traitors))
ticker.mode.traitors += src
special_role = "traitor"
current << "<span class='boldannounce'>You are a traitor!</span>"
to_chat(current, "<span class='boldannounce'>You are a traitor!</span>")
message_admins("[key_name_admin(usr)] has traitor'ed [current].")
log_admin("[key_name(usr)] has traitor'ed [current].")
if(isAI(current))
@@ -1096,7 +1102,7 @@
if("autoobjectives")
ticker.mode.forge_traitor_objectives(src)
usr << "<span class='notice'>The objectives for traitor [key] have been generated. You can edit them and anounce manually.</span>"
to_chat(usr, "<span class='notice'>The objectives for traitor [key] have been generated. You can edit them and anounce manually.</span>")
else if(href_list["devil"])
switch(href_list["devil"])
@@ -1106,15 +1112,20 @@
if(devilinfo)
devilinfo.regress_blood_lizard()
else
usr << "<span class='warning'>Something went wrong with removing the devil, we were unable to find an attached devilinfo.</span>."
to_chat(usr, "<span class='warning'>Something went wrong with removing the devil, we were unable to find an attached devilinfo.</span>.")
ticker.mode.devils -= src
special_role = null
current << "<span class='userdanger'>Your infernal link has been severed! You are no longer a devil!</span>"
to_chat(current, "<span class='userdanger'>Your infernal link has been severed! You are no longer a devil!</span>")
RemoveSpell(/obj/effect/proc_holder/spell/targeted/infernal_jaunt)
RemoveSpell(/obj/effect/proc_holder/spell/aimed/fireball/hellish)
RemoveSpell(/obj/effect/proc_holder/spell/targeted/summon_contract)
RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork)
RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/violin)
RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater)
RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended)
RemoveSpell(/obj/effect/proc_holder/spell/targeted/summon_dancefloor)
RemoveSpell(/obj/effect/proc_holder/spell/targeted/sintouch)
RemoveSpell(/obj/effect/proc_holder/spell/targeted/sintouch/ascended)
message_admins("[key_name_admin(usr)] has de-devil'ed [current].")
devilinfo = null
if(issilicon(current))
@@ -1126,15 +1137,39 @@
message_admins("[key_name_admin(usr)] has de-sintouch'ed [current].")
log_admin("[key_name(usr)] has de-sintouch'ed [current].")
if("devil")
if(devilinfo)
devilinfo.ascendable = FALSE
message_admins("[key_name_admin(usr)] has made [current] unable to ascend as a devil.")
log_admin("[key_name_admin(usr)] has made [current] unable to ascend as a devil.")
return
if(!ishuman(current) && !iscyborg(current))
usr << "<span class='warning'>This only works on humans and cyborgs!</span>"
return
ticker.mode.devils += src
special_role = "devil"
ticker.mode.finalize_devil(src)
ticker.mode.finalize_devil(src, FALSE)
ticker.mode.add_devil_objectives(src, 2)
announceDevilLaws()
announce_objectives()
message_admins("[key_name_admin(usr)] has devil'ed [current].")
log_admin("[key_name(usr)] has devil'ed [current].")
if("ascendable_devil")
if(devilinfo)
devilinfo.ascendable = TRUE
message_admins("[key_name_admin(usr)] has made [current] able to ascend as a devil.")
log_admin("[key_name_admin(usr)] has made [current] able to ascend as a devil.")
return
if(!ishuman(current) && !iscyborg(current))
to_chat(usr, "<span class='warning'>This only works on humans and cyborgs!</span>")
return
ticker.mode.devils += src
special_role = "devil"
ticker.mode.finalize_devil(src, TRUE)
ticker.mode.add_devil_objectives(src, 2)
announceDevilLaws()
announce_objectives()
message_admins("[key_name_admin(usr)] has devil'ed [current]. The devil has been marked as ascendable.")
log_admin("[key_name(usr)] has devil'ed [current]. The devil has been marked as ascendable.")
if("sintouched")
if(ishuman(current))
ticker.mode.sintouched += src
@@ -1142,17 +1177,17 @@
H.influenceSin()
message_admins("[key_name_admin(usr)] has sintouch'ed [current].")
else
usr << "<span class='warning'>This only works on humans!</span>"
to_chat(usr, "<span class='warning'>This only works on humans!</span>")
return
else if(href_list["abductor"])
switch(href_list["abductor"])
if("clear")
usr << "Not implemented yet. Sorry!"
to_chat(usr, "Not implemented yet. Sorry!")
//ticker.mode.update_abductor_icons_removed(src)
if("abductor")
if(!ishuman(current))
usr << "<span class='warning'>This only works on humans!</span>"
to_chat(usr, "<span class='warning'>This only works on humans!</span>")
return
make_Abductor()
log_admin("[key_name(usr)] turned [current] into abductor.")
@@ -1182,7 +1217,7 @@
src = null
M = H.monkeyize()
src = M.mind
//world << "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!"
//to_chat(world, "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!")
else if (istype(M) && length(M.viruses))
for(var/datum/disease/D in M.viruses)
D.cure(0)
@@ -1252,7 +1287,7 @@
log_admin("[key_name(usr)] changed [current]'s telecrystal count to [crystals].")
if("uplink")
if(!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors)))
usr << "<span class='danger'>Equipping a syndicate failed!</span>"
to_chat(usr, "<span class='danger'>Equipping a syndicate failed!</span>")
log_admin("[key_name(usr)] attempted to give [current] an uplink.")
else if (href_list["obj_announce"])
@@ -1262,10 +1297,10 @@
/datum/mind/proc/announce_objectives()
var/obj_count = 1
current << "<span class='notice'>Your current objectives:</span>"
to_chat(current, "<span class='notice'>Your current objectives:</span>")
for(var/objective in objectives)
var/datum/objective/O = objective
current << "<B>Objective #[obj_count]</B>: [O.explanation_text]"
to_chat(current, "<B>Objective #[obj_count]</B>: [O.explanation_text]")
obj_count++
/datum/mind/proc/find_syndicate_uplink()
@@ -1316,14 +1351,14 @@
if (nuke_code)
store_memory("<B>Syndicate Nuclear Bomb Code</B>: [nuke_code]", 0, 0)
current << "The nuclear authorization code is: <B>[nuke_code]</B>"
to_chat(current, "The nuclear authorization code is: <B>[nuke_code]</B>")
else
var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in nuke_list
if(nuke)
store_memory("<B>Syndicate Nuclear Bomb Code</B>: [nuke.r_code]", 0, 0)
current << "The nuclear authorization code is: <B>nuke.r_code</B>"
to_chat(current, "The nuclear authorization code is: <B>nuke.r_code</B>")
else
current << "You were not provided with a nuclear code. Trying asking your team leader or contacting syndicate command.</B>"
to_chat(current, "You were not provided with a nuclear code. Trying asking your team leader or contacting syndicate command.</B>")
if (leader)
ticker.mode.prepare_syndicate_leader(src,nuke_code)
@@ -1346,7 +1381,7 @@
assigned_role = "Wizard"
if(!wizardstart.len)
current.loc = pick(latejoin)
current << "HOT INSERTION, GO GO GO"
to_chat(current, "HOT INSERTION, GO GO GO")
else
current.loc = pick(wizardstart)
@@ -1360,20 +1395,20 @@
if(!(src in ticker.mode.cult))
ticker.mode.add_cultist(src,FALSE)
special_role = "Cultist"
current << "<font color=\"purple\"><b><i>You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie.</b></i></font>"
current << "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>"
to_chat(current, "<font color=\"purple\"><b><i>You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie.</b></i></font>")
to_chat(current, "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>")
var/datum/game_mode/cult/cult = ticker.mode
if (istype(cult))
cult.memorize_cult_objectives(src)
else
var/explanation = "Summon Nar-Sie via the use of the appropriate rune (Hell join self). It will only work if nine cultists stand on and around it."
current << "<B>Objective #1</B>: [explanation]"
to_chat(current, "<B>Objective #1</B>: [explanation]")
memory += "<B>Objective #1</B>: [explanation]<BR>"
var/mob/living/carbon/human/H = current
if (!ticker.mode.equip_cultist(current))
H << "Spawning an amulet from your Master failed."
to_chat(H, "Spawning an amulet from your Master failed.")
/datum/mind/proc/make_Rev()
if (ticker.mode.head_revolutionaries.len>0)
@@ -1468,13 +1503,14 @@
S.action.Grant(current)
//To remove a specific spell from a mind
/datum/mind/proc/RemoveSpell(var/obj/effect/proc_holder/spell/spell)
if(!spell) return
/datum/mind/proc/RemoveSpell(obj/effect/proc_holder/spell/spell)
if(!spell)
return
for(var/X in spell_list)
var/obj/effect/proc_holder/spell/S = X
if(istype(S, spell))
qdel(S)
spell_list -= S
qdel(S)
/datum/mind/proc/transfer_actions(mob/living/new_character)
if(current && current.actions)
@@ -1513,7 +1549,7 @@
mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist)
mind.active = 1 //indicates that the mind is currently synced with a client
/mob/new_player/sync_mind()
/mob/dead/new_player/sync_mind()
return
/mob/dead/observer/sync_mind()
@@ -1529,8 +1565,7 @@
if(ticker)
ticker.minds += mind
else
spawn(0)
throw EXCEPTION("mind_initialize(): No ticker ready")
stack_trace("mind_initialize(): No ticker ready")
if(!mind.name)
mind.name = real_name
mind.current = src