diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index 5047b31641..752131369b 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -1,4 +1,5 @@ #define MAX_ADMIN_BANS_PER_ADMIN 1 +#define MAX_ADMIN_BANS_PER_HEADMIN 3 //Either pass the mob you wish to ban in the 'banned_mob' attribute, or the banckey, banip and bancid variables. If both are passed, the mob takes priority! If a mob is not passed, banckey is the minimum that needs to be passed! banip and bancid are optional. /datum/admins/proc/DB_ban_record(bantype, mob/banned_mob, duration = -1, reason, job = "", banckey = null, banip = null, bancid = null) @@ -118,8 +119,11 @@ return if(query_check_adminban_amt.NextRow()) var/adm_bans = text2num(query_check_adminban_amt.item[1]) - if(adm_bans >= MAX_ADMIN_BANS_PER_ADMIN) - to_chat(usr, "You already logged [MAX_ADMIN_BANS_PER_ADMIN] admin ban(s) or more. Do not abuse this function!") + var/max_bans = MAX_ADMIN_BANS_PER_ADMIN + if (check_rights(R_PERMISSIONS, FALSE)) + max_bans = MAX_ADMIN_BANS_PER_HEADMIN + if(adm_bans >= max_bans) + to_chat(usr, "You already logged [max_bans] admin ban(s) or more. Do not abuse this function!") return if(!computerid) computerid = "0" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index ba1cb9c524..79d9838ea2 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -508,8 +508,7 @@ toggle_ooc() log_admin("[key_name(usr)] toggled OOC.") message_admins("[key_name_admin(usr)] toggled OOC.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle OOC", "[GLOB.ooc_allowed]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle OOC", "[GLOB.ooc_allowed]")) + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle OOC", "[GLOB.ooc_allowed ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggleoocdead() set category = "Server" @@ -519,7 +518,7 @@ log_admin("[key_name(usr)] toggled OOC.") message_admins("[key_name_admin(usr)] toggled Dead OOC.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Dead OOC", "[GLOB.dooc_allowed]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Dead OOC", "[GLOB.dooc_allowed ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/startnow() set category = "Server" @@ -553,7 +552,7 @@ log_admin("[key_name(usr)] toggled new player game entering.") message_admins("[key_name_admin(usr)] toggled new player game entering.") world.update_status() - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Entering", "[GLOB.enter_allowed]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Entering", "[GLOB.enter_allowed ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggleAI() set category = "Server" @@ -567,7 +566,7 @@ to_chat(world, "The AI job is chooseable now.") log_admin("[key_name(usr)] toggled AI allowed.") world.update_status() - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle AI", "[!alai]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle AI", "[!alai ? "Disabled" : "Enabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggleaban() set category = "Server" @@ -582,7 +581,7 @@ message_admins("[key_name_admin(usr)] toggled respawn to [!new_nores ? "On" : "Off"].") log_admin("[key_name(usr)] toggled respawn to [!new_nores ? "On" : "Off"].") world.update_status() - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Respawn", "[!new_nores]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Respawn", "[!new_nores ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/delay() set category = "Server" @@ -665,7 +664,7 @@ to_chat(world, "The tinted_weldhelh has been disabled!") log_admin("[key_name(usr)] toggled tinted_weldhelh.") message_admins("[key_name_admin(usr)] toggled tinted_weldhelh.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Tinted Welding Helmets", "[GLOB.tinted_weldhelh]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Tinted Welding Helmets", "[GLOB.tinted_weldhelh ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggleguests() set category = "Server" @@ -679,7 +678,7 @@ to_chat(world, "Guests may now enter the game.") log_admin("[key_name(usr)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.") message_admins("[key_name_admin(usr)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Guests", "[!new_guest_ban]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Guests", "[!new_guest_ban ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/output_ai_laws() var/ai_number = 0 diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 16bd79f74a..b577a84a1d 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -1,3 +1,4 @@ + /datum/admins/proc/create_mob(mob/user) var/static/create_mob_html if (!create_mob_html) @@ -23,4 +24,4 @@ H.dna.blood_type = random_blood_type() H.update_body() H.update_hair() - H.update_body_parts() + H.update_body_parts() \ No newline at end of file diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index e9d4462c0a..82b60ca933 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -173,4 +173,4 @@ you will have to do something like if(client.rights & R_ADMIN) yourself. return "admin_token=[RawHrefToken(forceGlobal)]" /proc/HrefTokenFormField(forceGlobal = FALSE) - return "" + return "" \ No newline at end of file diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 1805cf327d..e38f857cd4 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -612,6 +612,20 @@ dat += "" + var/list/pirates = get_antagonists(/datum/antagonist/pirate) + if(pirates.len > 0) + dat += "
" + for(var/datum/mind/N in pirates) + var/mob/M = N.current + if(!M) + dat += "" + dat += "" + else + dat += "" + dat += "" + dat += "" + dat += "
Pirates
[N.name]([N.key])No body.PM
[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW
" + if(istype(SSticker.mode, /datum/game_mode/monkey)) var/datum/game_mode/monkey/mode = SSticker.mode dat += "
" diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 14d94acf86..13e07e0368 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -43,6 +43,8 @@ if(check_rights(R_FUN,0)) dat += {" + Fun Secrets
+
Trigger a Virus Outbreak
Turn all humans into monkeys
Chinese Cartoons
@@ -194,7 +196,7 @@ if("moveminingshuttle") if(!check_rights(R_ADMIN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Send Mining Shuttle") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Send Mining Shuttle")) if(!SSshuttle.toggleShuttle("mining","mining_home","mining_away")) message_admins("[key_name_admin(usr)] moved mining shuttle") log_admin("[key_name(usr)] moved the mining shuttle") @@ -202,7 +204,7 @@ if("movelaborshuttle") if(!check_rights(R_ADMIN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Send Labor Shuttle") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Send Labor Shuttle")) if(!SSshuttle.toggleShuttle("laborcamp","laborcamp_home","laborcamp_away")) message_admins("[key_name_admin(usr)] moved labor shuttle") log_admin("[key_name(usr)] moved the labor shuttle") @@ -210,7 +212,7 @@ if("moveferry") if(!check_rights(R_ADMIN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Send CentCom Ferry") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Send CentCom Ferry")) if(!SSshuttle.toggleShuttle("ferry","ferry_home","ferry_away")) message_admins("[key_name_admin(usr)] moved the CentCom ferry") log_admin("[key_name(usr)] moved the CentCom ferry") @@ -222,7 +224,7 @@ if(A) var/new_perma = !A.perma_docked A.perma_docked = new_perma - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Permadock Arrivals Shuttle", "[new_perma]")) + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Permadock Arrivals Shuttle", "[new_perma ? "Enabled" : "Disabled"]")) message_admins("[key_name_admin(usr)] [new_perma ? "stopped" : "started"] the arrivals shuttle") log_admin("[key_name(usr)] [new_perma ? "stopped" : "started"] the arrivals shuttle") else @@ -272,7 +274,7 @@ if("monkey") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Monkeyize All Humans") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Monkeyize All Humans")) for(var/mob/living/carbon/human/H in GLOB.carbon_list) spawn(0) H.monkeyize() @@ -283,7 +285,7 @@ return var/result = input(usr, "Please choose a new species","Species") as null|anything in GLOB.species_list if(result) - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Mass Species Change([result])") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Mass Species Change", "[result]")) log_admin("[key_name(usr)] turned all humans into [result]", 1) message_admins("\blue [key_name_admin(usr)] turned all humans into [result]") var/newtype = GLOB.species_list[result] @@ -294,12 +296,12 @@ if(!check_rights(R_FUN)) return usr.client.triple_ai() - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Triple AI") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Triple AI")) if("power") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Power All APCs") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Power All APCs")) log_admin("[key_name(usr)] made all areas powered", 1) message_admins("[key_name_admin(usr)] made all areas powered") power_restore() @@ -307,7 +309,7 @@ if("unpower") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Depower All APCs") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Depower All APCs")) log_admin("[key_name(usr)] made all areas unpowered", 1) message_admins("[key_name_admin(usr)] made all areas unpowered") power_failure() @@ -315,7 +317,7 @@ if("quickpower") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Power All SMESs") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Power All SMESs")) log_admin("[key_name(usr)] made all SMESs powered", 1) message_admins("[key_name_admin(usr)] made all SMESs powered") power_restore_quick() @@ -329,7 +331,7 @@ var/objective = copytext(sanitize(input("Enter an objective")),1,MAX_MESSAGE_LEN) if(!objective) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Traitor All ([objective])") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Traitor All", "[objective]")) for(var/mob/living/H in GLOB.player_list) if(!(ishuman(H)||istype(H, /mob/living/silicon/))) continue @@ -350,7 +352,7 @@ if("changebombcap") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Bomb Cap") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Bomb Cap")) var/newBombCap = input(usr,"What would you like the new bomb cap to be. (entered as the light damage range (the 3rd number in common (1,2,3) notation)) Must be above 4)", "New Bomb Cap", GLOB.MAX_EX_LIGHT_RANGE) as num|null if (!CONFIG_SET(number/bombcap, newBombCap)) @@ -362,7 +364,7 @@ if("blackout") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Break All Lights") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Break All Lights")) message_admins("[key_name_admin(usr)] broke all lights") for(var/obj/machinery/light/L in GLOB.machines) L.break_light_tube() @@ -378,7 +380,7 @@ if(animetype == "Cancel" || droptype == "Cancel") return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Chinese Cartoons") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Chinese Cartoons")) message_admins("[key_name_admin(usr)] made everything kawaii.") for(var/mob/living/carbon/human/H in GLOB.carbon_list) SEND_SOUND(H, sound('sound/ai/animes.ogg')) @@ -408,7 +410,7 @@ if("whiteout") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Fix All Lights") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Fix All Lights")) message_admins("[key_name_admin(usr)] fixed all lights") for(var/obj/machinery/light/L in GLOB.machines) L.fix() @@ -419,7 +421,7 @@ if("virus") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Virus Outbreak") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Virus Outbreak")) switch(alert("Do you want this to be a random disease or do you have something in mind?",,"Make Your Own","Random","Choose")) if("Make Your Own") AdminCreateVirus(usr.client) @@ -434,7 +436,7 @@ if("retardify") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Mass Braindamage") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Mass Braindamage")) for(var/mob/living/carbon/human/H in GLOB.player_list) to_chat(H, "You suddenly feel stupid.") H.adjustBrainLoss(60, 80) @@ -443,24 +445,17 @@ if("eagles")//SCRAW if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Egalitarian Station") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Egalitarian Station")) for(var/obj/machinery/door/airlock/W in GLOB.machines) if(is_station_level(W.z) && !istype(get_area(W), /area/bridge) && !istype(get_area(W), /area/crew_quarters) && !istype(get_area(W), /area/security/prison)) W.req_access = list() message_admins("[key_name_admin(usr)] activated Egalitarian Station mode") priority_announce("CentCom airlock control override activated. Please take this time to get acquainted with your coworkers.", null, 'sound/ai/commandreport.ogg') - if("ak47s") - if(!check_rights(R_FUN)) - return - message_admins("[key_name_admin(usr)] activated AK-47s for Everyone!") - usr.client.ak47s() - sound_to_playing_players('sound/misc/ak47s.ogg') - if("guns") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Summon Guns") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Summon Guns")) var/survivor_probability = 0 switch(alert("Do you want this to create survivors antagonists?",,"No Antags","Some Antags","All Antags!")) if("Some Antags") @@ -473,7 +468,7 @@ if("magic") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Summon Magic") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Summon Magic")) var/survivor_probability = 0 switch(alert("Do you want this to create survivors antagonists?",,"No Antags","Some Antags","All Antags!")) if("Some Antags") @@ -489,22 +484,22 @@ if(!SSevents.wizardmode) if(alert("Do you want to toggle summon events on?",,"Yes","No") == "Yes") summonevents() - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Activate Summon Events") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Summon Events", "Activate")) else switch(alert("What would you like to do?",,"Intensify Summon Events","Turn Off Summon Events","Nothing")) if("Intensify Summon Events") summonevents() - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Intensify Summon Events") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Summon Events", "Intensify")) if("Turn Off Summon Events") SSevents.toggleWizardmode() SSevents.resetFrequency() - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Disable Summon Events") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Summon Events", "Disable")) if("dorf") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Dwarf Beards") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Dwarf Beards")) for(var/mob/living/carbon/human/B in GLOB.carbon_list) B.facial_hair_style = "Dward Beard" B.update_hair() @@ -513,14 +508,14 @@ if("onlyone") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "There Can Be Only One") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("There Can Be Only One")) usr.client.only_one() sound_to_playing_players('sound/misc/highlander.ogg') if("delayed_onlyone") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "There Can Be Only One") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("There Can Be Only One")) usr.client.only_one_delayed() sound_to_playing_players('sound/misc/highlander_delayed.ogg') diff --git a/code/modules/admin/verbs/BrokenInhands.dm b/code/modules/admin/verbs/BrokenInhands.dm index 20721077df..112dff352b 100644 --- a/code/modules/admin/verbs/BrokenInhands.dm +++ b/code/modules/admin/verbs/BrokenInhands.dm @@ -31,3 +31,5 @@ fdel(F) WRITE_FILE(F, text) to_chat(world, "Completely successfully and written to [F]") + + diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm index 8a7c030458..56faa1f6c4 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm @@ -114,8 +114,8 @@ /proc/_range(Dist, Center = usr) return range(Dist, Center) -/proc/_regex(pattern, flags_1) - return regex(pattern, flags_1) +/proc/_regex(pattern, flags) + return regex(pattern, flags) /proc/_REGEX_QUOTE(text) return REGEX_QUOTE(text) diff --git a/code/modules/admin/verbs/cinematic.dm b/code/modules/admin/verbs/cinematic.dm index 7093ee23ea..5aa3258f07 100644 --- a/code/modules/admin/verbs/cinematic.dm +++ b/code/modules/admin/verbs/cinematic.dm @@ -8,4 +8,4 @@ var/datum/cinematic/choice = input(src,"Cinematic","Choose",null) as anything in subtypesof(/datum/cinematic) if(choice) - Cinematic(initial(choice.id),world,null) + Cinematic(initial(choice.id),world,null) \ No newline at end of file diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 0fe79e10de..43454f3bd4 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -107,6 +107,8 @@ GLOBAL_VAR(LastAdminCalledTarget) GLOBAL_PROTECT(LastAdminCalledTarget) GLOBAL_VAR(LastAdminCalledProc) GLOBAL_PROTECT(LastAdminCalledProc) +GLOBAL_LIST_EMPTY(AdminProcCallSpamPrevention) +GLOBAL_PROTECT(AdminProcCallSpamPrevention) /proc/WrapAdminProcCall(target, procname, list/arguments) var/current_caller = GLOB.AdminProcCaller @@ -114,9 +116,14 @@ GLOBAL_PROTECT(LastAdminCalledProc) if(!ckey) CRASH("WrapAdminProcCall with no ckey: [target] [procname] [english_list(arguments)]") if(current_caller && current_caller != ckey) - to_chat(usr, "Another set of admin called procs are still running, your proc will be run after theirs finish.") - UNTIL(!GLOB.AdminProcCaller) - to_chat(usr, "Running your proc") + if(!GLOB.AdminProcCallSpamPrevention[ckey]) + to_chat(usr, "Another set of admin called procs are still running, your proc will be run after theirs finish.") + GLOB.AdminProcCallSpamPrevention[ckey] = TRUE + UNTIL(!GLOB.AdminProcCaller) + to_chat(usr, "Running your proc") + GLOB.AdminProcCallSpamPrevention -= ckey + else + UNTIL(!GLOB.AdminProcCaller) GLOB.LastAdminCalledProc = procname if(target != GLOBAL_PROC) GLOB.LastAdminCalledTargetRef = "[REF(target)]" @@ -802,7 +809,7 @@ GLOBAL_PROTECT(LastAdminCalledProc) set category = "Debug" set name = "Display overlay Log" set desc = "Display SSoverlays log of everything that's passed through it." - + render_stats(SSoverlays.stats, src) /client/proc/cmd_display_init_log() diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index bcf58b1a4c..6f2bcb6c46 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -53,17 +53,6 @@ set category = "Debug" set name = "Radio report" - var/filters = list( - "1" = "GLOB.RADIO_TO_AIRALARM", - "2" = "GLOB.RADIO_FROM_AIRALARM", - "3" = "GLOB.RADIO_CHAT", - "4" = "GLOB.RADIO_ATMOSIA", - "5" = "GLOB.RADIO_NAVBEACONS", - "6" = "GLOB.RADIO_AIRLOCK", - "7" = "RADIO_SECBOT", - "8" = "RADIO_MULEBOT", - "_default" = "NO_FILTER" - ) var/output = "Radio Report
" for (var/fq in SSradio.frequencies) output += "Freq: [fq]
" @@ -74,9 +63,9 @@ for (var/filter in fqs.devices) var/list/f = fqs.devices[filter] if (!f) - output += "  [filters[filter]]: ERROR
" + output += "  [filter]: ERROR
" continue - output += "  [filters[filter]]: [f.len]
" + output += "  [filter]: [f.len]
" for (var/device in f) if (istype(device, /atom)) var/atom/A = device diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 5d0c2fe833..ce50378f4d 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -39,13 +39,13 @@ GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list( /client/proc/cmd_admin_rejuvenate, /datum/admins/proc/show_traitor_panel, /client/proc/disable_communication, - /client/proc/print_pointers, /client/proc/cmd_show_at_list, /client/proc/cmd_show_at_markers, /client/proc/manipulate_organs, /client/proc/start_line_profiling, /client/proc/stop_line_profiling, - /client/proc/show_line_profiling + /client/proc/show_line_profiling, + /client/proc/create_mapping_job_icons )) /obj/effect/debugging/mapfix_marker @@ -265,3 +265,31 @@ GLOBAL_VAR_INIT(say_disabled, FALSE) message_admins("[src.ckey] used 'Disable all communication verbs', killing all communication methods.") else message_admins("[src.ckey] used 'Disable all communication verbs', restoring all communication methods.") + +//This generates the icon states for job starting location landmarks. +/client/proc/create_mapping_job_icons() + set name = "Generate job landmarks icons" + set category = "Mapping" + var/icon/final = icon() + var/mob/living/carbon/human/dummy/D = new(locate(1,1,1)) //spawn on 1,1,1 so we don't have runtimes when items are deleted + D.setDir(SOUTH) + for(var/job in subtypesof(/datum/job)) + var/datum/job/JB = new job + switch(JB.title) + if("AI") + final.Insert(icon('icons/mob/ai.dmi', "ai", SOUTH, 1), "AI") + if("Cyborg") + final.Insert(icon('icons/mob/robots.dmi', "robot", SOUTH, 1), "Cyborg") + else + for(var/obj/item/I in D) + qdel(I) + randomize_human(D) + JB.equip(D, TRUE, FALSE) + COMPILE_OVERLAYS(D) + var/icon/I = icon(getFlatIcon(D), frame = 1) + final.Insert(I, JB.title) + qdel(D) + //Also add the x + for(var/x_number in 1 to 4) + final.Insert(icon('icons/mob/screen_gen.dmi', "x[x_number == 1 ? "" : x_number]"), "x[x_number == 1 ? "" : x_number]") + fcopy(final, "icons/mob/landmarks.dmi") \ No newline at end of file diff --git a/code/modules/admin/verbs/massmodvar.dm b/code/modules/admin/verbs/massmodvar.dm index 6043d23d62..db1150fb72 100644 --- a/code/modules/admin/verbs/massmodvar.dm +++ b/code/modules/admin/verbs/massmodvar.dm @@ -64,14 +64,14 @@ if(default == VV_NUM) var/dir_text = "" - if(dir < 0 && dir < 16) - if(dir & 1) + if(var_value > 0 && var_value < 16) + if(var_value & 1) dir_text += "NORTH" - if(dir & 2) + if(var_value & 2) dir_text += "SOUTH" - if(dir & 4) + if(var_value & 4) dir_text += "EAST" - if(dir & 8) + if(var_value & 8) dir_text += "WEST" if(dir_text) diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index f6e8d93e62..e4c86315b5 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -448,11 +448,11 @@ GLOBAL_PROTECT(VVpixelmovement) if(tdir > 0 && tdir < 16) if(tdir & 1) dir_text += "NORTH" - if(dir & 2) + if(tdir & 2) dir_text += "SOUTH" - if(dir & 4) + if(tdir & 4) dir_text += "EAST" - if(dir & 8) + if(tdir & 8) dir_text += "WEST" if(dir_text) @@ -567,14 +567,14 @@ GLOBAL_PROTECT(VVpixelmovement) if(default == VV_NUM) var/dir_text = "" - if(dir < 0 && dir < 16) - if(dir & 1) + if(var_value > 0 && var_value < 16) + if(var_value & 1) dir_text += "NORTH" - if(dir & 2) + if(var_value & 2) dir_text += "SOUTH" - if(dir & 4) + if(var_value & 4) dir_text += "EAST" - if(dir & 8) + if(var_value & 8) dir_text += "WEST" if(dir_text) diff --git a/code/modules/admin/verbs/panicbunker.dm b/code/modules/admin/verbs/panicbunker.dm index f7d1d60aab..fc0cab66c9 100644 --- a/code/modules/admin/verbs/panicbunker.dm +++ b/code/modules/admin/verbs/panicbunker.dm @@ -12,5 +12,4 @@ message_admins("[key_name_admin(usr)] has toggled the Panic Bunker, it is now [new_pb ? "enabled" : "disabled"].") if (new_pb && !SSdbcore.Connect()) message_admins("The Database is not connected! Panic bunker will not work until the connection is reestablished.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Panic Bunker", "[new_pb]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Panic Bunker", "[new_pb ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 29d95c639f..33fb3867d1 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -80,18 +80,37 @@ to_chat(src, "For youtube-dl shortcuts like ytsearch: please use the appropriate full url from the website.") return var/shell_scrubbed_input = shell_url_scrub(web_sound_input) - var/list/output = world.shelleo("[ytdl] --format \"bestaudio\[ext=mp3]/best\[ext=mp4]\[height<=360]/bestaudio\[ext=m4a]/bestaudio\[ext=aac]\" --get-url \"[shell_scrubbed_input]\"") + var/list/output = world.shelleo("[ytdl] --format \"bestaudio\[ext=mp3]/best\[ext=mp4]\[height<=360]/bestaudio\[ext=m4a]/bestaudio\[ext=aac]\" --dump-single-json --no-playlist -- \"[shell_scrubbed_input]\"") var/errorlevel = output[SHELLEO_ERRORLEVEL] var/stdout = output[SHELLEO_STDOUT] var/stderr = output[SHELLEO_STDERR] if(!errorlevel) - var/static/regex/content_url_regex = regex("https?://\\S+") - if(content_url_regex.Find(stdout)) - web_sound_url = content_url_regex.match + var/list/data + try + data = json_decode(stdout) + catch(var/exception/e) + to_chat(src, "Youtube-dl JSON parsing FAILED:") + to_chat(src, "[e]: [stdout]") + return + + if (data["url"]) + web_sound_url = data["url"] + var/title = "[data["title"]]" + var/webpage_url = title + if (data["webpage_url"]) + webpage_url = "[title]" + + var/res = alert(usr, "Show the title of and link to this song to the players?\n[title]",, "No", "Yes", "Cancel") + switch(res) + if("Yes") + to_chat(world, "An admin played: [webpage_url]") + if("Cancel") + return if(SSevents.holidays && SSevents.holidays[APRIL_FOOLS]) pitch = pick(0.5, 0.7, 0.8, 0.85, 0.9, 0.95, 1.1, 1.2, 1.4, 1.6, 2.0, 2.5) to_chat(src, "You feel the Honkmother messing with your song...") + SSblackbox.record_feedback("nested tally", "played_url", 1, list("[ckey]", "[web_sound_input]")) log_admin("[key_name(src)] played web sound: [web_sound_input]") message_admins("[key_name(src)] played web sound: [web_sound_input]") diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm index fc81ca3a02..a9b5093e99 100644 --- a/code/modules/admin/verbs/possess.dm +++ b/code/modules/admin/verbs/possess.dm @@ -21,25 +21,26 @@ usr.loc = O usr.real_name = O.name usr.name = O.name - usr.client.eye = O + usr.reset_perspective(O) usr.control_object = O SSblackbox.record_feedback("tally", "admin_verb", 1, "Possess Object") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/proc/release(obj/O in world) +/proc/release() set name = "Release Obj" set category = "Object" //usr.loc = get_turf(usr) if(usr.control_object && usr.name_archive) //if you have a name archived and if you are actually relassing an object usr.real_name = usr.name_archive + usr.name_archive = "" usr.name = usr.real_name if(ishuman(usr)) var/mob/living/carbon/human/H = usr H.name = H.get_visible_name() -// usr.regenerate_icons() //So the name is updated properly - usr.loc = O.loc - usr.client.eye = usr + + usr.loc = get_turf(usr.control_object) + usr.reset_perspective() usr.control_object = null SSblackbox.record_feedback("tally", "admin_verb", 1, "Release Object") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index b37ff9ceb4..e5f08b82bc 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -125,7 +125,7 @@ var/msg = "[key_name_admin(usr)] has toggled [key_name_admin(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]" message_admins(msg) admin_ticket_log(M, msg) - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Godmode", "[M.status_flags & GODMODE]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Godmode", "[M.status_flags & GODMODE ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /proc/cmd_admin_mute(whom, mute_type, automute = 0) @@ -747,7 +747,7 @@ Traitors and the like can also be revived with the previous role mostly intact. else to_chat(usr, "Random events disabled") message_admins("Admin [key_name_admin(usr)] has disabled random events.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Random Events", "[new_are]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Random Events", "[new_are ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/admin_change_sec_level() @@ -980,7 +980,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits to_chat(usr, "You toggled your admin antag HUD [adding_hud ? "ON" : "OFF"].") message_admins("[key_name_admin(usr)] toggled their admin antag HUD [adding_hud ? "ON" : "OFF"].") log_admin("[key_name(usr)] toggled their admin antag HUD [adding_hud ? "ON" : "OFF"].") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Antag HUD", "[adding_hud]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Antag HUD", "[adding_hud ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/has_antag_hud() var/datum/atom_hud/A = GLOB.huds[ANTAG_HUD_TRAITOR] @@ -1199,7 +1199,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits if (GLOB.hub_visibility && !world.reachable) message_admins("WARNING: The server will not show up on the hub because byond is detecting that a filewall is blocking incoming connections.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggled Hub Visibility", "[GLOB.hub_visibility]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggled Hub Visibility", "[GLOB.hub_visibility ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/smite(mob/living/carbon/human/target as mob) set name = "Smite" diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 315e28df02..7e0aa59816 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -114,3 +114,4 @@ /obj/item/device/assembly/interact(mob/user) return //HTML MENU FOR WIRES GOES HERE + diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 6ac1ef093d..439ea314bb 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -68,11 +68,10 @@ a_right.on_found(finder) /obj/item/device/assembly_holder/Move() - ..() + . = ..() if(a_left && a_right) a_left.holder_movement() a_right.holder_movement() - return /obj/item/device/assembly_holder/attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess if(a_left && a_right) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 0b9d42e42e..565465ec6d 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -83,10 +83,9 @@ /obj/item/device/assembly/infra/Move() var/t = dir - ..() + . = ..() setDir(t) qdel(first) - return /obj/item/device/assembly/infra/holder_movement() if(!holder) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index d9fdab39be..1b0102abdd 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -9,8 +9,8 @@ wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE attachable = 1 - var/code = 30 - var/frequency = 1457 + var/code = DEFAULT_SIGNALER_CODE + var/frequency = FREQ_SIGNALER var/delay = 0 var/datum/radio_frequency/radio_connection @@ -73,7 +73,7 @@ Code: if (href_list["freq"]) var/new_frequency = (frequency + text2num(href_list["freq"])) - if(new_frequency < 1200 || new_frequency > 1600) + if(new_frequency < MIN_FREE_FREQ || new_frequency > MAX_FREE_FREQ) new_frequency = sanitize_frequency(new_frequency) set_frequency(new_frequency) @@ -105,10 +105,7 @@ Code: if(!radio_connection) return - var/datum/signal/signal = new - signal.source = src - signal.encryption = code - signal.data["message"] = "ACTIVATE" + var/datum/signal/signal = new(list("code" = code)) radio_connection.post_signal(src, signal) var/time = time2text(world.realtime,"hh:mm:ss") @@ -122,7 +119,7 @@ Code: /obj/item/device/assembly/signaler/receive_signal(datum/signal/signal) if(!signal) return 0 - if(signal.encryption != code) + if(signal.data["code"] != code) return 0 if(!(src.wires & WIRE_RADIO_RECEIVE)) return 0 @@ -132,13 +129,9 @@ Code: /obj/item/device/assembly/signaler/proc/set_frequency(new_frequency) - if(!SSradio) - sleep(20) - if(!SSradio) - return SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_CHAT) + radio_connection = SSradio.add_object(src, frequency, RADIO_SIGNALER) return // Embedded signaller used in grenade construction. @@ -175,7 +168,7 @@ Code: /obj/item/device/assembly/signaler/anomaly/receive_signal(datum/signal/signal) if(!signal) return 0 - if(signal.encryption != code) + if(signal.data["code"] != code) return 0 for(var/obj/effect/anomaly/A in get_turf(src)) A.anomalyNeutralize() diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 617f384592..913176b662 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -1,91 +1,91 @@ -/obj/item/device/assembly/voice - name = "voice analyzer" - desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated." - icon_state = "voice" - materials = list(MAT_METAL=500, MAT_GLASS=50) +/obj/item/device/assembly/voice + name = "voice analyzer" + desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated." + icon_state = "voice" + materials = list(MAT_METAL=500, MAT_GLASS=50) flags_1 = HEAR_1 - attachable = 1 - verb_say = "beeps" - verb_ask = "beeps" - verb_exclaim = "beeps" - var/listening = 0 - var/recorded = "" //the activation message - var/mode = 1 - var/static/list/modes = list("inclusive", - "exclusive", - "recognizer", - "voice sensor") - -/obj/item/device/assembly/voice/examine(mob/user) - ..() - to_chat(user, "Use a multitool to swap between \"inclusive\", \"exclusive\", \"recognizer\", and \"voice sensor\" mode.") - -/obj/item/device/assembly/voice/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - if(speaker == src) - return - - if(listening && !radio_freq) - record_speech(speaker, raw_message, message_language) - else - if(check_activation(speaker, raw_message)) - addtimer(CALLBACK(src, .proc/pulse, 0), 10) - -/obj/item/device/assembly/voice/proc/record_speech(atom/movable/speaker, raw_message, datum/language/message_language) - switch(mode) - if(1) - recorded = raw_message - listening = 0 - say("Activation message is '[recorded]'.", message_language) - if(2) - recorded = raw_message - listening = 0 - say("Activation message is '[recorded]'.", message_language) - if(3) - recorded = speaker.GetVoice() - listening = 0 - say("Your voice pattern is saved.", message_language) - if(4) - if(length(raw_message)) - addtimer(CALLBACK(src, .proc/pulse, 0), 10) - -/obj/item/device/assembly/voice/proc/check_activation(atom/movable/speaker, raw_message) - . = 0 - switch(mode) - if(1) - if(findtext(raw_message, recorded)) - . = 1 - if(2) - if(raw_message == recorded) - . = 1 - if(3) - if(speaker.GetVoice() == recorded) - . = 1 - if(4) - if(length(raw_message)) - . = 1 - -/obj/item/device/assembly/voice/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/device/multitool)) - mode %= modes.len - mode++ - to_chat(user, "You set [src] into a [modes[mode]] mode.") - listening = 0 - recorded = "" - else - return ..() - -/obj/item/device/assembly/voice/activate() - if(secured) - if(!holder) - listening = !listening - say("[listening ? "Now" : "No longer"] recording input.") - -/obj/item/device/assembly/voice/attack_self(mob/user) - if(!user) - return 0 - activate() - return 1 - -/obj/item/device/assembly/voice/toggle_secure() - . = ..() - listening = 0 + attachable = 1 + verb_say = "beeps" + verb_ask = "beeps" + verb_exclaim = "beeps" + var/listening = 0 + var/recorded = "" //the activation message + var/mode = 1 + var/static/list/modes = list("inclusive", + "exclusive", + "recognizer", + "voice sensor") + +/obj/item/device/assembly/voice/examine(mob/user) + ..() + to_chat(user, "Use a multitool to swap between \"inclusive\", \"exclusive\", \"recognizer\", and \"voice sensor\" mode.") + +/obj/item/device/assembly/voice/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + if(speaker == src) + return + + if(listening && !radio_freq) + record_speech(speaker, raw_message, message_language) + else + if(check_activation(speaker, raw_message)) + addtimer(CALLBACK(src, .proc/pulse, 0), 10) + +/obj/item/device/assembly/voice/proc/record_speech(atom/movable/speaker, raw_message, datum/language/message_language) + switch(mode) + if(1) + recorded = raw_message + listening = 0 + say("Activation message is '[recorded]'.", message_language) + if(2) + recorded = raw_message + listening = 0 + say("Activation message is '[recorded]'.", message_language) + if(3) + recorded = speaker.GetVoice() + listening = 0 + say("Your voice pattern is saved.", message_language) + if(4) + if(length(raw_message)) + addtimer(CALLBACK(src, .proc/pulse, 0), 10) + +/obj/item/device/assembly/voice/proc/check_activation(atom/movable/speaker, raw_message) + . = 0 + switch(mode) + if(1) + if(findtext(raw_message, recorded)) + . = 1 + if(2) + if(raw_message == recorded) + . = 1 + if(3) + if(speaker.GetVoice() == recorded) + . = 1 + if(4) + if(length(raw_message)) + . = 1 + +/obj/item/device/assembly/voice/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/device/multitool)) + mode %= modes.len + mode++ + to_chat(user, "You set [src] into a [modes[mode]] mode.") + listening = 0 + recorded = "" + else + return ..() + +/obj/item/device/assembly/voice/activate() + if(secured) + if(!holder) + listening = !listening + say("[listening ? "Now" : "No longer"] recording input.") + +/obj/item/device/assembly/voice/attack_self(mob/user) + if(!user) + return 0 + activate() + return 1 + +/obj/item/device/assembly/voice/toggle_secure() + . = ..() + listening = 0 diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 84b163748f..96b7df597c 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -80,8 +80,8 @@ var/shorted = 0 var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone - var/frequency = 1439 - var/alarm_frequency = 1437 + var/frequency = FREQ_ATMOS_CONTROL + var/alarm_frequency = FREQ_ATMOS_ALARMS var/datum/radio_frequency/radio_connection var/list/TLV = list( // Breathable air. @@ -427,21 +427,16 @@ /obj/machinery/airalarm/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_TO_AIRALARM) + radio_connection = SSradio.add_object(src, frequency, RADIO_TO_AIRALARM) /obj/machinery/airalarm/proc/send_signal(target, list/command)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise if(!radio_connection) return 0 - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = command + var/datum/signal/signal = new(command) signal.data["tag"] = target signal.data["sigtype"] = "command" - - radio_connection.post_signal(src, signal, GLOB.RADIO_FROM_AIRALARM) + radio_connection.post_signal(src, signal, RADIO_FROM_AIRALARM) return 1 @@ -631,12 +626,10 @@ var/area/A = get_area(src) - var/datum/signal/alert_signal = new - alert_signal.source = src - alert_signal.transmission_method = 1 - alert_signal.data["zone"] = A.name - alert_signal.data["type"] = "Atmospheric" - + var/datum/signal/alert_signal = new(list( + "zone" = A.name, + "type" = "Atmospheric" + )) if(alert_level==2) alert_signal.data["alert"] = "severe" else if (alert_level==1) @@ -644,7 +637,7 @@ else if (alert_level==0) alert_signal.data["alert"] = "clear" - frequency.post_signal(src, alert_signal,null,-1) + frequency.post_signal(src, alert_signal, range = -1) /obj/machinery/airalarm/proc/apply_danger_level() var/area/A = get_area(src) @@ -741,7 +734,7 @@ return return ..() - + /obj/machinery/airalarm/AltClick(mob/user) ..() if(!issilicon(user) && (!user.canUseTopic(src, be_close=TRUE) || !isturf(loc))) @@ -749,7 +742,7 @@ return else togglelock(user) - + /obj/machinery/airalarm/proc/togglelock(mob/living/user) if(stat & (NOPOWER|BROKEN)) to_chat(user, "It does nothing!") diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index 63af8e8aa2..7f37e049dd 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -15,6 +15,7 @@ anchored = TRUE density = TRUE + var/global/const/CIRC_LEFT = 1 var/global/const/CIRC_RIGHT = 2 @@ -39,6 +40,8 @@ var/transfer_moles = pressure_delta*air1.volume/(air2.temperature * R_IDEAL_GAS_EQUATION) last_pressure_delta = pressure_delta + + //Actually transfer the gas var/datum/gas_mixture/removed = air2.remove(transfer_moles) update_parents() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index ec11ce588c..9c806312a2 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -131,17 +131,13 @@ Acts like a normal vent, but has an input AND output. SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = SSradio.add_object(src, frequency, filter = GLOB.RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/dp_vent_pump/proc/broadcast_status() if(!radio_connection) return - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( + var/datum/signal/signal = new(list( "tag" = id, "device" = "ADVP", "power" = on, @@ -151,8 +147,8 @@ Acts like a normal vent, but has an input AND output. "output" = output_pressure_max, "external" = external_pressure_bound, "sigtype" = "status" - ) - radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA) + )) + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/dp_vent_pump/atmosinit() ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index 00cdd6fca7..2fcc546cec 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -72,25 +72,20 @@ Passive gate is similar to the regular pump except: SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = SSradio.add_object(src, frequency, filter = GLOB.RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/passive_gate/proc/broadcast_status() if(!radio_connection) return - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( + var/datum/signal/signal = new(list( "tag" = id, "device" = "AGP", "power" = on, "target_output" = target_pressure, "sigtype" = "status" - ) - - radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA) + )) + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/passive_gate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 47dc2a2dae..6ceaa8f461 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -75,25 +75,20 @@ Thus, the two variables affect pump operation are set in New(): SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = SSradio.add_object(src, frequency, filter = GLOB.RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/pump/proc/broadcast_status() if(!radio_connection) return - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( + var/datum/signal/signal = new(list( "tag" = id, "device" = "AGP", "power" = on, "target_output" = target_pressure, "sigtype" = "status" - ) - - radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA) + )) + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index e21d5b2d8a..6a33e72324 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -77,17 +77,13 @@ Thus, the two variables affect pump operation are set in New(): if(!radio_connection) return - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( + var/datum/signal/signal = new(list( "tag" = id, "device" = "APV", "power" = on, "transfer_rate" = transfer_rate, "sigtype" = "status" - ) + )) radio_connection.post_signal(src, signal) /obj/machinery/atmospherics/components/binary/volume_pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 20e93a220e..5281c3bad7 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -29,7 +29,7 @@ SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/atmospherics/components/trinary/filter/New() ..() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 87d6387b99..7f3699ff86 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -42,7 +42,7 @@ radio = new(src) radio.keyslot = new radio_key - radio.subspace_transmission = 1 + radio.subspace_transmission = TRUE radio.canhear_range = 0 radio.recalculateChannels() @@ -182,7 +182,7 @@ mob_occupant.Unconscious((mob_occupant.bodytemperature * unconscious_factor) * 2000) if(beaker) if(reagent_transfer == 0) // Magically transfer reagents. Because cryo magic. - beaker.reagents.trans_to(occupant, 1, 10 * efficiency) // Transfer reagents, multiplied because cryo magic. + beaker.reagents.trans_to(occupant, 1, efficiency * 0.25) // Transfer reagents. beaker.reagents.reaction(occupant, VAPOR) air1.gases[/datum/gas/oxygen][MOLES] -= 2 / efficiency //Let's use gas for this if(++reagent_transfer >= 10 * efficiency) // Throttle reagent transfer (higher efficiency will transfer the same amount but consume less from the beaker). diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index 9759de92f5..6eec4558ee 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -93,19 +93,14 @@ if(!radio_connection) return - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( + var/datum/signal/signal = new(list( "tag" = id, "device" = "AO", "power" = on, "volume_rate" = volume_rate, //"timestamp" = world.time, "sigtype" = "status" - ) - + )) radio_connection.post_signal(src, signal) /obj/machinery/atmospherics/components/unary/outlet_injector/atmosinit() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index f9a87ace42..3acc12114f 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -26,7 +26,7 @@ // INT_BOUND: Do not pass internal_pressure_bound // NO_BOUND: Do not pass either - var/frequency = 1439 + var/frequency = FREQ_ATMOS_CONTROL var/datum/radio_frequency/radio_connection var/radio_filter_out var/radio_filter_in @@ -178,11 +178,7 @@ if(!radio_connection) return - var/datum/signal/signal = new - signal.transmission_method = 1 // radio signal - signal.source = src - - signal.data = list( + var/datum/signal/signal = new(list( "tag" = id_tag, "frequency" = frequency, "device" = "VP", @@ -193,7 +189,7 @@ "internal" = internal_pressure_bound, "external" = external_pressure_bound, "sigtype" = "status" - ) + )) var/area/A = get_area(src) if(!A.air_vent_names[id_tag]) @@ -206,8 +202,8 @@ /obj/machinery/atmospherics/components/unary/vent_pump/atmosinit() //some vents work his own spesial way - radio_filter_in = frequency==1439?(GLOB.RADIO_FROM_AIRALARM):null - radio_filter_out = frequency==1439?(GLOB.RADIO_TO_AIRALARM):null + radio_filter_in = frequency==FREQ_ATMOS_CONTROL?(RADIO_FROM_AIRALARM):null + radio_filter_out = frequency==FREQ_ATMOS_CONTROL?(RADIO_TO_AIRALARM):null if(frequency) set_frequency(frequency) broadcast_status() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index b882d21c98..bbf614ac84 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -23,7 +23,7 @@ var/widenet = 0 //is this scrubber acting on the 3x3 area around it. var/list/turf/adjacent_turfs = list() - var/frequency = 1439 + var/frequency = FREQ_ATMOS_CONTROL var/datum/radio_frequency/radio_connection var/radio_filter_out var/radio_filter_in @@ -81,7 +81,7 @@ icon_state = "scrub_off" return - if(scrubbing & SCRUBBING) + if(scrubbing & SCRUBBING) if(widenet) icon_state = "scrub_wide" else @@ -98,16 +98,12 @@ if(!radio_connection) return FALSE - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - var/list/f_types = list() for(var/path in GLOB.meta_gas_info) var/list/gas = GLOB.meta_gas_info[path] f_types += list(list("gas_id" = gas[META_GAS_ID], "gas_name" = gas[META_GAS_NAME], "enabled" = (path in filter_types))) - signal.data = list( + var/datum/signal/signal = new(list( "tag" = id_tag, "frequency" = frequency, "device" = "VS", @@ -117,7 +113,7 @@ "widenet" = widenet, "filter_types" = f_types, "sigtype" = "status" - ) + )) var/area/A = get_area(src) if(!A.air_scrub_names[id_tag]) @@ -130,8 +126,8 @@ return TRUE /obj/machinery/atmospherics/components/unary/vent_scrubber/atmosinit() - radio_filter_in = frequency==initial(frequency)?(GLOB.RADIO_FROM_AIRALARM):null - radio_filter_out = frequency==initial(frequency)?(GLOB.RADIO_TO_AIRALARM):null + radio_filter_in = frequency==initial(frequency)?(RADIO_FROM_AIRALARM):null + radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null if(frequency) set_frequency(frequency) broadcast_status() @@ -205,7 +201,7 @@ return TRUE -//There is no easy way for an object to be notified of changes to atmos can pass flags_1 +//There is no easy way for an object to be notified of changes to atmos can pass flags // So we check every machinery process (2 seconds) /obj/machinery/atmospherics/components/unary/vent_scrubber/process() if(widenet) diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index a26b379735..ccddc8f8ac 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -77,15 +77,12 @@ if(!radio_connection) return - var/datum/signal/signal = new - signal.source = src - signal.transmission_method = 1 - signal.data = list( + var/datum/signal/signal = new(list( "id_tag" = id_tag, "device" = "AM", "pressure" = round(env_pressure), "sigtype" = "status" - ) + )) radio_connection.post_signal(src, signal) /obj/machinery/meter/proc/status() diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 657bbb6499..adcd9fd5b2 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -510,7 +510,7 @@ /datum/outfit/ctf/red/post_equip(mob/living/carbon/human/H) ..() var/obj/item/device/radio/R = H.ears - R.set_frequency(GLOB.REDTEAM_FREQ) + R.set_frequency(FREQ_CTF_RED) R.freqlock = TRUE R.independent = TRUE H.dna.species.stunmod = 0 @@ -518,7 +518,7 @@ /datum/outfit/ctf/blue/post_equip(mob/living/carbon/human/H) ..() var/obj/item/device/radio/R = H.ears - R.set_frequency(GLOB.BLUETEAM_FREQ) + R.set_frequency(FREQ_CTF_BLUE) R.freqlock = TRUE R.independent = TRUE H.dna.species.stunmod = 0 @@ -533,7 +533,6 @@ var/team = WHITE_TEAM time_between_triggers = 1 anchored = TRUE - flags_2 = SLOWS_WHILE_IN_HAND_2 alpha = 255 /obj/structure/trap/examine(mob/user) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 1f5df77be7..a10b958db0 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -21,6 +21,7 @@ var/brute_damage = 0 var/oxy_damage = 0 var/burn_damage = 0 + var/datum/disease/disease = null //Do they start with a pre-spawned disease? var/mob_color //Change the mob's color var/assignedrole var/show_flavour = TRUE @@ -70,6 +71,8 @@ M.gender = mob_gender if(faction) M.faction = list(faction) + if(disease) + M.ForceContractDisease(new disease) if(death) M.death(1) //Kills the new mob @@ -259,6 +262,19 @@ ///////////Civilians////////////////////// +/obj/effect/mob_spawn/human/corpse/assistant + name = "Assistant" + outfit = /datum/outfit/job/assistant + +/obj/effect/mob_spawn/human/corpse/assistant/beesease_infection + disease = /datum/disease/beesease + +/obj/effect/mob_spawn/human/corpse/assistant/brainrot_infection + disease = /datum/disease/brainrot + +/obj/effect/mob_spawn/human/corpse/assistant/spanishflu_infection + disease = /datum/disease/fluspanish + /obj/effect/mob_spawn/human/cook name = "Cook" outfit = /datum/outfit/job/cook @@ -276,7 +292,7 @@ name = "sleeper" icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" - flavour_text = "You are a space doctor!" + flavour_text = "You are a space doctor!" assignedrole = "Space Doctor" /obj/effect/mob_spawn/human/doctor/alive/equip(mob/living/carbon/human/H) @@ -331,7 +347,7 @@ name = "bartender sleeper" icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" - flavour_text = "You are a space bartender!" + flavour_text = "You are a space bartender!" assignedrole = "Space Bartender" /datum/outfit/spacebartender @@ -355,7 +371,7 @@ name = "beach bum sleeper" icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" - flavour_text = "You are a beach bum!" + flavour_text = "You are a beach bum!" assignedrole = "Beach Bum" /datum/outfit/beachbum @@ -433,7 +449,7 @@ name = "sleeper" icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" - flavour_text = "You are a Nanotrasen Commander!" + flavour_text = "You are a Nanotrasen Commander!" /obj/effect/mob_spawn/human/nanotrasensoldier/alive death = FALSE @@ -443,7 +459,7 @@ icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" faction = "nanotrasenprivate" - flavour_text = "You are a Nanotrasen Private Security Officer!" + flavour_text = "You are a Nanotrasen Private Security Officer!" /////////////////Spooky Undead////////////////////// @@ -459,7 +475,7 @@ roundstart = FALSE icon = 'icons/effects/blood.dmi' icon_state = "remains" - flavour_text = "By unknown powers, your skeletal remains have been reanimated! Walk this mortal plain and terrorize all living adventurers who dare cross your path." + flavour_text = "By unknown powers, your skeletal remains have been reanimated! Walk this mortal plain and terrorize all living adventurers who dare cross your path." assignedrole = "Skeleton" /obj/effect/mob_spawn/human/zombie @@ -473,7 +489,7 @@ roundstart = FALSE icon = 'icons/effects/blood.dmi' icon_state = "remains" - flavour_text = "By unknown powers, your rotting remains have been resurrected! Walk this mortal plain and terrorize all living adventurers who dare cross your path." + flavour_text = "By unknown powers, your rotting remains have been resurrected! Walk this mortal plain and terrorize all living adventurers who dare cross your path." /obj/effect/mob_spawn/human/abductor diff --git a/code/modules/awaymissions/exile.dm b/code/modules/awaymissions/exile.dm index 2c683e91c9..74a9a30d7c 100644 --- a/code/modules/awaymissions/exile.dm +++ b/code/modules/awaymissions/exile.dm @@ -1,13 +1,13 @@ - -/obj/structure/closet/secure_closet/exile - name = "exile implants" + +/obj/structure/closet/secure_closet/exile + name = "exile implants" req_access = list(ACCESS_HOS) - -/obj/structure/closet/secure_closet/exile/New() - ..() - new /obj/item/implanter/exile(src) - new /obj/item/implantcase/exile(src) - new /obj/item/implantcase/exile(src) - new /obj/item/implantcase/exile(src) - new /obj/item/implantcase/exile(src) + +/obj/structure/closet/secure_closet/exile/New() + ..() + new /obj/item/implanter/exile(src) + new /obj/item/implantcase/exile(src) + new /obj/item/implantcase/exile(src) + new /obj/item/implantcase/exile(src) + new /obj/item/implantcase/exile(src) new /obj/item/implantcase/exile(src) \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index bf256fecbd..7fefde76b0 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -139,7 +139,7 @@ /obj/structure/academy_wizard_spawner/proc/summon_wizard() var/turf/T = src.loc var/mob/living/carbon/human/wizbody = new(T) - wizbody.fully_replace_character_name("Academy Teacher") + wizbody.fully_replace_character_name(wizbody.real_name, "Academy Teacher") wizbody.mind_initialize() var/datum/mind/wizmind = wizbody.mind wizmind.special_role = "Academy Defender" diff --git a/code/modules/awaymissions/mission_code/caves.dm b/code/modules/awaymissions/mission_code/caves.dm index 05885fbe19..fd2f8f18af 100644 --- a/code/modules/awaymissions/mission_code/caves.dm +++ b/code/modules/awaymissions/mission_code/caves.dm @@ -42,7 +42,7 @@ /obj/item/paper/fluff/awaymissions/caves/work_notice name = "work notice" - info = "
Survival Info For Miners


The caves are an unforgiving place, the only thing you'll have to traverse is the supplies in your locker and your own wit. Travel in packs when mining and try to shut down the monster dens before they overwhelm you. The job is dangerous but the haul is good, so remember this infomation and hopefully we'll all go home alive.
" + info = "
Survival Info For Miners


The caves are an unforgiving place, the only thing you'll have to traverse is the supplies in your locker and your own wit. Travel in packs when mining and try to shut down the monster dens before they overwhelm you. The job is dangerous but the haul is good, so remember this information and hopefully we'll all go home alive.
" /obj/item/paper/fluff/awaymissions/caves/shipment_notice name = "shipment notice" diff --git a/code/modules/awaymissions/mission_code/centcomAway.dm b/code/modules/awaymissions/mission_code/centcomAway.dm index 11c3f14012..082d2d3c9e 100644 --- a/code/modules/awaymissions/mission_code/centcomAway.dm +++ b/code/modules/awaymissions/mission_code/centcomAway.dm @@ -60,4 +60,4 @@ teams never did figure out what happened that last time... and I can't wrap my head \ around it myself. Why would a shuttle full of evacuees all snap and beat each other \ to death the moment they reached safety?
\ - - D. Cereza" + - D. Cereza" \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index 4aa6e88249..65ed8f95b7 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -136,41 +136,18 @@ GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]") /* * Modified Nar-Sie */ -/obj/singularity/narsie/sc_Narsie +/obj/singularity/narsie/mini desc = "Your body becomes weak and your feel your mind slipping away as you try to comprehend what you know can't be possible." move_self = 0 //Contianed narsie does not move! grav_pull = 0 //Contained narsie does not pull stuff in! - var/uneatable = list(/turf/open/space, /obj/effect/overlay, /mob/living/simple_animal/hostile/construct) //Override this to prevent no adminlog runtimes and admin warnings about a singularity without containment -/obj/singularity/narsie/sc_Narsie/admin_investigate_setup() +/obj/singularity/narsie/mini/admin_investigate_setup() return -/obj/singularity/narsie/sc_Narsie/process() +/obj/singularity/narsie/mini/process() eat() if(prob(25)) mezzer() -/obj/singularity/narsie/sc_Narsie/consume(atom/A) - if(is_type_in_list(A, uneatable)) - return 0 - if(isliving(A)) - var/mob/living/L = A - L.gib() - else if(istype(A, /obj/)) - var/obj/O = A - O.ex_act(EXPLODE_DEVASTATE) - if(O) - qdel(O) - else if(isturf(A)) - var/turf/T = A - if(T.intact) - for(var/obj/O in T.contents) - if(O.level != 1) - continue - if(O.invisibility == INVISIBILITY_MAXIMUM) - src.consume(O) - T.ChangeTurf(/turf/open/space) - return - -/obj/singularity/narsie/sc_Narsie/ex_act() +/obj/singularity/narsie/mini/ex_act() return \ No newline at end of file diff --git a/code/modules/awaymissions/pamphlet.dm b/code/modules/awaymissions/pamphlet.dm index a1d12ae90a..94ebb91972 100644 --- a/code/modules/awaymissions/pamphlet.dm +++ b/code/modules/awaymissions/pamphlet.dm @@ -1,39 +1,39 @@ -/obj/item/paper/pamphlet - name = "pamphlet" - icon_state = "pamphlet" +/obj/item/paper/pamphlet + name = "pamphlet" + icon_state = "pamphlet" /obj/item/paper/pamphlet/gateway - info = "Welcome to the Nanotrasen Gateway project...
\ - Congratulations! If you're reading this, you and your superiors have decided that you're \ - ready to commit to a life spent colonising the rolling hills of far away worlds. You \ - must be ready for a lifetime of adventure, a little bit of hard work, and an award \ - winning dental plan- but that's not all the Nanotrasen Gateway project has to offer.
\ -
Because we care about you, we feel it is only fair to make sure you know the risks \ - before you commit to joining the Nanotrasen Gateway project. All away destinations have \ - been fully scanned by a Nanotrasen expeditionary team, and are certified to be 100% safe. \ - We've even left a case of space beer along with the basic materials you'll need to expand \ - Nanotrasen's operational area and start your new life.

