Merge branch 'master' into diagonal-movement

This commit is contained in:
Couls
2019-05-22 14:24:54 -04:00
committed by GitHub
497 changed files with 10268 additions and 9477 deletions
+4 -3
View File
@@ -137,9 +137,10 @@
var/obj/item/I = target
var/old_layer = I.layer
var/old_plane = I.plane
I.layer = HUD_LAYER_SCREEN + 1
I.plane = HUD_PLANE
current_button.overlays += I
I.layer = FLOAT_LAYER //AAAH
I.plane = FLOAT_PLANE //^ what that guy said
current_button.cut_overlays()
current_button.add_overlay(I)
I.layer = old_layer
I.plane = old_plane
else
+1 -1
View File
@@ -11,7 +11,7 @@ var/global/datum/repository/air_alarm/air_alarm_repository = new()
if(!refresh)
return cache_entry.data
if(ticker && ticker.current_state < GAME_STATE_PLAYING && istype(passed_alarm)) // Generating the list for the first time as the game hasn't started - no need to run through the machines list everything every time
if(SSticker && SSticker.current_state < GAME_STATE_PLAYING && istype(passed_alarm)) // Generating the list for the first time as the game hasn't started - no need to run through the machines list everything every time
alarms = cache_entry.data // Don't deleate the list
if(is_station_contact(passed_alarm.z)) // Still need sanity checks
alarms[++alarms.len] = passed_alarm.get_nano_data_console()
+2 -2
View File
@@ -1,6 +1,6 @@
/datum/cache_entry
var/timestamp
var/data
var/list/data = list()
/datum/repository
var/cache_data
+12 -16
View File
@@ -1,5 +1,3 @@
// Squeak component ported over from tg
/datum/component/squeak
var/static/list/default_squeak_sounds = list('sound/items/toysqueak1.ogg'=1, 'sound/items/toysqueak2.ogg'=1, 'sound/items/toysqueak3.ogg'=1)
var/list/override_squeak_sounds
@@ -49,21 +47,12 @@
else
playsound(parent, pickweight(override_squeak_sounds), volume, 1, -1)
/datum/component/squeak/proc/step_squeak(datum/source, mob/living/carbon/human/H)
if(H.m_intent == MOVE_INTENT_RUN)
if(steps > step_delay)
play_squeak()
steps = 0
else
steps++
else
/datum/component/squeak/proc/step_squeak()
if(steps > step_delay)
play_squeak()
/datum/component/squeak/proc/on_equip(datum/source, mob/equipper, slot)
RegisterSignal(equipper, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react, TRUE)
/datum/component/squeak/proc/on_drop(datum/source, mob/user)
UnregisterSignal(user, COMSIG_MOVABLE_DISPOSING)
steps = 0
else
steps++
/datum/component/squeak/proc/play_squeak_crossed(atom/movable/AM)
if(isitem(AM))
@@ -83,6 +72,13 @@
last_use = world.time
play_squeak()
/datum/component/squeak/proc/on_equip(datum/source, mob/equipper, slot)
RegisterSignal(equipper, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react, TRUE)
/datum/component/squeak/proc/on_drop(datum/source, mob/user)
UnregisterSignal(user, COMSIG_MOVABLE_DISPOSING)
// Disposal pipes related shit
/datum/component/squeak/proc/disposing_react(datum/source, obj/structure/disposalholder/holder, obj/machinery/disposal/source)
//We don't need to worry about unregistering this signal as it will happen for us automaticaly when the holder is qdeleted
RegisterSignal(holder, COMSIG_ATOM_DIR_CHANGE, .proc/holder_dir_change)
+22 -7
View File
@@ -1242,13 +1242,28 @@
return
switch(Text)
if("brute") L.adjustBruteLoss(amount, robotic=1)
if("fire") L.adjustFireLoss(amount, robotic=1)
if("toxin") L.adjustToxLoss(amount)
if("oxygen")L.adjustOxyLoss(amount)
if("brain") L.adjustBrainLoss(amount)
if("clone") L.adjustCloneLoss(amount)
if("stamina") L.adjustStaminaLoss(amount)
if("brute")
if(ishuman(L))
var/mob/living/carbon/human/H = L
H.adjustBruteLoss(amount, robotic = TRUE)
else
L.adjustBruteLoss(amount)
if("fire")
if(ishuman(L))
var/mob/living/carbon/human/H = L
H.adjustFireLoss(amount, robotic = TRUE)
else
L.adjustFireLoss(amount)
if("toxin")
L.adjustToxLoss(amount)
if("oxygen")
L.adjustOxyLoss(amount)
if("brain")
L.adjustBrainLoss(amount)
if("clone")
L.adjustCloneLoss(amount)
if("stamina")
L.adjustStaminaLoss(amount)
else
to_chat(usr, "You caused an error. DEBUG: Text:[Text] Mob:[L]")
return
+115
View File
@@ -0,0 +1,115 @@
/proc/input_async(mob/user=usr, prompt, list/choices)
var/datum/async_input/A = new(choices, prompt)
A.show(user)
return A
/proc/input_ranked_async(mob/user=usr, prompt="Order by greatest to least preference", list/choices)
var/datum/async_input/ranked/A = new(choices, prompt)
A.show(user)
return A
/datum/async_input
var/datum/browser/popup
var/list/choices
var/flash = TRUE
var/immediate_submit = FALSE
var/prompt
var/result = null
var/style = "text-align: center;"
var/window_id
var/height = 200
var/width = 400
/datum/async_input/New(list/new_choices, new_prompt="Pick an option:", new_window_id="async_input")
choices = new_choices
prompt = new_prompt
window_id = new_window_id
/datum/async_input/proc/close()
if(popup)
popup.close()
return result
/datum/async_input/proc/show(mob/user)
var/dat = create_ui(user)
popup = new(user, window_id, , width, height, src)
popup.set_content(dat)
if(flash && result == null)
window_flash(user.client)
popup.open()
/datum/async_input/proc/create_ui(mob/user)
var/dat = "<div style=\"[style]\">"
dat += render_prompt(user)
dat += render_choices(user)
dat += "<br>"
dat += "<br>"
dat += button("Submit", "submit=1", , result == null && !immediate_submit)
dat += "</div>"
return dat
/datum/async_input/proc/render_prompt(mob/user)
return "<h2>[prompt]</h2>"
/datum/async_input/proc/render_choices(mob/user)
var/dat = " "
for(var/choice in choices)
dat += button(choice, "choice=[choice]", choice == result)
dat += " "
return dat
/datum/async_input/proc/button(label, topic, on=FALSE, disabled=FALSE)
var/class = ""
if(on)
class = "linkOn"
if(disabled)
class = "linkOff"
topic = ""
return "<a class=\"[class]\" href='?src=[UID()];[topic]'>[label]</a>"
/datum/async_input/Topic(href, href_list)
if(href_list["submit"] || href_list["close"])
close()
return
if(href_list["choice"])
result = href_list["choice"]
show(usr)
return
/datum/async_input/ranked
height = 400
immediate_submit = TRUE
/datum/async_input/ranked/render_choices(mob/user)
var/dat = "<div>"
dat += "<table style='margin: auto; text-align: left;'>"
for(var/i = 1, i <= choices.len, i++)
var/choice = choices[i]
dat += "<tr>"
dat += "<td>[button("+", i != 1 ? "upvote=[i]" : "", , i == 1)]</td>"
dat += "<td>[button("-", i != choices.len ? "downvote=[i]" : "", , i == choices.len)]</td>"
dat += "<td>[i]. [choice]</td>"
dat += "</tr>"
dat += "</table>"
dat += "</div>"
return dat
/datum/async_input/ranked/Topic(href, href_list)
if(!href_list["close"])
// Mark that user interacted with interface
result = choices
if(href_list["upvote"])
var/index = text2num(href_list["upvote"])
choices.Swap(index, index - 1)
show(usr)
return
if(href_list["downvote"])
var/index = text2num(href_list["downvote"])
choices.Swap(index, index + 1)
show(usr)
return
..()
+2 -2
View File
@@ -93,8 +93,8 @@ var/datum/atom_hud/huds = list( \
// gang_huds += G.ganghud
var/serv_huds = list()//mindslaves and/or vampire thralls
if(ticker.mode)
for(var/datum/mindslaves/serv in (ticker.mode.vampires | ticker.mode.traitors))
if(SSticker.mode)
for(var/datum/mindslaves/serv in (SSticker.mode.vampires | SSticker.mode.traitors))
serv_huds += serv.thrallhud
+215 -207
View File
@@ -18,6 +18,7 @@
However if you want that mind to have any special properties like being a traitor etc you will have to do that
yourself.
*/
#define SUMMON_POSSIBILITIES 3
/datum/mind
var/key
@@ -84,7 +85,7 @@
soulOwner = src
/datum/mind/Destroy()
ticker.minds -= src
SSticker.minds -= src
if(islist(antag_datums))
for(var/i in antag_datums)
var/datum/antagonist/antag_datum = i
@@ -163,7 +164,7 @@
/datum/mind/proc/_memory_edit_header(gamemode, list/alt)
. = gamemode
if(ticker.mode.config_tag == gamemode || (LAZYLEN(alt) && (ticker.mode.config_tag in alt)))
if(SSticker.mode.config_tag == gamemode || (LAZYLEN(alt) && (SSticker.mode.config_tag in alt)))
. = uppertext(.)
. = "<i><b>[.]</b></i>: "
@@ -183,7 +184,7 @@
. = _memory_edit_header("revolution")
if(ismindshielded(H))
. += "<b>NO</b>|headrev|rev"
else if(src in ticker.mode.head_revolutionaries)
else if(src in SSticker.mode.head_revolutionaries)
. += "<a href='?src=[UID()];revolution=clear'>no</a>|<b><font color='red'>HEADREV</font></b>|<a href='?src=[UID()];revolution=rev'>rev</a>"
. += "<br>Flash: <a href='?src=[UID()];revolution=flash'>give</a>"
@@ -200,7 +201,7 @@
. += " <a href='?src=[UID()];revolution=reequip'>Reequip</a> (gives traitor uplink)."
if(objectives.len==0)
. += "<br>Objectives are empty! <a href='?src=[UID()];revolution=autoobjectives'>Set to kill all heads</a>."
else if(src in ticker.mode.revolutionaries)
else if(src in SSticker.mode.revolutionaries)
. += "<a href='?src=[UID()];revolution=clear'>no</a>|<a href='?src=[UID()];revolution=headrev'>headrev</a>|<b><font color='red'>REV</font></b>"
else
. += "<b>NO</b>|<a href='?src=[UID()];revolution=headrev'>headrev</a>|<a href='?src=[UID()];revolution=rev'>rev</a>"
@@ -211,7 +212,7 @@
. = _memory_edit_header("cult")
if(ismindshielded(H))
. += "<B>NO</B>|cultist"
else if(src in ticker.mode.cult)
else if(src in SSticker.mode.cult)
. += "<a href='?src=[UID()];cult=clear'>no</a>|<b><font color='red'>CULTIST</font></b>"
. += "<br>Give <a href='?src=[UID()];cult=tome'>tome</a>|<a href='?src=[UID()];cult=equip'>equip</a>."
else
@@ -221,7 +222,7 @@
/datum/mind/proc/memory_edit_wizard(mob/living/carbon/human/H)
. = _memory_edit_header("wizard")
if(src in ticker.mode.wizards)
if(src in SSticker.mode.wizards)
. += "<b><font color='red'>WIZARD</font></b>|<a href='?src=[UID()];wizard=clear'>no</a>"
. += "<br><a href='?src=[UID()];wizard=lair'>To lair</a>, <a href='?src=[UID()];common=undress'>undress</a>, <a href='?src=[UID()];wizard=dressup'>dress up</a>, <a href='?src=[UID()];wizard=name'>let choose name</a>."
if(objectives.len==0)
@@ -233,7 +234,7 @@
/datum/mind/proc/memory_edit_changeling(mob/living/carbon/human/H)
. = _memory_edit_header("changeling", list("traitorchan"))
if(src in ticker.mode.changelings)
if(src in SSticker.mode.changelings)
. += "<b><font color='red'>CHANGELING</font></b>|<a href='?src=[UID()];changeling=clear'>no</a>"
if(objectives.len==0)
. += "<br>Objectives are empty! <a href='?src=[UID()];changeling=autoobjectives'>Randomize!</a>"
@@ -246,7 +247,7 @@
/datum/mind/proc/memory_edit_vampire(mob/living/carbon/human/H)
. = _memory_edit_header("vampire", list("traitorvamp"))
if(src in ticker.mode.vampires)
if(src in SSticker.mode.vampires)
. += "<b><font color='red'>VAMPIRE</font></b>|<a href='?src=[UID()];vampire=clear'>no</a>"
if(objectives.len==0)
. += "<br>Objectives are empty! <a href='?src=[UID()];vampire=autoobjectives'>Randomize!</a>"
@@ -256,14 +257,14 @@
. += _memory_edit_role_enabled(ROLE_VAMPIRE)
/** Enthralled ***/
. += "<br><b><i>enthralled</i></b>: "
if(src in ticker.mode.vampire_enthralled)
if(src in SSticker.mode.vampire_enthralled)
. += "<b><font color='red'>THRALL</font></b>|<a href='?src=[UID()];vampthrall=clear'>no</a>"
else
. += "thrall|<b>NO</b>"
/datum/mind/proc/memory_edit_nuclear(mob/living/carbon/human/H)
. = _memory_edit_header("nuclear")
if(src in ticker.mode.syndicates)
if(src in SSticker.mode.syndicates)
. += "<b><font color='red'>OPERATIVE</b></font>|<a href='?src=[UID()];nuclear=clear'>no</a>"
. += "<br><a href='?src=[UID()];nuclear=lair'>To shuttle</a>, <a href='?src=[UID()];common=undress'>undress</a>, <a href='?src=[UID()];nuclear=dressup'>dress up</a>."
var/code
@@ -280,9 +281,9 @@
/datum/mind/proc/memory_edit_shadowling(mob/living/carbon/human/H)
. = _memory_edit_header("shadowling")
if(src in ticker.mode.shadows)
if(src in SSticker.mode.shadows)
. += "<b><font color='red'>SHADOWLING</font></b>|thrall|<a href='?src=[UID()];shadowling=clear'>no</a>"
else if(src in ticker.mode.shadowling_thralls)
else if(src in SSticker.mode.shadowling_thralls)
. += "Shadowling|<b><font color='red'>THRALL</font></b>|<a href='?src=[UID()];shadowling=clear'>no</a>"
else
. += "<a href='?src=[UID()];shadowling=shadowling'>shadowling</a>|<a href='?src=[UID()];shadowling=thrall'>thrall</a>|<b>NO</b>"
@@ -291,7 +292,7 @@
/datum/mind/proc/memory_edit_abductor(mob/living/carbon/human/H)
. = _memory_edit_header("abductor")
if(src in ticker.mode.abductors)
if(src in SSticker.mode.abductors)
. += "<b><font color='red'>ABDUCTOR</font></b>|<a href='?src=[UID()];abductor=clear'>no</a>"
. += "|<a href='?src=[UID()];common=undress'>undress</a>|<a href='?src=[UID()];abductor=equip'>equip</a>"
else
@@ -301,14 +302,14 @@
/datum/mind/proc/memory_edit_devil(mob/living/H)
. = _memory_edit_header("devil", list("devilagents"))
if(src in ticker.mode.devils)
if(src in SSticker.mode.devils)
if(!devilinfo)
. += "<b>No devilinfo found! Yell at a coder!</b>"
else if(!devilinfo.ascendable)
. += "<b>DEVIL</b>|<a href='?src=[UID()];devil=ascendable_devil'>Ascendable Devil</a>|sintouched|<a href='?src=[UID()];devil=clear'>no</a>"
else
. += "<a href='?src=[UID()];devil=devil'>DEVIL</a>|<b>ASCENDABLE DEVIL</b>|sintouched|<a href='?src=[UID()];devil=clear'>no</a>"
else if(src in ticker.mode.sintouched)
else if(src in SSticker.mode.sintouched)
. += "devil|Ascendable Devil|<b>SINTOUCHED</b>|<a href='?src=[UID()];devil=clear'>no</a>"
else
. += "<a href='?src=[UID()];devil=devil'>devil</a>|<a href='?src=[UID()];devil=ascendable_devil'>Ascendable Devil</a>|<a href='?src=[UID()];devil=sintouched'>sintouched</a>|<b>NO</b>"
@@ -317,14 +318,14 @@
/datum/mind/proc/memory_edit_eventmisc(mob/living/H)
. = _memory_edit_header("event", list())
if(src in ticker.mode.eventmiscs)
if(src in SSticker.mode.eventmiscs)
. += "<b>YES</b>|<a href='?src=[UID()];eventmisc=clear'>no</a>"
else
. += "<a href='?src=[UID()];eventmisc=eventmisc'>Event Role</a>|<b>NO</b>"
/datum/mind/proc/memory_edit_traitor()
. = _memory_edit_header("traitor", list("traitorchan", "traitorvamp"))
if(src in ticker.mode.traitors)
if(src in SSticker.mode.traitors)
. += "<b><font color='red'>TRAITOR</font></b>|<a href='?src=[UID()];traitor=clear'>no</a>"
if(objectives.len==0)
. += "<br>Objectives are empty! <a href='?src=[UID()];traitor=autoobjectives'>Randomize</a>!"
@@ -348,9 +349,9 @@
/datum/mind/proc/memory_edit_uplink()
. = ""
if(ishuman(current) && ((src in ticker.mode.head_revolutionaries) || \
(src in ticker.mode.traitors) || \
(src in ticker.mode.syndicates)))
if(ishuman(current) && ((src in SSticker.mode.head_revolutionaries) || \
(src in SSticker.mode.traitors) || \
(src in SSticker.mode.syndicates)))
. = "Uplink: <a href='?src=[UID()];common=uplink'>give</a>"
var/obj/item/uplink/hidden/suplink = find_syndicate_uplink()
var/crystals
@@ -366,7 +367,7 @@
// ^ whoever left this comment is literally a grammar nazi. stalin better. in russia grammar correct you.
/datum/mind/proc/edit_memory()
if(!ticker || !ticker.mode)
if(!SSticker || !SSticker.mode)
alert("Not before round-start!", "Alert")
return
@@ -419,7 +420,7 @@
This prioritizes antags relevant to the current round to make them appear at the top of the panel.
Traitorchan and traitorvamp are snowflaked in because they have multiple sections.
*/
if(ticker.mode.config_tag == "traitorchan")
if(SSticker.mode.config_tag == "traitorchan")
if(sections["traitor"])
out += sections["traitor"] + "<br>"
if(sections["changeling"])
@@ -427,7 +428,7 @@
sections -= "traitor"
sections -= "changeling"
// Elif technically unnecessary but it makes the following else look better
else if(ticker.mode.config_tag == "traitorvamp")
else if(SSticker.mode.config_tag == "traitorvamp")
if(sections["traitor"])
out += sections["traitor"] + "<br>"
if(sections["vampire"])
@@ -435,9 +436,9 @@
sections -= "traitor"
sections -= "vampire"
else
if(sections[ticker.mode.config_tag])
out += sections[ticker.mode.config_tag] + "<br>"
sections -= ticker.mode.config_tag
if(sections[SSticker.mode.config_tag])
out += sections[SSticker.mode.config_tag] + "<br>"
sections -= SSticker.mode.config_tag
for(var/i in sections)
if(sections[i])
@@ -512,7 +513,7 @@
var/objective_type = "[objective_type_capital][objective_type_text]"//Add them together into a text string.
var/list/possible_targets = list()
for(var/datum/mind/possible_target in ticker.minds)
for(var/datum/mind/possible_target in SSticker.minds)
if((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human))
possible_targets += possible_target.current
@@ -612,7 +613,7 @@
if("identity theft")
var/list/possible_targets = list()
for(var/datum/mind/possible_target in ticker.minds)
for(var/datum/mind/possible_target in SSticker.minds)
if((possible_target != src) && ishuman(possible_target.current))
possible_targets += possible_target
possible_targets = sortAtom(possible_targets)
@@ -687,19 +688,19 @@
message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a mindshield implant")
to_chat(H, "<span class='warning'><Font size =3><B>You somehow have become the recepient of a mindshield transplant, and it just activated!</B></FONT></span>")
if(src in ticker.mode.revolutionaries)
if(src in SSticker.mode.revolutionaries)
special_role = null
ticker.mode.revolutionaries -= src
SSticker.mode.revolutionaries -= src
to_chat(src, "<span class='warning'><Font size = 3><B>The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!</B></Font></span>")
if(src in ticker.mode.head_revolutionaries)
if(src in SSticker.mode.head_revolutionaries)
special_role = null
ticker.mode.head_revolutionaries -=src
SSticker.mode.head_revolutionaries -=src
to_chat(src, "<span class='warning'><Font size = 3><B>The nanobots in the mindshield implant remove all thoughts about being a revolutionary. Get back to work!</B></Font></span>")
if(src in ticker.mode.cult)
ticker.mode.cult -= src
ticker.mode.update_cult_icons_removed(src)
if(src in SSticker.mode.cult)
SSticker.mode.cult -= src
SSticker.mode.update_cult_icons_removed(src)
special_role = null
var/datum/game_mode/cult/cult = ticker.mode
var/datum/game_mode/cult/cult = SSticker.mode
if(istype(cult))
cult.memorize_cult_objectives(src)
to_chat(current, "<span class='warning'><FONT size = 3><B>The nanobots in the mindshield implant remove all thoughts about being in a cult. Have a productive day!</B></FONT></span>")
@@ -709,46 +710,46 @@
switch(href_list["revolution"])
if("clear")
if(src in ticker.mode.revolutionaries)
ticker.mode.revolutionaries -= src
if(src in SSticker.mode.revolutionaries)
SSticker.mode.revolutionaries -= src
to_chat(current, "<span class='warning'><FONT size = 3><B>You have been brainwashed! You are no longer a revolutionary!</B></FONT></span>")
ticker.mode.update_rev_icons_removed(src)
SSticker.mode.update_rev_icons_removed(src)
special_role = null
if(src in ticker.mode.head_revolutionaries)
ticker.mode.head_revolutionaries -= src
if(src in SSticker.mode.head_revolutionaries)
SSticker.mode.head_revolutionaries -= src
to_chat(current, "<span class='warning'><FONT size = 3><B>You have been brainwashed! You are no longer a head revolutionary!</B></FONT></span>")
ticker.mode.update_rev_icons_removed(src)
SSticker.mode.update_rev_icons_removed(src)
special_role = null
log_admin("[key_name(usr)] has de-rev'd [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-rev'd [key_name_admin(current)]")
if("rev")
if(src in ticker.mode.head_revolutionaries)
ticker.mode.head_revolutionaries -= src
ticker.mode.update_rev_icons_removed(src)
if(src in SSticker.mode.head_revolutionaries)
SSticker.mode.head_revolutionaries -= src
SSticker.mode.update_rev_icons_removed(src)
to_chat(current, "<span class='warning'><FONT size = 3><B>Revolution has been disappointed of your leadership traits! You are a regular revolutionary now!</B></FONT></span>")
else if(!(src in ticker.mode.revolutionaries))
else if(!(src in SSticker.mode.revolutionaries))
to_chat(current, "<span class='warning'><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
ticker.mode.update_rev_icons_added(src)
SSticker.mode.revolutionaries += src
SSticker.mode.update_rev_icons_added(src)
special_role = SPECIAL_ROLE_REV
log_admin("[key_name(usr)] has rev'd [key_name(current)]")
message_admins("[key_name_admin(usr)] has rev'd [key_name_admin(current)]")
if("headrev")
if(src in ticker.mode.revolutionaries)
ticker.mode.revolutionaries -= src
ticker.mode.update_rev_icons_removed(src)
if(src in SSticker.mode.revolutionaries)
SSticker.mode.revolutionaries -= src
SSticker.mode.update_rev_icons_removed(src)
to_chat(current, "<span class='userdanger'>You have proven your devotion to revolution! You are a head revolutionary now!</span>")
else if(!(src in ticker.mode.head_revolutionaries))
else if(!(src in SSticker.mode.head_revolutionaries))
to_chat(current, "<span class='notice'>You are a member of the revolutionaries' leadership now!</span>")
else
return
if(ticker.mode.head_revolutionaries.len>0)
if(SSticker.mode.head_revolutionaries.len>0)
// copy targets
var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
var/datum/mind/valid_head = locate() in SSticker.mode.head_revolutionaries
if(valid_head)
for(var/datum/objective/mutiny/O in valid_head.objectives)
var/datum/objective/mutiny/rev_obj = new
@@ -756,21 +757,21 @@
rev_obj.target = O.target
rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]."
objectives += rev_obj
ticker.mode.greet_revolutionary(src,0)
ticker.mode.head_revolutionaries += src
ticker.mode.update_rev_icons_added(src)
SSticker.mode.greet_revolutionary(src,0)
SSticker.mode.head_revolutionaries += src
SSticker.mode.update_rev_icons_added(src)
special_role = SPECIAL_ROLE_HEAD_REV
log_admin("[key_name(usr)] has head-rev'd [key_name(current)]")
message_admins("[key_name_admin(usr)] has head-rev'd [key_name_admin(current)]")
if("autoobjectives")
ticker.mode.forge_revolutionary_objectives(src)
ticker.mode.greet_revolutionary(src,0)
SSticker.mode.forge_revolutionary_objectives(src)
SSticker.mode.greet_revolutionary(src,0)
log_admin("[key_name(usr)] has automatically forged revolutionary objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged revolutionary objectives for [key_name_admin(current)]")
if("flash")
if(!ticker.mode.equip_revolutionary(current))
if(!SSticker.mode.equip_revolutionary(current))
to_chat(usr, "<span class='warning'>Spawning flash failed!</span>")
log_admin("[key_name(usr)] has given [key_name(current)] a flash")
message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a flash")
@@ -800,8 +801,8 @@
qdel(flash)
take_uplink()
var/fail = 0
fail |= !ticker.mode.equip_traitor(current, 1)
fail |= !ticker.mode.equip_revolutionary(current)
fail |= !SSticker.mode.equip_traitor(current, 1)
fail |= !SSticker.mode.equip_revolutionary(current)
if(fail)
to_chat(usr, "<span class='warning'>Reequipping revolutionary goes wrong!</span>")
return
@@ -811,19 +812,24 @@
else if(href_list["cult"])
switch(href_list["cult"])
if("clear")
if(src in ticker.mode.cult)
ticker.mode.remove_cultist(src)
if(src in SSticker.mode.cult)
SSticker.mode.remove_cultist(src)
special_role = null
log_admin("[key_name(usr)] has de-culted [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-culted [key_name_admin(current)]")
if("cultist")
if(!(src in ticker.mode.cult))
ticker.mode.add_cultist(src)
if(!(src in SSticker.mode.cult))
SSticker.mode.add_cultist(src)
special_role = SPECIAL_ROLE_CULTIST
to_chat(current, "<span class='cultitalic'>You catch a glimpse of the Realm of [ticker.cultdat.entity_name], [ticker.cultdat.entity_title3]. You now see how flimsy the world is, you see that it should be open to the knowledge of [ticker.cultdat.entity_name].</span>")
to_chat(current, "<span class='cultitalic'>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve [ticker.cultdat.entity_title2] above all else. Bring It back.</span>")
to_chat(current, "<span class='cultitalic'>You catch a glimpse of the Realm of [SSticker.cultdat.entity_name], [SSticker.cultdat.entity_title3]. You now see how flimsy the world is, you see that it should be open to the knowledge of [SSticker.cultdat.entity_name].</span>")
to_chat(current, "<span class='cultitalic'>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve [SSticker.cultdat.entity_title2] above all else. Bring It back.</span>")
log_admin("[key_name(usr)] has culted [key_name(current)]")
message_admins("[key_name_admin(usr)] has culted [key_name_admin(current)]")
if(!summon_spots.len)
while(summon_spots.len < SUMMON_POSSIBILITIES)
var/area/summon = pick(return_sorted_areas() - summon_spots)
if(summon && is_station_level(summon.z) && summon.valid_territory)
summon_spots += summon
if("tome")
var/mob/living/carbon/human/H = current
if(istype(H))
@@ -846,7 +852,7 @@
message_admins("[key_name_admin(usr)] has spawned a tome for [key_name_admin(current)]")
if("equip")
if(!ticker.mode.equip_cultist(current))
if(!SSticker.mode.equip_cultist(current))
to_chat(usr, "<span class='warning'>Spawning equipment failed!</span>")
log_admin("[key_name(usr)] has equipped [key_name(current)] as a cultist")
message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a cultist")
@@ -855,21 +861,21 @@
switch(href_list["wizard"])
if("clear")
if(src in ticker.mode.wizards)
ticker.mode.wizards -= src
if(src in SSticker.mode.wizards)
SSticker.mode.wizards -= src
special_role = null
current.spellremove(current)
current.faction = list("Station")
ticker.mode.update_wiz_icons_removed(src)
SSticker.mode.update_wiz_icons_removed(src)
to_chat(current, "<span class='warning'><FONT size = 3><B>You have been brainwashed! You are no longer a wizard!</B></FONT></span>")
log_admin("[key_name(usr)] has de-wizarded [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-wizarded [key_name_admin(current)]")
if("wizard")
if(!(src in ticker.mode.wizards))
ticker.mode.wizards += src
if(!(src in SSticker.mode.wizards))
SSticker.mode.wizards += src
special_role = SPECIAL_ROLE_WIZARD
//ticker.mode.learn_basic_spells(current)
ticker.mode.update_wiz_icons_added(src)
SSticker.mode.update_wiz_icons_added(src)
SEND_SOUND(current, 'sound/ambience/antag/ragesmages.ogg')
to_chat(current, "<span class='danger'>You are a Space Wizard!</span>")
current.faction = list("wizard")
@@ -880,15 +886,15 @@
log_admin("[key_name(usr)] has moved [key_name(current)] to the wizard's lair")
message_admins("[key_name_admin(usr)] has moved [key_name_admin(current)] to the wizard's lair")
if("dressup")
ticker.mode.equip_wizard(current)
SSticker.mode.equip_wizard(current)
log_admin("[key_name(usr)] has equipped [key_name(current)] as a wizard")
message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a wizard")
if("name")
ticker.mode.name_wizard(current)
SSticker.mode.name_wizard(current)
log_admin("[key_name(usr)] has allowed wizard [key_name(current)] to name themselves")
message_admins("[key_name_admin(usr)] has allowed wizard [key_name_admin(current)] to name themselves")
if("autoobjectives")
ticker.mode.forge_wizard_objectives(src)
SSticker.mode.forge_wizard_objectives(src)
to_chat(usr, "<span class='notice'>The objectives for wizard [key] have been generated. You can edit them and announce manually.</span>")
log_admin("[key_name(usr)] has automatically forged wizard objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged wizard objectives for [key_name_admin(current)]")
@@ -897,20 +903,22 @@
else if(href_list["changeling"])
switch(href_list["changeling"])
if("clear")
if(src in ticker.mode.changelings)
ticker.mode.changelings -= src
if(src in SSticker.mode.changelings)
SSticker.mode.changelings -= src
special_role = null
current.remove_changeling_powers()
ticker.mode.update_change_icons_removed(src)
if(changeling) qdel(changeling)
if(changeling)
current.remove_changeling_powers()
qdel(changeling)
changeling = null
SSticker.mode.update_change_icons_removed(src)
to_chat(current, "<FONT color='red' size = 3><B>You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!</B></FONT>")
log_admin("[key_name(usr)] has de-changelinged [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-changelinged [key_name_admin(current)]")
if("changeling")
if(!(src in ticker.mode.changelings))
ticker.mode.changelings += src
ticker.mode.grant_changeling_powers(current)
ticker.mode.update_change_icons_added(src)
if(!(src in SSticker.mode.changelings))
SSticker.mode.changelings += src
SSticker.mode.grant_changeling_powers(current)
SSticker.mode.update_change_icons_added(src)
special_role = SPECIAL_ROLE_CHANGELING
SEND_SOUND(current, 'sound/ambience/antag/ling_aler.ogg')
to_chat(current, "<B><font color='red'>Your powers have awoken. A flash of memory returns to us... we are a changeling!</font></B>")
@@ -918,7 +926,7 @@
message_admins("[key_name_admin(usr)] has changelinged [key_name_admin(current)]")
if("autoobjectives")
ticker.mode.forge_changeling_objectives(src)
SSticker.mode.forge_changeling_objectives(src)
to_chat(usr, "<span class='notice'>The objectives for changeling [key] have been generated. You can edit them and announce manually.</span>")
log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]")
@@ -937,22 +945,22 @@
else if(href_list["vampire"])
switch(href_list["vampire"])
if("clear")
if(src in ticker.mode.vampires)
ticker.mode.vampires -= src
if(src in SSticker.mode.vampires)
SSticker.mode.vampires -= src
special_role = null
if(vampire)
vampire.remove_vampire_powers()
qdel(vampire)
vampire = null
ticker.mode.update_vampire_icons_removed(src)
SSticker.mode.update_vampire_icons_removed(src)
to_chat(current, "<FONT color='red' size = 3><B>You grow weak and lose your powers! You are no longer a vampire and are stuck in your current form!</B></FONT>")
log_admin("[key_name(usr)] has de-vampired [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-vampired [key_name_admin(current)]")
if("vampire")
if(!(src in ticker.mode.vampires))
ticker.mode.vampires += src
ticker.mode.grant_vampire_powers(current)
ticker.mode.update_vampire_icons_added(src)
if(!(src in SSticker.mode.vampires))
SSticker.mode.vampires += src
SSticker.mode.grant_vampire_powers(current)
SSticker.mode.update_vampire_icons_added(src)
var/datum/mindslaves/slaved = new()
slaved.masters += src
som = slaved //we MIGT want to mindslave someone
@@ -963,7 +971,7 @@
message_admins("[key_name_admin(usr)] has vampired [key_name_admin(current)]")
if("autoobjectives")
ticker.mode.forge_vampire_objectives(src)
SSticker.mode.forge_vampire_objectives(src)
to_chat(usr, "<span class='notice'>The objectives for vampire [key] have been generated. You can edit them and announce manually.</span>")
log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]")
@@ -971,8 +979,8 @@
else if(href_list["vampthrall"])
switch(href_list["vampthrall"])
if("clear")
if(src in ticker.mode.vampire_enthralled)
ticker.mode.remove_vampire_mind(src)
if(src in SSticker.mode.vampire_enthralled)
SSticker.mode.remove_vampire_mind(src)
log_admin("[key_name(usr)] has de-vampthralled [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-vampthralled [key_name_admin(current)]")
@@ -981,9 +989,9 @@
switch(href_list["nuclear"])
if("clear")
if(src in ticker.mode.syndicates)
ticker.mode.syndicates -= src
ticker.mode.update_synd_icons_removed(src)
if(src in SSticker.mode.syndicates)
SSticker.mode.syndicates -= src
SSticker.mode.update_synd_icons_removed(src)
special_role = null
for(var/datum/objective/nuclear/O in objectives)
objectives-=O
@@ -992,17 +1000,17 @@
log_admin("[key_name(usr)] has de-nuke op'd [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-nuke op'd [key_name_admin(current)]")
if("nuclear")
if(!(src in ticker.mode.syndicates))
ticker.mode.syndicates += src
ticker.mode.update_synd_icons_added(src)
if(ticker.mode.syndicates.len==1)
ticker.mode.prepare_syndicate_leader(src)
if(!(src in SSticker.mode.syndicates))
SSticker.mode.syndicates += src
SSticker.mode.update_synd_icons_added(src)
if(SSticker.mode.syndicates.len==1)
SSticker.mode.prepare_syndicate_leader(src)
else
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]"
special_role = SPECIAL_ROLE_NUKEOPS
to_chat(current, "<span class='notice'>You are a [syndicate_name()] agent!</span>")
ticker.mode.forge_syndicate_objectives(src)
ticker.mode.greet_syndicate(src)
SSticker.mode.forge_syndicate_objectives(src)
SSticker.mode.greet_syndicate(src)
log_admin("[key_name(usr)] has nuke op'd [key_name(current)]")
message_admins("[key_name_admin(usr)] has nuke op'd [key_name_admin(current)]")
if("lair")
@@ -1022,10 +1030,10 @@
qdel(H.wear_suit)
qdel(H.w_uniform)
if(!ticker.mode.equip_syndicate(current))
if(!SSticker.mode.equip_syndicate(current))
to_chat(usr, "<span class='warning'>Equipping a syndicate failed!</span>")
return
ticker.mode.update_syndicate_id(current.mind, ticker.mode.syndicates.len == 1)
SSticker.mode.update_syndicate_id(current.mind, SSticker.mode.syndicates.len == 1)
log_admin("[key_name(usr)] has equipped [key_name(current)] as a nuclear operative")
message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a nuclear operative")
@@ -1046,27 +1054,27 @@
else if(href_list["eventmisc"])
switch(href_list["eventmisc"])
if("clear")
if(src in ticker.mode.eventmiscs)
ticker.mode.eventmiscs -= src
ticker.mode.update_eventmisc_icons_removed(src)
if(src in SSticker.mode.eventmiscs)
SSticker.mode.eventmiscs -= src
SSticker.mode.update_eventmisc_icons_removed(src)
special_role = null
message_admins("[key_name_admin(usr)] has de-eventantag'ed [current].")
log_admin("[key_name(usr)] has de-eventantag'ed [current].")
if("eventmisc")
ticker.mode.eventmiscs += src
SSticker.mode.eventmiscs += src
special_role = SPECIAL_ROLE_EVENTMISC
ticker.mode.update_eventmisc_icons_added(src)
SSticker.mode.update_eventmisc_icons_added(src)
message_admins("[key_name_admin(usr)] has eventantag'ed [current].")
log_admin("[key_name(usr)] has eventantag'ed [current].")
else if(href_list["devil"])
switch(href_list["devil"])
if("clear")
if(src in ticker.mode.devils)
if(src in SSticker.mode.devils)
if(istype(current,/mob/living/carbon/true_devil/))
to_chat(usr,"<span class='warning'>This cannot be used on true or arch-devils.</span>")
else
ticker.mode.devils -= src
ticker.mode.update_devil_icons_removed(src)
SSticker.mode.devils -= src
SSticker.mode.update_devil_icons_removed(src)
special_role = null
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)
@@ -1085,8 +1093,8 @@
S.laws.clear_sixsixsix_laws()
devilinfo = null
log_admin("[key_name(usr)] has de-devil'ed [current].")
else if(src in ticker.mode.sintouched)
ticker.mode.sintouched -= src
else if(src in SSticker.mode.sintouched)
SSticker.mode.sintouched -= src
message_admins("[key_name_admin(usr)] has de-sintouch'ed [current].")
log_admin("[key_name(usr)] has de-sintouch'ed [current].")
if("devil")
@@ -1098,12 +1106,12 @@
if(!ishuman(current) && !isrobot(current))
to_chat(usr, "<span class='warning'>This only works on humans and cyborgs!</span>")
return
ticker.mode.devils += src
SSticker.mode.devils += src
special_role = "devil"
ticker.mode.update_devil_icons_added(src)
ticker.mode.finalize_devil(src, FALSE)
ticker.mode.forge_devil_objectives(src, 2)
ticker.mode.greet_devil(src)
SSticker.mode.update_devil_icons_added(src)
SSticker.mode.finalize_devil(src, FALSE)
SSticker.mode.forge_devil_objectives(src, 2)
SSticker.mode.greet_devil(src)
message_admins("[key_name_admin(usr)] has devil'ed [current].")
log_admin("[key_name(usr)] has devil'ed [current].")
if("ascendable_devil")
@@ -1115,12 +1123,12 @@
if(!ishuman(current) && !isrobot(current))
to_chat(usr, "<span class='warning'>This only works on humans and cyborgs!</span>")
return
ticker.mode.devils += src
SSticker.mode.devils += src
special_role = "devil"
ticker.mode.update_devil_icons_added(src)
ticker.mode.finalize_devil(src, TRUE)
ticker.mode.forge_devil_objectives(src, 2)
ticker.mode.greet_devil(src)
SSticker.mode.update_devil_icons_added(src)
SSticker.mode.finalize_devil(src, TRUE)
SSticker.mode.forge_devil_objectives(src, 2)
SSticker.mode.greet_devil(src)
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")
@@ -1132,8 +1140,8 @@
else if(href_list["traitor"])
switch(href_list["traitor"])
if("clear")
if(src in ticker.mode.traitors)
ticker.mode.traitors -= src
if(src in SSticker.mode.traitors)
SSticker.mode.traitors -= src
special_role = null
to_chat(current, "<span class='warning'><FONT size = 3><B>You have been brainwashed! You are no longer a traitor!</B></FONT></span>")
log_admin("[key_name(usr)] has de-traitored [key_name(current)]")
@@ -1145,12 +1153,12 @@
A.verbs -= /mob/living/silicon/ai/proc/choose_modules
A.malf_picker.remove_verbs(A)
qdel(A.malf_picker)
ticker.mode.update_traitor_icons_removed(src)
SSticker.mode.update_traitor_icons_removed(src)
if("traitor")
if(!(src in ticker.mode.traitors))
ticker.mode.traitors += src
if(!(src in SSticker.mode.traitors))
SSticker.mode.traitors += src
var/datum/mindslaves/slaved = new()
slaved.masters += src
som = slaved //we MIGT want to mindslave someone
@@ -1160,14 +1168,14 @@
message_admins("[key_name_admin(usr)] has traitored [key_name_admin(current)]")
if(isAI(current))
var/mob/living/silicon/ai/A = current
ticker.mode.add_law_zero(A)
SSticker.mode.add_law_zero(A)
SEND_SOUND(current, 'sound/ambience/antag/malf.ogg')
else
SEND_SOUND(current, 'sound/ambience/antag/tatoralert.ogg')
ticker.mode.update_traitor_icons_added(src)
SSticker.mode.update_traitor_icons_added(src)
if("autoobjectives")
ticker.mode.forge_traitor_objectives(src)
SSticker.mode.forge_traitor_objectives(src)
to_chat(usr, "<span class='notice'>The objectives for traitor [key] have been generated. You can edit them and announce manually.</span>")
log_admin("[key_name(usr)] has automatically forged objectives for [key_name(current)]")
message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]")
@@ -1175,17 +1183,17 @@
else if(href_list["shadowling"])
switch(href_list["shadowling"])
if("clear")
ticker.mode.update_shadow_icons_removed(src)
if(src in ticker.mode.shadows)
ticker.mode.shadows -= src
SSticker.mode.update_shadow_icons_removed(src)
if(src in SSticker.mode.shadows)
SSticker.mode.shadows -= src
special_role = null
to_chat(current, "<span class='userdanger'>Your powers have been quenched! You are no longer a shadowling!</span>")
message_admins("[key_name_admin(usr)] has de-shadowlinged [current].")
log_admin("[key_name(usr)] has de-shadowlinged [current].")
current.spellremove(current)
current.remove_language("Shadowling Hivemind")
else if(src in ticker.mode.shadowling_thralls)
ticker.mode.remove_thrall(src,0)
else if(src in SSticker.mode.shadowling_thralls)
SSticker.mode.remove_thrall(src,0)
message_admins("[key_name_admin(usr)] has de-thrall'ed [current].")
log_admin("[key_name(usr)] has de-thralled [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-thralled [key_name_admin(current)]")
@@ -1193,20 +1201,20 @@
if(!ishuman(current))
to_chat(usr, "<span class='warning'>This only works on humans!</span>")
return
ticker.mode.shadows += src
SSticker.mode.shadows += src
special_role = SPECIAL_ROLE_SHADOWLING
to_chat(current, "<span class='shadowling'><b>Something stirs deep in your mind. A red light floods your vision, and slowly you remember. Though your human disguise has served you well, the \
time is nigh to cast it off and enter your true form. You have disguised yourself amongst the humans, but you are not one of them. You are a shadowling, and you are to ascend at all costs.\
</b></span>")
ticker.mode.finalize_shadowling(src)
ticker.mode.update_shadow_icons_added(src)
SSticker.mode.finalize_shadowling(src)
SSticker.mode.update_shadow_icons_added(src)
log_admin("[key_name(usr)] has shadowlinged [key_name(current)]")
message_admins("[key_name_admin(usr)] has shadowlinged [key_name_admin(current)]")
if("thrall")
if(!ishuman(current))
to_chat(usr, "<span class='warning'>This only works on humans!</span>")
return
ticker.mode.add_thrall(src)
SSticker.mode.add_thrall(src)
message_admins("[key_name_admin(usr)] has thralled [current].")
log_admin("[key_name(usr)] has thralled [current].")
@@ -1221,7 +1229,7 @@
return
make_Abductor()
log_admin("[key_name(usr)] turned [current] into abductor.")
ticker.mode.update_abductor_icons_added(src)
SSticker.mode.update_abductor_icons_added(src)
if("equip")
if(!ishuman(current))
to_chat(usr, "<span class='warning'>This only works on humans!</span>")
@@ -1306,7 +1314,7 @@
log_admin("[key_name(usr)] has set [key_name(current)]'s telecrystals to [crystals]")
message_admins("[key_name_admin(usr)] has set [key_name_admin(current)]'s telecrystals to [crystals]")
if("uplink")
if(!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors)))
if(!SSticker.mode.equip_traitor(current, !(src in SSticker.mode.traitors)))
to_chat(usr, "<span class='warning'>Equipping a syndicate failed!</span>")
return
log_admin("[key_name(usr)] has given [key_name(current)] an uplink")
@@ -1392,27 +1400,27 @@
qdel(H)
/datum/mind/proc/make_Traitor()
if(!(src in ticker.mode.traitors))
ticker.mode.traitors += src
if(!(src in SSticker.mode.traitors))
SSticker.mode.traitors += src
special_role = SPECIAL_ROLE_TRAITOR
ticker.mode.forge_traitor_objectives(src)
ticker.mode.finalize_traitor(src)
ticker.mode.greet_traitor(src)
ticker.mode.update_traitor_icons_added(src)
SSticker.mode.forge_traitor_objectives(src)
SSticker.mode.finalize_traitor(src)
SSticker.mode.greet_traitor(src)
SSticker.mode.update_traitor_icons_added(src)
/datum/mind/proc/make_Nuke()
if(!(src in ticker.mode.syndicates))
ticker.mode.syndicates += src
ticker.mode.update_synd_icons_added(src)
if(ticker.mode.syndicates.len==1)
ticker.mode.prepare_syndicate_leader(src)
if(!(src in SSticker.mode.syndicates))
SSticker.mode.syndicates += src
SSticker.mode.update_synd_icons_added(src)
if(SSticker.mode.syndicates.len==1)
SSticker.mode.prepare_syndicate_leader(src)
else
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]"
special_role = SPECIAL_ROLE_NUKEOPS
assigned_role = SPECIAL_ROLE_NUKEOPS
to_chat(current, "<span class='notice'>You are a [syndicate_name()] agent!</span>")
ticker.mode.forge_syndicate_objectives(src)
ticker.mode.greet_syndicate(src)
SSticker.mode.forge_syndicate_objectives(src)
SSticker.mode.greet_syndicate(src)
current.loc = get_turf(locate("landmark*Syndicate-Spawn"))
@@ -1429,34 +1437,34 @@
qdel(H.wear_suit)
qdel(H.w_uniform)
ticker.mode.equip_syndicate(current)
SSticker.mode.equip_syndicate(current)
/datum/mind/proc/make_Vampire()
if(!(src in ticker.mode.vampires))
ticker.mode.vampires += src
ticker.mode.grant_vampire_powers(current)
if(!(src in SSticker.mode.vampires))
SSticker.mode.vampires += src
SSticker.mode.grant_vampire_powers(current)
special_role = SPECIAL_ROLE_VAMPIRE
ticker.mode.forge_vampire_objectives(src)
ticker.mode.greet_vampire(src)
ticker.mode.update_vampire_icons_added(src)
SSticker.mode.forge_vampire_objectives(src)
SSticker.mode.greet_vampire(src)
SSticker.mode.update_vampire_icons_added(src)
/datum/mind/proc/make_Changeling()
if(!(src in ticker.mode.changelings))
ticker.mode.changelings += src
ticker.mode.grant_changeling_powers(current)
if(!(src in SSticker.mode.changelings))
SSticker.mode.changelings += src
SSticker.mode.grant_changeling_powers(current)
special_role = SPECIAL_ROLE_CHANGELING
ticker.mode.forge_changeling_objectives(src)
ticker.mode.greet_changeling(src)
ticker.mode.update_change_icons_added(src)
SSticker.mode.forge_changeling_objectives(src)
SSticker.mode.greet_changeling(src)
SSticker.mode.update_change_icons_added(src)
/datum/mind/proc/make_Overmind()
if(!(src in ticker.mode.blob_overminds))
ticker.mode.blob_overminds += src
if(!(src in SSticker.mode.blob_overminds))
SSticker.mode.blob_overminds += src
special_role = SPECIAL_ROLE_BLOB_OVERMIND
/datum/mind/proc/make_Wizard()
if(!(src in ticker.mode.wizards))
ticker.mode.wizards += src
if(!(src in SSticker.mode.wizards))
SSticker.mode.wizards += src
special_role = SPECIAL_ROLE_WIZARD
assigned_role = SPECIAL_ROLE_WIZARD
//ticker.mode.learn_basic_spells(current)
@@ -1466,18 +1474,18 @@
else
current.loc = pick(wizardstart)
ticker.mode.equip_wizard(current)
SSticker.mode.equip_wizard(current)
for(var/obj/item/spellbook/S in current.contents)
S.op = 0
ticker.mode.name_wizard(current)
ticker.mode.forge_wizard_objectives(src)
ticker.mode.greet_wizard(src)
ticker.mode.update_wiz_icons_added(src)
SSticker.mode.name_wizard(current)
SSticker.mode.forge_wizard_objectives(src)
SSticker.mode.greet_wizard(src)
SSticker.mode.update_wiz_icons_added(src)
/datum/mind/proc/make_Rev()
if(ticker.mode.head_revolutionaries.len>0)
if(SSticker.mode.head_revolutionaries.len>0)
// copy targets
var/datum/mind/valid_head = locate() in ticker.mode.head_revolutionaries
var/datum/mind/valid_head = locate() in SSticker.mode.head_revolutionaries
if(valid_head)
for(var/datum/objective/mutiny/O in valid_head.objectives)
var/datum/objective/mutiny/rev_obj = new
@@ -1485,13 +1493,13 @@
rev_obj.target = O.target
rev_obj.explanation_text = "Assassinate [O.target.current.real_name], the [O.target.assigned_role]."
objectives += rev_obj
ticker.mode.greet_revolutionary(src,0)
ticker.mode.head_revolutionaries += src
ticker.mode.update_rev_icons_added(src)
SSticker.mode.greet_revolutionary(src,0)
SSticker.mode.head_revolutionaries += src
SSticker.mode.update_rev_icons_added(src)
special_role = SPECIAL_ROLE_HEAD_REV
ticker.mode.forge_revolutionary_objectives(src)
ticker.mode.greet_revolutionary(src,0)
SSticker.mode.forge_revolutionary_objectives(src)
SSticker.mode.greet_revolutionary(src,0)
var/list/L = current.get_contents()
var/obj/item/flash/flash = locate() in L
@@ -1499,7 +1507,7 @@
take_uplink()
var/fail = 0
// fail |= !ticker.mode.equip_traitor(current, 1)
fail |= !ticker.mode.equip_revolutionary(current)
fail |= !SSticker.mode.equip_revolutionary(current)
/datum/mind/proc/make_Abductor()
var/role = alert("Abductor Role ?","Role","Agent","Scientist")
@@ -1512,7 +1520,7 @@
if(!ishuman(current))
return
ticker.mode.abductors |= src
SSticker.mode.abductors |= src
var/datum/objective/experiment/O = new
O.owner = src
@@ -1621,15 +1629,15 @@
var/list/implanters
var/ref = "\ref[missionary.mind]"
if(!(missionary.mind in ticker.mode.implanter))
ticker.mode.implanter[ref] = list()
implanters = ticker.mode.implanter[ref]
if(!(missionary.mind in SSticker.mode.implanter))
SSticker.mode.implanter[ref] = list()
implanters = SSticker.mode.implanter[ref]
implanters.Add(src)
ticker.mode.implanted.Add(src)
ticker.mode.implanted[src] = missionary.mind
SSticker.mode.implanted.Add(src)
SSticker.mode.implanted[src] = missionary.mind
//ticker.mode.implanter[missionary.mind] += src
ticker.mode.implanter[ref] = implanters
ticker.mode.traitors += src
SSticker.mode.implanter[ref] = implanters
SSticker.mode.traitors += src
special_role = "traitor"
to_chat(current, "<span class='warning'><B>You're now a loyal zealot of [missionary.name]!</B> You now must lay down your life to protect [missionary.p_them()] and assist in [missionary.p_their()] goals at any cost.</span>")
var/datum/objective/protect/mindslave/MS = new
@@ -1640,8 +1648,8 @@
for(var/datum/objective/objective in objectives)
to_chat(current, "<B>Objective #1</B>: [objective.explanation_text]")
ticker.mode.update_traitor_icons_added(missionary.mind)
ticker.mode.update_traitor_icons_added(src)//handles datahuds/observerhuds
SSticker.mode.update_traitor_icons_added(missionary.mind)
SSticker.mode.update_traitor_icons_added(src)//handles datahuds/observerhuds
if(missionary.mind.som)//do not add if not a traitor..and you just picked up a robe and staff in the hall...
var/datum/mindslaves/slaved = missionary.mind.som
@@ -1665,7 +1673,7 @@
/datum/mind/proc/remove_zealot(obj/item/clothing/under/jumpsuit = null)
if(!zealot_master) //if they aren't a zealot, we can't remove their zealot status, obviously. don't bother with the rest so we don't confuse them with the messages
return
ticker.mode.remove_traitor_mind(src)
SSticker.mode.remove_traitor_mind(src)
add_attack_logs(zealot_master, current, "Lost control of zealot")
zealot_master = null
@@ -1696,8 +1704,8 @@
mind.key = key
else
mind = new /datum/mind(key)
if(ticker)
ticker.minds += mind
if(SSticker)
SSticker.minds += mind
else
error("mind_initialize(): No ticker ready yet! Please inform Carn")
if(!mind.name)
+8 -2
View File
@@ -4,15 +4,21 @@
// Mutable appearances are children of images, just so you know.
/mutable_appearance/New()
..()
plane = FLOAT_PLANE // No clue why this is 0 by default yet images are on FLOAT_PLANE
// And yes this does have to be in the constructor, BYOND ignores it if you set it as a normal var
// Helper similar to image()
/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER)
/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER, plane = FLOAT_PLANE)
var/mutable_appearance/MA = new()
MA.icon = icon
MA.icon_state = icon_state
MA.layer = layer
MA.plane = plane
return MA
/mutable_appearance/clean
/mutable_appearance/clean/New()
. = ..()
alpha = 255
+1 -1
View File
@@ -118,7 +118,7 @@
var/global/list/newscaster_standard_feeds = list(/datum/news_announcement/bluespace_research, /datum/news_announcement/lotus_tree, /datum/news_announcement/random_junk, /datum/news_announcement/food_riots)
proc/process_newscaster()
check_for_newscaster_updates(ticker.mode.newscaster_announcements)
check_for_newscaster_updates(SSticker.mode.newscaster_announcements)
var/global/tmp/announced_news_types = list()
proc/check_for_newscaster_updates(type)
+6 -2
View File
@@ -167,6 +167,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
if("holdervar")
adjust_var(user, holder_var_type, holder_var_amount)
if(action)
action.UpdateButtonIcon()
return 1
/obj/effect/proc_holder/spell/proc/invocation(mob/user = usr) //spelling the spell out and setting it on recharge/reducing charges amount
@@ -235,6 +237,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
else
cast(targets, user = user)
after_cast(targets)
if(action)
action.UpdateButtonIcon()
/obj/effect/proc_holder/spell/proc/before_cast(list/targets)
if(overlay)
@@ -291,8 +295,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
charge_counter++
if("holdervar")
adjust_var(user, holder_var_type, -holder_var_amount)
return
if(action)
action.UpdateButtonIcon()
/obj/effect/proc_holder/spell/proc/updateButtonIcon()
if(action)
+2 -2
View File
@@ -64,9 +64,9 @@
spawn(0) // allows cast to complete even if recipient ignores the prompt
if(alert(target, "[user] wants to bless you, in the name of [user.p_their()] religion. Accept?", "Accept Blessing?", "Yes", "No") == "Yes") // prevents forced conversions
user.visible_message("[user] starts blessing [target] in the name of [ticker.Bible_deity_name].", "<span class='notice'>You start blessing [target] in the name of [ticker.Bible_deity_name].</span>")
user.visible_message("[user] starts blessing [target] in the name of [SSticker.Bible_deity_name].", "<span class='notice'>You start blessing [target] in the name of [SSticker.Bible_deity_name].</span>")
if(do_after(user, 150, target = target))
user.visible_message("[user] has blessed [target] in the name of [ticker.Bible_deity_name].", "<span class='notice'>You have blessed [target] in the name of [ticker.Bible_deity_name].</span>")
user.visible_message("[user] has blessed [target] in the name of [SSticker.Bible_deity_name].", "<span class='notice'>You have blessed [target] in the name of [SSticker.Bible_deity_name].</span>")
if(!target.mind.isblessed)
target.mind.isblessed = TRUE
user.mind.num_blessed++
+1 -1
View File
@@ -20,7 +20,7 @@
action_icon_state = "skeleton"
/obj/effect/proc_holder/spell/targeted/lichdom/Destroy()
for(var/datum/mind/M in ticker.mode.wizards) //Make sure no other bones are about
for(var/datum/mind/M in SSticker.mode.wizards) //Make sure no other bones are about
for(var/obj/effect/proc_holder/spell/S in M.spell_list)
if(istype(S,/obj/effect/proc_holder/spell/targeted/lichdom) && S != src)
return ..()
+2 -2
View File
@@ -12,9 +12,9 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
var/datum/uplink_item/I = new path
if(!I.item)
continue
if(I.gamemodes.len && ticker && !(ticker.mode.type in I.gamemodes))
if(I.gamemodes.len && SSticker && !(SSticker.mode.type in I.gamemodes))
continue
if(I.excludefrom.len && ticker && (ticker.mode.type in I.excludefrom))
if(I.excludefrom.len && SSticker && (SSticker.mode.type in I.excludefrom))
continue
if(I.last)
last += I
+6 -4
View File
@@ -1,13 +1,15 @@
/datum/vision_override
var/name = "vision override"
var/see_in_dark = 0
var/see_invisible = 0
var/light_sensitive = 0
var/sight_flags = 0
var/see_in_dark = 0
var/lighting_alpha
var/light_sensitive = 0
/datum/vision_override/nightvision
see_in_dark = 8
see_invisible = SEE_INVISIBLE_MINIMUM
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
/datum/vision_override/nightvision/thermals
sight_flags = SEE_MOBS
+4 -2
View File
@@ -28,6 +28,7 @@
var/impacted_z_levels // The list of z-levels that this weather is actively affecting
var/overlay_layer = AREA_LAYER //Since it's above everything else, this is the layer used by default. TURF_LAYER is below mobs and walls if you need to use that.
var/overlay_plane = BLACKNESS_PLANE
var/aesthetic = FALSE //If the weather has no purpose other than looks
var/immunity_type = "storm" //Used by mobs to prevent them from being affected by the weather
@@ -121,6 +122,7 @@
for(var/V in impacted_areas)
var/area/N = V
N.layer = overlay_layer
N.plane = overlay_plane
N.icon = 'icons/effects/weather_effects.dmi'
N.invisibility = 0
N.color = weather_color
@@ -135,6 +137,6 @@
N.color = null
N.icon_state = ""
N.icon = 'icons/turf/areas.dmi'
N.layer = AREA_LAYER //Just default back to normal area stuff since I assume setting a var is faster than initial
N.invisibility = INVISIBILITY_MAXIMUM
N.layer = initial(N.layer)
N.plane = initial(N.plane)
N.set_opacity(FALSE)
@@ -19,6 +19,7 @@
target_trait = STATION_LEVEL
overlay_layer = ABOVE_OPEN_TURF_LAYER //Covers floors only
overlay_plane = FLOOR_PLANE
immunity_type = "lava"