April sync (#360)
* Maps and things no code/icons * helpers defines globalvars * Onclick world.dm orphaned_procs * subsystems Round vote and shuttle autocall done here too * datums * Game folder * Admin - chatter modules * clothing - mining * modular computers - zambies * client * mob level 1 * mob stage 2 + simple_animal * silicons n brains * mob stage 3 + Alien/Monkey * human mobs * icons updated * some sounds * emitter y u no commit * update tgstation.dme * compile fixes * travis fixes Also removes Fast digest mode, because reasons. * tweaks for travis Mentors are broke again Also fixes Sizeray guns * oxygen loss fix for vore code. * removes unused code * some code updates * bulk fixes * further fixes * outside things * whoops. * Maint bar ported * GLOBs.
This commit is contained in:
+18
-1
@@ -333,6 +333,10 @@
|
||||
/datum/action/item_action/hands_free/shift_nerves
|
||||
name = "Shift Nerves"
|
||||
|
||||
/datum/action/item_action/explosive_implant
|
||||
check_flags = 0
|
||||
name = "Activate Explosive Implant"
|
||||
|
||||
/datum/action/item_action/toggle_research_scanner
|
||||
name = "Toggle Research Scanner"
|
||||
button_icon_state = "scan_mode"
|
||||
@@ -467,4 +471,17 @@
|
||||
/datum/action/item_action/bhop
|
||||
name = "Activate Jump Boots"
|
||||
desc = "Activates the jump boot's internal propulsion system, allowing the user to dash over 4-wide gaps."
|
||||
button_icon_state = "jetboot"
|
||||
button_icon_state = "jetboot"
|
||||
|
||||
/datum/action/language_menu
|
||||
name = "Language Menu"
|
||||
desc = "Open the language menu to review your languages, their keys, and select your default language."
|
||||
button_icon_state = "language_menu"
|
||||
check_flags = 0
|
||||
|
||||
/datum/action/language_menu/Trigger()
|
||||
if(!..())
|
||||
return FALSE
|
||||
if(isliving(owner))
|
||||
var/mob/living/L = owner
|
||||
L.open_language_menu(usr)
|
||||
|
||||
@@ -18,6 +18,14 @@
|
||||
. = is_eligible_servant(new_body)
|
||||
|
||||
/datum/antagonist/clockcultist/give_to_body(mob/living/new_body)
|
||||
if(iscyborg(new_body))
|
||||
var/mob/living/silicon/robot/R = new_body
|
||||
if(R.deployed)
|
||||
var/mob/living/silicon/ai/AI = R.mainframe
|
||||
R.undeploy()
|
||||
var/converted = add_servant_of_ratvar(AI, silent_update)
|
||||
to_chat(AI, "<span class='userdanger'>Anomaly Detected. Returned to core!</span>") //The AI needs to be in its core to properly be converted
|
||||
return converted
|
||||
if(!silent_update)
|
||||
if(issilicon(new_body))
|
||||
to_chat(new_body, "<span class='heavy_brass'>You are unable to compute this truth. Your vision glows a brilliant yellow, and all at once it comes to you. Ratvar, the Clockwork Justiciar, \
|
||||
@@ -36,11 +44,11 @@
|
||||
to_chat(new_body, "<span class='userdanger'>And yet, you somehow push it all away.</span>")
|
||||
|
||||
/datum/antagonist/clockcultist/on_gain()
|
||||
if(ticker && ticker.mode && owner.mind)
|
||||
ticker.mode.servants_of_ratvar += owner.mind
|
||||
ticker.mode.update_servant_icons_added(owner.mind)
|
||||
if(SSticker && SSticker.mode && owner.mind)
|
||||
SSticker.mode.servants_of_ratvar += owner.mind
|
||||
SSticker.mode.update_servant_icons_added(owner.mind)
|
||||
if(jobban_isbanned(owner, ROLE_SERVANT_OF_RATVAR))
|
||||
INVOKE_ASYNC(ticker.mode, /datum/game_mode.proc/replace_jobbaned_player, owner, ROLE_SERVANT_OF_RATVAR, ROLE_SERVANT_OF_RATVAR)
|
||||
INVOKE_ASYNC(SSticker.mode, /datum/game_mode.proc/replace_jobbaned_player, owner, ROLE_SERVANT_OF_RATVAR, ROLE_SERVANT_OF_RATVAR)
|
||||
if(owner.mind)
|
||||
owner.mind.special_role = "Servant of Ratvar"
|
||||
owner.log_message("<font color=#BE8700>Has been converted to the cult of Ratvar!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
@@ -55,29 +63,28 @@
|
||||
else if(isbrain(owner) || isclockmob(owner))
|
||||
to_chat(owner, "<span class='nezbere'>You can communicate with other servants by using the Hierophant Network action button in the upper left.</span>")
|
||||
..()
|
||||
if(istype(ticker.mode, /datum/game_mode/clockwork_cult))
|
||||
var/datum/game_mode/clockwork_cult/C = ticker.mode
|
||||
if(istype(SSticker.mode, /datum/game_mode/clockwork_cult))
|
||||
var/datum/game_mode/clockwork_cult/C = SSticker.mode
|
||||
C.present_tasks(owner) //Memorize the objectives
|
||||
|
||||
/datum/antagonist/clockcultist/apply_innate_effects()
|
||||
all_clockwork_mobs += owner
|
||||
GLOB.all_clockwork_mobs += owner
|
||||
owner.faction |= "ratvar"
|
||||
owner.languages_spoken |= RATVAR
|
||||
owner.languages_understood |= RATVAR
|
||||
owner.grant_language(/datum/language/ratvar)
|
||||
owner.update_action_buttons_icon() //because a few clockcult things are action buttons and we may be wearing/holding them for whatever reason, we need to update buttons
|
||||
if(issilicon(owner))
|
||||
var/mob/living/silicon/S = owner
|
||||
if(iscyborg(S))
|
||||
var/mob/living/silicon/robot/R = S
|
||||
R.UnlinkSelf()
|
||||
if(!R.shell)
|
||||
R.UnlinkSelf()
|
||||
R.module.rebuild_modules()
|
||||
else if(isAI(S))
|
||||
var/mob/living/silicon/ai/A = S
|
||||
A.can_be_carded = FALSE
|
||||
A.requires_power = POWER_REQ_CLOCKCULT
|
||||
A.languages_spoken &= ~HUMAN
|
||||
var/list/AI_frame = list(image('icons/mob/clockwork_mobs.dmi', A, "aiframe")) //make the AI's cool frame
|
||||
for(var/d in cardinal)
|
||||
for(var/d in GLOB.cardinal)
|
||||
AI_frame += image('icons/mob/clockwork_mobs.dmi', A, "eye[rand(1, 10)]", dir = d) //the eyes are randomly fast or slow
|
||||
A.add_overlay(AI_frame)
|
||||
if(!A.lacks_power())
|
||||
@@ -110,16 +117,14 @@
|
||||
hierophant_network.span_for_name = "nezbere"
|
||||
hierophant_network.span_for_message = "brass"
|
||||
owner.throw_alert("clockinfo", /obj/screen/alert/clockwork/infodump)
|
||||
if(!clockwork_gateway_activated)
|
||||
if(!GLOB.clockwork_gateway_activated)
|
||||
owner.throw_alert("scripturereq", /obj/screen/alert/clockwork/scripture_reqs)
|
||||
update_slab_info()
|
||||
..()
|
||||
|
||||
/datum/antagonist/clockcultist/remove_innate_effects()
|
||||
all_clockwork_mobs -= owner
|
||||
GLOB.all_clockwork_mobs -= owner
|
||||
owner.faction -= "ratvar"
|
||||
owner.languages_spoken &= ~RATVAR
|
||||
owner.languages_understood &= ~RATVAR
|
||||
owner.remove_language(/datum/language/ratvar)
|
||||
owner.clear_alert("clockinfo")
|
||||
owner.clear_alert("scripturereq")
|
||||
for(var/datum/action/innate/function_call/F in owner.actions) //Removes any bound Ratvarian spears
|
||||
@@ -130,7 +135,6 @@
|
||||
var/mob/living/silicon/ai/A = S
|
||||
A.can_be_carded = initial(A.can_be_carded)
|
||||
A.requires_power = initial(A.requires_power)
|
||||
A.languages_spoken |= HUMAN
|
||||
A.cut_overlays()
|
||||
S.make_laws()
|
||||
S.update_icons()
|
||||
@@ -142,15 +146,14 @@
|
||||
R.module.rebuild_modules()
|
||||
if(temp_owner)
|
||||
temp_owner.update_action_buttons_icon() //because a few clockcult things are action buttons and we may be wearing/holding them, we need to update buttons
|
||||
update_slab_info()
|
||||
|
||||
/datum/antagonist/clockcultist/on_remove()
|
||||
if(!silent_update)
|
||||
owner.visible_message("<span class='big'>[owner] seems to have remembered their true allegiance!</span>", \
|
||||
"<span class='userdanger'>A cold, cold darkness flows through your mind, extinguishing the Justiciar's light and all of your memories as his servant.</span>")
|
||||
if(ticker && ticker.mode && owner.mind)
|
||||
ticker.mode.servants_of_ratvar -= owner.mind
|
||||
ticker.mode.update_servant_icons_removed(owner.mind)
|
||||
if(SSticker && SSticker.mode && owner.mind)
|
||||
SSticker.mode.servants_of_ratvar -= owner.mind
|
||||
SSticker.mode.update_servant_icons_removed(owner.mind)
|
||||
if(owner.mind)
|
||||
owner.mind.wipe_memory()
|
||||
owner.mind.special_role = null
|
||||
|
||||
@@ -13,14 +13,14 @@
|
||||
. = is_convertable_to_cult(new_body)
|
||||
|
||||
/datum/antagonist/cultist/on_gain()
|
||||
if(ticker && ticker.mode && owner.mind)
|
||||
ticker.mode.cult += owner.mind
|
||||
ticker.mode.update_cult_icons_added(owner.mind)
|
||||
if(istype(ticker.mode, /datum/game_mode/cult))
|
||||
var/datum/game_mode/cult/C = ticker.mode
|
||||
if(SSticker && SSticker.mode && owner.mind)
|
||||
SSticker.mode.cult += owner.mind
|
||||
SSticker.mode.update_cult_icons_added(owner.mind)
|
||||
if(istype(SSticker.mode, /datum/game_mode/cult))
|
||||
var/datum/game_mode/cult/C = SSticker.mode
|
||||
C.memorize_cult_objectives(owner.mind)
|
||||
if(jobban_isbanned(owner, ROLE_CULTIST))
|
||||
INVOKE_ASYNC(ticker.mode, /datum/game_mode.proc/replace_jobbaned_player, owner, ROLE_CULTIST, ROLE_CULTIST)
|
||||
INVOKE_ASYNC(SSticker.mode, /datum/game_mode.proc/replace_jobbaned_player, owner, ROLE_CULTIST, ROLE_CULTIST)
|
||||
if(owner.mind)
|
||||
owner.mind.special_role = "Cultist"
|
||||
owner.log_message("<font color=#960000>Has been converted to the cult of Nar'Sie!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
@@ -40,9 +40,9 @@
|
||||
/datum/antagonist/cultist/on_remove()
|
||||
if(owner.mind)
|
||||
owner.mind.wipe_memory()
|
||||
if(ticker && ticker.mode)
|
||||
ticker.mode.cult -= owner.mind
|
||||
ticker.mode.update_cult_icons_removed(owner.mind)
|
||||
if(SSticker && SSticker.mode)
|
||||
SSticker.mode.cult -= owner.mind
|
||||
SSticker.mode.update_cult_icons_removed(owner.mind)
|
||||
to_chat(owner, "<span class='userdanger'>An unfamiliar white light flashes through your mind, cleansing the taint of the Dark One and all your memories as its servant.</span>")
|
||||
owner.log_message("<font color=#960000>Has renounced the cult of Nar'Sie!</font>", INDIVIDUAL_ATTACK_LOG)
|
||||
if(!silent_update)
|
||||
|
||||
+37
-18
@@ -7,17 +7,16 @@
|
||||
var/icon
|
||||
var/icon_state = "" //icon state of the main segments of the beam
|
||||
var/max_distance = 0
|
||||
var/endtime = 0
|
||||
var/sleep_time = 3
|
||||
var/finished = 0
|
||||
var/target_oldloc = null
|
||||
var/origin_oldloc = null
|
||||
var/static_beam = 0
|
||||
var/beam_type = /obj/effect/ebeam //must be subtype
|
||||
|
||||
var/timing_id = null
|
||||
var/recalculating = FALSE
|
||||
|
||||
/datum/beam/New(beam_origin,beam_target,beam_icon='icons/effects/beam.dmi',beam_icon_state="b_beam",time=50,maxdistance=10,btype = /obj/effect/ebeam,beam_sleep_time=3)
|
||||
endtime = world.time+time
|
||||
origin = beam_origin
|
||||
origin_oldloc = get_turf(origin)
|
||||
target = beam_target
|
||||
@@ -30,11 +29,19 @@
|
||||
icon = beam_icon
|
||||
icon_state = beam_icon_state
|
||||
beam_type = btype
|
||||
|
||||
addtimer(CALLBACK(src,.proc/End), time)
|
||||
|
||||
/datum/beam/proc/Start()
|
||||
Draw()
|
||||
while(!finished && origin && target && world.time < endtime && get_dist(origin,target)<max_distance && origin.z == target.z)
|
||||
recalculate_in(sleep_time)
|
||||
|
||||
/datum/beam/proc/recalculate()
|
||||
if(recalculating)
|
||||
recalculate_in(sleep_time)
|
||||
return
|
||||
recalculating = TRUE
|
||||
timing_id = null
|
||||
if(origin && target && get_dist(origin,target)<max_distance && origin.z == target.z)
|
||||
var/origin_turf = get_turf(origin)
|
||||
var/target_turf = get_turf(target)
|
||||
if(!static_beam && (origin_turf != origin_oldloc || target_turf != target_oldloc))
|
||||
@@ -42,19 +49,36 @@
|
||||
target_oldloc = target_turf
|
||||
Reset()
|
||||
Draw()
|
||||
sleep(sleep_time)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
after_calculate()
|
||||
recalculating = FALSE
|
||||
else
|
||||
End()
|
||||
|
||||
/datum/beam/proc/afterDraw()
|
||||
return
|
||||
|
||||
/datum/beam/proc/End()
|
||||
/datum/beam/proc/recalculate_in(time)
|
||||
if(timing_id)
|
||||
deltimer(timing_id)
|
||||
timing_id = addtimer(CALLBACK(src, .proc/recalculate), time, TIMER_STOPPABLE)
|
||||
|
||||
/datum/beam/proc/after_calculate()
|
||||
if((sleep_time == null) || finished) //Does not automatically recalculate.
|
||||
return
|
||||
if(isnull(timing_id))
|
||||
timing_id = addtimer(CALLBACK(src, .proc/recalculate), sleep_time, TIMER_STOPPABLE)
|
||||
|
||||
/datum/beam/proc/End(destroy_self = TRUE)
|
||||
finished = TRUE
|
||||
|
||||
if(!isnull(timing_id))
|
||||
deltimer(timing_id)
|
||||
if(!QDELETED(src) && destroy_self)
|
||||
qdel(src)
|
||||
|
||||
/datum/beam/proc/Reset()
|
||||
for(var/obj/effect/ebeam/B in elements)
|
||||
qdel(B)
|
||||
|
||||
elements.Cut()
|
||||
|
||||
/datum/beam/Destroy()
|
||||
Reset()
|
||||
@@ -62,10 +86,8 @@
|
||||
origin = null
|
||||
return ..()
|
||||
|
||||
|
||||
/datum/beam/proc/Draw()
|
||||
var/Angle = round(Get_Angle(origin,target))
|
||||
|
||||
var/matrix/rot_matrix = matrix()
|
||||
rot_matrix.Turn(Angle)
|
||||
|
||||
@@ -78,7 +100,7 @@
|
||||
for(N in 0 to length-1 step 32)//-1 as we want < not <=, but we want the speed of X in Y to Z and step X
|
||||
var/obj/effect/ebeam/X = new beam_type(origin_oldloc)
|
||||
X.owner = src
|
||||
elements |= X
|
||||
elements += X
|
||||
|
||||
//Assign icon, for main segments it's base_icon, for the end, it's icon+icon_state
|
||||
//cropped by a transparent box of length-N pixel size
|
||||
@@ -116,21 +138,18 @@
|
||||
X.pixel_x = Pixel_x
|
||||
X.pixel_y = Pixel_y
|
||||
CHECK_TICK
|
||||
|
||||
afterDraw()
|
||||
|
||||
/obj/effect/ebeam
|
||||
mouse_opacity = 0
|
||||
anchored = 1
|
||||
var/datum/beam/owner
|
||||
|
||||
|
||||
/obj/effect/ebeam/Destroy()
|
||||
owner = null
|
||||
return ..()
|
||||
|
||||
|
||||
/atom/proc/Beam(atom/BeamTarget,icon_state="b_beam",icon='icons/effects/beam.dmi',time=50, maxdistance=10,beam_type=/obj/effect/ebeam,beam_sleep_time = 3)
|
||||
var/datum/beam/newbeam = new(src,BeamTarget,icon,icon_state,time,maxdistance,beam_type,beam_sleep_time)
|
||||
INVOKE_ASYNC(newbeam, /datum/beam/.proc/Start)
|
||||
return newbeam
|
||||
|
||||
|
||||
+21
-21
@@ -17,14 +17,14 @@
|
||||
var/list/fields = list()
|
||||
|
||||
/datum/data/record/Destroy()
|
||||
if(src in data_core.medical)
|
||||
data_core.medical -= src
|
||||
if(src in data_core.security)
|
||||
data_core.security -= src
|
||||
if(src in data_core.general)
|
||||
data_core.general -= src
|
||||
if(src in data_core.locked)
|
||||
data_core.locked -= src
|
||||
if(src in GLOB.data_core.medical)
|
||||
GLOB.data_core.medical -= src
|
||||
if(src in GLOB.data_core.security)
|
||||
GLOB.data_core.security -= src
|
||||
if(src in GLOB.data_core.general)
|
||||
GLOB.data_core.general -= src
|
||||
if(src in GLOB.data_core.locked)
|
||||
GLOB.data_core.locked -= src
|
||||
. = ..()
|
||||
|
||||
/datum/data/crime
|
||||
@@ -77,13 +77,13 @@
|
||||
return
|
||||
|
||||
/datum/datacore/proc/manifest()
|
||||
for(var/mob/dead/new_player/N in player_list)
|
||||
for(var/mob/dead/new_player/N in GLOB.player_list)
|
||||
if(ishuman(N.new_character))
|
||||
manifest_inject(N.new_character, N.client)
|
||||
CHECK_TICK
|
||||
|
||||
/datum/datacore/proc/manifest_modify(name, assignment)
|
||||
var/datum/data/record/foundrecord = find_record("name", name, data_core.general)
|
||||
var/datum/data/record/foundrecord = find_record("name", name, GLOB.data_core.general)
|
||||
if(foundrecord)
|
||||
foundrecord.fields["rank"] = assignment
|
||||
|
||||
@@ -111,32 +111,32 @@
|
||||
"}
|
||||
var/even = 0
|
||||
// sort mobs
|
||||
for(var/datum/data/record/t in data_core.general)
|
||||
for(var/datum/data/record/t in GLOB.data_core.general)
|
||||
var/name = t.fields["name"]
|
||||
var/rank = t.fields["rank"]
|
||||
var/department = 0
|
||||
if(rank in command_positions)
|
||||
if(rank in GLOB.command_positions)
|
||||
heads[name] = rank
|
||||
department = 1
|
||||
if(rank in security_positions)
|
||||
if(rank in GLOB.security_positions)
|
||||
sec[name] = rank
|
||||
department = 1
|
||||
if(rank in engineering_positions)
|
||||
if(rank in GLOB.engineering_positions)
|
||||
eng[name] = rank
|
||||
department = 1
|
||||
if(rank in medical_positions)
|
||||
if(rank in GLOB.medical_positions)
|
||||
med[name] = rank
|
||||
department = 1
|
||||
if(rank in science_positions)
|
||||
if(rank in GLOB.science_positions)
|
||||
sci[name] = rank
|
||||
department = 1
|
||||
if(rank in supply_positions)
|
||||
if(rank in GLOB.supply_positions)
|
||||
sup[name] = rank
|
||||
department = 1
|
||||
if(rank in civilian_positions)
|
||||
if(rank in GLOB.civilian_positions)
|
||||
civ[name] = rank
|
||||
department = 1
|
||||
if(rank in nonhuman_positions)
|
||||
if(rank in GLOB.nonhuman_positions)
|
||||
bot[name] = rank
|
||||
department = 1
|
||||
if(!department && !(name in heads))
|
||||
@@ -195,7 +195,6 @@
|
||||
return dat
|
||||
|
||||
|
||||
var/record_id_num = 1001
|
||||
/datum/datacore/proc/manifest_inject(mob/living/carbon/human/H, client/C)
|
||||
if(H.mind && (H.mind.assigned_role != H.mind.special_role))
|
||||
var/assignment
|
||||
@@ -206,6 +205,7 @@ var/record_id_num = 1001
|
||||
else
|
||||
assignment = "Unassigned"
|
||||
|
||||
var/static/record_id_num = 1001
|
||||
var/id = num2hex(record_id_num++,6)
|
||||
if(!C)
|
||||
C = H.client
|
||||
@@ -284,4 +284,4 @@ var/record_id_num = 1001
|
||||
C = H.client
|
||||
if(C)
|
||||
P = C.prefs
|
||||
return get_flat_human_icon(null,J.outfit,P)
|
||||
return get_flat_human_icon(null, J, P)
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
var/var_edited = FALSE //Warrenty void if seal is broken
|
||||
var/fingerprintslast = null
|
||||
|
||||
/datum/proc/can_vv_get(var_name)
|
||||
return TRUE
|
||||
|
||||
/datum/proc/vv_edit_var(var_name, var_value) //called whenever a var is edited
|
||||
switch(var_name)
|
||||
if ("vars")
|
||||
@@ -80,7 +83,6 @@
|
||||
if(A.dir)
|
||||
atomsnowflake += "<br><font size='1'><a href='?_src_=vars;rotatedatum=[refid];rotatedir=left'><<</a> <a href='?_src_=vars;datumedit=[refid];varnameedit=dir'>[dir2text(A.dir)]</a> <a href='?_src_=vars;rotatedatum=[refid];rotatedir=right'>>></a></font>"
|
||||
var/mob/living/M = A
|
||||
//citadel arousal code
|
||||
atomsnowflake += {"
|
||||
<br><font size='1'><a href='?_src_=vars;datumedit=[refid];varnameedit=ckey'>[M.ckey ? M.ckey : "No ckey"]</a> / <a href='?_src_=vars;datumedit=[refid];varnameedit=real_name'>[M.real_name ? M.real_name : "No real name"]</a></font>
|
||||
<br><font size='1'>
|
||||
@@ -157,7 +159,8 @@
|
||||
|
||||
names = sortList(names)
|
||||
for (var/V in names)
|
||||
variable_html += D.vv_get_var(V)
|
||||
if(D.can_vv_get(V))
|
||||
variable_html += D.vv_get_var(V)
|
||||
|
||||
var/html = {"
|
||||
<html>
|
||||
@@ -852,7 +855,7 @@
|
||||
|
||||
if(A.reagents)
|
||||
var/chosen_id
|
||||
var/list/reagent_options = sortList(chemical_reagents_list)
|
||||
var/list/reagent_options = sortList(GLOB.chemical_reagents_list)
|
||||
switch(alert(usr, "Choose a method.", "Add Reagents", "Enter ID", "Choose ID"))
|
||||
if("Enter ID")
|
||||
var/valid_id
|
||||
@@ -1033,14 +1036,14 @@
|
||||
to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human")
|
||||
return
|
||||
|
||||
var/result = input(usr, "Please choose a new species","Species") as null|anything in species_list
|
||||
var/result = input(usr, "Please choose a new species","Species") as null|anything in GLOB.species_list
|
||||
|
||||
if(!H)
|
||||
to_chat(usr, "Mob doesn't exist anymore")
|
||||
return
|
||||
|
||||
if(result)
|
||||
var/newtype = species_list[result]
|
||||
var/newtype = GLOB.species_list[result]
|
||||
H.set_species(newtype)
|
||||
|
||||
else if(href_list["editbodypart"])
|
||||
|
||||
@@ -26,10 +26,6 @@
|
||||
#define DANGEROUS "Dangerous!"
|
||||
#define BIOHAZARD "BIOHAZARD THREAT!"
|
||||
|
||||
|
||||
var/list/diseases = subtypesof(/datum/disease)
|
||||
|
||||
|
||||
/datum/disease
|
||||
//Flags
|
||||
var/visibility_flags = 0
|
||||
|
||||
@@ -9,15 +9,7 @@
|
||||
|
||||
#define SYMPTOM_LIMIT 8
|
||||
|
||||
var/list/archive_diseases = list()
|
||||
|
||||
// The order goes from easy to cure to hard to cure.
|
||||
var/list/advance_cures = list(
|
||||
"sodiumchloride", "sugar", "orangejuice",
|
||||
"spaceacillin", "salglu_solution", "ethanol",
|
||||
"leporazine", "synaptizine", "lipolicide",
|
||||
"silver", "gold"
|
||||
)
|
||||
|
||||
/*
|
||||
|
||||
@@ -40,6 +32,14 @@ var/list/advance_cures = list(
|
||||
var/list/symptoms = list() // The symptoms of the disease.
|
||||
var/id = ""
|
||||
var/processing = 0
|
||||
|
||||
// The order goes from easy to cure to hard to cure.
|
||||
var/static/list/advance_cures = list(
|
||||
"sodiumchloride", "sugar", "orangejuice",
|
||||
"spaceacillin", "salglu_solution", "ethanol",
|
||||
"leporazine", "synaptizine", "lipolicide",
|
||||
"silver", "gold"
|
||||
)
|
||||
|
||||
/*
|
||||
|
||||
@@ -48,13 +48,6 @@ var/list/advance_cures = list(
|
||||
*/
|
||||
|
||||
/datum/disease/advance/New(var/process = 1, var/datum/disease/advance/D)
|
||||
|
||||
// Setup our dictionary if it hasn't already.
|
||||
if(!dictionary_symptoms.len)
|
||||
for(var/symp in list_symptoms)
|
||||
var/datum/symptom/S = new symp
|
||||
dictionary_symptoms[S.id] = symp
|
||||
|
||||
if(!istype(D))
|
||||
D = null
|
||||
// Generate symptoms if we weren't given any.
|
||||
@@ -141,7 +134,7 @@ var/list/advance_cures = list(
|
||||
|
||||
// Generate symptoms. By default, we only choose non-deadly symptoms.
|
||||
var/list/possible_symptoms = list()
|
||||
for(var/symp in list_symptoms)
|
||||
for(var/symp in SSdisease.list_symptoms)
|
||||
var/datum/symptom/S = new symp
|
||||
if(S.level >= level_min && S.level <= level_max)
|
||||
if(!HasSymptom(S))
|
||||
@@ -168,13 +161,13 @@ var/list/advance_cures = list(
|
||||
AssignProperties()
|
||||
id = null
|
||||
|
||||
if(!archive_diseases[GetDiseaseID()])
|
||||
if(!SSdisease.archive_diseases[GetDiseaseID()])
|
||||
if(new_name)
|
||||
AssignName()
|
||||
archive_diseases[GetDiseaseID()] = src // So we don't infinite loop
|
||||
archive_diseases[GetDiseaseID()] = new /datum/disease/advance(0, src, 1)
|
||||
SSdisease.archive_diseases[GetDiseaseID()] = src // So we don't infinite loop
|
||||
SSdisease.archive_diseases[GetDiseaseID()] = new /datum/disease/advance(0, src, 1)
|
||||
|
||||
var/datum/disease/advance/A = archive_diseases[GetDiseaseID()]
|
||||
var/datum/disease/advance/A = SSdisease.archive_diseases[GetDiseaseID()]
|
||||
AssignName(A.name)
|
||||
|
||||
//Generate disease properties based on the effects. Returns an associated list.
|
||||
@@ -259,7 +252,7 @@ var/list/advance_cures = list(
|
||||
cures = list(advance_cures[res])
|
||||
|
||||
// Get the cure name from the cure_id
|
||||
var/datum/reagent/D = chemical_reagents_list[cures[1]]
|
||||
var/datum/reagent/D = GLOB.chemical_reagents_list[cures[1]]
|
||||
cure_text = D.name
|
||||
|
||||
|
||||
@@ -379,7 +372,7 @@ var/list/advance_cures = list(
|
||||
|
||||
var/list/symptoms = list()
|
||||
symptoms += "Done"
|
||||
symptoms += list_symptoms.Copy()
|
||||
symptoms += SSdisease.list_symptoms.Copy()
|
||||
do
|
||||
if(user)
|
||||
var/symptom = input(user, "Choose a symptom to add ([i] remaining)", "Choose a Symptom") in symptoms
|
||||
@@ -405,7 +398,7 @@ var/list/advance_cures = list(
|
||||
for(var/datum/disease/advance/AD in SSdisease.processing)
|
||||
AD.Refresh()
|
||||
|
||||
for(var/mob/living/carbon/human/H in shuffle(living_mob_list))
|
||||
for(var/mob/living/carbon/human/H in shuffle(GLOB.living_mob_list))
|
||||
if(H.z != 1)
|
||||
continue
|
||||
if(!H.HasDisease(D))
|
||||
|
||||
@@ -45,7 +45,7 @@ Bonus
|
||||
return
|
||||
|
||||
/datum/symptom/fire/proc/Firestacks_stage_4(mob/living/M, datum/disease/advance/A)
|
||||
var/get_stacks = (sqrt(20+A.totalStageSpeed()*2))-(sqrt(16+A.totalStealth()))
|
||||
var/get_stacks = (sqrt(20+A.totalStageSpeed()*2))-(sqrt(max(0, 16+A.totalStealth())))
|
||||
M.adjust_fire_stacks(get_stacks)
|
||||
M.adjustFireLoss(get_stacks/2)
|
||||
return 1
|
||||
|
||||
@@ -42,7 +42,7 @@ Bonus
|
||||
|
||||
// Archive their DNA before they were infected.
|
||||
/datum/symptom/genetic_mutation/Start(datum/disease/advance/A)
|
||||
possible_mutations = (bad_mutations | not_good_mutations) - mutations_list[RACEMUT]
|
||||
possible_mutations = (GLOB.bad_mutations | GLOB.not_good_mutations) - GLOB.mutations_list[RACEMUT]
|
||||
var/mob/living/carbon/M = A.affected_mob
|
||||
if(M)
|
||||
if(!M.has_dna())
|
||||
|
||||
@@ -282,7 +282,7 @@ Bonus
|
||||
var/amt_healed = 1
|
||||
M.adjustBrainLoss(-amt_healed)
|
||||
//Non-power mutations, excluding race, so the virus does not force monkey -> human transformations.
|
||||
var/list/unclean_mutations = (not_good_mutations|bad_mutations) - mutations_list[RACEMUT]
|
||||
var/list/unclean_mutations = (GLOB.not_good_mutations|GLOB.bad_mutations) - GLOB.mutations_list[RACEMUT]
|
||||
M.dna.remove_mutation_group(unclean_mutations)
|
||||
M.radiation = max(M.radiation - (2 * amt_healed), 0)
|
||||
return 1
|
||||
|
||||
@@ -1,10 +1,5 @@
|
||||
// Symptoms are the effects that engineered advanced diseases do.
|
||||
|
||||
var/list/list_symptoms = subtypesof(/datum/symptom)
|
||||
var/list/dictionary_symptoms = list()
|
||||
|
||||
var/global/const/SYMPTOM_ACTIVATION_PROB = 5
|
||||
|
||||
/datum/symptom
|
||||
// Buffs/Debuffs the symptom has to the overall engineered disease.
|
||||
var/name = ""
|
||||
@@ -18,9 +13,10 @@ var/global/const/SYMPTOM_ACTIVATION_PROB = 5
|
||||
var/severity = 0
|
||||
// The hash tag for our diseases, we will add it up with our other symptoms to get a unique id! ID MUST BE UNIQUE!!!
|
||||
var/id = ""
|
||||
var/static/SYMPTOM_ACTIVATION_PROB = 5
|
||||
|
||||
/datum/symptom/New()
|
||||
var/list/S = list_symptoms
|
||||
var/list/S = SSdisease.list_symptoms
|
||||
for(var/i = 1; i <= S.len; i++)
|
||||
if(src.type == S[i])
|
||||
id = "[i]"
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
|
||||
/datum/disease/transformation/jungle_fever/do_disease_transformation(mob/living/carbon/affected_mob)
|
||||
if(!ismonkey(affected_mob))
|
||||
ticker.mode.add_monkey(affected_mob.mind)
|
||||
SSticker.mode.add_monkey(affected_mob.mind)
|
||||
affected_mob.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE)
|
||||
|
||||
/datum/disease/transformation/jungle_fever/stage_act()
|
||||
@@ -108,7 +108,7 @@
|
||||
affected_mob.say(pick("Eeek, ook ook!", "Eee-eeek!", "Eeee!", "Ungh, ungh."))
|
||||
|
||||
/datum/disease/transformation/jungle_fever/cure()
|
||||
ticker.mode.remove_monkey(affected_mob.mind)
|
||||
SSticker.mode.remove_monkey(affected_mob.mind)
|
||||
..()
|
||||
|
||||
|
||||
|
||||
+26
-26
@@ -41,15 +41,15 @@
|
||||
new_dna.mutations = mutations.Copy()
|
||||
|
||||
/datum/dna/proc/add_mutation(mutation_name)
|
||||
var/datum/mutation/human/HM = mutations_list[mutation_name]
|
||||
var/datum/mutation/human/HM = GLOB.mutations_list[mutation_name]
|
||||
HM.on_acquiring(holder)
|
||||
|
||||
/datum/dna/proc/remove_mutation(mutation_name)
|
||||
var/datum/mutation/human/HM = mutations_list[mutation_name]
|
||||
var/datum/mutation/human/HM = GLOB.mutations_list[mutation_name]
|
||||
HM.on_losing(holder)
|
||||
|
||||
/datum/dna/proc/check_mutation(mutation_name)
|
||||
var/datum/mutation/human/HM = mutations_list[mutation_name]
|
||||
var/datum/mutation/human/HM = GLOB.mutations_list[mutation_name]
|
||||
return mutations.Find(HM)
|
||||
|
||||
/datum/dna/proc/remove_all_mutations()
|
||||
@@ -68,28 +68,28 @@
|
||||
L[DNA_GENDER_BLOCK] = construct_block((holder.gender!=MALE)+1, 2)
|
||||
if(ishuman(holder))
|
||||
var/mob/living/carbon/human/H = holder
|
||||
if(!hair_styles_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/hair, hair_styles_list, hair_styles_male_list, hair_styles_female_list)
|
||||
L[DNA_HAIR_STYLE_BLOCK] = construct_block(hair_styles_list.Find(H.hair_style), hair_styles_list.len)
|
||||
if(!GLOB.hair_styles_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/hair,GLOB.hair_styles_list, GLOB.hair_styles_male_list, GLOB.hair_styles_female_list)
|
||||
L[DNA_HAIR_STYLE_BLOCK] = construct_block(GLOB.hair_styles_list.Find(H.hair_style), GLOB.hair_styles_list.len)
|
||||
L[DNA_HAIR_COLOR_BLOCK] = sanitize_hexcolor(H.hair_color)
|
||||
if(!facial_hair_styles_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/facial_hair, facial_hair_styles_list, facial_hair_styles_male_list, facial_hair_styles_female_list)
|
||||
L[DNA_FACIAL_HAIR_STYLE_BLOCK] = construct_block(facial_hair_styles_list.Find(H.facial_hair_style), facial_hair_styles_list.len)
|
||||
if(!GLOB.facial_hair_styles_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/facial_hair, GLOB.facial_hair_styles_list, GLOB.facial_hair_styles_male_list, GLOB.facial_hair_styles_female_list)
|
||||
L[DNA_FACIAL_HAIR_STYLE_BLOCK] = construct_block(GLOB.facial_hair_styles_list.Find(H.facial_hair_style), GLOB.facial_hair_styles_list.len)
|
||||
L[DNA_FACIAL_HAIR_COLOR_BLOCK] = sanitize_hexcolor(H.facial_hair_color)
|
||||
L[DNA_SKIN_TONE_BLOCK] = construct_block(skin_tones.Find(H.skin_tone), skin_tones.len)
|
||||
L[DNA_SKIN_TONE_BLOCK] = construct_block(GLOB.skin_tones.Find(H.skin_tone), GLOB.skin_tones.len)
|
||||
L[DNA_EYE_COLOR_BLOCK] = sanitize_hexcolor(H.eye_color)
|
||||
|
||||
for(var/i=1, i<=DNA_UNI_IDENTITY_BLOCKS, i++)
|
||||
if(L[i])
|
||||
. += L[i]
|
||||
else
|
||||
. += random_string(DNA_BLOCK_SIZE,hex_characters)
|
||||
. += random_string(DNA_BLOCK_SIZE,GLOB.hex_characters)
|
||||
return .
|
||||
|
||||
/datum/dna/proc/generate_struc_enzymes()
|
||||
var/list/sorting = new /list(DNA_STRUC_ENZYMES_BLOCKS)
|
||||
var/result = ""
|
||||
for(var/datum/mutation/human/A in good_mutations + bad_mutations + not_good_mutations)
|
||||
for(var/datum/mutation/human/A in GLOB.good_mutations + GLOB.bad_mutations + GLOB.not_good_mutations)
|
||||
if(A.name == RACEMUT && ismonkey(holder))
|
||||
sorting[A.dna_block] = num2hex(A.lowest_value + rand(0, 256 * 6), DNA_BLOCK_SIZE)
|
||||
mutations |= A
|
||||
@@ -106,7 +106,7 @@
|
||||
real_name = holder.real_name
|
||||
. += md5(holder.real_name)
|
||||
else
|
||||
. += random_string(DNA_UNIQUE_ENZYMES_LEN, hex_characters)
|
||||
. += random_string(DNA_UNIQUE_ENZYMES_LEN, GLOB.hex_characters)
|
||||
return .
|
||||
|
||||
/datum/dna/proc/update_ui_block(blocknumber)
|
||||
@@ -119,15 +119,15 @@
|
||||
if(DNA_FACIAL_HAIR_COLOR_BLOCK)
|
||||
setblock(uni_identity, blocknumber, sanitize_hexcolor(H.facial_hair_color))
|
||||
if(DNA_SKIN_TONE_BLOCK)
|
||||
setblock(uni_identity, blocknumber, construct_block(skin_tones.Find(H.skin_tone), skin_tones.len))
|
||||
setblock(uni_identity, blocknumber, construct_block(GLOB.skin_tones.Find(H.skin_tone), GLOB.skin_tones.len))
|
||||
if(DNA_EYE_COLOR_BLOCK)
|
||||
setblock(uni_identity, blocknumber, sanitize_hexcolor(H.eye_color))
|
||||
if(DNA_GENDER_BLOCK)
|
||||
setblock(uni_identity, blocknumber, construct_block((H.gender!=MALE)+1, 2))
|
||||
if(DNA_FACIAL_HAIR_STYLE_BLOCK)
|
||||
setblock(uni_identity, blocknumber, construct_block(facial_hair_styles_list.Find(H.facial_hair_style), facial_hair_styles_list.len))
|
||||
setblock(uni_identity, blocknumber, construct_block(GLOB.facial_hair_styles_list.Find(H.facial_hair_style), GLOB.facial_hair_styles_list.len))
|
||||
if(DNA_HAIR_STYLE_BLOCK)
|
||||
setblock(uni_identity, blocknumber, construct_block(hair_styles_list.Find(H.hair_style), hair_styles_list.len))
|
||||
setblock(uni_identity, blocknumber, construct_block(GLOB.hair_styles_list.Find(H.hair_style), GLOB.hair_styles_list.len))
|
||||
|
||||
/datum/dna/proc/mutations_say_mods(message)
|
||||
if(message)
|
||||
@@ -274,10 +274,10 @@
|
||||
var/structure = dna.uni_identity
|
||||
hair_color = sanitize_hexcolor(getblock(structure, DNA_HAIR_COLOR_BLOCK))
|
||||
facial_hair_color = sanitize_hexcolor(getblock(structure, DNA_FACIAL_HAIR_COLOR_BLOCK))
|
||||
skin_tone = skin_tones[deconstruct_block(getblock(structure, DNA_SKIN_TONE_BLOCK), skin_tones.len)]
|
||||
skin_tone = GLOB.skin_tones[deconstruct_block(getblock(structure, DNA_SKIN_TONE_BLOCK), GLOB.skin_tones.len)]
|
||||
eye_color = sanitize_hexcolor(getblock(structure, DNA_EYE_COLOR_BLOCK))
|
||||
facial_hair_style = facial_hair_styles_list[deconstruct_block(getblock(structure, DNA_FACIAL_HAIR_STYLE_BLOCK), facial_hair_styles_list.len)]
|
||||
hair_style = hair_styles_list[deconstruct_block(getblock(structure, DNA_HAIR_STYLE_BLOCK), hair_styles_list.len)]
|
||||
facial_hair_style = GLOB.facial_hair_styles_list[deconstruct_block(getblock(structure, DNA_FACIAL_HAIR_STYLE_BLOCK), GLOB.facial_hair_styles_list.len)]
|
||||
hair_style = GLOB.hair_styles_list[deconstruct_block(getblock(structure, DNA_HAIR_STYLE_BLOCK), GLOB.hair_styles_list.len)]
|
||||
if(icon_update)
|
||||
update_body()
|
||||
update_hair()
|
||||
@@ -294,7 +294,7 @@
|
||||
if(!has_dna())
|
||||
return
|
||||
|
||||
for(var/datum/mutation/human/A in good_mutations | bad_mutations | not_good_mutations)
|
||||
for(var/datum/mutation/human/A in GLOB.good_mutations | GLOB.bad_mutations | GLOB.not_good_mutations)
|
||||
if(ismob(A.check_block(src, force_powers)))
|
||||
return //we got monkeyized/humanized, this mob will be deleted, no need to continue.
|
||||
|
||||
@@ -328,26 +328,26 @@
|
||||
/mob/living/carbon/proc/randmutb()
|
||||
if(!has_dna())
|
||||
return
|
||||
var/datum/mutation/human/HM = pick((bad_mutations | not_good_mutations) - mutations_list[RACEMUT])
|
||||
var/datum/mutation/human/HM = pick((GLOB.bad_mutations | GLOB.not_good_mutations) - GLOB.mutations_list[RACEMUT])
|
||||
. = HM.force_give(src)
|
||||
|
||||
/mob/living/carbon/proc/randmutg()
|
||||
if(!has_dna())
|
||||
return
|
||||
var/datum/mutation/human/HM = pick(good_mutations)
|
||||
var/datum/mutation/human/HM = pick(GLOB.good_mutations)
|
||||
. = HM.force_give(src)
|
||||
|
||||
/mob/living/carbon/proc/randmutvg()
|
||||
if(!has_dna())
|
||||
return
|
||||
var/datum/mutation/human/HM = pick((good_mutations) - mutations_list[HULK] - mutations_list[DWARFISM])
|
||||
var/datum/mutation/human/HM = pick((GLOB.good_mutations) - GLOB.mutations_list[HULK] - GLOB.mutations_list[DWARFISM])
|
||||
. = HM.force_give(src)
|
||||
|
||||
/mob/living/carbon/proc/randmuti()
|
||||
if(!has_dna())
|
||||
return
|
||||
var/num = rand(1, DNA_UNI_IDENTITY_BLOCKS)
|
||||
var/newdna = setblock(dna.uni_identity, num, random_string(DNA_BLOCK_SIZE, hex_characters))
|
||||
var/newdna = setblock(dna.uni_identity, num, random_string(DNA_BLOCK_SIZE, GLOB.hex_characters))
|
||||
dna.uni_identity = newdna
|
||||
updateappearance(mutations_overlay_update=1)
|
||||
|
||||
@@ -366,12 +366,12 @@
|
||||
if(se)
|
||||
for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++)
|
||||
if(prob(probability))
|
||||
M.dna.struc_enzymes = setblock(M.dna.struc_enzymes, i, random_string(DNA_BLOCK_SIZE, hex_characters))
|
||||
M.dna.struc_enzymes = setblock(M.dna.struc_enzymes, i, random_string(DNA_BLOCK_SIZE, GLOB.hex_characters))
|
||||
M.domutcheck()
|
||||
if(ui)
|
||||
for(var/i=1, i<=DNA_UNI_IDENTITY_BLOCKS, i++)
|
||||
if(prob(probability))
|
||||
M.dna.uni_identity = setblock(M.dna.uni_identity, i, random_string(DNA_BLOCK_SIZE, hex_characters))
|
||||
M.dna.uni_identity = setblock(M.dna.uni_identity, i, random_string(DNA_BLOCK_SIZE, GLOB.hex_characters))
|
||||
M.updateappearance(mutations_overlay_update=1)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
#define EMOTE_VISIBLE 1
|
||||
#define EMOTE_AUDIBLE 2
|
||||
|
||||
var/global/list/emote_list = list()
|
||||
|
||||
/datum/emote
|
||||
var/key = "" //What calls the emote
|
||||
var/key_third_person = "" //This will also call the emote
|
||||
@@ -21,6 +19,7 @@ var/global/list/emote_list = list()
|
||||
var/list/mob_type_allowed_typecache = list() //Types that are allowed to use that emote
|
||||
var/list/mob_type_blacklist_typecache = list() //Types that are NOT allowed to use that emote
|
||||
var/stat_allowed = CONSCIOUS
|
||||
var/static/list/emote_list = list()
|
||||
|
||||
/datum/emote/New()
|
||||
..()
|
||||
@@ -53,7 +52,7 @@ var/global/list/emote_list = list()
|
||||
user.log_message(msg, INDIVIDUAL_EMOTE_LOG)
|
||||
msg = "<b>[user]</b> " + msg
|
||||
|
||||
for(var/mob/M in dead_mob_list)
|
||||
for(var/mob/M in GLOB.dead_mob_list)
|
||||
if(!M.client || isnewplayer(M))
|
||||
continue
|
||||
var/T = get_turf(src)
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
/datum/proc/freon_gas_act()
|
||||
return 0
|
||||
|
||||
/datum/proc/water_vapor_gas_act() // We get it
|
||||
return 0 // You vape
|
||||
@@ -1,5 +1,3 @@
|
||||
var/global/datum/getrev/revdata = new()
|
||||
|
||||
/datum/getrev
|
||||
var/parentcommit
|
||||
var/commit
|
||||
@@ -46,7 +44,7 @@ var/global/datum/getrev/revdata = new()
|
||||
return
|
||||
|
||||
var/url = "https://api.github.com/repositories/[config.githubrepoid]/pulls/[line].json"
|
||||
valid_HTTPSGet = TRUE
|
||||
GLOB.valid_HTTPSGet = TRUE
|
||||
var/json = HTTPSGet(url)
|
||||
if(!json)
|
||||
return
|
||||
@@ -75,12 +73,12 @@ var/global/datum/getrev/revdata = new()
|
||||
set name = "Show Server Revision"
|
||||
set desc = "Check the current server code revision"
|
||||
|
||||
if(revdata.parentcommit)
|
||||
to_chat(src, "<b>Server revision compiled on:</b> [revdata.date]")
|
||||
if(revdata.testmerge.len)
|
||||
to_chat(src, revdata.GetTestMergeInfo())
|
||||
if(GLOB.revdata.parentcommit)
|
||||
to_chat(src, "<b>Server revision compiled on:</b> [GLOB.revdata.date]")
|
||||
if(GLOB.revdata.testmerge.len)
|
||||
to_chat(src, GLOB.revdata.GetTestMergeInfo())
|
||||
to_chat(src, "Based off master commit:")
|
||||
to_chat(src, "<a href='[config.githuburl]/commit/[revdata.parentcommit]'>[revdata.parentcommit]</a>")
|
||||
to_chat(src, "<a href='[config.githuburl]/commit/[GLOB.revdata.parentcommit]'>[GLOB.revdata.parentcommit]</a>")
|
||||
else
|
||||
to_chat(src, "Revision unknown")
|
||||
to_chat(src, "<b>Current Infomational Settings:</b>")
|
||||
@@ -91,7 +89,7 @@ var/global/datum/getrev/revdata = new()
|
||||
to_chat(src, "Enforce Continuous Rounds: [config.continuous.len] of [config.modes.len] roundtypes")
|
||||
to_chat(src, "Allow Midround Antagonists: [config.midround_antag.len] of [config.modes.len] roundtypes")
|
||||
if(config.show_game_type_odds)
|
||||
if(ticker.current_state == GAME_STATE_PLAYING)
|
||||
if(SSticker.current_state == GAME_STATE_PLAYING)
|
||||
var/prob_sum = 0
|
||||
var/current_odds_differ = FALSE
|
||||
var/list/probs = list()
|
||||
@@ -101,7 +99,7 @@ var/global/datum/getrev/revdata = new()
|
||||
var/ctag = initial(M.config_tag)
|
||||
if(!(ctag in config.probabilities))
|
||||
continue
|
||||
if((config.min_pop[ctag] && (config.min_pop[ctag] > ticker.totalPlayersReady)) || (config.max_pop[ctag] && (config.max_pop[ctag] < ticker.totalPlayersReady)) || (initial(M.required_players) > ticker.totalPlayersReady))
|
||||
if((config.min_pop[ctag] && (config.min_pop[ctag] > SSticker.totalPlayersReady)) || (config.max_pop[ctag] && (config.max_pop[ctag] < SSticker.totalPlayersReady)) || (initial(M.required_players) > SSticker.totalPlayersReady))
|
||||
current_odds_differ = TRUE
|
||||
continue
|
||||
probs[ctag] = 1
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
var/list/A_gases = A.gases
|
||||
var/trace_gases
|
||||
for(var/id in A_gases)
|
||||
if(id in hardcoded_gases)
|
||||
if(id in GLOB.hardcoded_gases)
|
||||
continue
|
||||
trace_gases = TRUE
|
||||
break
|
||||
|
||||
+23
-23
@@ -1,26 +1,26 @@
|
||||
/* HUD DATUMS */
|
||||
|
||||
//GLOBAL HUD LIST
|
||||
var/datum/atom_hud/huds = list( \
|
||||
DATA_HUD_SECURITY_BASIC = new/datum/atom_hud/data/human/security/basic(), \
|
||||
DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/human/security/advanced(), \
|
||||
DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(), \
|
||||
DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(), \
|
||||
DATA_HUD_DIAGNOSTIC = new/datum/atom_hud/data/diagnostic(), \
|
||||
ANTAG_HUD_CULT = new/datum/atom_hud/antag(), \
|
||||
ANTAG_HUD_REV = new/datum/atom_hud/antag(), \
|
||||
ANTAG_HUD_OPS = new/datum/atom_hud/antag(), \
|
||||
ANTAG_HUD_WIZ = new/datum/atom_hud/antag(), \
|
||||
ANTAG_HUD_SHADOW = new/datum/atom_hud/antag(), \
|
||||
ANTAG_HUD_TRAITOR = new/datum/atom_hud/antag/hidden(),\
|
||||
ANTAG_HUD_NINJA = new/datum/atom_hud/antag/hidden(),\
|
||||
ANTAG_HUD_CHANGELING = new/datum/atom_hud/antag/hidden(),\
|
||||
ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(),\
|
||||
ANTAG_HUD_DEVIL = new/datum/atom_hud/antag(),\
|
||||
ANTAG_HUD_SINTOUCHED = new/datum/atom_hud/antag/hidden(),\
|
||||
ANTAG_HUD_SOULLESS = new/datum/atom_hud/antag/hidden(),\
|
||||
ANTAG_HUD_CLOCKWORK = new/datum/atom_hud/antag(),\
|
||||
)
|
||||
GLOBAL_LIST_INIT(huds, list(
|
||||
DATA_HUD_SECURITY_BASIC = new/datum/atom_hud/data/human/security/basic(),
|
||||
DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/human/security/advanced(),
|
||||
DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(),
|
||||
DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(),
|
||||
DATA_HUD_DIAGNOSTIC = new/datum/atom_hud/data/diagnostic(),
|
||||
ANTAG_HUD_CULT = new/datum/atom_hud/antag(),
|
||||
ANTAG_HUD_REV = new/datum/atom_hud/antag(),
|
||||
ANTAG_HUD_OPS = new/datum/atom_hud/antag(),
|
||||
ANTAG_HUD_WIZ = new/datum/atom_hud/antag(),
|
||||
ANTAG_HUD_SHADOW = new/datum/atom_hud/antag(),
|
||||
ANTAG_HUD_TRAITOR = new/datum/atom_hud/antag/hidden(),
|
||||
ANTAG_HUD_NINJA = new/datum/atom_hud/antag/hidden(),
|
||||
ANTAG_HUD_CHANGELING = new/datum/atom_hud/antag/hidden(),
|
||||
ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(),
|
||||
ANTAG_HUD_DEVIL = new/datum/atom_hud/antag(),
|
||||
ANTAG_HUD_SINTOUCHED = new/datum/atom_hud/antag/hidden(),
|
||||
ANTAG_HUD_SOULLESS = new/datum/atom_hud/antag/hidden(),
|
||||
ANTAG_HUD_CLOCKWORK = new/datum/atom_hud/antag(),
|
||||
))
|
||||
|
||||
/datum/atom_hud
|
||||
var/list/atom/hudatoms = list() //list of all atoms which display this hud
|
||||
@@ -73,11 +73,11 @@ var/datum/atom_hud/huds = list( \
|
||||
//MOB PROCS
|
||||
/mob/proc/reload_huds()
|
||||
var/gang_huds = list()
|
||||
if(ticker.mode)
|
||||
for(var/datum/gang/G in ticker.mode.gangs)
|
||||
if(SSticker.mode)
|
||||
for(var/datum/gang/G in SSticker.mode.gangs)
|
||||
gang_huds += G.ganghud
|
||||
|
||||
for(var/datum/atom_hud/hud in (huds|gang_huds))
|
||||
for(var/datum/atom_hud/hud in (GLOB.huds|gang_huds))
|
||||
if(src in hud.hudusers)
|
||||
hud.add_hud_to(src)
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
|
||||
defaulted = FALSE
|
||||
|
||||
#define CHECK_EXISTS(X) if(!istext(json[X])) log_world(X + "missing from json!")
|
||||
#define CHECK_EXISTS(X) if(!istext(json[X])) { log_world(X + "missing from json!"); return; }
|
||||
/datum/map_config/proc/ValidateJSON(list/json)
|
||||
CHECK_EXISTS("map_name")
|
||||
CHECK_EXISTS("map_path")
|
||||
@@ -141,6 +141,3 @@
|
||||
|
||||
/datum/map_config/proc/MakeNextMap()
|
||||
return config_filename == "data/next_map.json" || fcopy(config_filename, "data/next_map.json")
|
||||
|
||||
/datum/map_config/proc/MakePreviousMap()
|
||||
return config_filename == "data/previous_map.json" || fcopy(config_filename, "data/previous_map.json")
|
||||
+12
-13
@@ -71,9 +71,9 @@
|
||||
D.visible_message("<span class='danger'>[A] has weakened [D]!!</span>", \
|
||||
"<span class='userdanger'>[A] has weakened [D]!</span>")
|
||||
D.apply_effect(4, WEAKEN, armor_block)
|
||||
D.forcesay(hit_appends)
|
||||
D.forcesay(GLOB.hit_appends)
|
||||
else if(D.lying)
|
||||
D.forcesay(hit_appends)
|
||||
D.forcesay(GLOB.hit_appends)
|
||||
return 1
|
||||
|
||||
/datum/martial_art/proc/teach(mob/living/carbon/human/H,make_temporary=0)
|
||||
@@ -137,10 +137,10 @@
|
||||
"<span class='userdanger'>[A] has knocked [D] out with a haymaker!</span>")
|
||||
D.apply_effect(10,WEAKEN,armor_block)
|
||||
D.SetSleeping(5)
|
||||
D.forcesay(hit_appends)
|
||||
D.forcesay(GLOB.hit_appends)
|
||||
add_logs(A, D, "knocked out (boxing) ")
|
||||
else if(D.lying)
|
||||
D.forcesay(hit_appends)
|
||||
D.forcesay(GLOB.hit_appends)
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/wrestling_help()
|
||||
@@ -459,7 +459,7 @@
|
||||
D.throw_at(throw_target, 1, 14, A)
|
||||
D.apply_damage(10, BRUTE)
|
||||
add_logs(A, D, "cqc kicked")
|
||||
if(D.weakened && D.stat != DEAD)
|
||||
if(D.weakened && !D.stat)
|
||||
D.visible_message("<span class='warning'>[A] kicks [D]'s head, knocking them out!</span>", \
|
||||
"<span class='userdanger'>[A] kicks your head, knocking you out!</span>")
|
||||
playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1)
|
||||
@@ -491,8 +491,7 @@
|
||||
"<span class='userdanger'>[A] strikes your abdomen, neck and back consecutively!</span>")
|
||||
playsound(get_turf(D), 'sound/weapons/cqchit2.ogg', 50, 1, -1)
|
||||
var/obj/item/I = D.get_active_held_item()
|
||||
if(I)
|
||||
D.drop_item()
|
||||
if(I && D.drop_item())
|
||||
A.put_in_hands(I)
|
||||
D.adjustStaminaLoss(50)
|
||||
D.apply_damage(25, BRUTE)
|
||||
@@ -543,16 +542,16 @@
|
||||
|
||||
/datum/martial_art/cqc/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
add_to_streak("D",D)
|
||||
var/obj/item/I = null
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
if(prob(65))
|
||||
if(!D.stat || !D.weakened || !restraining)
|
||||
var/obj/item/I = D.get_active_held_item()
|
||||
I = D.get_active_held_item()
|
||||
D.visible_message("<span class='warning'>[A] strikes [D]'s jaw with their hand!</span>", \
|
||||
"<span class='userdanger'>[A] strikes your jaw, disorienting you!</span>")
|
||||
playsound(get_turf(D), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
|
||||
if(I)
|
||||
D.drop_item()
|
||||
if(I && D.drop_item())
|
||||
A.put_in_hands(I)
|
||||
D.Jitter(2)
|
||||
D.apply_damage(5, BRUTE)
|
||||
@@ -560,7 +559,7 @@
|
||||
D.visible_message("<span class='danger'>[A] attempted to disarm [D]!</span>", \
|
||||
"<span class='userdanger'>[A] attempted to disarm [D]!</span>")
|
||||
playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
|
||||
add_logs(A, D, "disarmed with CQC")
|
||||
add_logs(A, D, "disarmed with CQC", "[I ? " grabbing \the [I]" : ""]")
|
||||
if(restraining && A.pulling == D)
|
||||
D.visible_message("<span class='danger'>[A] puts [D] into a chokehold!</span>", \
|
||||
"<span class='userdanger'>[A] puts you into a chokehold!</span>")
|
||||
@@ -574,7 +573,7 @@
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/CQC_help()
|
||||
set name = "Recall Teachings"
|
||||
set name = "Remember The Basics"
|
||||
set desc = "You try to remember some of the basics of CQC."
|
||||
set category = "CQC"
|
||||
|
||||
@@ -584,7 +583,7 @@
|
||||
to_chat(usr, "<span class='notice'>CQC Kick</span>: Harm Disarm Harm. Knocks opponent away. Knocks out stunned or weakened opponents.")
|
||||
to_chat(usr, "<span class='notice'>Restrain</span>: Grab Grab. Locks opponents into a restraining position, disarm to knock them out with a choke hold.")
|
||||
to_chat(usr, "<span class='notice'>Pressure</span>: Disarm Grab. Decent stamina damage.")
|
||||
to_chat(usr, "<span class='notice'>Consecutive CQC</span>: Harm Harm Disarm. Mainly offensive move, huge damage and decent stamina damage.")
|
||||
to_chat(usr, "<span class='notice'>Consecutive CQC</span>: Disarm Disarm Harm. Mainly offensive move, huge damage and decent stamina damage.")
|
||||
|
||||
to_chat(usr, "<b><i>In addition, by having your throw mode on when being attacked, you enter an active defense mode where you have a chance to block and sometimes even counter attacks done to you.</i></b>")
|
||||
|
||||
|
||||
@@ -132,8 +132,9 @@
|
||||
/datum/martial_art/krav_maga/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
|
||||
if(check_streak(A,D))
|
||||
return 1
|
||||
var/obj/item/I = null
|
||||
if(prob(60))
|
||||
var/obj/item/I = D.get_active_held_item()
|
||||
I = D.get_active_held_item()
|
||||
if(I)
|
||||
if(D.drop_item())
|
||||
A.put_in_hands(I)
|
||||
@@ -144,7 +145,7 @@
|
||||
D.visible_message("<span class='danger'>[A] attempted to disarm [D]!</span>", \
|
||||
"<span class='userdanger'>[A] attempted to disarm [D]!</span>")
|
||||
playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
|
||||
add_logs(A, D, "disarmed with krav maga")
|
||||
add_logs(A, D, "disarmed with krav maga", "[I ? " removing \the [I]" : ""]")
|
||||
return 1
|
||||
|
||||
//Krav Maga Gloves
|
||||
|
||||
@@ -186,6 +186,14 @@
|
||||
add_logs(A, D, "has thrown with wrestling")
|
||||
return 0
|
||||
|
||||
/datum/martial_art/wrestling/proc/FlipAnimation(mob/living/carbon/human/D)
|
||||
set waitfor = FALSE
|
||||
if (D)
|
||||
animate(D, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0)
|
||||
sleep (15)
|
||||
if (D)
|
||||
animate(D, transform = null, time = 1, loop = 0)
|
||||
|
||||
/datum/martial_art/wrestling/proc/slam(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
if(!D)
|
||||
return
|
||||
@@ -198,12 +206,7 @@
|
||||
|
||||
A.visible_message("<span class = 'danger'><B>[A] lifts [D] up!</B></span>")
|
||||
|
||||
spawn (0)
|
||||
if (D)
|
||||
animate(D, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0)
|
||||
sleep (15)
|
||||
if (D)
|
||||
animate(D, transform = null, time = 1, loop = 0)
|
||||
FlipAnimation()
|
||||
|
||||
for (var/i = 0, i < 3, i++)
|
||||
if (A && D)
|
||||
@@ -300,6 +303,10 @@
|
||||
add_logs(A, D, "body-slammed")
|
||||
return 0
|
||||
|
||||
/datum/martial_art/wrestling/proc/CheckStrikeTurf(mob/living/carbon/human/A, turf/T)
|
||||
if (A && (T && isturf(T) && get_dist(A, T) <= 1))
|
||||
A.forceMove(T)
|
||||
|
||||
/datum/martial_art/wrestling/proc/strike(mob/living/carbon/human/A, mob/living/carbon/human/D)
|
||||
if(!D)
|
||||
return
|
||||
@@ -309,9 +316,7 @@
|
||||
A.setDir(turn(A.dir, 90))
|
||||
|
||||
A.forceMove(D.loc)
|
||||
spawn (4)
|
||||
if (A && (T && isturf(T) && get_dist(A, T) <= 1))
|
||||
A.forceMove(T)
|
||||
addtimer(CALLBACK(src, .proc/CheckStrikeTurf, A, T), 4)
|
||||
|
||||
A.visible_message("<span class = 'danger'><b>[A] headbutts [D]!</b></span>")
|
||||
D.adjustBruteLoss(rand(10,20))
|
||||
|
||||
+190
-191
@@ -69,7 +69,7 @@
|
||||
soulOwner = src
|
||||
|
||||
/datum/mind/Destroy()
|
||||
ticker.minds -= src
|
||||
SSticker.minds -= src
|
||||
return ..()
|
||||
|
||||
/datum/mind/proc/transfer_to(mob/new_character, var/force_key_move = 0)
|
||||
@@ -121,19 +121,19 @@
|
||||
qdel(O)
|
||||
|
||||
/datum/mind/proc/remove_changeling()
|
||||
if(src in ticker.mode.changelings)
|
||||
ticker.mode.changelings -= src
|
||||
if(src in SSticker.mode.changelings)
|
||||
SSticker.mode.changelings -= src
|
||||
current.remove_changeling_powers()
|
||||
if(changeling)
|
||||
qdel(changeling)
|
||||
changeling = null
|
||||
special_role = null
|
||||
remove_antag_equip()
|
||||
ticker.mode.update_changeling_icons_removed(src)
|
||||
SSticker.mode.update_changeling_icons_removed(src)
|
||||
|
||||
/datum/mind/proc/remove_traitor()
|
||||
if(src in ticker.mode.traitors)
|
||||
ticker.mode.traitors -= src
|
||||
if(src in SSticker.mode.traitors)
|
||||
SSticker.mode.traitors -= src
|
||||
if(isAI(current))
|
||||
var/mob/living/silicon/ai/A = current
|
||||
A.set_zeroth_law("")
|
||||
@@ -142,44 +142,44 @@
|
||||
qdel(A.malf_picker)
|
||||
special_role = null
|
||||
remove_antag_equip()
|
||||
ticker.mode.update_traitor_icons_removed(src)
|
||||
SSticker.mode.update_traitor_icons_removed(src)
|
||||
|
||||
/datum/mind/proc/remove_nukeop()
|
||||
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
|
||||
remove_objectives()
|
||||
remove_antag_equip()
|
||||
|
||||
/datum/mind/proc/remove_wizard()
|
||||
if(src in ticker.mode.wizards)
|
||||
ticker.mode.wizards -= src
|
||||
if(src in SSticker.mode.wizards)
|
||||
SSticker.mode.wizards -= src
|
||||
current.spellremove(current)
|
||||
special_role = null
|
||||
remove_antag_equip()
|
||||
|
||||
/datum/mind/proc/remove_cultist()
|
||||
if(src in ticker.mode.cult)
|
||||
ticker.mode.remove_cultist(src, 0, 0)
|
||||
if(src in SSticker.mode.cult)
|
||||
SSticker.mode.remove_cultist(src, 0, 0)
|
||||
special_role = null
|
||||
remove_objectives()
|
||||
remove_antag_equip()
|
||||
|
||||
/datum/mind/proc/remove_rev()
|
||||
if(src in ticker.mode.revolutionaries)
|
||||
ticker.mode.revolutionaries -= src
|
||||
ticker.mode.update_rev_icons_removed(src)
|
||||
if(src in ticker.mode.head_revolutionaries)
|
||||
ticker.mode.head_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)
|
||||
if(src in SSticker.mode.head_revolutionaries)
|
||||
SSticker.mode.head_revolutionaries -= src
|
||||
SSticker.mode.update_rev_icons_removed(src)
|
||||
special_role = null
|
||||
remove_objectives()
|
||||
remove_antag_equip()
|
||||
|
||||
|
||||
/datum/mind/proc/remove_gang()
|
||||
ticker.mode.remove_gangster(src,0,1,1)
|
||||
SSticker.mode.remove_gangster(src,0,1,1)
|
||||
remove_objectives()
|
||||
|
||||
/datum/mind/proc/remove_antag_equip()
|
||||
@@ -201,11 +201,11 @@
|
||||
remove_cultist()
|
||||
remove_rev()
|
||||
remove_gang()
|
||||
ticker.mode.update_changeling_icons_removed(src)
|
||||
ticker.mode.update_traitor_icons_removed(src)
|
||||
ticker.mode.update_wiz_icons_removed(src)
|
||||
ticker.mode.update_cult_icons_removed(src)
|
||||
ticker.mode.update_rev_icons_removed(src)
|
||||
SSticker.mode.update_changeling_icons_removed(src)
|
||||
SSticker.mode.update_traitor_icons_removed(src)
|
||||
SSticker.mode.update_wiz_icons_removed(src)
|
||||
SSticker.mode.update_cult_icons_removed(src)
|
||||
SSticker.mode.update_rev_icons_removed(src)
|
||||
if(gang_datum)
|
||||
gang_datum.remove_gang_hud(src)
|
||||
|
||||
@@ -214,13 +214,13 @@
|
||||
|
||||
/datum/mind/proc/enslave_mind_to_creator(mob/living/creator)
|
||||
if(iscultist(creator))
|
||||
ticker.mode.add_cultist(src)
|
||||
SSticker.mode.add_cultist(src)
|
||||
|
||||
else if(is_gangster(creator))
|
||||
ticker.mode.add_gangster(src, creator.mind.gang_datum, TRUE)
|
||||
SSticker.mode.add_gangster(src, creator.mind.gang_datum, TRUE)
|
||||
|
||||
else if(is_revolutionary_in_general(creator))
|
||||
ticker.mode.add_revolutionary(src)
|
||||
SSticker.mode.add_revolutionary(src)
|
||||
|
||||
else if(is_servant_of_ratvar(creator))
|
||||
add_servant_of_ratvar(current)
|
||||
@@ -255,7 +255,7 @@
|
||||
to_chat(recipient, "<i>[output]</i>")
|
||||
|
||||
/datum/mind/proc/edit_memory()
|
||||
if(!ticker || !ticker.mode)
|
||||
if(!SSticker || !SSticker.mode)
|
||||
alert("Not before round-start!", "Alert")
|
||||
return
|
||||
|
||||
@@ -280,12 +280,12 @@
|
||||
if(ishuman(current))
|
||||
/** REVOLUTION ***/
|
||||
text = "revolution"
|
||||
if (ticker.mode.config_tag=="revolution")
|
||||
if (SSticker.mode.config_tag=="revolution")
|
||||
text = uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if (assigned_role in command_positions)
|
||||
if (assigned_role in GLOB.command_positions)
|
||||
text += "<b>HEAD</b>|loyal|employee|headrev|rev"
|
||||
else if (src in ticker.mode.head_revolutionaries)
|
||||
else if (src in SSticker.mode.head_revolutionaries)
|
||||
text += "head|loyal|<a href='?src=\ref[src];revolution=clear'>employee</a>|<b>HEADREV</b>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
|
||||
text += "<br>Flash: <a href='?src=\ref[src];revolution=flash'>give</a>"
|
||||
|
||||
@@ -304,7 +304,7 @@
|
||||
text += "<br>Objectives are empty! <a href='?src=\ref[src];revolution=autoobjectives'>Set to kill all heads</a>."
|
||||
else if(current.isloyal())
|
||||
text += "head|<b>LOYAL</b>|employee|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|rev"
|
||||
else if (src in ticker.mode.revolutionaries)
|
||||
else if (src in SSticker.mode.revolutionaries)
|
||||
text += "head|loyal|<a href='?src=\ref[src];revolution=clear'>employee</a>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<b>REV</b>"
|
||||
else
|
||||
text += "head|loyal|<b>EMPLOYEE</b>|<a href='?src=\ref[src];revolution=headrev'>headrev</a>|<a href='?src=\ref[src];revolution=rev'>rev</a>"
|
||||
@@ -318,11 +318,11 @@
|
||||
|
||||
/** GANG ***/
|
||||
text = "gang"
|
||||
if (ticker.mode.config_tag=="gang")
|
||||
if (SSticker.mode.config_tag=="gang")
|
||||
text = uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
text += "[current.isloyal() ? "<B>LOYAL</B>" : "loyal"]|"
|
||||
if(src in ticker.mode.get_all_gangsters())
|
||||
if(src in SSticker.mode.get_all_gangsters())
|
||||
text += "<a href='?src=\ref[src];gang=clear'>none</a>"
|
||||
else
|
||||
text += "<B>NONE</B>"
|
||||
@@ -332,7 +332,7 @@
|
||||
else
|
||||
text += "|Disabled in Prefs<BR>"
|
||||
|
||||
for(var/datum/gang/G in ticker.mode.gangs)
|
||||
for(var/datum/gang/G in SSticker.mode.gangs)
|
||||
text += "<i>[G.name]</i>: "
|
||||
if(src in (G.gangsters))
|
||||
text += "<B>GANGSTER</B>"
|
||||
@@ -351,17 +351,17 @@
|
||||
text += "<a href='?src=\ref[src];gangboss=\ref[G]'>gang leader</a>"
|
||||
text += "<BR>"
|
||||
|
||||
if(gang_colors_pool.len)
|
||||
if(GLOB.gang_colors_pool.len)
|
||||
text += "<a href='?src=\ref[src];gang=new'>Create New Gang</a>"
|
||||
|
||||
sections["gang"] = text
|
||||
|
||||
/** Abductors **/
|
||||
text = "Abductor"
|
||||
if(ticker.mode.config_tag == "abductor")
|
||||
if(SSticker.mode.config_tag == "abductor")
|
||||
text = uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if(src in ticker.mode.abductors)
|
||||
if(src in SSticker.mode.abductors)
|
||||
text += "<b>Abductor</b>|<a href='?src=\ref[src];abductor=clear'>human</a>"
|
||||
text += "|<a href='?src=\ref[src];common=undress'>undress</a>|<a href='?src=\ref[src];abductor=equip'>equip</a>"
|
||||
else
|
||||
@@ -376,14 +376,14 @@
|
||||
|
||||
/** NUCLEAR ***/
|
||||
text = "nuclear"
|
||||
if (ticker.mode.config_tag=="nuclear")
|
||||
if (SSticker.mode.config_tag=="nuclear")
|
||||
text = uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if (src in ticker.mode.syndicates)
|
||||
if (src in SSticker.mode.syndicates)
|
||||
text += "<b>OPERATIVE</b>|<a href='?src=\ref[src];nuclear=clear'>nanotrasen</a>"
|
||||
text += "<br><a href='?src=\ref[src];nuclear=lair'>To shuttle</a>, <a href='?src=\ref[src];common=undress'>undress</a>, <a href='?src=\ref[src];nuclear=dressup'>dress up</a>."
|
||||
var/code
|
||||
for (var/obj/machinery/nuclearbomb/bombue in machines)
|
||||
for (var/obj/machinery/nuclearbomb/bombue in GLOB.machines)
|
||||
if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN")
|
||||
code = bombue.r_code
|
||||
break
|
||||
@@ -401,10 +401,10 @@
|
||||
|
||||
/** WIZARD ***/
|
||||
text = "wizard"
|
||||
if (ticker.mode.config_tag=="wizard")
|
||||
if (SSticker.mode.config_tag=="wizard")
|
||||
text = uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if ((src in ticker.mode.wizards) || (src in ticker.mode.apprentices))
|
||||
if ((src in SSticker.mode.wizards) || (src in SSticker.mode.apprentices))
|
||||
text += "<b>YES</b>|<a href='?src=\ref[src];wizard=clear'>no</a>"
|
||||
text += "<br><a href='?src=\ref[src];wizard=lair'>To lair</a>, <a href='?src=\ref[src];common=undress'>undress</a>, <a href='?src=\ref[src];wizard=dressup'>dress up</a>, <a href='?src=\ref[src];wizard=name'>let choose name</a>."
|
||||
if (objectives.len==0)
|
||||
@@ -421,7 +421,7 @@
|
||||
|
||||
/** CULT ***/
|
||||
text = "cult"
|
||||
if (ticker.mode.config_tag=="cult")
|
||||
if (SSticker.mode.config_tag=="cult")
|
||||
text = uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if(iscultist(current))
|
||||
@@ -444,7 +444,7 @@
|
||||
|
||||
/** CLOCKWORK CULT **/
|
||||
text = "clockwork cult"
|
||||
if(ticker.mode.config_tag == "clockwork cult")
|
||||
if(SSticker.mode.config_tag == "clockwork cult")
|
||||
text = uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if(is_servant_of_ratvar(current))
|
||||
@@ -466,10 +466,10 @@
|
||||
|
||||
/** TRAITOR ***/
|
||||
text = "traitor"
|
||||
if (ticker.mode.config_tag=="traitor" || ticker.mode.config_tag=="traitorchan")
|
||||
if (SSticker.mode.config_tag=="traitor" || SSticker.mode.config_tag=="traitorchan")
|
||||
text = uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if (src in ticker.mode.traitors)
|
||||
if (src in SSticker.mode.traitors)
|
||||
text += "<b>TRAITOR</b>|<a href='?src=\ref[src];traitor=clear'>loyal</a>"
|
||||
if (objectives.len==0)
|
||||
text += "<br>Objectives are empty! <a href='?src=\ref[src];traitor=autoobjectives'>Randomize</a>!"
|
||||
@@ -487,16 +487,16 @@
|
||||
|
||||
/** CHANGELING ***/
|
||||
text = "changeling"
|
||||
if (ticker.mode.config_tag=="changeling" || ticker.mode.config_tag=="traitorchan")
|
||||
if (SSticker.mode.config_tag=="changeling" || SSticker.mode.config_tag=="traitorchan")
|
||||
text = uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if ((src in ticker.mode.changelings) && special_role)
|
||||
if ((src in SSticker.mode.changelings) && special_role)
|
||||
text += "<b>YES</b>|<a href='?src=\ref[src];changeling=clear'>no</a>"
|
||||
if (objectives.len==0)
|
||||
text += "<br>Objectives are empty! <a href='?src=\ref[src];changeling=autoobjectives'>Randomize!</a>"
|
||||
if(changeling && changeling.stored_profiles.len && (current.real_name != changeling.first_prof.name) )
|
||||
text += "<br><a href='?src=\ref[src];changeling=initialdna'>Transform to initial appearance.</a>"
|
||||
else if(src in ticker.mode.changelings) //Station Aligned Changeling
|
||||
else if(src in SSticker.mode.changelings) //Station Aligned Changeling
|
||||
text += "<b>YES (but not an antag)</b>|<a href='?src=\ref[src];changeling=clear'>no</a>"
|
||||
if (objectives.len==0)
|
||||
text += "<br>Objectives are empty! <a href='?src=\ref[src];changeling=autoobjectives'>Randomize!</a>"
|
||||
@@ -514,7 +514,7 @@
|
||||
|
||||
/** MONKEY ***/
|
||||
text = "monkey"
|
||||
if (ticker.mode.config_tag=="monkey")
|
||||
if (SSticker.mode.config_tag=="monkey")
|
||||
text = uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if (ishuman(current))
|
||||
@@ -541,15 +541,15 @@
|
||||
|
||||
/** devil ***/
|
||||
text = "devil"
|
||||
if(ticker.mode.config_tag == "devil")
|
||||
if(SSticker.mode.config_tag == "devil")
|
||||
text = uppertext(text)
|
||||
text = "<i><b>[text]</b></i>: "
|
||||
if(src in ticker.mode.devils)
|
||||
if(src in SSticker.mode.devils)
|
||||
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)
|
||||
else if(src in SSticker.mode.sintouched)
|
||||
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=ascendable_devil'>Ascendable Devil</a>|<a href='?src=\ref[src];devil=sintouched'>sintouched</a>|<b>HUMAN</b>"
|
||||
@@ -575,7 +575,7 @@
|
||||
if (R.emagged)
|
||||
n_e_robots++
|
||||
text += "<br>[n_e_robots] of [ai.connected_robots.len] slaved cyborgs are emagged. <a href='?src=\ref[src];silicon=unemagcyborgs'>Unemag</a>"
|
||||
if (ticker.mode.config_tag == "traitorchan")
|
||||
if (SSticker.mode.config_tag == "traitorchan")
|
||||
if (sections["traitor"])
|
||||
out += sections["traitor"]+"<br>"
|
||||
if (sections["changeling"])
|
||||
@@ -583,15 +583,15 @@
|
||||
sections -= "traitor"
|
||||
sections -= "changeling"
|
||||
else
|
||||
if (sections[ticker.mode.config_tag])
|
||||
out += sections[ticker.mode.config_tag]+"<br><br>"
|
||||
sections -= ticker.mode.config_tag
|
||||
if (sections[SSticker.mode.config_tag])
|
||||
out += sections[SSticker.mode.config_tag]+"<br><br>"
|
||||
sections -= SSticker.mode.config_tag
|
||||
for (var/i in sections)
|
||||
if (sections[i])
|
||||
out += sections[i]+"<br>"
|
||||
|
||||
|
||||
if(((src in ticker.mode.head_revolutionaries) || (src in ticker.mode.traitors) || (src in ticker.mode.syndicates)) && ishuman(current))
|
||||
if(((src in SSticker.mode.head_revolutionaries) || (src in SSticker.mode.traitors) || (src in SSticker.mode.syndicates)) && ishuman(current))
|
||||
|
||||
text = "Uplink: <a href='?src=\ref[src];common=uplink'>give</a>"
|
||||
var/obj/item/device/uplink/U = find_syndicate_uplink()
|
||||
@@ -666,7 +666,7 @@
|
||||
switch (new_obj_type)
|
||||
if ("assassinate","protect","debrain","maroon")
|
||||
var/list/possible_targets = list("Free objective")
|
||||
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.current
|
||||
|
||||
@@ -803,32 +803,32 @@
|
||||
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)
|
||||
if(src in SSticker.mode.head_revolutionaries)
|
||||
SSticker.mode.head_revolutionaries -= src
|
||||
SSticker.mode.update_rev_icons_removed(src)
|
||||
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))
|
||||
else if(!(src in SSticker.mode.revolutionaries))
|
||||
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
|
||||
ticker.mode.update_rev_icons_added(src)
|
||||
SSticker.mode.revolutionaries += src
|
||||
SSticker.mode.update_rev_icons_added(src)
|
||||
special_role = "Revolutionary"
|
||||
message_admins("[key_name_admin(usr)] has rev'ed [current].")
|
||||
log_admin("[key_name(usr)] has rev'ed [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 proved your devotion to revoltion! Yea 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='userdanger'>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
|
||||
@@ -836,20 +836,20 @@
|
||||
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 = "Head Revolutionary"
|
||||
message_admins("[key_name_admin(usr)] has head-rev'ed [current].")
|
||||
log_admin("[key_name(usr)] has head-rev'ed [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)
|
||||
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))
|
||||
if (!SSticker.mode.equip_revolutionary(current))
|
||||
to_chat(usr, "<span class='danger'>Spawning flash failed!</span>")
|
||||
|
||||
if("takeflash")
|
||||
@@ -880,7 +880,7 @@
|
||||
log_admin("[key_name(usr)] has de-gang'ed [current].")
|
||||
|
||||
if("equip")
|
||||
switch(ticker.mode.equip_gang(current,gang_datum))
|
||||
switch(SSticker.mode.equip_gang(current,gang_datum))
|
||||
if(1)
|
||||
to_chat(usr, "<span class='warning'>Unable to equip territory spraycan!</span>")
|
||||
if(2)
|
||||
@@ -898,22 +898,22 @@
|
||||
qdel(SC)
|
||||
|
||||
if("new")
|
||||
if(gang_colors_pool.len)
|
||||
var/list/names = list("Random") + gang_name_pool
|
||||
if(GLOB.gang_colors_pool.len)
|
||||
var/list/names = list("Random") + GLOB.gang_name_pool
|
||||
var/gangname = input("Pick a gang name.","Select Name") as null|anything in names
|
||||
if(gangname && gang_colors_pool.len) //Check again just in case another admin made max gangs at the same time
|
||||
if(!(gangname in gang_name_pool))
|
||||
if(gangname && GLOB.gang_colors_pool.len) //Check again just in case another admin made max gangs at the same time
|
||||
if(!(gangname in GLOB.gang_name_pool))
|
||||
gangname = null
|
||||
var/datum/gang/newgang = new(null,gangname)
|
||||
ticker.mode.gangs += newgang
|
||||
SSticker.mode.gangs += newgang
|
||||
message_admins("[key_name_admin(usr)] has created the [newgang.name] Gang.")
|
||||
log_admin("[key_name(usr)] has created the [newgang.name] Gang.")
|
||||
|
||||
else if (href_list["gangboss"])
|
||||
var/datum/gang/G = locate(href_list["gangboss"]) in ticker.mode.gangs
|
||||
var/datum/gang/G = locate(href_list["gangboss"]) in SSticker.mode.gangs
|
||||
if(!G || (src in G.bosses))
|
||||
return
|
||||
ticker.mode.remove_gangster(src,0,2,1)
|
||||
SSticker.mode.remove_gangster(src,0,2,1)
|
||||
G.bosses += src
|
||||
gang_datum = G
|
||||
special_role = "[G.name] Gang Boss"
|
||||
@@ -921,15 +921,15 @@
|
||||
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)
|
||||
ticker.mode.greet_gang(src,0)
|
||||
SSticker.mode.forge_gang_objectives(src)
|
||||
SSticker.mode.greet_gang(src,0)
|
||||
|
||||
else if (href_list["gangster"])
|
||||
var/datum/gang/G = locate(href_list["gangster"]) in ticker.mode.gangs
|
||||
var/datum/gang/G = locate(href_list["gangster"]) in SSticker.mode.gangs
|
||||
if(!G || (src in G.gangsters))
|
||||
return
|
||||
ticker.mode.remove_gangster(src,0,2,1)
|
||||
ticker.mode.add_gangster(src,G,0)
|
||||
SSticker.mode.remove_gangster(src,0,2,1)
|
||||
SSticker.mode.add_gangster(src,G,0)
|
||||
message_admins("[key_name_admin(usr)] has added [current] to the [G.name] Gang (A).")
|
||||
log_admin("[key_name(usr)] has added [current] to the [G.name] Gang (A).")
|
||||
|
||||
@@ -944,16 +944,16 @@
|
||||
message_admins("[key_name_admin(usr)] has de-cult'ed [current].")
|
||||
log_admin("[key_name(usr)] has de-cult'ed [current].")
|
||||
if("cultist")
|
||||
if(!(src in ticker.mode.cult))
|
||||
ticker.mode.add_cultist(src, 0)
|
||||
if(!(src in SSticker.mode.cult))
|
||||
SSticker.mode.add_cultist(src, 0)
|
||||
message_admins("[key_name_admin(usr)] has cult'ed [current].")
|
||||
log_admin("[key_name(usr)] has cult'ed [current].")
|
||||
if("tome")
|
||||
if (!ticker.mode.equip_cultist(current,1))
|
||||
if (!SSticker.mode.equip_cultist(current,1))
|
||||
to_chat(usr, "<span class='danger'>Spawning tome failed!</span>")
|
||||
|
||||
if("amulet")
|
||||
if (!ticker.mode.equip_cultist(current))
|
||||
if (!SSticker.mode.equip_cultist(current))
|
||||
to_chat(usr, "<span class='danger'>Spawning amulet failed!</span>")
|
||||
|
||||
else if(href_list["clockcult"])
|
||||
@@ -968,7 +968,7 @@
|
||||
message_admins("[key_name_admin(usr)] has made [current] into a servant of Ratvar.")
|
||||
log_admin("[key_name(usr)] has made [current] into a servant of Ratvar.")
|
||||
if("slab")
|
||||
if(!ticker.mode.equip_servant(current))
|
||||
if(!SSticker.mode.equip_servant(current))
|
||||
to_chat(usr, "<span class='warning'>Failed to outfit [current] with a slab!</span>")
|
||||
else
|
||||
to_chat(usr, "<span class='notice'>Successfully gave [current] a clockwork slab!</span>")
|
||||
@@ -979,24 +979,24 @@
|
||||
remove_wizard()
|
||||
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)
|
||||
SSticker.mode.update_wiz_icons_removed(src)
|
||||
if("wizard")
|
||||
if(!(src in ticker.mode.wizards))
|
||||
ticker.mode.wizards += src
|
||||
if(!(src in SSticker.mode.wizards))
|
||||
SSticker.mode.wizards += src
|
||||
special_role = "Wizard"
|
||||
//ticker.mode.learn_basic_spells(current)
|
||||
//SSticker.mode.learn_basic_spells(current)
|
||||
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)
|
||||
SSticker.mode.update_wiz_icons_added(src)
|
||||
if("lair")
|
||||
current.loc = pick(wizardstart)
|
||||
current.loc = pick(GLOB.wizardstart)
|
||||
if("dressup")
|
||||
ticker.mode.equip_wizard(current)
|
||||
SSticker.mode.equip_wizard(current)
|
||||
if("name")
|
||||
ticker.mode.name_wizard(current)
|
||||
SSticker.mode.name_wizard(current)
|
||||
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 anounce manually.</span>")
|
||||
|
||||
else if (href_list["changeling"])
|
||||
@@ -1007,16 +1007,16 @@
|
||||
message_admins("[key_name_admin(usr)] has de-changeling'ed [current].")
|
||||
log_admin("[key_name(usr)] has de-changeling'ed [current].")
|
||||
if("changeling")
|
||||
if(!(src in ticker.mode.changelings))
|
||||
ticker.mode.changelings += src
|
||||
if(!(src in SSticker.mode.changelings))
|
||||
SSticker.mode.changelings += src
|
||||
current.make_changeling()
|
||||
special_role = "Changeling"
|
||||
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)
|
||||
SSticker.mode.update_changeling_icons_added(src)
|
||||
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 anounce manually.</span>")
|
||||
|
||||
if("initialdna")
|
||||
@@ -1037,18 +1037,18 @@
|
||||
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")
|
||||
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 = "Syndicate"
|
||||
assigned_role = "Syndicate"
|
||||
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)
|
||||
message_admins("[key_name_admin(usr)] has nuke op'ed [current].")
|
||||
log_admin("[key_name(usr)] has nuke op'ed [current].")
|
||||
if("lair")
|
||||
@@ -1065,11 +1065,11 @@
|
||||
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='danger'>Equipping a syndicate failed!</span>")
|
||||
if("tellcode")
|
||||
var/code
|
||||
for (var/obj/machinery/nuclearbomb/bombue in machines)
|
||||
for (var/obj/machinery/nuclearbomb/bombue in GLOB.machines)
|
||||
if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN")
|
||||
code = bombue.r_code
|
||||
break
|
||||
@@ -1086,34 +1086,34 @@
|
||||
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)
|
||||
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
|
||||
special_role = "traitor"
|
||||
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))
|
||||
var/mob/living/silicon/ai/A = current
|
||||
ticker.mode.add_law_zero(A)
|
||||
ticker.mode.update_traitor_icons_added(src)
|
||||
SSticker.mode.add_law_zero(A)
|
||||
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 anounce manually.</span>")
|
||||
|
||||
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/))
|
||||
if(devilinfo)
|
||||
devilinfo.regress_blood_lizard()
|
||||
else
|
||||
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
|
||||
SSticker.mode.devils -= 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)
|
||||
@@ -1132,8 +1132,8 @@
|
||||
var/mob/living/silicon/S = current
|
||||
S.clear_law_sixsixsix(current)
|
||||
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")
|
||||
@@ -1145,10 +1145,10 @@
|
||||
if(!ishuman(current) && !iscyborg(current))
|
||||
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.finalize_devil(src, FALSE)
|
||||
ticker.mode.add_devil_objectives(src, 2)
|
||||
SSticker.mode.finalize_devil(src, FALSE)
|
||||
SSticker.mode.add_devil_objectives(src, 2)
|
||||
announceDevilLaws()
|
||||
announce_objectives()
|
||||
message_admins("[key_name_admin(usr)] has devil'ed [current].")
|
||||
@@ -1162,17 +1162,16 @@
|
||||
if(!ishuman(current) && !iscyborg(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.finalize_devil(src, TRUE)
|
||||
ticker.mode.add_devil_objectives(src, 2)
|
||||
SSticker.mode.finalize_devil(src, TRUE)
|
||||
SSticker.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
|
||||
var/mob/living/carbon/human/H = current
|
||||
H.influenceSin()
|
||||
message_admins("[key_name_admin(usr)] has sintouch'ed [current].")
|
||||
@@ -1184,14 +1183,14 @@
|
||||
switch(href_list["abductor"])
|
||||
if("clear")
|
||||
to_chat(usr, "Not implemented yet. Sorry!")
|
||||
//ticker.mode.update_abductor_icons_removed(src)
|
||||
//SSticker.mode.update_abductor_icons_removed(src)
|
||||
if("abductor")
|
||||
if(!ishuman(current))
|
||||
to_chat(usr, "<span class='warning'>This only works on humans!</span>")
|
||||
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")
|
||||
var/gear = alert("Agent or Scientist Gear","Gear","Agent","Scientist")
|
||||
if(gear)
|
||||
@@ -1286,7 +1285,7 @@
|
||||
message_admins("[key_name_admin(usr)] changed [current]'s telecrystal count to [crystals].")
|
||||
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)))
|
||||
if(!SSticker.mode.equip_traitor(current, !(src in SSticker.mode.traitors)))
|
||||
to_chat(usr, "<span class='danger'>Equipping a syndicate failed!</span>")
|
||||
log_admin("[key_name(usr)] attempted to give [current] an uplink.")
|
||||
|
||||
@@ -1316,20 +1315,20 @@
|
||||
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 = "traitor"
|
||||
ticker.mode.forge_traitor_objectives(src)
|
||||
ticker.mode.finalize_traitor(src)
|
||||
ticker.mode.greet_traitor(src)
|
||||
SSticker.mode.forge_traitor_objectives(src)
|
||||
SSticker.mode.finalize_traitor(src)
|
||||
SSticker.mode.greet_traitor(src)
|
||||
|
||||
/datum/mind/proc/make_Nuke(turf/spawnloc, nuke_code, leader=0, telecrystals = TRUE)
|
||||
if(!(src in ticker.mode.syndicates))
|
||||
ticker.mode.syndicates += src
|
||||
ticker.mode.update_synd_icons_added(src)
|
||||
if(!(src in SSticker.mode.syndicates))
|
||||
SSticker.mode.syndicates += src
|
||||
SSticker.mode.update_synd_icons_added(src)
|
||||
special_role = "Syndicate"
|
||||
ticker.mode.forge_syndicate_objectives(src)
|
||||
ticker.mode.greet_syndicate(src)
|
||||
SSticker.mode.forge_syndicate_objectives(src)
|
||||
SSticker.mode.greet_syndicate(src)
|
||||
current.faction |= "syndicate"
|
||||
|
||||
if(spawnloc)
|
||||
@@ -1347,13 +1346,13 @@
|
||||
qdel(H.wear_suit)
|
||||
qdel(H.w_uniform)
|
||||
|
||||
ticker.mode.equip_syndicate(current, telecrystals)
|
||||
SSticker.mode.equip_syndicate(current, telecrystals)
|
||||
|
||||
if (nuke_code)
|
||||
store_memory("<B>Syndicate Nuclear Bomb Code</B>: [nuke_code]", 0, 0)
|
||||
to_chat(current, "The nuclear authorization code is: <B>[nuke_code]</B>")
|
||||
else
|
||||
var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in nuke_list
|
||||
var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list
|
||||
if(nuke)
|
||||
store_memory("<B>Syndicate Nuclear Bomb Code</B>: [nuke.r_code]", 0, 0)
|
||||
to_chat(current, "The nuclear authorization code is: <B>nuke.r_code</B>")
|
||||
@@ -1361,43 +1360,43 @@
|
||||
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)
|
||||
SSticker.mode.prepare_syndicate_leader(src,nuke_code)
|
||||
else
|
||||
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
|
||||
current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]"
|
||||
|
||||
/datum/mind/proc/make_Changling()
|
||||
if(!(src in ticker.mode.changelings))
|
||||
ticker.mode.changelings += src
|
||||
if(!(src in SSticker.mode.changelings))
|
||||
SSticker.mode.changelings += src
|
||||
current.make_changeling()
|
||||
special_role = "Changeling"
|
||||
ticker.mode.forge_changeling_objectives(src)
|
||||
ticker.mode.greet_changeling(src)
|
||||
ticker.mode.update_changeling_icons_added(src)
|
||||
SSticker.mode.forge_changeling_objectives(src)
|
||||
SSticker.mode.greet_changeling(src)
|
||||
SSticker.mode.update_changeling_icons_added(src)
|
||||
|
||||
/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 = "Wizard"
|
||||
assigned_role = "Wizard"
|
||||
if(!wizardstart.len)
|
||||
current.loc = pick(latejoin)
|
||||
if(!GLOB.wizardstart.len)
|
||||
current.loc = pick(GLOB.latejoin)
|
||||
to_chat(current, "HOT INSERTION, GO GO GO")
|
||||
else
|
||||
current.loc = pick(wizardstart)
|
||||
current.loc = pick(GLOB.wizardstart)
|
||||
|
||||
ticker.mode.equip_wizard(current)
|
||||
ticker.mode.name_wizard(current)
|
||||
ticker.mode.forge_wizard_objectives(src)
|
||||
ticker.mode.greet_wizard(src)
|
||||
SSticker.mode.equip_wizard(current)
|
||||
SSticker.mode.name_wizard(current)
|
||||
SSticker.mode.forge_wizard_objectives(src)
|
||||
SSticker.mode.greet_wizard(src)
|
||||
|
||||
|
||||
/datum/mind/proc/make_Cultist()
|
||||
if(!(src in ticker.mode.cult))
|
||||
ticker.mode.add_cultist(src,FALSE)
|
||||
if(!(src in SSticker.mode.cult))
|
||||
SSticker.mode.add_cultist(src,FALSE)
|
||||
special_role = "Cultist"
|
||||
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
|
||||
var/datum/game_mode/cult/cult = SSticker.mode
|
||||
|
||||
if (istype(cult))
|
||||
cult.memorize_cult_objectives(src)
|
||||
@@ -1407,13 +1406,13 @@
|
||||
memory += "<B>Objective #1</B>: [explanation]<BR>"
|
||||
|
||||
var/mob/living/carbon/human/H = current
|
||||
if (!ticker.mode.equip_cultist(current))
|
||||
if (!SSticker.mode.equip_cultist(current))
|
||||
to_chat(H, "Spawning an amulet from your Master failed.")
|
||||
|
||||
/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
|
||||
@@ -1421,21 +1420,21 @@
|
||||
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 = "Head Revolutionary"
|
||||
|
||||
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/device/assembly/flash/flash = locate() in L
|
||||
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)
|
||||
|
||||
|
||||
/datum/mind/proc/make_Gang(datum/gang/G)
|
||||
@@ -1443,9 +1442,9 @@
|
||||
G.bosses += src
|
||||
gang_datum = G
|
||||
G.add_gang_hud(src)
|
||||
ticker.mode.forge_gang_objectives(src)
|
||||
ticker.mode.greet_gang(src)
|
||||
ticker.mode.equip_gang(current,G)
|
||||
SSticker.mode.forge_gang_objectives(src)
|
||||
SSticker.mode.greet_gang(src)
|
||||
SSticker.mode.equip_gang(current,G)
|
||||
|
||||
/datum/mind/proc/make_Abductor()
|
||||
var/role = alert("Abductor Role ?","Role","Agent","Scientist")
|
||||
@@ -1458,7 +1457,7 @@
|
||||
if(!ishuman(current))
|
||||
return
|
||||
|
||||
ticker.mode.abductors |= src
|
||||
SSticker.mode.abductors |= src
|
||||
|
||||
var/datum/objective/experiment/O = new
|
||||
O.owner = src
|
||||
@@ -1480,7 +1479,7 @@
|
||||
var/list/obj/effect/landmark/abductor/scientist_landmarks = new
|
||||
agent_landmarks.len = 4
|
||||
scientist_landmarks.len = 4
|
||||
for(var/obj/effect/landmark/abductor/A in landmarks_list)
|
||||
for(var/obj/effect/landmark/abductor/A in GLOB.landmarks_list)
|
||||
if(istype(A,/obj/effect/landmark/abductor/agent))
|
||||
agent_landmarks[text2num(A.team)] = A
|
||||
else if(istype(A,/obj/effect/landmark/abductor/scientist))
|
||||
@@ -1533,7 +1532,7 @@
|
||||
INVOKE_ASYNC(S, /obj/effect/proc_holder/spell.proc/start_recharge)
|
||||
|
||||
/datum/mind/proc/get_ghost(even_if_they_cant_reenter)
|
||||
for(var/mob/dead/observer/G in dead_mob_list)
|
||||
for(var/mob/dead/observer/G in GLOB.dead_mob_list)
|
||||
if(G.mind == src)
|
||||
if(G.can_reenter_corpse || even_if_they_cant_reenter)
|
||||
return G
|
||||
@@ -1562,10 +1561,10 @@
|
||||
|
||||
else
|
||||
mind = new /datum/mind(key)
|
||||
if(ticker)
|
||||
ticker.minds += mind
|
||||
if(SSticker)
|
||||
SSticker.minds += mind
|
||||
else
|
||||
stack_trace("mind_initialize(): No ticker ready")
|
||||
stack_trace("mind_initialize(): No SSticker ready")
|
||||
if(!mind.name)
|
||||
mind.name = real_name
|
||||
mind.current = src
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/var/global/list/mutations_list = list()
|
||||
GLOBAL_LIST_EMPTY(mutations_list)
|
||||
|
||||
/datum/mutation
|
||||
|
||||
var/name
|
||||
|
||||
/datum/mutation/New()
|
||||
mutations_list[name] = src
|
||||
GLOB.mutations_list[name] = src
|
||||
|
||||
/datum/mutation/human
|
||||
|
||||
@@ -536,9 +536,9 @@
|
||||
if(message)
|
||||
message = replacetext(message,"w","v")
|
||||
message = replacetext(message,"j","y")
|
||||
message = replacetext(message,"a",pick("å","ä","æ","a"))
|
||||
message = replacetext(message,"a",pick("�","�","�","a"))
|
||||
message = replacetext(message,"bo","bjo")
|
||||
message = replacetext(message,"o",pick("ö","ø","o"))
|
||||
message = replacetext(message,"o",pick("�","�","o"))
|
||||
if(prob(30))
|
||||
message += " Bork[pick("",", bork",", bork, bork")]!"
|
||||
return message
|
||||
|
||||
@@ -38,8 +38,6 @@
|
||||
//if they differ between directions, otherwise use the
|
||||
//generic variables
|
||||
/datum/riding/proc/handle_vehicle_offsets()
|
||||
if(!ridden || QDELETED(ridden))
|
||||
return
|
||||
if(ridden.has_buckled_mobs())
|
||||
for(var/m in ridden.buckled_mobs)
|
||||
var/mob/living/buckled_mob = m
|
||||
|
||||
@@ -35,15 +35,6 @@
|
||||
cost = 10
|
||||
allow_duplicates = FALSE
|
||||
|
||||
/datum/map_template/ruin/lavaland/prisoners
|
||||
name = "Prisoner Crash"
|
||||
id = "prisoner-crash"
|
||||
description = "This incredibly high security shuttle clearly didn't have 'avoiding lavafilled hellscapes' as a design priority. \
|
||||
As such, it has crashed, waking the prisoners from their cryostasis, and setting them loose on the wastes. If they live long enough, that is."
|
||||
suffix = "lavaland_surface_prisoner_crash.dmm"
|
||||
cost = 15
|
||||
allow_duplicates = FALSE
|
||||
|
||||
/datum/map_template/ruin/lavaland/seed_vault
|
||||
name = "Seed Vault"
|
||||
id = "seed-vault"
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
|
||||
/datum/map_template/shuttle/emergency/airless/prerequisites_met()
|
||||
// first 10 minutes only
|
||||
return world.time - round_start_time < 6000
|
||||
return world.time - SSticker.round_start_time < 6000
|
||||
|
||||
/datum/map_template/shuttle/emergency/asteroid
|
||||
suffix = "asteroid"
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
id = "vanguard"
|
||||
duration = 200
|
||||
tick_interval = 0 //tick as fast as possible
|
||||
status_type = STATUS_EFFECT_REPLACE
|
||||
alert_type = /obj/screen/alert/status_effect/vanguard
|
||||
var/datum/progressbar/progbar
|
||||
|
||||
@@ -58,7 +59,8 @@
|
||||
if(istype(L)) //this is probably more safety than actually needed
|
||||
var/vanguard = L.stun_absorption["vanguard"]
|
||||
desc = initial(desc)
|
||||
desc += "<br><b>[vanguard["stuns_absorbed"] * 2]</b> seconds of stuns held back.<br><b>[round(min(vanguard["stuns_absorbed"] * 0.25, 20)) * 2]</b> seconds of stun will affect you."
|
||||
desc += "<br><b>[vanguard["stuns_absorbed"] * 2]</b> seconds of stuns held back.\
|
||||
[GLOB.ratvar_awakens ? "":"<br><b>[round(min(vanguard["stuns_absorbed"] * 0.25, 20)) * 2]</b> seconds of stun will affect you."]"
|
||||
..()
|
||||
|
||||
/datum/status_effect/vanguard_shield/Destroy()
|
||||
@@ -88,7 +90,7 @@
|
||||
for(var/i in owner.stun_absorption)
|
||||
if(owner.stun_absorption[i]["end_time"] > world.time && owner.stun_absorption[i]["priority"] > vanguard["priority"])
|
||||
otheractiveabsorptions = TRUE
|
||||
if(!ratvar_awakens && stuns_blocked && !otheractiveabsorptions)
|
||||
if(!GLOB.ratvar_awakens && stuns_blocked && !otheractiveabsorptions)
|
||||
vanguard["end_time"] = 0 //so it doesn't absorb the stuns we're about to apply
|
||||
owner.Stun(stuns_blocked)
|
||||
owner.Weaken(stuns_blocked)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/status_effect/freon
|
||||
id = "frozen"
|
||||
duration = 100
|
||||
unique = TRUE
|
||||
status_type = STATUS_EFFECT_UNIQUE
|
||||
alert_type = /obj/screen/alert/status_effect/freon
|
||||
var/icon/cube
|
||||
|
||||
|
||||
@@ -2,14 +2,12 @@
|
||||
//This file contains their code, plus code for applying and removing them.
|
||||
//When making a new status effect, add a define to status_effects.dm in __DEFINES for ease of use!
|
||||
|
||||
var/global/list/all_status_effects = list() //a list of all status effects, if for some reason you need to remove all of them
|
||||
|
||||
/datum/status_effect
|
||||
var/id = "effect" //Used for screen alerts.
|
||||
var/duration = -1 //How long the status effect lasts in DECISECONDS. Enter -1 for an effect that never ends unless removed through some means.
|
||||
var/tick_interval = 10 //How many deciseconds between ticks, approximately. Leave at 10 for every second.
|
||||
var/mob/living/owner //The mob affected by the status effect.
|
||||
var/unique = TRUE //If there can be multiple status effects of this type on one mob.
|
||||
var/status_type = STATUS_EFFECT_UNIQUE //How many of the effect can be on one mob, and what happens when you try to add another
|
||||
var/alert_type = /obj/screen/alert/status_effect //the alert thrown by the status effect, contains name and description
|
||||
|
||||
/datum/status_effect/New(mob/living/new_owner)
|
||||
@@ -17,7 +15,6 @@ var/global/list/all_status_effects = list() //a list of all status effects, if f
|
||||
owner = new_owner
|
||||
if(owner)
|
||||
LAZYADD(owner.status_effects, src)
|
||||
all_status_effects += src
|
||||
addtimer(CALLBACK(src, .proc/start_ticking), 1) //Give us time to set any variables
|
||||
|
||||
/datum/status_effect/Destroy()
|
||||
@@ -26,7 +23,6 @@ var/global/list/all_status_effects = list() //a list of all status effects, if f
|
||||
owner.clear_alert(id)
|
||||
on_remove()
|
||||
LAZYREMOVE(owner.status_effects, src)
|
||||
all_status_effects -= src
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/proc/start_ticking()
|
||||
@@ -57,6 +53,11 @@ var/global/list/all_status_effects = list() //a list of all status effects, if f
|
||||
/datum/status_effect/proc/on_apply() //Called whenever the buff is applied.
|
||||
/datum/status_effect/proc/tick() //Called every tick.
|
||||
/datum/status_effect/proc/on_remove() //Called whenever the buff expires or is removed.
|
||||
/datum/status_effect/proc/be_replaced() //Called instead of on_remove when a status effect is replaced by itself
|
||||
owner.clear_alert(id)
|
||||
LAZYREMOVE(owner.status_effects, src)
|
||||
owner = null
|
||||
qdel(src)
|
||||
|
||||
////////////////
|
||||
// ALERT HOOK //
|
||||
@@ -76,8 +77,11 @@ var/global/list/all_status_effects = list() //a list of all status effects, if f
|
||||
var/datum/status_effect/S1 = effect
|
||||
LAZYINITLIST(status_effects)
|
||||
for(var/datum/status_effect/S in status_effects)
|
||||
if(S.id == initial(S1.id) && initial(S1.unique))
|
||||
return
|
||||
if(S.id == initial(S1.id) && S.status_type)
|
||||
if(S.status_type == STATUS_EFFECT_REPLACE)
|
||||
S.be_replaced()
|
||||
else
|
||||
return
|
||||
S1 = new effect(src)
|
||||
. = S1
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
impacted_areas |= A
|
||||
weather_duration = rand(weather_duration_lower, weather_duration_upper)
|
||||
update_areas()
|
||||
for(var/V in player_list)
|
||||
for(var/V in GLOB.player_list)
|
||||
var/mob/M = V
|
||||
if(M.z == target_z)
|
||||
if(telegraph_message)
|
||||
@@ -77,7 +77,7 @@
|
||||
return
|
||||
stage = MAIN_STAGE
|
||||
update_areas()
|
||||
for(var/V in player_list)
|
||||
for(var/V in GLOB.player_list)
|
||||
var/mob/M = V
|
||||
if(M.z == target_z)
|
||||
if(weather_message)
|
||||
@@ -92,7 +92,7 @@
|
||||
return
|
||||
stage = WIND_DOWN_STAGE
|
||||
update_areas()
|
||||
for(var/V in player_list)
|
||||
for(var/V in GLOB.player_list)
|
||||
var/mob/M = V
|
||||
if(M.z == target_z)
|
||||
if(end_message)
|
||||
@@ -126,7 +126,6 @@
|
||||
var/area/N = V
|
||||
N.layer = overlay_layer
|
||||
N.icon = 'icons/effects/weather_effects.dmi'
|
||||
N.invisibility = 0
|
||||
N.color = weather_color
|
||||
switch(stage)
|
||||
if(STARTUP_STAGE)
|
||||
@@ -137,8 +136,7 @@
|
||||
N.icon_state = end_overlay
|
||||
if(END_STAGE)
|
||||
N.color = null
|
||||
N.icon_state = initial(N.icon_state)
|
||||
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.set_opacity(FALSE)
|
||||
|
||||
@@ -168,6 +168,7 @@
|
||||
sleep(300)
|
||||
revoke_maint_all_access() // Need to make this a timer at some point.
|
||||
|
||||
|
||||
/datum/weather/rad_storm/proc/status_alarm(command) //Makes the status displays show the radiation warning for those who missed the announcement.
|
||||
var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
|
||||
|
||||
@@ -185,3 +186,33 @@
|
||||
status_signal.data["picture_state"] = "radiation"
|
||||
|
||||
frequency.post_signal(src, status_signal)
|
||||
|
||||
|
||||
/datum/weather/acid_rain
|
||||
name = "acid rain"
|
||||
desc = "Some stay dry and others feel the pain"
|
||||
|
||||
telegraph_duration = 400
|
||||
telegraph_message = "<span class='danger'>Stinging droplets start to fall upon you..</span>"
|
||||
telegraph_sound = 'sound/ambience/acidrain_start.ogg'
|
||||
|
||||
weather_message = "<span class='userdanger'><i>Your skin melts underneath the rain!</i></span>"
|
||||
weather_overlay = "acid_rain"
|
||||
weather_duration_lower = 600
|
||||
weather_duration_upper = 1500
|
||||
weather_sound = 'sound/ambience/acidrain_mid.ogg'
|
||||
|
||||
end_duration = 100
|
||||
end_message = "<span class='notice'>The rain starts to dissipate.</span>"
|
||||
end_sound = 'sound/ambience/acidrain_end.ogg'
|
||||
|
||||
area_type = /area/lavaland/surface/outdoors
|
||||
target_z = ZLEVEL_LAVALAND
|
||||
|
||||
immunity_type = "acid" // temp
|
||||
|
||||
|
||||
/datum/weather/acid_rain/impact(mob/living/L)
|
||||
var/resist = L.getarmor(null, "acid")
|
||||
if(prob(max(0,100-resist)))
|
||||
L.acid_act(20,20)
|
||||
@@ -34,7 +34,11 @@
|
||||
var/new_ai = select_active_ai(R)
|
||||
if(new_ai && (new_ai != R.connected_ai))
|
||||
R.connected_ai = new_ai
|
||||
R.notify_ai(TRUE)
|
||||
if(R.shell)
|
||||
R.undeploy() //If this borg is an AI shell, disconnect the controlling AI and assign ti to a new AI
|
||||
R.notify_ai(AI_SHELL)
|
||||
else
|
||||
R.notify_ai(TRUE)
|
||||
if(WIRE_CAMERA) // Pulse to disable the camera.
|
||||
if(!isnull(R.camera) && !R.scrambledcodes)
|
||||
R.camera.toggle_cam(usr, 0)
|
||||
@@ -56,11 +60,12 @@
|
||||
if(WIRE_AI) // Cut the AI wire to reset AI control.
|
||||
if(!mend)
|
||||
R.connected_ai = null
|
||||
R.undeploy() //Forced disconnect of an AI should this body be a shell.
|
||||
if(WIRE_LAWSYNC) // Cut the law wire, and the borg will no longer receive law updates from its AI. Repair and it will re-sync.
|
||||
if(mend)
|
||||
if(!R.emagged)
|
||||
R.lawupdate = TRUE
|
||||
else
|
||||
else if(!R.deployed) //AI shells must always have the same laws as the AI
|
||||
R.lawupdate = FALSE
|
||||
if (WIRE_CAMERA) // Disable the camera.
|
||||
if(!isnull(R.camera) && !R.scrambledcodes)
|
||||
|
||||
+26
-28
@@ -1,26 +1,5 @@
|
||||
#define MAXIMUM_EMP_WIRES 3
|
||||
|
||||
var/list/wire_colors = list(
|
||||
"blue",
|
||||
"brown",
|
||||
"crimson",
|
||||
"cyan",
|
||||
"gold",
|
||||
"grey",
|
||||
"green",
|
||||
"magenta",
|
||||
"orange",
|
||||
"pink",
|
||||
"purple",
|
||||
"red",
|
||||
"silver",
|
||||
"violet",
|
||||
"white",
|
||||
"yellow",
|
||||
)
|
||||
var/list/wire_color_directory = list()
|
||||
var/list/wire_name_directory = list()
|
||||
|
||||
/proc/is_wire_tool(obj/item/I)
|
||||
if(istype(I, /obj/item/device/multitool))
|
||||
return TRUE
|
||||
@@ -57,12 +36,12 @@ var/list/wire_name_directory = list()
|
||||
if(randomize)
|
||||
randomize()
|
||||
else
|
||||
if(!wire_color_directory[holder_type])
|
||||
if(!GLOB.wire_color_directory[holder_type])
|
||||
randomize()
|
||||
wire_color_directory[holder_type] = colors
|
||||
wire_name_directory[holder_type] = proper_name
|
||||
GLOB.wire_color_directory[holder_type] = colors
|
||||
GLOB.wire_name_directory[holder_type] = proper_name
|
||||
else
|
||||
colors = wire_color_directory[holder_type]
|
||||
colors = GLOB.wire_color_directory[holder_type]
|
||||
|
||||
/datum/wires/Destroy()
|
||||
holder = null
|
||||
@@ -77,10 +56,29 @@ var/list/wire_name_directory = list()
|
||||
wires += dud
|
||||
|
||||
/datum/wires/proc/randomize()
|
||||
var/list/possible_colors = wire_colors.Copy()
|
||||
var/static/list/possible_colors = list(
|
||||
"blue",
|
||||
"brown",
|
||||
"crimson",
|
||||
"cyan",
|
||||
"gold",
|
||||
"grey",
|
||||
"green",
|
||||
"magenta",
|
||||
"orange",
|
||||
"pink",
|
||||
"purple",
|
||||
"red",
|
||||
"silver",
|
||||
"violet",
|
||||
"white",
|
||||
"yellow"
|
||||
)
|
||||
|
||||
var/list/my_possible_colors = possible_colors.Copy()
|
||||
|
||||
for(var/wire in shuffle(wires))
|
||||
colors[pick_n_take(possible_colors)] = wire
|
||||
colors[pick_n_take(my_possible_colors)] = wire
|
||||
|
||||
/datum/wires/proc/shuffle_wires()
|
||||
colors.Cut()
|
||||
@@ -201,7 +199,7 @@ var/list/wire_name_directory = list()
|
||||
return UI_CLOSE
|
||||
|
||||
/datum/wires/ui_interact(mob/user, ui_key = "wires", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = physical_state)
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "wires", "[holder.name] wires", 350, 150 + wires.len * 30, master_ui, state)
|
||||
|
||||
Reference in New Issue
Block a user