\ - Gateway Operation Basics
\ - All Nanotrasen approved Gateways operate on the same basic principals. They operate off \ - area equipment power as you would expect, and without this supply, it cannot safely function, \ - causinng it to reject all attempts at operation.

\ - Once it is correctly setup, and once it has enough power to operate, the Gateway will begin \ - searching for an output location. The amount of time this takes is variable, but the Gateway \ - interface will give you an estimate accurate to the minute. Power loss will not interrupt the \ - searching process. Influenza will not interrupt the searching process. Temporal anomalies \ - may cause the estimate to be inaccurate, but will not interrupt the searching process.

\ - Life On The Other Side
\ - Once you have traversed the Gateway, you may experience some disorientation. Do not panic. \ - This is a normal side effect of travelling vast distances in a short period of time. You should \ - survey the immediate area, and attempt to locate your complimentary case of space beer. Our \ - expeditionary teams have ensured the complete safety of all away locations, but in a small \ - number of cases, the Gateway they have established may not be immediately obvious. \ - Do not panic if you cannot locate the return Gateway. Begin colonisation of the destination. \ -

A New World
\ - As a participant in the Nanotrasen Gateway Project, you will be on the frontiers of space. \ - Though complete safety is assured, participants are advised to prepare for inhospitable \ - environs." - -//we don't want the silly text overlay! -/obj/item/paper/pamphlet/update_icon() - return + info = "Welcome to the Nanotrasen Gateway project...
\ + Congratulations! If you're reading this, you and your superiors have decided that you're \ + ready to commit to a life spent colonising the rolling hills of far away worlds. You \ + must be ready for a lifetime of adventure, a little bit of hard work, and an award \ + winning dental plan- but that's not all the Nanotrasen Gateway project has to offer.
\ +
Because we care about you, we feel it is only fair to make sure you know the risks \ + before you commit to joining the Nanotrasen Gateway project. All away destinations have \ + been fully scanned by a Nanotrasen expeditionary team, and are certified to be 100% safe. \ + We've even left a case of space beer along with the basic materials you'll need to expand \ + Nanotrasen's operational area and start your new life.

\ + Gateway Operation Basics
\ + All Nanotrasen approved Gateways operate on the same basic principals. They operate off \ + area equipment power as you would expect, and without this supply, it cannot safely function, \ + causinng it to reject all attempts at operation.

\ + Once it is correctly setup, and once it has enough power to operate, the Gateway will begin \ + searching for an output location. The amount of time this takes is variable, but the Gateway \ + interface will give you an estimate accurate to the minute. Power loss will not interrupt the \ + searching process. Influenza will not interrupt the searching process. Temporal anomalies \ + may cause the estimate to be inaccurate, but will not interrupt the searching process.

\ + Life On The Other Side
\ + Once you have traversed the Gateway, you may experience some disorientation. Do not panic. \ + This is a normal side effect of travelling vast distances in a short period of time. You should \ + survey the immediate area, and attempt to locate your complimentary case of space beer. Our \ + expeditionary teams have ensured the complete safety of all away locations, but in a small \ + number of cases, the Gateway they have established may not be immediately obvious. \ + Do not panic if you cannot locate the return Gateway. Begin colonisation of the destination. \ +

A New World
\ + As a participant in the Nanotrasen Gateway Project, you will be on the frontiers of space. \ + Though complete safety is assured, participants are advised to prepare for inhospitable \ + environs." + +//we don't want the silly text overlay! +/obj/item/paper/pamphlet/update_icon() + return diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm index b1f505a27e..4b25d768f4 100644 --- a/code/modules/awaymissions/super_secret_room.dm +++ b/code/modules/awaymissions/super_secret_room.dm @@ -124,4 +124,4 @@ ..() /obj/effect/landmark/error - name = "error" \ No newline at end of file + name = "error" diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index 3fcb0648a1..296c876688 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -201,14 +201,10 @@ /obj/machinery/computer/cargo/proc/post_signal(command) - var/datum/radio_frequency/frequency = SSradio.return_frequency(1435) + var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS) if(!frequency) return - var/datum/signal/status_signal = new - status_signal.source = src - status_signal.transmission_method = 1 - status_signal.data["command"] = command - + var/datum/signal/status_signal = new(list("command" = command)) frequency.post_signal(src, status_signal) diff --git a/code/modules/cargo/exports/research.dm b/code/modules/cargo/exports/research.dm index b1ac30e7f9..d2d11cecd1 100644 --- a/code/modules/cargo/exports/research.dm +++ b/code/modules/cargo/exports/research.dm @@ -12,8 +12,8 @@ if(sold_nodes[V]) //Already sold before, don't want it. continue var/datum/techweb_node/TWN = D.stored_research.researched_nodes[V] - cost += TWN - return ..() * cost + cost += TWN.export_price + return cost /datum/export/tech/sell_object(obj/O) ..() diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 3704494050..8825ce0933 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -324,6 +324,9 @@ GLOBAL_LIST_EMPTY(asset_datums) "chevron.png" = 'html/chevron.png', "chevron-expand.png" = 'html/chevron-expand.png', "scales.png" = 'html/scales.png', + "coding.png" = 'html/coding.png', + "ban.png" = 'html/ban.png', + "chrome-wrench.png" = 'html/chrome-wrench.png', "changelog.css" = 'html/changelog.css' ) @@ -372,3 +375,39 @@ GLOBAL_LIST_EMPTY(asset_datums) var/meter = icon('icons/obj/atmospherics/pipes/simple.dmi', "meterX", SOUTH, frame, movement_states) if(meter) register_asset(sanitize_filename("[prefix].south.meterX.png"), fcopy_rsc(meter)) + +// Representative icons for each research design +/datum/asset/simple/research_designs/register() + for (var/path in subtypesof(/datum/design)) + var/datum/design/D = path + + // construct the icon and slap it into the resource cache + var/atom/item = initial(D.build_path) + if (!ispath(item, /atom)) + // biogenerator outputs to beakers by default + if (initial(D.build_type) & BIOGENERATOR) + item = /obj/item/reagent_containers/glass/beaker/large + else + continue // shouldn't happen, but just in case + + // circuit boards become their resulting machines or computers + if (ispath(item, /obj/item/circuitboard)) + var/obj/item/circuitboard/C = item + var/machine = initial(C.build_path) + if (machine) + item = machine + var/icon_file = initial(item.icon) + var/icon/I = icon(icon_file, initial(item.icon_state), SOUTH) + + // computers (and snowflakes) get their screen and keyboard sprites + if (ispath(item, /obj/machinery/computer) || ispath(item, /obj/machinery/power/solar_control)) + var/obj/machinery/computer/C = item + var/screen = initial(C.icon_screen) + var/keyboard = initial(C.icon_keyboard) + if (screen) + I.Blend(icon(icon_file, screen, SOUTH), ICON_OVERLAY) + if (keyboard) + I.Blend(icon(icon_file, keyboard, SOUTH), ICON_OVERLAY) + + assets["design_[initial(D.id)].png"] = I + return ..() diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 10d3866672..9ae87488ce 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -70,4 +70,4 @@ var/list/credits //lazy list of all credit object bound to this client - var/datum/player_details/player_details //these persist between logins/logouts during the same round. + var/datum/player_details/player_details //these persist between logins/logouts during the same round. \ No newline at end of file diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 0f7d501988..fd4581507b 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -196,13 +196,9 @@ GLOBAL_LIST(external_rsc_urls) if(!prefs) prefs = new /datum/preferences(src) GLOB.preferences_datums[ckey] = prefs - else - prefs.parent = src prefs.last_ip = address //these are gonna be used for banning prefs.last_id = computer_id //these are gonna be used for banning - if(world.byond_version >= 511 && byond_version >= 511 && prefs.clientfps) - vars["fps"] = prefs.clientfps - sethotkeys(1) //set hoykeys from preferences (from_pref = 1) + fps = prefs.clientfps log_access("Login: [key_name(src)] from [address ? address : "localhost"]-[computer_id] || BYOND v[byond_version]") var/alert_mob_dupe_login = FALSE @@ -237,6 +233,9 @@ GLOBAL_LIST(external_rsc_urls) . = ..() //calls mob.Login() + if(SSinput.initialized) + set_macros() + chatOutput.start() // Starts the chat if(alert_mob_dupe_login) @@ -364,7 +363,8 @@ GLOBAL_LIST(external_rsc_urls) if (menuitem) menuitem.Load_checked(src) - hook_vr("client_new",list(src)) + hook_vr("client_new",list(src)) // CIT CHANGE - hook for client/New() changes + Master.UpdateTickRate() ////////////// @@ -372,6 +372,8 @@ GLOBAL_LIST(external_rsc_urls) ////////////// /client/Del() + if(credits) + QDEL_LIST(credits) log_access("Logout: [key_name(src)]") if(holder) adminGreet(1) @@ -380,16 +382,17 @@ GLOBAL_LIST(external_rsc_urls) if (!GLOB.admins.len && SSticker.IsRoundInProgress()) //Only report this stuff if we are currently playing. var/cheesy_message = pick( "I have no admins online!",\ - "I'm all alone... :(",\ - "I'm feeling lonely. :(",\ - "I'm so lonely. :(",\ + "I'm all alone :(",\ + "I'm feeling lonely :(",\ + "I'm so lonely :(",\ "Why does nobody love me? :(",\ - "I want a man. :(",\ + "I want a man :(",\ "Where has everyone gone?",\ - "I need a hug. :(",\ - "Someone come hold me. :(",\ + "I need a hug :(",\ + "Someone come hold me :(",\ "I need someone on me :(",\ "What happened? Where has everyone gone?",\ + "Forever alone :(",\ "My nipples are so stiff, but Zelda ain't here. :(",\ "Leon senpai, play more Spessmans. :(",\ "If only Serdy were here...",\ @@ -402,8 +405,9 @@ GLOBAL_LIST(external_rsc_urls) "Oh good, no-one around to watch me lick Goofball's nipples. :D",\ "I've replaced Beepsky with a fidget spinner, glory be autism abuse.",\ "i shure hop dere are no PRED arund!!!!",\ - "NO PRED CAN eVER CATCH MI"\ - ) + "NO PRED CAN eVER CATCH MI",\ + "help, the clown is honking his horn in front of dorms and its interrupting everyones erp"\ + ) send2irc("Server", "[cheesy_message] (No admins online)") diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 0469f31aba..92639ab70f 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1,3 +1,5 @@ + + GLOBAL_LIST_EMPTY(preferences_datums) @@ -48,9 +50,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/uses_glasses_colour = 0 - var/screenshake = 100 - var/damagescreenshake = 2 - //character preferences var/real_name //our character's name var/be_random_name = 0 //whether we'll have a random name every round @@ -68,76 +67,74 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/skin_tone = "caucasian1" //Skin color var/eye_color = "000" //Eye color var/datum/species/pref_species = new /datum/species/human() //Mutant race - var/list/features = list("mcolor" = "FFF", - "mcolor2" = "FFF", - "mcolor3" = "FFF", - "tail_lizard" = "Smooth", - "tail_human" = "None", - "snout" = "Round", - "horns" = "None", - "ears" = "None", - "wings" = "None", - "frills" = "None", - "spines" = "None", - "body_markings" = "None", - "mam_body_markings" = "None", - "mam_ears" = "None", - "mam_tail" = "None", - "mam_tail_animated" = "None", - "xenodorsal" = "None", - "xenohead" = "None", - "xenotail" = "None", - "legs" = "Normal Legs", - "taur" = "None", - "exhibitionist" = FALSE, - "genitals_use_skintone" = FALSE, - "has_cock" = FALSE, - "cock_shape" = "Human", - "cock_length" = 6, - "cock_girth_ratio" = COCK_GIRTH_RATIO_DEF, - "cock_color" = "fff", - "has_sheath" = FALSE, - "sheath_color" = "fff", - "has_balls" = FALSE, - "balls_internal" = FALSE, - "balls_color" = "fff", - "balls_amount" = 2, - "balls_sack_size" = BALLS_SACK_SIZE_DEF, - "balls_size" = BALLS_SIZE_DEF, - "balls_cum_rate" = CUM_RATE, - "balls_cum_mult" = CUM_RATE_MULT, - "balls_efficiency" = CUM_EFFICIENCY, - "balls_fluid" = "semen", - "has_ovi" = FALSE, - "ovi_shape" = "knotted", - "ovi_length" = 6, - "ovi_color" = "fff", - "has_eggsack" = FALSE, - "eggsack_internal" = TRUE, - "eggsack_color" = "fff", - "eggsack_size" = BALLS_SACK_SIZE_DEF, - "eggsack_egg_color" = "fff", - "eggsack_egg_size" = EGG_GIRTH_DEF, - "has_breasts" = FALSE, - "breasts_color" = "fff", - "breasts_size" = "C", - "breasts_shape" = "Pair", - "breasts_fluid" = "milk", - "has_vag" = FALSE, - "vag_shape" = "Human", - "vag_color" = "fff", - "vag_clits" = 1, - "vag_clit_diam" = 0.25, - "vag_clit_len" = 0.25, - "has_womb" = FALSE, - "womb_cum_rate" = CUM_RATE, - "womb_cum_mult" = CUM_RATE_MULT, - "womb_efficiency" = CUM_EFFICIENCY, - "womb_fluid" = "femcum", - "flavor_text" = "" - )//MAKE SURE TO UPDATE THE LIST IN MOBS.DM IF YOU'RE GOING TO ADD TO THIS LIST, OTHERWISE THINGS MIGHT GET FUCKEY + var/list/features = list("mcolor" = "FFF", + "tail_lizard" = "Smooth", + "tail_human" = "None", + "snout" = "Round", + "horns" = "None", + "ears" = "None", + "wings" = "None", + "frills" = "None", + "spines" = "None", + "body_markings" = "None", + "legs" = "Normal Legs", + "mcolor2" = "FFF",//CIT FEATURES START HERE + "mcolor3" = "FFF", + "mam_body_markings" = "None", + "mam_ears" = "None", + "mam_tail" = "None", + "mam_tail_animated" = "None", + "xenodorsal" = "None", + "xenohead" = "None", + "xenotail" = "None", + "taur" = "None", + "exhibitionist" = FALSE, + "genitals_use_skintone" = FALSE, + "has_cock" = FALSE, + "cock_shape" = "Human", + "cock_length" = 6, + "cock_girth_ratio" = COCK_GIRTH_RATIO_DEF, + "cock_color" = "fff", + "has_sheath" = FALSE, + "sheath_color" = "fff", + "has_balls" = FALSE, + "balls_internal" = FALSE, + "balls_color" = "fff", + "balls_amount" = 2, + "balls_sack_size" = BALLS_SACK_SIZE_DEF, + "balls_size" = BALLS_SIZE_DEF, + "balls_cum_rate" = CUM_RATE, + "balls_cum_mult" = CUM_RATE_MULT, + "balls_efficiency" = CUM_EFFICIENCY, + "balls_fluid" = "semen", + "has_ovi" = FALSE, + "ovi_shape" = "knotted", + "ovi_length" = 6, + "ovi_color" = "fff", + "has_eggsack" = FALSE, + "eggsack_internal" = TRUE, + "eggsack_color = "fff", + "eggsack_size" = BALLS_SACK_SIZE_DEF, + "eggsack_egg_color" = "fff", + "eggsack_egg_size" = EGG_GIRTH_DEF, + "has_breasts" = FALSE, + "breasts_color" = "fff", + "breasts_size" = "C", + "breasts_shape" = "Pair", + "breasts_fluid" = "milk", + "has_vag" = FALSE, + "vag_shape" = "Human", + "vag_color" = "fff", + "vag_clits" = 1, + "vag_clit_diam" = 0.25, + "has_womb" = FALSE, + "womb_cum_rate" = CUM_RATE, + "womb_cum_mult" = CUM_RATE_MULT, + "womb_efficiency" = CUM_EFFICIENCY, + "womb_fluid" = "femcum", + "flavor_text" = "") - var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity") + var/list/custom_names = list("human", "clown", "mime", "ai", "cyborg", "religion", "deity") var/prefered_security_department = SEC_DEPT_RANDOM //Mob preview @@ -180,11 +177,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/action_buttons_screen_locs = list() - //citadel code - var/arousable = TRUE //Allows players to disable arousal from the character creation menu + var/screenshake = 100 + var/damagescreenshake = 2 + var/arousable = TRUE /datum/preferences/New(client/C) parent = C + custom_names["human"] = random_unique_name() custom_names["ai"] = pick(GLOB.ai_names) custom_names["cyborg"] = pick(GLOB.ai_names) custom_names["clown"] = pick(GLOB.clown_names) @@ -230,7 +229,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
" switch(current_tab) - if (0) // Character Settings + if (0) // Character Settings# if(path) var/savefile/S = new /savefile(path) if(S) @@ -260,7 +259,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Age:[age]
" dat += "Arousal:[arousable == TRUE ? "Enabled" : "Disabled"]
" dat += "Exhibitionist:[features["exhibitionist"] == TRUE ? "Yes" : "No"]
" + dat += "Special Names:
" + dat += "Backup Human Name: [custom_names["human"]] " dat += "Clown: [custom_names["clown"]] " dat += "Mime:[custom_names["mime"]]
" dat += "AI: [custom_names["ai"]] " @@ -276,17 +277,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
" dat += "
Monkey
" -// dat += "Size: [character_size]
" - dat += "
" + dat += "
- dat += "Underwear:
[underwear]
" - dat += "Undershirt:
[undershirt]
" - dat += "Socks:
[socks]
" dat += "Backpack:
[backbag]
" dat += "Uplink Spawn Location:
[uplink_spawn_loc]
" dat += "" + if (1) // Game Preferences dat += "" */ - dat += "
" dat += "

General Settings

" @@ -449,7 +447,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("snout" in pref_species.mutant_bodyparts) dat += "Snout: [features["snout"]]
" if("horns" in pref_species.mutant_bodyparts) - dat += "Snout: [features["horns"]]
" + dat += "Horns: [features["horns"]]
" if("frills" in pref_species.mutant_bodyparts) dat += "Frills: [features["frills"]]
" if("spines" in pref_species.mutant_bodyparts) @@ -532,11 +530,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Color:    Change" dat += "Egg Color:    Change" dat += "Egg Size:[features["eggsack_egg_size"]]\" Diameter" - dat += "
" dat += "
" @@ -564,7 +560,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/HTML = "
" if(SSjob.occupations.len <= 0) - HTML += "The job ticker is not yet finished creating jobs, please try again later" + HTML += "The job SSticker is not yet finished creating jobs, please try again later" HTML += "
Done

" // Easier to press up here. else @@ -609,12 +605,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) if((job_civilian_low & ASSISTANT) && (rank != "Assistant") && !jobban_isbanned(user, "Assistant")) HTML += "[rank]" continue - if(CONFIG_GET(flag/enforce_human_authority) && !user.client.prefs.pref_species.qualifies_for_rank(rank, user.client.prefs.features)) - if(user.client.prefs.pref_species.id == "human") - HTML += "[rank] \[MUTANT\]" - else - HTML += "[rank] \[NON-HUMAN\]" - continue if((rank in GLOB.command_positions) || (rank == "AI"))//Bold head jobs HTML += "[rank]" else @@ -1094,6 +1084,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["tail_human"] = new_tail if(new_tail != "None") features["taur"] = "None" + if("mam_tail") var/new_tail new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in GLOB.mam_tails_list @@ -1111,32 +1102,24 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["mam_tail"] = "None" features["xenotail"] = "None" -/* Doesn't exist yet. will include facial overlays to mimic 5th port species heads. - if("mam_snout") - var/new_snout - new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in GLOB.mam_snouts_list - if(new_snout) - features["snout"] = new_snout -*/ - if("snout") var/new_snout new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in GLOB.snouts_list if(new_snout) features["snout"] = new_snout - if("horns") - var/new_horns - new_horns = input(user, "Choose your character's horns:", "Character Preference") as null|anything in GLOB.horns_list - if(new_horns) - features["horns"] = new_horns - if("mam_ears") var/new_ears new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in GLOB.mam_ears_list if(new_ears) features["mam_ears"] = new_ears + if("horns") + var/new_horns + new_horns = input(user, "Choose your character's horns:", "Character Preference") as null|anything in GLOB.horns_list + if(new_horns) + features["horns"] = new_horns + if("ears") var/new_ears new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in GLOB.ears_list @@ -1206,7 +1189,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("ooccolor") var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference") as color|null if(new_ooccolor) - ooccolor = sanitize_ooccolor(new_ooccolor) + ooccolor = new_ooccolor if("bag") var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in GLOB.backbaglist @@ -1218,6 +1201,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_loc) uplink_spawn_loc = new_loc + if("human_name") + var/new_human_name = reject_bad_name( input(user, "Choose your character's backup human name, used in the event you are assigned a command role as another species:", "Character Preference") as text|null ) + if(new_human_name) + custom_names["human"] = new_human_name + else + to_chat(user, "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .") + if("clown_name") var/new_clown_name = reject_bad_name( input(user, "Choose your character's clown name:", "Character Preference") as text|null ) if(new_clown_name) @@ -1282,16 +1272,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) preferred_map = maplist[pickedmap] if ("clientfps") - var/version_message - if (user.client && user.client.byond_version < 511) - version_message = "\nYou need to be using byond version 511 or later to take advantage of this feature, your version of [user.client.byond_version] is too low" - if (world.byond_version < 511) - version_message += "\nThis server does not currently support client side fps. You can set now for when it does." - var/desiredfps = input(user, "Choose your desired fps.[version_message]\n(0 = synced with server tick rate (currently:[world.fps]))", "Character Preference", clientfps) as null|num + var/desiredfps = input(user, "Choose your desired fps. (0 = synced with server tick rate (currently:[world.fps]))", "Character Preference", clientfps) as null|num if (!isnull(desiredfps)) clientfps = desiredfps - if (world.byond_version >= 511 && user.client && user.client.byond_version >= 511) - user.client.vars["fps"] = clientfps + parent.fps = desiredfps if("ui") var/pickedui = input(user, "Choose your UI style.", "Character Preference") as null|anything in list("Midnight", "Plasmafire", "Retro", "Slimecore", "Operative", "Clockwork") if(pickedui) @@ -1372,6 +1356,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["breasts_color"] = sanitize_hexcolor(new_breasts_color) else user << "Invalid color. Your color is not bright enough." + if("vag_shape") var/new_shape new_shape = input(user, "Vagina Type", "Character Preference") as null|anything in GLOB.vagina_shapes_list @@ -1388,6 +1373,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) else user << "Invalid color. Your color is not bright enough." + + else switch(href_list["preference"]) @@ -1429,7 +1416,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) else features["has_balls"] = FALSE features["has_eggsack"] = FALSE - if("has_ovi") switch(features["has_ovi"]) if(TRUE) @@ -1452,7 +1438,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) else features["has_eggsack"] = FALSE features["has_balls"] = FALSE - if("balls_internal") switch(features["balls_internal"]) if(TRUE) @@ -1474,7 +1459,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) else features["eggsack_internal"] = FALSE features["balls_internal"] = FALSE - if("has_breasts") switch(features["has_breasts"]) if(TRUE) @@ -1521,7 +1505,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) damagescreenshake = 0 else damagescreenshake = 1 - if("publicity") if(unlock_content) toggles ^= MEMBER_PUBLIC @@ -1530,14 +1513,18 @@ GLOBAL_LIST_EMPTY(preferences_datums) gender = FEMALE else gender = MALE - underwear = "Nude" - undershirt = "Nude" - socks = "Nude" - facial_hair_style = "Shaved" - hair_style = "Bald" + underwear = random_underwear(gender) + undershirt = random_undershirt(gender) + socks = random_socks() + facial_hair_style = random_facial_hair_style(gender) + hair_style = random_hair_style(gender) if("hotkeys") hotkeys = !hotkeys + if(hotkeys) + winset(user, null, "input.focus=true input.background-color=[COLOR_INPUT_ENABLED] mainwindow.macro=default") + else + winset(user, null, "input.focus=true input.background-color=[COLOR_INPUT_ENABLED] mainwindow.macro=old_default") if("action_buttons") buttons_locked = !buttons_locked if("tgui_fancy") @@ -1667,7 +1654,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.backbag = backbag - character.dna.features = features.Copy() //Flavor text is now a DNA feature + character.dna.features = features.Copy() character.dna.real_name = character.real_name var/datum/species/chosen_species if(pref_species.id in GLOB.roundstart_races) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 48dab29cf6..6081b45d34 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -142,6 +142,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(current_version < 19) pda_style = "mono" + /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) return @@ -186,16 +187,15 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["inquisitive_ghost"] >> inquisitive_ghost S["uses_glasses_colour"]>> uses_glasses_colour S["clientfps"] >> clientfps + S["parallax"] >> parallax S["menuoptions"] >> menuoptions S["enable_tips"] >> enable_tips S["tip_delay"] >> tip_delay - S["parallax"] >> parallax - S["menuoptions"] >> menuoptions + S["pda_style"] >> pda_style //citadel code S["arousable"] >> arousable S["screenshake"] >> screenshake S["damagescreenshake"] >> damagescreenshake - S["pda_style"] >> pda_style //try to fix any outdated data if necessary if(needs_update >= 0) @@ -220,9 +220,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car ghost_others = sanitize_inlist(ghost_others, GLOB.ghost_others_options, GHOST_OTHERS_DEFAULT_OPTION) menuoptions = SANITIZE_LIST(menuoptions) be_special = SANITIZE_LIST(be_special) - screenshake = sanitize_integer(screenshake, 0, 200, initial(screenshake)) - damagescreenshake = sanitize_integer(damagescreenshake, 0, 2, initial(damagescreenshake)) pda_style = sanitize_inlist(MONO, VT, SHARE, ORBITRON) + screenshake = sanitize_integer(screenshake, 0, 800, initial(screenshake)) + damagescreenshake = sanitize_integer(damagescreenshake, 0, 2, initial(damagescreenshake)) return 1 @@ -234,7 +234,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car return 0 S.cd = "/" - WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //updates (or failing that the sanity checks) will ensure data is not invalid at load. Assume up-to-date + WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //updates (or failing that the sanity checks) will ensure data is not invalid at load. Assume up-to-date //general preferences WRITE_FILE(S["ooccolor"], ooccolor) @@ -262,11 +262,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["menuoptions"], menuoptions) WRITE_FILE(S["enable_tips"], enable_tips) WRITE_FILE(S["tip_delay"], tip_delay) + WRITE_FILE(S["pda_style"], pda_style) //citadel code WRITE_FILE(S["screenshake"], screenshake) WRITE_FILE(S["damagescreenshake"], damagescreenshake) WRITE_FILE(S["arousable"], arousable) - WRITE_FILE(S["pda_style"], pda_style) return 1 @@ -333,6 +333,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car else S["feature_human_tail"] >> features["tail_human"] S["feature_human_ears"] >> features["ears"] + S["human_name"] >> custom_names["human"] S["clown_name"] >> custom_names["clown"] S["mime_name"] >> custom_names["mime"] S["ai_name"] >> custom_names["ai"] @@ -403,7 +404,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car else //We have no old flavortext, default to new S["feature_flavor_text"] >> features["flavor_text"] - //try to fix any outdated data if necessary if(needs_update >= 0) update_character(needs_update, S) //needs_update == savefile_version if we need an update (positive integer) @@ -421,14 +421,14 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(gender == MALE) hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_male_list) facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_male_list) -// underwear = sanitize_inlist(underwear, GLOB.underwear_m) -// undershirt = sanitize_inlist(undershirt, GLOB.undershirt_m) + //underwear = sanitize_inlist(underwear, GLOB.underwear_m) + //undershirt = sanitize_inlist(undershirt, GLOB.undershirt_m) else hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_female_list) facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_female_list) -// underwear = sanitize_inlist(underwear, GLOB.underwear_f) -// undershirt = sanitize_inlist(undershirt, GLOB.undershirt_f) -// socks = sanitize_inlist(socks, GLOB.socks_list) + //underwear = sanitize_inlist(underwear, GLOB.underwear_f) + //undershirt = sanitize_inlist(undershirt, GLOB.undershirt_f) + //socks = sanitize_inlist(socks, GLOB.socks_list) underwear = "Nude" undershirt = "Nude" socks = "Nude" @@ -479,56 +479,57 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car return 0 S.cd = "/character[default_slot]" - S["version"] << SAVEFILE_VERSION_MAX //load_character will sanitize any bad data, so assume up-to-date. + WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //load_character will sanitize any bad data, so assume up-to-date.) //Character - WRITE_FILE(S["OOC_Notes"], metadata) - WRITE_FILE(S["real_name"], real_name) + WRITE_FILE(S["OOC_Notes"] , metadata) + WRITE_FILE(S["real_name"] , real_name) WRITE_FILE(S["name_is_always_random"] , be_random_name) WRITE_FILE(S["body_is_always_random"] , be_random_body) - WRITE_FILE(S["gender"], gender) - WRITE_FILE(S["age"], age) - WRITE_FILE(S["hair_color"], hair_color) - WRITE_FILE(S["facial_hair_color"], facial_hair_color) - WRITE_FILE(S["eye_color"], eye_color) - WRITE_FILE(S["skin_tone"], skin_tone) - WRITE_FILE(S["hair_style_name"], hair_style) - WRITE_FILE(S["facial_style_name"], facial_hair_style) - WRITE_FILE(S["underwear"], underwear) - WRITE_FILE(S["undershirt"], undershirt) - WRITE_FILE(S["socks"], socks) - WRITE_FILE(S["backbag"], backbag) - WRITE_FILE(S["uplink_loc"], uplink_spawn_loc) - WRITE_FILE(S["species"], pref_species.id) - WRITE_FILE(S["feature_mcolor"], features["mcolor"]) - WRITE_FILE(S["feature_lizard_tail"], features["tail_lizard"]) - WRITE_FILE(S["feature_human_tail"], features["tail_human"]) - WRITE_FILE(S["feature_lizard_snout"], features["snout"]) - WRITE_FILE(S["feature_lizard_horns"], features["horns"]) - WRITE_FILE(S["feature_human_ears"], features["ears"]) - WRITE_FILE(S["feature_lizard_frills"], features["frills"]) - WRITE_FILE(S["feature_lizard_spines"], features["spines"]) - WRITE_FILE(S["feature_lizard_body_markings"], features["body_markings"]) - WRITE_FILE(S["feature_lizard_legs"] , features["legs"]) - WRITE_FILE(S["clown_name"], custom_names["clown"]) - WRITE_FILE(S["mime_name"], custom_names["mime"]) - WRITE_FILE(S["ai_name"] , custom_names["ai"]) - WRITE_FILE(S["cyborg_name"], custom_names["cyborg"]) - WRITE_FILE(S["religion_name"], custom_names["religion"]) - WRITE_FILE(S["deity_name"], custom_names["deity"]) - WRITE_FILE(S["prefered_security_department"], prefered_security_department) + WRITE_FILE(S["gender"] , gender) + WRITE_FILE(S["age"] , age) + WRITE_FILE(S["hair_color"] , hair_color) + WRITE_FILE(S["facial_hair_color"] , facial_hair_color) + WRITE_FILE(S["eye_color"] , eye_color) + WRITE_FILE(S["skin_tone"] , skin_tone) + WRITE_FILE(S["hair_style_name"] , hair_style) + WRITE_FILE(S["facial_style_name"] , facial_hair_style) + WRITE_FILE(S["underwear"] , underwear) + WRITE_FILE(S["undershirt"] , undershirt) + WRITE_FILE(S["socks"] , socks) + WRITE_FILE(S["backbag"] , backbag) + WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc) + WRITE_FILE(S["species"] , pref_species.id) + WRITE_FILE(S["feature_mcolor"] , features["mcolor"]) + WRITE_FILE(S["feature_lizard_tail"] , features["tail_lizard"]) + WRITE_FILE(S["feature_human_tail"] , features["tail_human"]) + WRITE_FILE(S["feature_lizard_snout"] , features["snout"]) + WRITE_FILE(S["feature_lizard_horns"] , features["horns"]) + WRITE_FILE(S["feature_human_ears"] , features["ears"]) + WRITE_FILE(S["feature_lizard_frills"] , features["frills"]) + WRITE_FILE(S["feature_lizard_spines"] , features["spines"]) + WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"]) + WRITE_FILE(S["feature_lizard_legs"] , features["legs"]) + WRITE_FILE(S["human_name"] , custom_names["human"]) + WRITE_FILE(S["clown_name"] , custom_names["clown"]) + WRITE_FILE(S["mime_name"] , custom_names["mime"]) + WRITE_FILE(S["ai_name"] , custom_names["ai"]) + WRITE_FILE(S["cyborg_name"] , custom_names["cyborg"]) + WRITE_FILE(S["religion_name"] , custom_names["religion"]) + WRITE_FILE(S["deity_name"] , custom_names["deity"]) + WRITE_FILE(S["prefered_security_department"] , prefered_security_department) //Jobs - WRITE_FILE(S["joblessrole"], joblessrole) - WRITE_FILE(S["job_civilian_high"], job_civilian_high) - WRITE_FILE(S["job_civilian_med"], job_civilian_med) - WRITE_FILE(S["job_civilian_low"], job_civilian_low) - WRITE_FILE(S["job_medsci_high"], job_medsci_high) - WRITE_FILE(S["job_medsci_med"], job_medsci_med) - WRITE_FILE(S["job_medsci_low"], job_medsci_low) - WRITE_FILE(S["job_engsec_high"], job_engsec_high) - WRITE_FILE(S["job_engsec_med"], job_engsec_med) - WRITE_FILE(S["job_engsec_low"], job_engsec_low) + WRITE_FILE(S["joblessrole"] , joblessrole) + WRITE_FILE(S["job_civilian_high"] , job_civilian_high) + WRITE_FILE(S["job_civilian_med"] , job_civilian_med) + WRITE_FILE(S["job_civilian_low"] , job_civilian_low) + WRITE_FILE(S["job_medsci_high"] , job_medsci_high) + WRITE_FILE(S["job_medsci_med"] , job_medsci_med) + WRITE_FILE(S["job_medsci_low"] , job_medsci_low) + WRITE_FILE(S["job_engsec_high"] , job_engsec_high) + WRITE_FILE(S["job_engsec_med"] , job_engsec_med) + WRITE_FILE(S["job_engsec_low"] , job_engsec_low) //Citadel WRITE_FILE(S["feature_genitals_use_skintone"], features["genitals_use_skintone"]) @@ -571,8 +572,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_has_womb"], features["has_womb"]) //flavor text WRITE_FILE(S["feature_flavor_text"], features["flavor_text"]) + return 1 + #undef SAVEFILE_VERSION_MAX #undef SAVEFILE_VERSION_MIN diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index fba2c486ab..255423a4fc 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -30,7 +30,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost/chatterbox, toggle_ghost_ears)( usr.client.prefs.chat_toggles ^= CHAT_GHOSTEARS to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"].") usr.client.prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Ears", "[usr.client.prefs.chat_toggles & CHAT_GHOSTEARS]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Ears", "[usr.client.prefs.chat_toggles & CHAT_GHOSTEARS ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Ghost/chatterbox/toggle_ghost_ears/Get_checked(client/C) return C.prefs.chat_toggles & CHAT_GHOSTEARS @@ -41,7 +41,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost/chatterbox, toggle_ghost_sight) usr.client.prefs.chat_toggles ^= CHAT_GHOSTSIGHT to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"].") usr.client.prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Sight", "[usr.client.prefs.chat_toggles & CHAT_GHOSTSIGHT]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Sight", "[usr.client.prefs.chat_toggles & CHAT_GHOSTSIGHT ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Ghost/chatterbox/toggle_ghost_sight/Get_checked(client/C) return C.prefs.chat_toggles & CHAT_GHOSTSIGHT @@ -52,7 +52,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost/chatterbox, toggle_ghost_whispe usr.client.prefs.chat_toggles ^= CHAT_GHOSTWHISPER to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTWHISPER) ? "see all whispers in the world" : "only see whispers from nearby mobs"].") usr.client.prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Whispers", "[usr.client.prefs.chat_toggles & CHAT_GHOSTWHISPER]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Whispers", "[usr.client.prefs.chat_toggles & CHAT_GHOSTWHISPER ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Ghost/chatterbox/toggle_ghost_whispers/Get_checked(client/C) return C.prefs.chat_toggles & CHAT_GHOSTWHISPER @@ -63,7 +63,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost/chatterbox, toggle_ghost_radio) usr.client.prefs.chat_toggles ^= CHAT_GHOSTRADIO to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTRADIO) ? "see radio chatter" : "not see radio chatter"].") usr.client.prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Radio", "[usr.client.prefs.chat_toggles & CHAT_GHOSTRADIO]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //social experiment, increase the generation whenever you copypaste this shamelessly GENERATION 1 + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Radio", "[usr.client.prefs.chat_toggles & CHAT_GHOSTRADIO ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //social experiment, increase the generation whenever you copypaste this shamelessly GENERATION 1 /datum/verbs/menu/Settings/Ghost/chatterbox/toggle_ghost_radio/Get_checked(client/C) return C.prefs.chat_toggles & CHAT_GHOSTRADIO @@ -74,7 +74,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost/chatterbox, toggle_ghost_pda)() usr.client.prefs.chat_toggles ^= CHAT_GHOSTPDA to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTPDA) ? "see all pda messages in the world" : "only see pda messages from nearby mobs"].") usr.client.prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost PDA", "[usr.client.prefs.chat_toggles & CHAT_GHOSTPDA]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost PDA", "[usr.client.prefs.chat_toggles & CHAT_GHOSTPDA ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Ghost/chatterbox/toggle_ghost_pda/Get_checked(client/C) return C.prefs.chat_toggles & CHAT_GHOSTPDA @@ -89,7 +89,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost/chatterbox/Events, toggle_death usr.client.prefs.toggles ^= DISABLE_DEATHRATTLE usr.client.prefs.save_preferences() to_chat(usr, "You will [(usr.client.prefs.toggles & DISABLE_DEATHRATTLE) ? "no longer" : "now"] get messages when a sentient mob dies.") - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Deathrattle", "[!(usr.client.prefs.toggles & DISABLE_DEATHRATTLE)]")) //If you are copy-pasting this, maybe you should spend some time reading the comments. + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Deathrattle", "[!(usr.client.prefs.toggles & DISABLE_DEATHRATTLE) ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, maybe you should spend some time reading the comments. /datum/verbs/menu/Settings/Ghost/chatterbox/Events/toggle_deathrattle/Get_checked(client/C) return !(C.prefs.toggles & DISABLE_DEATHRATTLE) @@ -100,7 +100,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost/chatterbox/Events, toggle_arriv usr.client.prefs.toggles ^= DISABLE_ARRIVALRATTLE to_chat(usr, "You will [(usr.client.prefs.toggles & DISABLE_ARRIVALRATTLE) ? "no longer" : "now"] get messages when someone joins the station.") usr.client.prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Arrivalrattle", "[!(usr.client.prefs.toggles & DISABLE_ARRIVALRATTLE)]")) //If you are copy-pasting this, maybe you should rethink where your life went so wrong. + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Arrivalrattle", "[!(usr.client.prefs.toggles & DISABLE_ARRIVALRATTLE) ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, maybe you should rethink where your life went so wrong. /datum/verbs/menu/Settings/Ghost/chatterbox/Events/toggle_arrivalrattle/Get_checked(client/C) return !(C.prefs.toggles & DISABLE_ARRIVALRATTLE) @@ -111,7 +111,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost, togglemidroundantag)() usr.client.prefs.toggles ^= MIDROUND_ANTAG usr.client.prefs.save_preferences() to_chat(usr, "You will [(usr.client.prefs.toggles & MIDROUND_ANTAG) ? "now" : "no longer"] be considered for midround antagonist positions.") - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Midround Antag", "[usr.client.prefs.toggles & MIDROUND_ANTAG]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Midround Antag", "[usr.client.prefs.toggles & MIDROUND_ANTAG ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Ghost/togglemidroundantag/Get_checked(client/C) return C.prefs.toggles & MIDROUND_ANTAG @@ -128,7 +128,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggletitlemusic)() else to_chat(usr, "You will no longer hear music in the game lobby.") usr.stop_sound_channel(CHANNEL_LOBBYMUSIC) - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Lobby Music", "[usr.client.prefs.toggles & SOUND_LOBBY]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Lobby Music", "[usr.client.prefs.toggles & SOUND_LOBBY ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Sound/toggletitlemusic/Get_checked(client/C) return C.prefs.toggles & SOUND_LOBBY @@ -147,7 +147,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, togglemidis)() var/client/C = usr.client if(C && C.chatOutput && !C.chatOutput.broken && C.chatOutput.loaded) C.chatOutput.sendMusic(" ") - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Hearing Midis", "[usr.client.prefs.toggles & SOUND_MIDI]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Hearing Midis", "[usr.client.prefs.toggles & SOUND_MIDI ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Sound/togglemidis/Get_checked(client/C) return C.prefs.toggles & SOUND_MIDI @@ -162,7 +162,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggle_instruments)() to_chat(usr, "You will now hear people playing musical instruments.") else to_chat(usr, "You will no longer hear musical instruments.") - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Instruments", "[usr.client.prefs.toggles & SOUND_INSTRUMENTS]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Instruments", "[usr.client.prefs.toggles & SOUND_INSTRUMENTS ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Sound/toggle_instruments/Get_checked(client/C) return C.prefs.toggles & SOUND_INSTRUMENTS @@ -179,7 +179,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, Toggle_Soundscape)() to_chat(usr, "You will no longer hear ambient sounds.") usr.stop_sound_channel(CHANNEL_AMBIENCE) usr.stop_sound_channel(CHANNEL_BUZZ) - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ambience", "[usr.client.prefs.toggles & SOUND_AMBIENCE]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ambience", "[usr.client.prefs.toggles & SOUND_AMBIENCE ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Sound/Toggle_Soundscape/Get_checked(client/C) return C.prefs.toggles & SOUND_AMBIENCE @@ -196,7 +196,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggle_ship_ambience)() to_chat(usr, "You will no longer hear ship ambience.") usr.stop_sound_channel(CHANNEL_BUZZ) usr.client.ambience_playing = 0 - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ship Ambience", "[usr.client.prefs.toggles & SOUND_SHIP_AMBIENCE]")) //If you are copy-pasting this, I bet you read this comment expecting to see the same thing :^) + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ship Ambience", "[usr.client.prefs.toggles & SOUND_SHIP_AMBIENCE ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, I bet you read this comment expecting to see the same thing :^) /datum/verbs/menu/Settings/Sound/toggle_ship_ambience/Get_checked(client/C) return C.prefs.toggles & SOUND_SHIP_AMBIENCE @@ -208,7 +208,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggle_announcement_sound)() usr.client.prefs.toggles ^= SOUND_ANNOUNCEMENTS to_chat(usr, "You will now [(usr.client.prefs.toggles & SOUND_ANNOUNCEMENTS) ? "hear announcement sounds" : "no longer hear announcements"].") usr.client.prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Announcement Sound", "[usr.client.prefs.toggles & SOUND_ANNOUNCEMENTS]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Announcement Sound", "[usr.client.prefs.toggles & SOUND_ANNOUNCEMENTS ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Sound/toggle_announcement_sound/Get_checked(client/C) return C.prefs.toggles & SOUND_ANNOUNCEMENTS @@ -223,7 +223,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggleprayersounds)() to_chat(usr, "You will now hear prayer sounds.") else to_chat(usr, "You will no longer prayer sounds.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Prayer Sounds", "[usr.client.prefs.toggles & SOUND_PRAYERS]")) + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Prayer Sounds", "[usr.client.prefs.toggles & SOUND_PRAYERS ? "Enabled" : "Disabled"]")) /datum/verbs/menu/Settings/Sound/toggleprayersounds/Get_checked(client/C) return C.prefs.toggles & SOUND_PRAYERS @@ -246,7 +246,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings, listen_ooc)() usr.client.prefs.chat_toggles ^= CHAT_OOC usr.client.prefs.save_preferences() to_chat(usr, "You will [(usr.client.prefs.chat_toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel.") - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Seeing OOC", "[usr.client.prefs.chat_toggles & CHAT_OOC]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Seeing OOC", "[usr.client.prefs.chat_toggles & CHAT_OOC ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/listen_ooc/Get_checked(client/C) return C.prefs.chat_toggles & CHAT_OOC @@ -337,7 +337,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.toggles ^= INTENT_STYLE to_chat(src, "[(prefs.toggles & INTENT_STYLE) ? "Clicking directly on intents selects them." : "Clicking on intents rotates selection clockwise."]") prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Intent Selection", "[prefs.toggles & INTENT_STYLE]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Intent Selection", "[prefs.toggles & INTENT_STYLE ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/toggle_ghost_hud_pref() set name = "Toggle Ghost HUD" @@ -349,7 +349,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.save_preferences() if(isobserver(mob)) mob.hud_used.show_hud() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost HUD", "[prefs.ghost_hud]")) + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost HUD", "[prefs.ghost_hud ? "Enabled" : "Disabled"]")) /client/verb/toggle_inquisition() // warning: unexpected inquisition set name = "Toggle Inquisitiveness" @@ -362,7 +362,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS to_chat(src, "You will now examine everything you click on.") else to_chat(src, "You will no longer examine things you click on.") - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Inquisitiveness", "[prefs.inquisitive_ghost]")) + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Inquisitiveness", "[prefs.inquisitive_ghost ? "Enabled" : "Disabled"]")) //Admin Preferences /client/proc/toggleadminhelpsound() @@ -374,7 +374,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.toggles ^= SOUND_ADMINHELP prefs.save_preferences() to_chat(usr, "You will [(prefs.toggles & SOUND_ADMINHELP) ? "now" : "no longer"] hear a sound when adminhelps arrive.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Adminhelp Sound", "[prefs.toggles & SOUND_ADMINHELP]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Adminhelp Sound", "[prefs.toggles & SOUND_ADMINHELP ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggleannouncelogin() set name = "Do/Don't Announce Login" @@ -385,7 +385,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.toggles ^= ANNOUNCE_LOGIN prefs.save_preferences() to_chat(usr, "You will [(prefs.toggles & ANNOUNCE_LOGIN) ? "now" : "no longer"] have an announcement to other admins when you login.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Login Announcement", "[prefs.toggles & ANNOUNCE_LOGIN]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Login Announcement", "[prefs.toggles & ANNOUNCE_LOGIN ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggle_hear_radio() set name = "Show/Hide Radio Chatter" @@ -396,7 +396,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.chat_toggles ^= CHAT_RADIO prefs.save_preferences() to_chat(usr, "You will [(prefs.chat_toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from nearby radios or speakers") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Radio Chatter", "[prefs.chat_toggles & CHAT_RADIO]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Radio Chatter", "[prefs.chat_toggles & CHAT_RADIO ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/deadchat() set name = "Show/Hide Deadchat" @@ -405,7 +405,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.chat_toggles ^= CHAT_DEAD prefs.save_preferences() to_chat(src, "You will [(prefs.chat_toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Deadchat Visibility", "[prefs.chat_toggles & CHAT_DEAD]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Deadchat Visibility", "[prefs.chat_toggles & CHAT_DEAD ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggleprayers() set name = "Show/Hide Prayers" @@ -414,4 +414,4 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.chat_toggles ^= CHAT_PRAYER prefs.save_preferences() to_chat(src, "You will [(prefs.chat_toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Prayer Visibility", "[prefs.chat_toggles & CHAT_PRAYER]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Prayer Visibility", "[prefs.chat_toggles & CHAT_PRAYER ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm index 9d5433663e..0ff1bdefe3 100644 --- a/code/modules/clothing/ears/_ears.dm +++ b/code/modules/clothing/ears/_ears.dm @@ -1,3 +1,4 @@ + //Ears: currently only used for headsets and earmuffs /obj/item/clothing/ears name = "ears" diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 86d4c3466c..614a2c194b 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -4,7 +4,7 @@ icon_state = "yellow" item_state = "ygloves" siemens_coefficient = 0 - permeability_coefficient = 0.5 + permeability_coefficient = 0.05 item_color="yellow" resistance_flags = NONE @@ -14,7 +14,7 @@ icon_state = "yellow" item_state = "ygloves" siemens_coefficient = 1 //Set to a default of 1, gets overridden in New() - permeability_coefficient = 0.5 + permeability_coefficient = 0.05 item_color="yellow" resistance_flags = NONE @@ -77,7 +77,7 @@ name = "insulated gloves" desc = "These gloves will protect the wearer from electric shock." siemens_coefficient = 0 - permeability_coefficient = 0.5 + permeability_coefficient = 0.05 resistance_flags = NONE /obj/item/clothing/gloves/color/rainbow @@ -148,7 +148,7 @@ item_state = "egloves" item_color = "captain" siemens_coefficient = 0 - permeability_coefficient = 0.5 + permeability_coefficient = 0.05 cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT heat_protection = HANDS @@ -162,7 +162,7 @@ icon_state = "latex" item_state = "lgloves" siemens_coefficient = 0.3 - permeability_coefficient = 0.1 + permeability_coefficient = 0.01 item_color="white" transfer_prints = TRUE resistance_flags = NONE diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 9adc86e7f8..51a1131f1c 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -1,84 +1,84 @@ -/obj/item/clothing/head/hardhat - name = "hard hat" - desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight." - icon_state = "hardhat0_yellow" - item_state = "hardhat0_yellow" - var/brightness_on = 4 //luminosity when on +/obj/item/clothing/head/hardhat + name = "hard hat" + desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight." + icon_state = "hardhat0_yellow" + item_state = "hardhat0_yellow" + var/brightness_on = 4 //luminosity when on var/on = FALSE - item_color = "yellow" //Determines used sprites: hardhat[on]_[item_color] and hardhat[on]_[item_color]2 (lying down sprite) - armor = list(melee = 15, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20, fire = 100, acid = 50) - flags_inv = 0 - actions_types = list(/datum/action/item_action/toggle_helmet_light) - resistance_flags = FIRE_PROOF + item_color = "yellow" //Determines used sprites: hardhat[on]_[item_color] and hardhat[on]_[item_color]2 (lying down sprite) + armor = list(melee = 15, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20, fire = 100, acid = 50) + flags_inv = 0 + actions_types = list(/datum/action/item_action/toggle_helmet_light) + resistance_flags = FIRE_PROOF dynamic_hair_suffix = "+generic" - - dog_fashion = /datum/dog_fashion/head - -/obj/item/clothing/head/hardhat/attack_self(mob/user) - on = !on - icon_state = "hardhat[on]_[item_color]" - item_state = "hardhat[on]_[item_color]" - user.update_inv_head() //so our mob-overlays update - - if(on) - turn_on(user) - else - turn_off(user) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - -/obj/item/clothing/head/hardhat/proc/turn_on(mob/user) - set_light(brightness_on) - -/obj/item/clothing/head/hardhat/proc/turn_off(mob/user) - set_light(0) - -/obj/item/clothing/head/hardhat/orange - icon_state = "hardhat0_orange" - item_state = "hardhat0_orange" - item_color = "orange" - dog_fashion = null - -/obj/item/clothing/head/hardhat/red - icon_state = "hardhat0_red" - item_state = "hardhat0_red" - item_color = "red" - dog_fashion = null - name = "firefighter helmet" + + dog_fashion = /datum/dog_fashion/head + +/obj/item/clothing/head/hardhat/attack_self(mob/user) + on = !on + icon_state = "hardhat[on]_[item_color]" + item_state = "hardhat[on]_[item_color]" + user.update_inv_head() //so our mob-overlays update + + if(on) + turn_on(user) + else + turn_off(user) + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + +/obj/item/clothing/head/hardhat/proc/turn_on(mob/user) + set_light(brightness_on) + +/obj/item/clothing/head/hardhat/proc/turn_off(mob/user) + set_light(0) + +/obj/item/clothing/head/hardhat/orange + icon_state = "hardhat0_orange" + item_state = "hardhat0_orange" + item_color = "orange" + dog_fashion = null + +/obj/item/clothing/head/hardhat/red + icon_state = "hardhat0_red" + item_state = "hardhat0_red" + item_color = "red" + dog_fashion = null + name = "firefighter helmet" flags_1 = STOPSPRESSUREDMAGE_1 - heat_protection = HEAD - max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - -/obj/item/clothing/head/hardhat/white - icon_state = "hardhat0_white" - item_state = "hardhat0_white" - item_color = "white" + heat_protection = HEAD + max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + +/obj/item/clothing/head/hardhat/white + icon_state = "hardhat0_white" + item_state = "hardhat0_white" + item_color = "white" flags_1 = STOPSPRESSUREDMAGE_1 - heat_protection = HEAD - max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - dog_fashion = /datum/dog_fashion/head - -/obj/item/clothing/head/hardhat/dblue - icon_state = "hardhat0_dblue" - item_state = "hardhat0_dblue" - item_color = "dblue" - dog_fashion = null - -/obj/item/clothing/head/hardhat/atmos - icon_state = "hardhat0_atmos" - item_state = "hardhat0_atmos" - item_color = "atmos" - dog_fashion = null - name = "atmospheric technician's firefighting helmet" - desc = "A firefighter's helmet, able to keep the user cool in any situation." + heat_protection = HEAD + max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + dog_fashion = /datum/dog_fashion/head + +/obj/item/clothing/head/hardhat/dblue + icon_state = "hardhat0_dblue" + item_state = "hardhat0_dblue" + item_color = "dblue" + dog_fashion = null + +/obj/item/clothing/head/hardhat/atmos + icon_state = "hardhat0_atmos" + item_state = "hardhat0_atmos" + item_color = "atmos" + dog_fashion = null + name = "atmospheric technician's firefighting helmet" + desc = "A firefighter's helmet, able to keep the user cool in any situation." flags_1 = STOPSPRESSUREDMAGE_1 | THICKMATERIAL_1 - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - heat_protection = HEAD - max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + heat_protection = HEAD + max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 9f09783df2..544d9e7b12 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -1,5 +1,7 @@ + + /obj/item/clothing/head/centhat - name = "\improper Centcom hat" + name = "\improper CentCom hat" icon_state = "centcom" desc = "It's good to be emperor." item_state = "that" @@ -291,6 +293,18 @@ desc = "A simple straw hat." icon_state = "scarecrow_hat" +/obj/item/clothing/head/lobsterhat + name = "foam lobster head" + desc = "When everything's going to crab, protecting your head is the best choice." + icon_state = "lobster_hat" + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + +/obj/item/clothing/head/drfreezehat + name = "doctor freeze's wig" + desc = "A cool wig for cool people." + icon_state = "drfreeze_hat" + flags_inv = HIDEHAIR + /obj/item/clothing/head/pharoah name = "pharoah hat" desc = "Walk like an Egyptian." diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 58b4d1fffe..403b81211d 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -14,8 +14,8 @@ L.implant(H, null, 1) var/obj/item/device/radio/R = H.ears - R.set_frequency(GLOB.CENTCOM_FREQ) - R.freqlock = 1 + R.set_frequency(FREQ_CENTCOM) + R.freqlock = TRUE var/obj/item/card/id/W = H.wear_id W.registered_name = H.real_name diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index e16dd2a782..050c2fdc87 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -102,8 +102,8 @@ var/obj/item/device/radio/R = H.ears if(R) - R.set_frequency(GLOB.SYND_FREQ) - R.freqlock = 1 + R.set_frequency(FREQ_SYNDICATE) + R.freqlock = TRUE var/obj/item/card/id/W = H.wear_id if(W) @@ -257,8 +257,8 @@ W.update_label() var/obj/item/device/radio/headset/R = H.ears - R.set_frequency(GLOB.CENTCOM_FREQ) - R.freqlock = 1 + R.set_frequency(FREQ_CENTCOM) + R.freqlock = TRUE /datum/outfit/ghost_cultist name = "Cultist Ghost" @@ -396,8 +396,8 @@ return var/obj/item/device/radio/R = H.ears - R.set_frequency(GLOB.CENTCOM_FREQ) - R.freqlock = 1 + R.set_frequency(FREQ_CENTCOM) + R.freqlock = TRUE var/obj/item/implant/mindshield/L = new/obj/item/implant/mindshield(H)//Here you go Deuryn L.implant(H, null, 1) diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index a2707de58b..1ff8c65d4b 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -2,7 +2,7 @@ icon = 'icons/obj/clothing/suits.dmi' name = "suit" var/fire_resist = T0C+100 - allowed = list(/obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) slot_flags = SLOT_OCLOTHING var/blood_overlay_type = "suit" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 7cbdb46f55..3e044108fb 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -354,7 +354,7 @@ item_state = "centcom" w_class = WEIGHT_CLASS_BULKY body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/gun/energy, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/gun/energy, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) flags_1 = THICKMATERIAL_1 flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 11b60817ed..bfd4415b3a 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -21,7 +21,7 @@ flags_1 = THICKMATERIAL_1 body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS slowdown = 1 - allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/pen, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray) + allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/pen, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 80, fire = 30, acid = 100) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT strip_delay = 70 diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index bb379ae6f3..e6331eb8b8 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -20,7 +20,7 @@ item_state = "bio_suit" body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_inv = HIDEJUMPSUIT - allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/food/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/device/assembly/flash/handheld, /obj/item/storage/box/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/food/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/device/assembly/flash/handheld, /obj/item/storage/box/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) //Chaplain /obj/item/clothing/suit/hooded/chaplain_hoodie @@ -29,7 +29,7 @@ icon_state = "chaplain_hoodie" item_state = "chaplain_hoodie" body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) hoodtype = /obj/item/clothing/head/hooded/chaplain_hood /obj/item/clothing/head/hooded/chaplain_hood @@ -46,7 +46,7 @@ item_state = "nun" body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS flags_inv = HIDESHOES|HIDEJUMPSUIT - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) /obj/item/clothing/suit/studentuni name = "student robe" @@ -54,7 +54,7 @@ icon_state = "studentuni" item_state = "studentuni" body_parts_covered = ARMS|CHEST - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) /obj/item/clothing/suit/witchhunter name = "witchunter garb" @@ -62,7 +62,7 @@ icon_state = "witchhunter" item_state = "witchhunter" body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) //Chef /obj/item/clothing/suit/toggle/chef diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index f50f6eaf6a..7c7599af3d 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -1,48 +1,49 @@ -/obj/item/clothing/suit/toggle/labcoat - name = "labcoat" - desc = "A suit that protects against minor chemical spills." - icon_state = "labcoat" - item_state = "labcoat" - blood_overlay_type = "coat" - body_parts_covered = CHEST|ARMS - allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/device/sensor_device, /obj/item/tank/internals/emergency_oxygen) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0, fire = 50, acid = 50) - togglename = "buttons" - -/obj/item/clothing/suit/toggle/labcoat/cmo - name = "chief medical officer's labcoat" - desc = "Bluer than the standard model." - icon_state = "labcoat_cmo" - item_state = "labcoat_cmo" - -/obj/item/clothing/suit/toggle/labcoat/emt - name = "EMT's jacket" - desc = "A dark blue jacket with reflective strips for emergency medical technicians." - icon_state = "labcoat_emt" - item_state = "labcoat_cmo" - -/obj/item/clothing/suit/toggle/labcoat/mad - name = "\improper The Mad's labcoat" - desc = "It makes you look capable of konking someone on the noggin and shooting them into space." - icon_state = "labgreen" - item_state = "labgreen" - -/obj/item/clothing/suit/toggle/labcoat/genetics - name = "geneticist labcoat" - desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder." - icon_state = "labcoat_gen" - -/obj/item/clothing/suit/toggle/labcoat/chemist - name = "chemist labcoat" - desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder." - icon_state = "labcoat_chem" - -/obj/item/clothing/suit/toggle/labcoat/virologist - name = "virologist labcoat" - desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder." - icon_state = "labcoat_vir" - -/obj/item/clothing/suit/toggle/labcoat/science - name = "scientist labcoat" - desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder." - icon_state = "labcoat_tox" \ No newline at end of file +/obj/item/clothing/suit/toggle/labcoat + name = "labcoat" + desc = "A suit that protects against minor chemical spills." + icon_state = "labcoat" + item_state = "labcoat" + blood_overlay_type = "coat" + body_parts_covered = CHEST|ARMS + allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/device/sensor_device, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0, fire = 50, acid = 50) + togglename = "buttons" + species_exception = list(/datum/species/golem) + +/obj/item/clothing/suit/toggle/labcoat/cmo + name = "chief medical officer's labcoat" + desc = "Bluer than the standard model." + icon_state = "labcoat_cmo" + item_state = "labcoat_cmo" + +/obj/item/clothing/suit/toggle/labcoat/emt + name = "EMT's jacket" + desc = "A dark blue jacket with reflective strips for emergency medical technicians." + icon_state = "labcoat_emt" + item_state = "labcoat_cmo" + +/obj/item/clothing/suit/toggle/labcoat/mad + name = "\improper The Mad's labcoat" + desc = "It makes you look capable of konking someone on the noggin and shooting them into space." + icon_state = "labgreen" + item_state = "labgreen" + +/obj/item/clothing/suit/toggle/labcoat/genetics + name = "geneticist labcoat" + desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder." + icon_state = "labcoat_gen" + +/obj/item/clothing/suit/toggle/labcoat/chemist + name = "chemist labcoat" + desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder." + icon_state = "labcoat_chem" + +/obj/item/clothing/suit/toggle/labcoat/virologist + name = "virologist labcoat" + desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder." + icon_state = "labcoat_vir" + +/obj/item/clothing/suit/toggle/labcoat/science + name = "scientist labcoat" + desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder." + icon_state = "labcoat_tox" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index a5135222d0..5a2e5ade3c 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -93,7 +93,7 @@ item_state = "syndicate-black-red" desc = "A plastic replica of the Syndicate space suit. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!" w_class = WEIGHT_CLASS_NORMAL - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT resistance_flags = NONE @@ -160,7 +160,7 @@ item_state = "w_suit" body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_inv = HIDEJUMPSUIT - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) /obj/item/clothing/suit/cardborg name = "cardborg suit" @@ -240,7 +240,7 @@ body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too - allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/gun/ballistic/automatic/speargun) + allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/automatic/speargun) hoodtype = /obj/item/clothing/head/hooded/carp_hood /obj/item/clothing/head/hooded/carp_hood @@ -355,7 +355,7 @@ desc = "Aviators not included." icon_state = "bomberjacket" item_state = "brownjsuit" - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/device/radio) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/device/radio) body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT @@ -367,7 +367,7 @@ item_state = "hostrench" resistance_flags = NONE max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/device/radio) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/device/radio) /obj/item/clothing/suit/jacket/leather/overcoat name = "leather overcoat" @@ -397,7 +397,7 @@ desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable." icon_state = "militaryjacket" item_state = "militaryjacket" - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/device/radio) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/device/radio) /obj/item/clothing/suit/jacket/letterman name = "letterman jacket" @@ -470,7 +470,7 @@ cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0) - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) /obj/item/clothing/head/hooded/winterhood name = "winter hood" @@ -513,7 +513,7 @@ name = "medical winter coat" icon_state = "coatmedical" item_state = "coatmedical" - allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0, fire = 0, acid = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/medical @@ -524,7 +524,7 @@ name = "science winter coat" icon_state = "coatscience" item_state = "coatscience" - allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0, fire = 0, acid = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/science @@ -536,7 +536,7 @@ icon_state = "coatengineer" item_state = "coatengineer" armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20, fire = 30, acid = 45) - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/device/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/device/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering /obj/item/clothing/head/hooded/winterhood/engineering @@ -555,7 +555,7 @@ name = "hydroponics winter coat" icon_state = "coathydro" item_state = "coathydro" - allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/device/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) + allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/device/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants, /obj/item/toy, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) hoodtype = /obj/item/clothing/head/hooded/winterhood/hydro /obj/item/clothing/head/hooded/winterhood/hydro @@ -574,7 +574,7 @@ name = "mining winter coat" icon_state = "coatminer" item_state = "coatminer" - allowed = list(/obj/item/pickaxe, /obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) + allowed = list(/obj/item/pickaxe, /obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/miner diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 10c1a47ac1..22b5ee421b 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -18,7 +18,7 @@ gas_transfer_coefficient = 0.9 permeability_coefficient = 0.5 body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/extinguisher, /obj/item/crowbar) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/extinguisher, /obj/item/crowbar) slowdown = 1 flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT flags_1 = STOPSPRESSUREDMAGE_1 | THICKMATERIAL_1 @@ -141,7 +141,7 @@ permeability_coefficient = 0.5 flags_1 = THICKMATERIAL_1 body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/device/geiger_counter) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/device/geiger_counter) slowdown = 1.5 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100, fire = 30, acid = 30) strip_delay = 60 @@ -151,6 +151,6 @@ /obj/item/clothing/suit/radiation/ComponentInitialize() . = ..() - AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION, TRUE, FALSE) + AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION, TRUE, FALSE) // Just don't want things to be irradiated inside this // Except things on the mob aren't even inside the suit so ehhhhhh \ No newline at end of file diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index bb9887c373..008ced69ea 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -149,7 +149,7 @@ name = "papier-mache robe" // no non-latin characters! desc = "A robe held together by various bits of clear-tape and paste." icon_state = "wizard-paper" - item_state = "wizrobe" + item_state = "wizard-paper" var/robe_charge = TRUE actions_types = list(/datum/action/item_action/stickmen) diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 4e7f0da011..6d522a3706 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -40,6 +40,7 @@ item_color = "cargo" body_parts_covered = CHEST|GROIN|ARMS mutantrace_variation = MUTANTRACE_VARIATION + alt_covers_chest = TRUE /obj/item/clothing/under/rank/chaplain diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm index 185712e072..cd69aec17e 100644 --- a/code/modules/clothing/under/jobs/engineering.dm +++ b/code/modules/clothing/under/jobs/engineering.dm @@ -31,4 +31,4 @@ icon_state = "robotics" item_state = "robotics" item_color = "robotics" - resistance_flags = NONE + resistance_flags = NONE \ No newline at end of file diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 7686ba54ca..1fccac5c43 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -647,6 +647,7 @@ return 0 /obj/item/clothing/under/plasmaman/attackby(obj/item/E, mob/user, params) + ..() if (istype(E, /obj/item/device/extinguisher_refill)) if (extinguishes_left == 5) to_chat(user, "The inbuilt extinguisher is full.")