From c793555f8981568de43aaf35b35a5791310bd1ce Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Fri, 20 May 2016 19:53:54 -0700 Subject: [PATCH 01/24] Fixes appearance bans Changes check antag (ghost) to (no client) --- code/modules/admin/banappearance.dm | 110 ++++------------------ code/modules/admin/player_panel.dm | 50 +++++----- code/modules/admin/topic.dm | 22 +++-- code/modules/client/preferences.dm | 2 +- code/modules/mob/new_player/new_player.dm | 2 +- 5 files changed, 56 insertions(+), 130 deletions(-) diff --git a/code/modules/admin/banappearance.dm b/code/modules/admin/banappearance.dm index 1fabfcc5b03..2a89cc41ac9 100644 --- a/code/modules/admin/banappearance.dm +++ b/code/modules/admin/banappearance.dm @@ -1,61 +1,13 @@ -//ban people from using custom names and appearances. that'll show 'em. - -var/appearanceban_runonce //Updates legacy bans with new info -var/appearance_keylist[0] //to store the keys - -/proc/appearance_fullban(mob/M, reason) - if (!M || !M.key) return - appearance_keylist.Add(text("[M.ckey] ## [reason]")) - appearance_savebanfile() - -/proc/appearance_client_fullban(ckey) - if (!ckey) return - appearance_keylist.Add(text("[ckey]")) - appearance_savebanfile() - -//returns a reason if M is banned, returns 0 otherwise -/proc/appearance_isbanned(mob/M) - if(M) - for(var/s in appearance_keylist) - if(findtext(s, "[M.ckey]") == 1) - var/startpos = findtext(s, "## ") + 3 - if(startpos && startpos < length(s)) - var/text = copytext(s, startpos, 0) - if(text) - return text - return "Reason Unspecified" - return 0 - -/* -DEBUG -/mob/verb/list_all_appearances() - set name = "list all appearances" - - for(var/s in appearance_keylist) - world << s - -/mob/verb/reload_appearances() - set name = "reload appearances" - - appearance_loadbanfile() -*/ +//Code to update legacy appearance bans to jobbans /proc/appearance_loadbanfile() if(config.ban_legacy_system) - var/savefile/S=new("data/appearance_full.ban") - S["keys[0]"] >> appearance_keylist - log_admin("Loading appearance_rank") - S["runonce"] >> appearanceban_runonce - - if (!length(appearance_keylist)) - appearance_keylist=list() - log_admin("appearance_keylist was empty") + return else if(!establish_db_connection()) - world.log << "Database connection failed. Reverting to the legacy ban system." - diary << "Database connection failed. Reverting to the legacy ban system." + world.log << "Database connection failed." + diary << "Database connection failed." config.ban_legacy_system = 1 - appearance_loadbanfile() return //appearance bans @@ -63,48 +15,20 @@ DEBUG query.Execute() while(query.NextRow()) - var/ckey = query.item[1] + var/ckeyb = query.item[1] - appearance_keylist.Add("[ckey]") + var/datum/admins/db = new() + db.DB_ban_unban(ckeyb, BANTYPE_APPEARANCE) -/proc/appearance_savebanfile() - var/savefile/S=new("data/appearance_full.ban") - S["keys[0]"] << appearance_keylist + var/mob/playermob + var/exist = 0 + for(var/mob/M in player_list) + if(M.ckey == ckeyb) + playermob = M + exist = 1 + break -/proc/appearance_unban(mob/M) - appearance_remove("[M.ckey]") - appearance_savebanfile() + if(!exist) + playermob.ckey = ckeyb - -/proc/appearance_updatelegacybans() - if(!appearanceban_runonce) - log_admin("Updating appearancefile!") - // Updates bans.. Or fixes them. Either way. - for(var/T in appearance_keylist) - if(!T) - continue - appearanceban_runonce++ //don't run this update again - - -/proc/appearance_remove(X) - for (var/i = 1; i <= length(appearance_keylist); i++) - if( findtext(appearance_keylist[i], "[X]") ) - appearance_keylist.Remove(appearance_keylist[i]) - appearance_savebanfile() - return 1 - return 0 - -/* -/proc/DB_ban_isappearancebanned(var/playerckey) - establish_db_connection() - if(!dbcon.IsConnected()) - return - - var/sqlplayerckey = sanitizeSQL(ckey(playerckey)) - - var/DBQuery/query = dbcon.NewQuery("SELECT id FROM [format_table_name("ban")] WHERE CKEY = '[sqlplayerckey]' AND ((bantype = 'APPEARANCE_PERMABAN') OR (bantype = 'APPEARANCE_TEMPBAN' AND expiration_time > Now())) AND unbanned != 1") - query.Execute() - while(query.NextRow()) - return 1 - return 0 -*/ \ No newline at end of file + db.DB_ban_record(BANTYPE_JOB_PERMA, playermob, -1, "Legacy", "Appearance") diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 220b1b4c9e9..26b130b6751 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -346,7 +346,7 @@ for(var/datum/mind/N in ticker.mode.syndicates) var/mob/M = N.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" else @@ -375,20 +375,20 @@ dat += "[N.name]([N.key])Head Revolutionary body destroyed!" dat += "PM" else - dat += "[M.real_name] (Leader)[M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name] (Leader)[M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" for(var/datum/mind/N in ticker.mode.revolutionaries) var/mob/M = N.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "" for(var/datum/mind/N in ticker.mode.get_living_heads()) var/mob/M = N.current if(M) - dat += "" + dat += "" dat += "" dat += "" var/turf/mob_loc = get_turf(M) @@ -406,13 +406,13 @@ dat += "" dat += "" else - dat += "" + dat += "" dat += "" dat += "" for(var/datum/mind/N in G.gangsters) var/mob/M = N.current if(M) - dat += "" + dat += "" dat += "" dat += "
Target(s)Location
[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]
[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]PMFLW
[N.name]([N.key])Gang Boss body destroyed!PM
[M.real_name] (Boss)[M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]
[M.real_name] (Boss)[M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]PMFLW
[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]
[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]PM
" @@ -421,7 +421,7 @@ for(var/datum/mind/changeling in ticker.mode.changelings) var/mob/M = changeling.current if(M) - dat += "[M.mind.changeling.changelingID] as [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.mind.changeling.changelingID] as [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "Show Objective" @@ -435,7 +435,7 @@ for(var/datum/mind/wizard in ticker.mode.wizards) var/mob/M = wizard.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "Show Objective" @@ -449,7 +449,7 @@ for(var/datum/mind/apprentice in ticker.mode.apprentices) var/mob/M = apprentice.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "Show Objective" @@ -463,7 +463,7 @@ for(var/datum/mind/N in ticker.mode.cult) var/mob/M = N.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "" @@ -473,7 +473,7 @@ for(var/datum/mind/N in ticker.mode.red_deities) var/mob/M = N.current if(M) - dat += "Red Deity: [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "Red Deity: [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "" @@ -483,7 +483,7 @@ for(var/datum/mind/N in ticker.mode.blue_deities) var/mob/M = N.current if(M) - dat += "Blue Deity: [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "Blue Deity: [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "" @@ -493,7 +493,7 @@ for(var/datum/mind/N in ticker.mode.red_deity_prophets) var/mob/M = N.current if(M) - dat += "Red Deity Prophet: [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "Red Deity Prophet: [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "" @@ -503,7 +503,7 @@ for(var/datum/mind/N in ticker.mode.blue_deity_prophets) var/mob/M = N.current if(M) - dat += "Blue Deity Prophet: [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "Blue Deity Prophet: [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "" @@ -513,7 +513,7 @@ for(var/datum/mind/N in ticker.mode.red_deity_followers) var/mob/M = N.current if(M) - dat += "Red Deity Followers: [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "Red Deity Followers: [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "" @@ -523,7 +523,7 @@ for(var/datum/mind/N in ticker.mode.blue_deity_followers) var/mob/M = N.current if(M) - dat += "Blue Deity Followers: [M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "Blue Deity Followers: [M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "" @@ -533,7 +533,7 @@ for(var/datum/mind/traitor in ticker.mode.traitors) var/mob/M = traitor.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "Show Objective" @@ -547,7 +547,7 @@ for(var/datum/mind/N in ticker.mode.shadows) var/mob/M = N.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" else @@ -560,7 +560,7 @@ for(var/datum/mind/N in ticker.mode.thralls) var/mob/M = N.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "" @@ -570,7 +570,7 @@ for(var/datum/mind/abductor in ticker.mode.abductors) var/mob/M = abductor.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "Show Objective" @@ -583,7 +583,7 @@ for(var/datum/mind/abductee in E.abductee_minds) var/mob/M = abductee.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "Show Objective" @@ -598,7 +598,7 @@ var/datum/mind/devil = X var/mob/M = devil.current if(M) - dat += "[M.real_name] : [devil.devilinfo.truename][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name] : [devil.devilinfo.truename][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "Show Objective" dat += "Show all devil info" @@ -613,7 +613,7 @@ var/datum/mind/sintouched = X var/mob/M = sintouched.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "Show Objective" else @@ -635,7 +635,7 @@ for(var/datum/mind/blob in blob_minds) var/mob/M = blob.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" else @@ -651,7 +651,7 @@ for(var/datum/mind/eek in mode.ape_infectees) var/mob/M = eek.current if(M) - dat += "[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" else diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 4b0278dac25..b3062660abf 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -517,15 +517,16 @@ usr << "This mob has no ckey" return - var/banreason = appearance_isbanned(M) - if(banreason) - switch(alert("Reason: '[banreason]' Remove appearance ban?","Please Confirm","Yes","No")) + + if(jobban_isbanned(M, "appearance")) + switch(alert("Remove appearance ban?","Please Confirm","Yes","No")) if("Yes") ban_unban_log_save("[key_name(usr)] removed [key_name(M)]'s appearance ban") log_admin("[key_name(usr)] removed [key_name(M)]'s appearance ban") feedback_inc("ban_appearance_unban", 1) - DB_ban_unban(M.ckey, BANTYPE_APPEARANCE) - appearance_unban(M) + DB_ban_unban(M.ckey, BANTYPE_ANY_JOB, "appearance") + if(M.client) + jobban_buildcache(M.client) message_admins("[key_name_admin(usr)] removed [key_name_admin(M)]'s appearance ban") M << "[usr.client.ckey] has removed your appearance ban." @@ -537,8 +538,9 @@ ban_unban_log_save("[key_name(usr)] appearance banned [key_name(M)]. reason: [reason]") log_admin("[key_name(usr)] appearance banned [key_name(M)]. \nReason: [reason]") feedback_inc("ban_appearance",1) - DB_ban_record(BANTYPE_APPEARANCE, M, -1, reason) - appearance_fullban(M, "[reason]; By [usr.ckey] on [time2text(world.realtime)]") + DB_ban_record(BANTYPE_JOB_PERMA, M, -1, reason, "appearance") + if(M.client) + jobban_buildcache(M.client) add_note(M.ckey, "Appearance banned - [reason]", null, usr.ckey, 0) message_admins("[key_name_admin(usr)] appearance banned [key_name_admin(M)]") M << "You have been appearance banned by [usr.client.ckey]." @@ -982,7 +984,7 @@ msg += ", [job]" add_note(M.ckey, "Banned from [msg] - [reason]", null, usr.ckey, 0) message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes") - M << "You have been jobbanned by [usr.client.ckey] from: [msg]." + M << "You have been [(msg == "ooc") ? "banned" : "jobbanned"] by [usr.client.ckey] from: [msg]." M << "The reason is: [reason]" M << "This jobban will be lifted in [mins] minutes." href_list["jobban2"] = 1 // lets it fall through and refresh @@ -1005,7 +1007,7 @@ msg += ", [job]" add_note(M.ckey, "Banned from [msg] - [reason]", null, usr.ckey, 0) message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg]") - M << "You have been jobbanned by [usr.client.ckey] from: [msg]." + M << "You have been [(msg == "ooc") ? "banned" : "jobbanned"] by [usr.client.ckey] from: [msg]." M << "The reason is: [reason]" M << "Jobban can be lifted only upon request." href_list["jobban2"] = 1 // lets it fall through and refresh @@ -1608,7 +1610,7 @@ else if(href_list["adminchecklaws"]) output_ai_laws() - + else if(href_list["admincheckdevilinfo"]) output_devil_info() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 22a6805431c..8cea4d56f7c 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -153,7 +153,7 @@ var/list/preferences_datums = list() dat += "Set Occupation Preferences
" dat += "

Identity

" dat += "" @@ -453,8 +445,6 @@ typedesc = "JOBBAN
([job])" if("JOB_TEMPBAN") typedesc = "TEMP JOBBAN
([job])
([duration] minutes [(unbanned) ? "" : "(Edit))"]
Expires [expiration]" - if("APPEARANCE_PERMABAN") - typedesc = "IDENTITY PERMABAN" if("ADMIN_PERMABAN") typedesc = "ADMIN PERMABAN" if("ADMIN_TEMPBAN") diff --git a/code/modules/admin/banappearance.dm b/code/modules/admin/banappearance.dm deleted file mode 100644 index 2a89cc41ac9..00000000000 --- a/code/modules/admin/banappearance.dm +++ /dev/null @@ -1,34 +0,0 @@ -//Code to update legacy appearance bans to jobbans - -/proc/appearance_loadbanfile() - if(config.ban_legacy_system) - return - else - if(!establish_db_connection()) - world.log << "Database connection failed." - diary << "Database connection failed." - config.ban_legacy_system = 1 - return - - //appearance bans - var/DBQuery/query = dbcon.NewQuery("SELECT ckey FROM [format_table_name("ban")] WHERE bantype = 'APPEARANCE_PERMABAN' AND NOT unbanned = 1") - query.Execute() - - while(query.NextRow()) - var/ckeyb = query.item[1] - - var/datum/admins/db = new() - db.DB_ban_unban(ckeyb, BANTYPE_APPEARANCE) - - var/mob/playermob - var/exist = 0 - for(var/mob/M in player_list) - if(M.ckey == ckeyb) - playermob = M - exist = 1 - break - - if(!exist) - playermob.ckey = ckeyb - - db.DB_ban_record(BANTYPE_JOB_PERMA, playermob, -1, "Legacy", "Appearance") diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 40558982139..462e3cd3a63 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -203,12 +203,6 @@ if(!banckey || !banreason || !banjob || !banduration) usr << "Not enough parameters (Requires ckey, reason and job)." return - if(BANTYPE_APPEARANCE) - if(!banckey || !banreason) - usr << "Not enough parameters (Requires ckey and reason)." - return - banduration = null - banjob = null if(BANTYPE_ADMIN_PERMA) if(!banckey || !banreason) usr << "Not enough parameters (Requires ckey and reason)." diff --git a/code/world.dm b/code/world.dm index 83454220e28..1f754d4b05b 100644 --- a/code/world.dm +++ b/code/world.dm @@ -39,7 +39,6 @@ var/global/list/map_transition_config = MAP_TRANSITION_CONFIG load_admins() if(config.usewhitelist) load_whitelist() - appearance_loadbanfile() LoadBans() investigate_reset() diff --git a/tgstation.dme b/tgstation.dme index 27f90292ede..d57af706b3b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -840,7 +840,6 @@ #include "code\modules\admin\admin_memo.dm" #include "code\modules\admin\admin_ranks.dm" #include "code\modules\admin\admin_verbs.dm" -#include "code\modules\admin\banappearance.dm" #include "code\modules\admin\banjob.dm" #include "code\modules\admin\create_mob.dm" #include "code\modules\admin\create_object.dm" From c6e6dcb4ef6e6e2a141f7634768b661fa68b290e Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Fri, 19 Aug 2016 13:35:10 -0700 Subject: [PATCH 11/24] wording fixes --- code/modules/admin/topic.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 462e3cd3a63..0f88f315ee3 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -983,7 +983,7 @@ msg += ", [job]" add_note(M.ckey, "Banned from [msg] - [reason]", null, usr.ckey, 0) message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes.") - M << "You have been [(msg == "ooc") ? "banned" : "jobbanned"] by [usr.client.ckey] from: [msg]." + M << "You have been [(msg == ("ooc" || "appearance")) ? "banned" : "jobbanned"] by [usr.client.ckey] from: [msg]." M << "The reason is: [reason]" M << "This jobban will be lifted in [mins] minutes." href_list["jobban2"] = 1 // lets it fall through and refresh @@ -1006,7 +1006,7 @@ msg += ", [job]" add_note(M.ckey, "Banned from [msg] - [reason]", null, usr.ckey, 0) message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg].") - M << "You have been [(msg == "ooc") ? "banned" : "jobbanned"] by [usr.client.ckey] from: [msg]." + M << "You have been [(msg == ("ooc" || "appearance")) ? "banned" : "jobbanned"] by [usr.client.ckey] from: [msg]." M << "The reason is: [reason]" M << "Jobban can be lifted only upon request." href_list["jobban2"] = 1 // lets it fall through and refresh From e6146d7739c721707b053d7c08b745eb3a0b841a Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Fri, 19 Aug 2016 15:06:08 -0700 Subject: [PATCH 12/24] [S] Fixes deadchat bugs (#19972) * Fixes an exploit that bypassed deadchat bans. Adds global deadchat toggle as requested by mso. Adds some feedback on if dead ooc was turned on or off for admins. * Fix only --- code/modules/mob/dead/observer/say.dm | 12 ------------ code/modules/mob/say.dm | 12 ++++++++++++ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index 533e4bc3a5f..b6ea4447421 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -6,18 +6,6 @@ log_say("Ghost/[src.key] : [message]") - if(jobban_isbanned(src, "OOC")) - src << "You have been banned from deadchat." - return - - if (src.client) - if(src.client.prefs.muted & MUTE_DEADCHAT) - src << "You cannot talk in deadchat (muted)." - return - - if (src.client.handle_spam_prevention(message,MUTE_DEADCHAT)) - return - . = src.say_dead(message) /mob/dead/observer/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 997dc6a527e..e7ceb3e1eef 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -35,6 +35,18 @@ usr << "Speech is currently admin-disabled." return + if(jobban_isbanned(src, "OOC")) + src << "You have been banned from deadchat." + return + + if (src.client) + if(src.client.prefs.muted & MUTE_DEADCHAT) + src << "You cannot talk in deadchat (muted)." + return + + if(src.client.handle_spam_prevention(message,MUTE_DEADCHAT)) + return + var/mob/dead/observer/O = src if(isobserver(src) && O.deadchat_name) name = "[O.deadchat_name]" From 920eb333808c0e07549d6a6d76c60772e405aec5 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Fri, 19 Aug 2016 18:53:15 -0400 Subject: [PATCH 13/24] like taking every curse of every witch ever --- .../gamemodes/clock_cult/clock_scripture.dm | 37 +------------------ 1 file changed, 1 insertion(+), 36 deletions(-) diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm index edb588fe8d8..0596d796731 100644 --- a/code/game/gamemodes/clock_cult/clock_scripture.dm +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -25,7 +25,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed var/multiple_invokers_used = FALSE //If scripture requires more than one invoker var/multiple_invokers_optional = FALSE //If scripture can have multiple invokers to bolster its effects var/tier = SCRIPTURE_PERIPHERAL //The scripture's tier - var/logname = "XX" //what the scripture logs as when recited; make sure this is unique for each scripture! //components the scripture used from a slab var/list/used_slab_components = list("belligerent_eye" = 0, "vanguard_cogwheel" = 0, "guvax_capacitor" = 0, "replicant_alloy" = 0, "hierophant_ansible" = 0) @@ -61,7 +60,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed if(used_cache_components[i]) clockwork_component_cache[i] += consumed_components[i] else if(slab && !slab.no_cost) //if the slab exists and isn't debug, log the scripture as being used - feedback_add_details("clockcult_scripture_recited", logname) + feedback_add_details("clockcult_scripture_recited", name) if(slab) slab.busy = null qdel(src) @@ -195,7 +194,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed required_components = list("belligerent_eye" = 1) usage_tip = "Useful for crowd control in a populated area and disrupting mass movement." tier = SCRIPTURE_DRIVER - logname = "BEL" /datum/clockwork_scripture/channeled/belligerent/chant_effects(chant_number) for(var/mob/living/carbon/C in hearers(7, invoker)) @@ -227,7 +225,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed creator_message = "You form a judicial visor, which is capable of smiting the unworthy." usage_tip = "The visor has a thirty-second cooldown once used, and the marker it creates has a delay of 3 seconds before exploding." tier = SCRIPTURE_DRIVER - logname = "JV" @@ -241,7 +238,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed required_components = list("vanguard_cogwheel" = 1) usage_tip = "You cannot reactivate Vanguard while still shielded by it." tier = SCRIPTURE_DRIVER - logname = "VAN" var/total_duration = 200 /datum/clockwork_scripture/vanguard/check_special_requirements() @@ -290,7 +286,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed consumed_components = list("vanguard_cogwheel" = 1) usage_tip = "The Compromise is very fast to invoke." tier = SCRIPTURE_DRIVER - logname = "SC" /datum/clockwork_scripture/sentinels_compromise/scripture_effects() var/list/nearby_cultists = list() @@ -333,7 +328,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed required_components = list("guvax_capacitor" = 1) usage_tip = "Only works on those in melee range and does not penetrate mindshield implants. Much more efficient than a Sigil of Submission at low Servant amounts." tier = SCRIPTURE_DRIVER - logname = "GUV" /datum/clockwork_scripture/guvax/run_scripture() var/servants = 0 @@ -369,7 +363,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed consumed_components = list("guvax_capacitor" = 1) usage_tip = "Useful for fleeing attackers, as few will be able to follow someone using this scripture." tier = SCRIPTURE_DRIVER - logname = "TT" var/flee_time = 47 //allow fleeing for 5 seconds var/grace_period = 3 //very short grace period so you don't have to stop immediately var/datum/progressbar/progbar @@ -410,7 +403,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed whispered = TRUE usage_tip = "This is inefficient as a way to produce components, as the slab produced must be held by someone with no other slabs to produce components." tier = SCRIPTURE_DRIVER - logname = "REP" /datum/clockwork_scripture/replicant/scripture_effects() invoker << "You copy a piece of replicant alloy and command it into a new slab." //No visible message, for stealth purposes @@ -434,7 +426,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Slabs will draw components from the global cache after the slab's own repositories, making caches very efficient." tier = SCRIPTURE_DRIVER one_per_tile = TRUE - logname = "TC" /datum/clockwork_scripture/create_object/tinkerers_cache/New() var/cache_cost_increase = min(round(clockwork_caches*0.2), 5) @@ -460,7 +451,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed creator_message = "You form a pair of wraith spectacles, which will grant true sight when worn." usage_tip = "\"True sight\" means that you are able to see through walls and in darkness." tier = SCRIPTURE_DRIVER - logname = "WS" @@ -478,7 +468,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "The sigil, while fairly powerful in its stun, does not induce muteness in its victim." tier = SCRIPTURE_DRIVER one_per_tile = TRUE - logname = "SoT" ///////////// // SCRIPTS // @@ -498,7 +487,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Although powerful, the warden is very weak and should optimally be placed behind barricades." tier = SCRIPTURE_SCRIPT one_per_tile = TRUE - logname = "OW" /datum/clockwork_scripture/create_object/ocular_warden/check_special_requirements() for(var/obj/structure/clockwork/ocular_warden/W in range(3, invoker)) @@ -518,7 +506,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed consumed_components = list("guvax_capacitor" = 1, "hierophant_ansible" = 1) usage_tip = "If standing on a Sigil of Transmission, will transfer power to it. Augumented limbs will also be healed unless above a very high threshhold." tier = SCRIPTURE_SCRIPT - logname = "VV" var/total_power_drained = 0 var/power_damage_threshhold = 3000 var/augument_damage_threshhold = 6000 @@ -608,7 +595,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed creator_message = "You form a clockwork proselytizer, which is already pre-loaded with a small amount of replicant alloy." usage_tip = "Clockwork walls cause adjacent tinkerer's caches to generate components passively, making them a vital tool. Clockwork floors heal servants standing on them." tier = SCRIPTURE_SCRIPT - logname = "CP" @@ -623,7 +609,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed consumed_components = list("vanguard_cogwheel" = 1, "replicant_alloy" = 1) usage_tip = "Before using, advise adjacent allies to remove their helmets, external suits, gloves, and shoes." tier = SCRIPTURE_SCRIPT - logname = "FA" multiple_invokers_used = TRUE multiple_invokers_optional = TRUE @@ -659,7 +644,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed whispered = TRUE usage_tip = "You can impale human targets with the spear by pulling them, then attacking. Throwing the spear at a mob will do massive damage and stun them, but break the spear." tier = SCRIPTURE_SCRIPT - logname = "FC" /datum/clockwork_scripture/function_call/check_special_requirements() for(var/datum/action/innate/function_call/F in invoker.actions) @@ -688,7 +672,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed multiple_invokers_optional = TRUE usage_tip = "This gateway is strictly one-way and will only allow things through the invoker's portal." tier = SCRIPTURE_SCRIPT - logname = "SG" /datum/clockwork_scripture/spatial_gateway/check_special_requirements() if(!isturf(invoker.loc)) @@ -732,7 +715,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed creator_message = "You form a soul vessel, which can be used in-hand to attract spirits, or used on an unconscious or dead human to extract their consciousness." usage_tip = "The vessel can be used as a teleport target for Spatial Gateway, though it is generally better-used by placing it in a shell." tier = SCRIPTURE_SCRIPT - logname = "SV" @@ -749,7 +731,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed observer_message = "The slab disgorges a puddle of black metal that contracts and forms into a strange shell!" usage_tip = "Useless without a soul vessel and should not be created without one." tier = SCRIPTURE_SCRIPT - logname = "COG" @@ -767,7 +748,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "This is not a primary conversion method - use Guvax for that. It is advantageous as a trap, however, as it will transmit the name of the newly-converted." tier = SCRIPTURE_SCRIPT one_per_tile = TRUE - logname = "SoS" ////////////////// @@ -788,7 +768,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed observer_message = "The slab disgorges a puddle of black metal that expands and forms into a strange shell!" usage_tip = "Useless without a soul vessel and should not be created without one." tier = SCRIPTURE_APPLICATION - logname = "AF" @@ -808,7 +787,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "It will remain after converting a target, unless that target has a mindshield implant, which it will break to convert them, but consume itself in the process." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE - logname = "SoA" @@ -826,7 +804,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Can be recharged by using Volt Void while standing on it." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE - logname = "SoT" @@ -845,7 +822,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "To revive a servant, the sigil must have 20 vitality plus the target servant's non-oxygen damage. It will still heal dead servants if it lacks the vitality to outright revive them." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE - logname = "VM" /datum/clockwork_scripture/memory_allocation //Memory Allocation: Finds a willing ghost and makes them into a clockwork marauders for the invoker. @@ -861,7 +837,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed consumed_components = list("belligerent_eye" = 1, "vanguard_cogwheel" = 1, "guvax_capacitor" = 2) usage_tip = "Marauders are useful as personal bodyguards and frontline warriors, although they do little damage." tier = SCRIPTURE_APPLICATION - logname = "MA" /datum/clockwork_scripture/memory_allocation/check_special_requirements() for(var/mob/living/simple_animal/hostile/clockwork/marauder/M in living_mob_list) @@ -932,7 +907,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "If it fails to funnel power into a nearby Sigil of Transmission and fails to disable even one thing, it will disable itself for two minutes." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE - logname = "IL" @@ -952,7 +926,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Powerful healing but power use is very inefficient, and its alloy use is little better." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE - logname = "MEM" @@ -972,7 +945,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Producing a gateway has a high power cost. Gateways to or between clockwork obelisks recieve double duration and uses." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE - logname = "CO" @@ -992,7 +964,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Eligible human servants next to the motor will be converted at an additional power cost. It will also cure hallucinations and brain damage in nearby servants." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE - logname = "MAM" @@ -1008,7 +979,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed creator_message = "You form a daemon shell. Attach it to a tinkerer's cache to increase its rate of production." usage_tip = "Vital to your success!" tier = SCRIPTURE_APPLICATION - logname = "TD" /datum/clockwork_scripture/create_object/tinkerers_daemon/check_special_requirements() var/servants = 0 @@ -1040,7 +1010,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Ocular wardens will become empowered, clockwork proselytizers will require no alloy, tinkerer's daemons will produce twice as quickly, \ and interdiction lenses, mending motors, mania motors, and clockwork obelisks will all require no power." tier = SCRIPTURE_REVENANT - logname = "INBE" /datum/clockwork_scripture/invoke_nezbere/check_special_requirements() if(!slab.no_cost && clockwork_generals_invoked["nezbere"] > world.time) @@ -1092,7 +1061,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed consumed_components = list("belligerent_eye" = 3, "vanguard_cogwheel" = 3, "guvax_capacitor" = 6, "hierophant_ansible" = 3) usage_tip = "Causes brain damage, hallucinations, confusion, and dizziness in massive amounts." tier = SCRIPTURE_REVENANT - logname = "ISFP" invokers_required = 3 multiple_invokers_used = TRUE var/list/mindbreaksayings = list("\"Oh, great. I get to shatter some minds.\"", "\"More minds to crush.\"", \ @@ -1163,7 +1131,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed consumed_components = list("belligerent_eye" = 3, "guvax_capacitor" = 3, "replicant_alloy" = 3, "hierophant_ansible" = 6) usage_tip = "Struck targets will also be knocked down for about sixteen seconds." tier = SCRIPTURE_REVENANT - logname = "INET" /datum/clockwork_scripture/invoke_nzcrentr/check_special_requirements() if(!slab.no_cost && clockwork_generals_invoked["nzcrentr"] > world.time) @@ -1226,7 +1193,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Those affected by this scripture are only weak to things that outright destroy bodies, such as bombs or the singularity." tier = SCRIPTURE_REVENANT var/total_duration = 150 - logname = "IIRC" /datum/clockwork_scripture/invoke_inathneq/check_special_requirements() if(!slab.no_cost && clockwork_generals_invoked["inath-neq"] > world.time) @@ -1277,7 +1243,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "The gateway is completely vulnerable to attack during its five-minute duration. It will periodically give indication of its general position to everyone on the station \ as well as being loud enough to be heard throughout the entire sector. Defend it with your life!" tier = SCRIPTURE_JUDGEMENT - logname = "AoCJ" /datum/clockwork_scripture/ark_of_the_clockwork_justiciar/New() if(ticker && ticker.mode && ticker.mode.clockwork_objective != CLOCKCULT_GATEWAY) From f70ba63d3e5022a83192a7303241fd73e9b6f25c Mon Sep 17 00:00:00 2001 From: Incoming5643 Date: Sat, 20 Aug 2016 00:27:02 -0400 Subject: [PATCH 14/24] You can smuggle smuggler's satchels to a future shift (#19838) * Hidden Smuggler Satchels hidden beneath the station now persist between rounds, though there's no assurances of WHEN they'll appear next and only one will ever appear in the round. NOTE THAT THIS PULL INTRODUCES A CRITICAL BUG, DO NOT MERGE *JUST* THIS PR, AWAIT THE FOLLOWUP * Finishes up satchel persistence. Satchels require at least 20 saved bags before any will start spawning. the var persistence_replacement can be set to a path to replace a very high risk item with a lower risk look alike. This is currently done with the nuke disk, the wizards spellbook, and the uplink implant * DESIGNATED. REMIE. PULL. --- code/controllers/subsystem/persistence.dm | 66 +++++++++++++++++++ code/controllers/subsystem/ticker.dm | 2 + code/game/gamemodes/nuclear/nuclearbomb.dm | 6 ++ code/game/gamemodes/wizard/spellbook.dm | 2 + .../items/weapons/implants/implantuplink.dm | 11 ++++ .../objects/items/weapons/storage/backpack.dm | 1 + code/game/objects/objs.dm | 2 + tgstation.dme | 1 + 8 files changed, 91 insertions(+) create mode 100644 code/controllers/subsystem/persistence.dm diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm new file mode 100644 index 00000000000..e208781e2fd --- /dev/null +++ b/code/controllers/subsystem/persistence.dm @@ -0,0 +1,66 @@ +var/datum/subsystem/persistence/SSpersistence + +/datum/subsystem/persistence + name = "Persistence" + init_order = -100 + flags = SS_NO_FIRE + var/savefile/secret_satchels + var/list/satchel_blacklist = list() //this is a typecache + var/list/new_secret_satchels = list() //these are objects + var/list/old_secret_satchels = list() //these are just vars + +/datum/subsystem/persistence/New() + NEW_SS_GLOBAL(SSpersistence) + +/datum/subsystem/persistence/Initialize() + PlaceSecretSatchel() + ..() + +/datum/subsystem/persistence/proc/CollectData() + CollectSecretSatchels() + +/datum/subsystem/persistence/proc/PlaceSecretSatchel() + var/list/satchels = list() + secret_satchels = new /savefile("data/npc_saves/SecretSatchels_[MAP_NAME].sav") + satchel_blacklist = typecacheof(list(/obj/item/stack/tile/plasteel, /obj/item/weapon/crowbar)) + + secret_satchels >> satchels + if(!satchels.len || satchels.len < 20) //guards against low drop pools assuring that one player can reliably find his own gear. + return + + var/list/chosen_satchel = pick_n_take(satchels) + old_secret_satchels = satchels + secret_satchels << old_secret_satchels + if(chosen_satchel.len != 3) //Malformed + return + + var/path = text2path(chosen_satchel[3]) //If the item no longer exist, this returns null + if(!path) + return + + var/obj/item/weapon/storage/backpack/satchel/flat/F = new() + F.x = chosen_satchel[1] + F.y = chosen_satchel[2] + F.z = ZLEVEL_STATION + if(istype(F.loc,/turf/open/floor) && !istype(F.loc,/turf/open/floor/plating/)) + F.hide(1) + new path(F) + +/datum/subsystem/persistence/proc/CollectSecretSatchels() + for(var/A in new_secret_satchels) + var/obj/item/weapon/storage/backpack/satchel/flat/F = A + if(qdeleted(F) || F.z != ZLEVEL_STATION || F.invisibility != INVISIBILITY_MAXIMUM) + continue + var/list/savable_obj = list() + for(var/obj/O in F) + if(is_type_in_typecache(O, satchel_blacklist) || O.admin_spawned) + continue + if(O.persistence_replacement) + savable_obj += O.persistence_replacement + else + savable_obj += O.type + if(savable_obj.len < 1) + continue + old_secret_satchels.len += 1 + old_secret_satchels[old_secret_satchels.len] = list(F.x, F.y, "[pick(savable_obj)]") + secret_satchels << old_secret_satchels diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 55daa97c710..450367ce2e7 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -451,6 +451,8 @@ var/datum/subsystem/ticker/ticker dellog += "Failures : [SSgarbage.didntgc[path]] \n" world.log << dellog + //Collects persistence features + SSpersistence.CollectData() return 1 /datum/subsystem/ticker/proc/send_tip_of_the_round() diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index f1f35ccf1d6..969a310c9dc 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -486,6 +486,7 @@ This is here to make the tiles around the station mininuke change when it's arme name = "nuclear authentication disk" desc = "Better keep this safe." icon_state = "nucleardisk" + persistence_replacement = /obj/item/weapon/disk/fakenucleardisk /obj/item/weapon/disk/nuclear/New() ..() @@ -556,3 +557,8 @@ This is here to make the tiles around the station mininuke change when it's arme log_game("[src] has been destroyed in [COORD(diskturf)]. Moving it to \ [COORD(targetturf)].") return QDEL_HINT_LETMELIVE //Cancel destruction unless forced + +/obj/item/weapon/disk/fakenucleardisk + name = "cheap plastic imitation of the nuclear authentication disk" + desc = "Broken dreams and a faint oder of cheese." + icon_state = "nucleardisk" diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 9cb69da31c9..093922da28c 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -514,6 +514,7 @@ throw_speed = 2 throw_range = 5 w_class = 1 + persistence_replacement = /obj/item/weapon/spellbook/oneuse/random var/uses = 10 var/temp = null var/tab = null @@ -704,6 +705,7 @@ name = "spellbook of " uses = 1 desc = "This template spellbook was never meant for the eyes of man..." + persistence_replacement = null /obj/item/weapon/spellbook/oneuse/New() ..() diff --git a/code/game/objects/items/weapons/implants/implantuplink.dm b/code/game/objects/items/weapons/implants/implantuplink.dm index 46afc8fb8f5..100589b763d 100644 --- a/code/game/objects/items/weapons/implants/implantuplink.dm +++ b/code/game/objects/items/weapons/implants/implantuplink.dm @@ -28,7 +28,18 @@ /obj/item/weapon/implanter/uplink name = "implanter (uplink)" + persistence_replacement = /obj/item/weapon/implanter/weakuplink /obj/item/weapon/implanter/uplink/New() imp = new /obj/item/weapon/implant/uplink(src) ..() +/obj/item/weapon/implanter/weakuplink + name = "implanter (uplink)" + +/obj/item/weapon/implanter/weakuplink/New() + imp = new /obj/item/weapon/implant/uplink/weak(src) + ..() + +/obj/item/weapon/implant/uplink/weak/New() + ..() + hidden_uplink.telecrystals = 5 \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index e6be87025cb..f2ecf076bae 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -288,6 +288,7 @@ ..() PoolOrNew(/obj/item/stack/tile/plasteel, src) new /obj/item/weapon/crowbar(src) + SSpersistence.new_secret_satchels += src /obj/item/weapon/storage/backpack/satchel/flat/secret/ var/list/reward_one_of_these = list() //Intended for map editing diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 6cc9ed804c4..33d9c480f41 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -18,6 +18,8 @@ var/on_blueprints = FALSE //Are we visible on the station blueprints at roundstart? var/force_blueprints = FALSE //forces the obj to be on the blueprints, regardless of when it was created. + var/persistence_replacement = null //have something WAY too amazing to live to the next round? Set a new path here. Overuse of this var will make me upset. + /obj/New() ..() diff --git a/tgstation.dme b/tgstation.dme index 7b792308873..4185f4a9daa 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -152,6 +152,7 @@ #include "code\controllers\subsystem\npcpool.dm" #include "code\controllers\subsystem\objects.dm" #include "code\controllers\subsystem\pai.dm" +#include "code\controllers\subsystem\persistence.dm" #include "code\controllers\subsystem\pool.dm" #include "code\controllers\subsystem\radio.dm" #include "code\controllers\subsystem\server_maintenance.dm" From 5703be2bad6a197b6d6353a1d5ae380a126b8ca2 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 20 Aug 2016 04:27:03 +0000 Subject: [PATCH 15/24] Automatic changelog generation for PR #19838 [ci skip] --- html/changelogs/AutoChangeLog-pr-19838.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-19838.yml diff --git a/html/changelogs/AutoChangeLog-pr-19838.yml b/html/changelogs/AutoChangeLog-pr-19838.yml new file mode 100644 index 00000000000..0397c957ac6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-19838.yml @@ -0,0 +1,8 @@ +author: "Incoming5643" +delete-after: True +changes: + - rscadd: "Smuggler satchels left behind hidden on the station can now reappear in a later round." + - experiment: "There's absolutely no way of knowing when exactly it will reappear however..." + - rscadd: "Only one item in the satchel will remain when the satchel reappears." + - rscadd: "Items are saved in their initial forms, so saving things like chemical grenades will only disappoint you." + - rscadd: "The item pool is map specific and needs to be a certain size before satchels can start reappearing, so get to hiding that loot!" From 7da348a3b22171bcdab633170fd274f817dc9818 Mon Sep 17 00:00:00 2001 From: Jalleo Date: Sat, 20 Aug 2016 13:00:35 +0100 Subject: [PATCH 16/24] [s]Little fix and var in proc removal (#19821) * Fixes the gulag teleporter and removes two /var in proc decelerations * Missed a item * Revert "Fixes the gulag teleporter and removes two /var in proc decelerations" This reverts commit ca07f531bb3dc9654a41489c55fd5298be80930f. * Fixes it properly now * Test * Resolves to make it go to breath and gas masks paths instead of all mask paths. My mistake in the rush to solve it. --- code/game/area/areas.dm | 2 +- code/game/gamemodes/antag_hud.dm | 2 +- code/game/machinery/gulag_teleporter.dm | 15 +++++++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 4b82ec57231..310603af01a 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -5,7 +5,7 @@ // the same logical /area have the parent /area object... well, you would be mistaken. If you // want to find machines, mobs, etc, in the same logical area, you will need to check all the // related areas. This returns a master contents list to assist in that. -/proc/area_contents(var/area/A) +/proc/area_contents(area/A) if(!istype(A)) return null var/list/contents = list() for(var/area/LSA in A.related) diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm index 408b090cb0e..2f9a0acdf5f 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/game/gamemodes/antag_hud.dm @@ -41,7 +41,7 @@ //MIND PROCS //these are called by mind.transfer_to() -/datum/mind/proc/transfer_antag_huds(var/datum/atom_hud/antag/newhud) +/datum/mind/proc/transfer_antag_huds(datum/atom_hud/antag/newhud) leave_all_huds() ticker.mode.set_antag_hud(current, antag_hud_icon_state) if(newhud) diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm index 8a1ae3a9378..6a405fcd1fb 100644 --- a/code/game/machinery/gulag_teleporter.dm +++ b/code/game/machinery/gulag_teleporter.dm @@ -21,9 +21,18 @@ The console is located at computer/gulag_teleporter.dm var/jumpsuit_type = /obj/item/clothing/under/rank/prisoner var/shoes_type = /obj/item/clothing/shoes/sneakers/orange var/obj/machinery/gulag_item_reclaimer/linked_reclaimer = null + var/list/required_items /obj/machinery/gulag_teleporter/New() ..() + required_items = typecacheof(list( + /obj/item/weapon/implant, + /obj/item/clothing/suit/space/eva/plasmaman, + /obj/item/clothing/under/plasmaman, + /obj/item/clothing/head/helmet/space/plasmaman, + /obj/item/weapon/tank/internals, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/gas)) var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/gulag_teleporter(null) B.apply_default_parts(src) addtimer(src, "locate_reclaimer", 5) @@ -128,12 +137,10 @@ The console is located at computer/gulag_teleporter.dm if(linked_reclaimer) linked_reclaimer.stored_items[occupant] = list() for(var/obj/item/W in occupant) - if(occupant.unEquip(W)) + if(!is_type_in_typecache(W, required_items) && occupant.unEquip(W)) if(istype(W, /obj/item/weapon/restraints/handcuffs)) W.forceMove(get_turf(src)) continue - if(istype(W, /obj/item/weapon/implant/storage)) - continue if(linked_reclaimer) linked_reclaimer.stored_items[occupant] += W linked_reclaimer.contents += W @@ -146,7 +153,7 @@ The console is located at computer/gulag_teleporter.dm return strip_occupant() var/mob/living/carbon/human/prisoner = occupant - if(jumpsuit_type) + if(!isplasmaman(prisoner) && jumpsuit_type) prisoner.equip_to_appropriate_slot(new jumpsuit_type) if(shoes_type) prisoner.equip_to_appropriate_slot(new shoes_type) From 3a5010caaf196831d0341414c9ac3ece76900c57 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Sat, 20 Aug 2016 12:00:36 +0000 Subject: [PATCH 17/24] Automatic changelog generation for PR #19821 [ci skip] --- html/changelogs/AutoChangeLog-pr-19821.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-19821.yml diff --git a/html/changelogs/AutoChangeLog-pr-19821.yml b/html/changelogs/AutoChangeLog-pr-19821.yml new file mode 100644 index 00000000000..7f7087070cb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-19821.yml @@ -0,0 +1,4 @@ +author: "Jalleo" +delete-after: True +changes: + - bugfix: "Gulag Teleporter of two issues any more please report them." From e9ea58ebf73fc3741838d06ac2d47b4fc65f613d Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Sat, 20 Aug 2016 06:15:18 -0700 Subject: [PATCH 18/24] Makes listTargets() much much faster. ```` /mob/living/simple_animal/hostile/proc/ListTargetsG 42.008 118.524 118.559 195594 /mob/living/simple_animal/hostile/proc/ListTargetsF 27.078 42.788 42.813 195267 /mob/living/simple_animal/hostile/proc/ListTargetsE 32.423 48.520 48.540 195401 /mob/living/simple_animal/hostile/proc/ListTargetsD 46.633 118.919 118.938 195455 /mob/living/simple_animal/hostile/proc/ListTargetsC 63.589 90.622 90.646 195630 /mob/living/simple_animal/hostile/proc/ListTargetsB 62.156 88.851 88.880 195159 /mob/living/simple_animal/hostile/proc/ListTargetsA 382.978 383.049 383.087 195578 /mob/living/simple_animal/hostile/proc/ListTargets 4.748 895.996 896.142 1368084 ```` i went with E because F had a few edge cases that weren't handled correctly. --- code/__HELPERS/lists.dm | 8 ++++++++ code/__HELPERS/unsorted.dm | 3 ++- .../mob/living/simple_animal/hostile/hostile.dm | 15 +++++---------- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index 611ca03ecc6..4deb0080014 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -67,6 +67,14 @@ return 0 return L[A.type] +//returns a new list with only atoms that are in typecache L +/proc/typecache_filter_list(list/atoms, list/typecache) + . = list() + for (var/thing in atoms) + var/atom/A = thing + if (typecache[A.type]) + . += A + //Like typesof() or subtypesof(), but returns a typecache instead of a list /proc/typecacheof(path, ignore_root_path) if(ispath(path)) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index a5b1347ee76..773692ad84e 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -543,7 +543,8 @@ Turf and target are seperate in case you want to teleport some distance from a t return 0 if(current.opacity) return 0 - for(var/atom/A in current) + for(var/thing in current) + var/atom/A = thing if(A.opacity) return 0 current = get_step_towards(current, target_turf) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 1d4657681d8..cc65d2b4b00 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -83,26 +83,21 @@ //////////////HOSTILE MOB TARGETTING AND AGGRESSION//////////// - /mob/living/simple_animal/hostile/proc/ListTargets()//Step 1, find out what we can see . = list() if(!search_objects) var/list/Mobs = hearers(vision_range, targets_from) - src //Remove self, so we don't suicide . += Mobs - var/hostile_machines = list() - for(var/mecha in mechas_list) - hostile_machines += mecha - for(var/obj/machinery/porta_turret/P in machines) - hostile_machines += P - for(var/M in hostile_machines) - if(get_dist(M, targets_from) <= vision_range && can_see(targets_from, M, vision_range)) - . += M + var/static/hostile_machines = typecacheof(/obj/machinery/porta_turret, /obj/mecha) + + for(var/HM in typecache_filter_list(range(vision_range, targets_from), hostile_machines)) + if(can_see(targets_from, HM, vision_range)) + . += HM else var/list/Objects = oview(vision_range, targets_from) . += Objects - /mob/living/simple_animal/hostile/proc/FindTarget(var/list/possible_targets, var/HasTargetsList = 0)//Step 2, filter down possible targets to things we actually care about . = list() if(!HasTargetsList) From 0dc5adf907d79e14e82a6ebfca93c893504e59a3 Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Sat, 20 Aug 2016 11:20:52 -0700 Subject: [PATCH 19/24] dungoofed. (#19979) --- .../modular_computers/computers/machinery/modular_console.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/modular_computers/computers/machinery/modular_console.dm b/code/modules/modular_computers/computers/machinery/modular_console.dm index 79a7c913c2e..5742faa9311 100644 --- a/code/modules/modular_computers/computers/machinery/modular_console.dm +++ b/code/modules/modular_computers/computers/machinery/modular_console.dm @@ -13,7 +13,7 @@ base_idle_power_usage = 100 base_active_power_usage = 500 max_hardware_size = 3 - steel_sheet_cost = 20 + steel_sheet_cost = 10 light_strength = 2 _max_damage = 300 _break_damage = 150 From f64e2664be53c236e2d145f89af1f38abc19e75a Mon Sep 17 00:00:00 2001 From: Incoming5643 Date: Sat, 20 Aug 2016 18:03:18 -0400 Subject: [PATCH 20/24] Lets lattice spawn in ruins by removing overzealous deletions (#19965) --- code/game/objects/structures/lattice.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 399253f5a17..d9454083422 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -16,8 +16,6 @@ /obj/structure/lattice/New() ..() - if(!(istype(src.loc, /turf/open/space))) - qdel(src) for(var/obj/structure/lattice/LAT in src.loc) if(LAT != src) qdel(LAT) From dd1f5c99fd943c0f7685cee0ec81b12ca7f7b2b0 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Sat, 20 Aug 2016 19:12:51 -0400 Subject: [PATCH 21/24] Removes the sine pope (#19966) * Removes the sine pope * fuck you too map merger * fuuuuuuck yooooooou * map merger you betray me * no message --- _maps/map_files/generic/chapel.dmm | 348 ---- _maps/map_files/generic/z2.dmm | 1796 +++++++---------- code/game/gamemodes/miniantags/hades/hades.dm | 727 ------- .../miniantags/hades/hades_chapel.dm | 143 -- code/game/gamemodes/wizard/spellbook.dm | 14 - tgstation.dme | 2 - 6 files changed, 755 insertions(+), 2275 deletions(-) delete mode 100644 _maps/map_files/generic/chapel.dmm delete mode 100644 code/game/gamemodes/miniantags/hades/hades.dm delete mode 100644 code/game/gamemodes/miniantags/hades/hades_chapel.dm diff --git a/_maps/map_files/generic/chapel.dmm b/_maps/map_files/generic/chapel.dmm deleted file mode 100644 index 6bf7cb9bd63..00000000000 --- a/_maps/map_files/generic/chapel.dmm +++ /dev/null @@ -1,348 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/open/space, -/area/space) -"ab" = ( -/turf/closed/indestructible/riveted, -/area/hades) -"ac" = ( -/obj/structure/bookcase/random/religion, -/turf/open/floor/plasteel/hades, -/area/hades) -"ad" = ( -/obj/structure/piano, -/turf/open/floor/plasteel/hades, -/area/hades) -"ae" = ( -/obj/effect/gibspawner/human, -/turf/open/floor/plasteel/hades, -/area/hades) -"af" = ( -/turf/open/floor/plasteel/hades, -/area/hades) -"ag" = ( -/obj/structure/window/fulltile, -/turf/open/floor/plasteel/hades, -/area/hades) -"ah" = ( -/obj/structure/window/reinforced, -/turf/open/floor/plasteel/hades, -/area/hades) -"ai" = ( -/obj/effect/gibspawner/human, -/mob/living/simple_animal/hostile/hadesacolyte, -/turf/open/floor/plasteel/hades, -/area/hades) -"aj" = ( -/mob/living/simple_animal/hostile/hadesacolyte, -/turf/open/floor/plasteel/hades, -/area/hades) -"ak" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/fulltile, -/turf/open/floor/plasteel/hades, -/area/hades) -"al" = ( -/obj/structure/table/reinforced/brass, -/obj/item/candle/infinite, -/turf/open/floor/plasteel/hades, -/area/hades) -"am" = ( -/obj/structure/table/reinforced/brass, -/obj/item/candle/infinite, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/plasteel/hades, -/area/hades) -"an" = ( -/obj/structure/table/reinforced/brass, -/turf/open/floor/plasteel/hades, -/area/hades) -"ao" = ( -/obj/structure/table/reinforced/brass, -/obj/item/candle/infinite, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/plasteel/hades, -/area/hades) -"ap" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/fulltile, -/turf/open/floor/plasteel/hades, -/area/hades) -"aq" = ( -/turf/open/floor/carpet, -/area/hades) -"ar" = ( -/obj/structure/chair/wood/normal{ - icon_state = "wooden_chair"; - dir = 1 - }, -/mob/living/simple_animal/hostile/hadesacolyte, -/turf/open/floor/plasteel/hades, -/area/hades) -"as" = ( -/obj/structure/chair/wood/normal{ - icon_state = "wooden_chair"; - dir = 1 - }, -/turf/open/floor/plasteel/hades, -/area/hades) -"at" = ( -/obj/effect/gibspawner/human, -/turf/open/floor/carpet, -/area/hades) -"au" = ( -/obj/effect/landmark/event_spawn, -/turf/open/floor/carpet, -/area/hades) -"av" = ( -/obj/structure/dresser, -/turf/open/floor/carpet, -/area/hades) -"aw" = ( -/obj/structure/table/wood, -/obj/item/trash/candle, -/turf/open/floor/carpet, -/area/hades) -"ax" = ( -/obj/structure/flora/grass/green, -/turf/open/floor/grass, -/area/hades) -"ay" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/open/floor/grass, -/area/hades) -"az" = ( -/obj/structure/flora/ausbushes/palebush, -/turf/open/floor/grass, -/area/hades) -"aA" = ( -/obj/structure/flora/ausbushes/ywflowers, -/turf/open/floor/grass, -/area/hades) -"aB" = ( -/obj/structure/bookcase/random/nonfiction, -/turf/open/floor/carpet, -/area/hades) -"aC" = ( -/obj/structure/bookcase/random/fiction, -/turf/open/floor/carpet, -/area/hades) -"aD" = ( -/obj/structure/bookcase/random/adult, -/turf/open/floor/carpet, -/area/hades) -"aE" = ( -/obj/structure/bookcase/random/religion, -/turf/open/floor/carpet, -/area/hades) -"aF" = ( -/obj/structure/kitchenspike, -/turf/open/floor/mineral/diamond, -/area/hades) -"aG" = ( -/mob/living/simple_animal/hostile/hadesacolyte, -/turf/open/floor/mineral/gold, -/area/hades) -"aH" = ( -/turf/open/floor/mineral/gold, -/area/hades) -"aI" = ( -/obj/structure/table/wood, -/turf/open/floor/carpet, -/area/hades) -"aJ" = ( -/obj/structure/flora/ausbushes/grassybush, -/turf/open/floor/grass, -/area/hades) -"aK" = ( -/obj/structure/flora/ausbushes/stalkybush, -/turf/open/floor/grass, -/area/hades) -"aL" = ( -/obj/structure/flora/ausbushes/genericbush, -/turf/open/floor/grass, -/area/hades) -"aM" = ( -/obj/structure/bookcase/random/reference, -/turf/open/floor/carpet, -/area/hades) -"aN" = ( -/obj/structure/closet/cabinet, -/turf/open/floor/carpet, -/area/hades) -"aO" = ( -/obj/structure/table/wood, -/obj/item/weapon/paper/hades_instructions, -/turf/open/floor/carpet, -/area/hades) -"aP" = ( -/obj/structure/flora/ausbushes/fernybush, -/turf/open/floor/grass, -/area/hades) -"aQ" = ( -/obj/structure/bed, -/obj/item/weapon/bedsheet/black, -/turf/open/floor/carpet, -/area/hades) -"aR" = ( -/mob/living/simple_animal/hostile/hadesacolyte, -/turf/open/floor/carpet, -/area/hades) -"aS" = ( -/obj/structure/table/wood, -/obj/item/weapon/storage/box/matches, -/turf/open/floor/carpet, -/area/hades) -"aT" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/turf/open/floor/plasteel, -/area/hades) -"aU" = ( -/obj/machinery/door/airlock/wood, -/turf/open/floor/plasteel/hades, -/area/hades) -"aV" = ( -/obj/structure/table/wood, -/obj/item/weapon/lipstick, -/turf/open/floor/carpet, -/area/hades) -"aW" = ( -/obj/structure/table/wood, -/obj/item/weapon/storage/fancy/candle_box, -/turf/open/floor/carpet, -/area/hades) -"aX" = ( -/obj/structure/chair/wood/normal{ - icon_state = "wooden_chair"; - dir = 4 - }, -/turf/open/floor/carpet, -/area/hades) -"aY" = ( -/obj/structure/chair/wood/normal{ - icon_state = "wooden_chair"; - dir = 8 - }, -/turf/open/floor/carpet, -/area/hades) -"aZ" = ( -/obj/structure/table/wood, -/obj/item/weapon/storage/crayons, -/turf/open/floor/carpet, -/area/hades) -"ba" = ( -/obj/structure/table/wood, -/obj/item/weapon/razor, -/turf/open/floor/carpet, -/area/hades) -"bb" = ( -/obj/machinery/door/airlock/wood, -/turf/open/floor/carpet, -/area/hades) -"bc" = ( -/obj/structure/chair/hades, -/turf/open/floor/mineral/diamond, -/area/hades) -"bd" = ( -/obj/machinery/vending/cola, -/turf/open/floor/carpet, -/area/hades) -"be" = ( -/obj/machinery/vending/snack, -/turf/open/floor/carpet, -/area/hades) -"bf" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks/beer, -/turf/open/floor/carpet, -/area/hades) -"bg" = ( -/obj/structure/table/wood, -/obj/machinery/microwave, -/turf/open/floor/carpet, -/area/hades) -"bh" = ( -/obj/structure/table/wood, -/obj/item/weapon/storage/box/donkpockets, -/turf/open/floor/carpet, -/area/hades) -"bi" = ( -/obj/machinery/chem_dispenser/drinks, -/obj/structure/table/wood, -/turf/open/floor/carpet, -/area/hades) -"bj" = ( -/obj/structure/chair/wood/normal, -/mob/living/simple_animal/hostile/hadesacolyte, -/turf/open/floor/carpet, -/area/hades) -"bk" = ( -/obj/structure/table/wood, -/obj/item/weapon/kitchen/fork, -/turf/open/floor/carpet, -/area/hades) -"bl" = ( -/obj/structure/chair/wood/normal{ - icon_state = "wooden_chair"; - dir = 1 - }, -/turf/open/floor/carpet, -/area/hades) -"bm" = ( -/obj/structure/table/wood, -/obj/item/weapon/storage/box/drinkingglasses, -/turf/open/floor/carpet, -/area/hades) - -( -1, -1, -1) = {" -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaabacacacacacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaabadaeafafafafaeafafafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaababababagahahaiafafajahahagababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaabacacacakalamananananaoalapacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaabaeafafafafajaqaqaqaqajafafafafaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaabafafafaeafafaqaqaqaqafafaeafafafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaabafarasasasafaqataqaqafarasasarafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaabafafafafafafaqaqaqaqafafafafafafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaabafasasarasafaqaqaqaqafasarasasafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaabafafaeafafafaqataqaqafafaeafafafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaabafasasasarafaqaqaqaqafasasarasafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaabafafafaeafafaqauaqaqafafafafaeafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaabafarasasasafaqaqataqafasarasasafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaabaeafafafafafaqaqaqaqafafafafafaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaabababababababaqaqaqaqababababababababababababababababababababababaa -aaaaabavavavavavabawaqaqaqabaxayazaAaxabaBaBaCaCaDaEabaFaGaHaHaHaGaFabaa -aaaaabaqaqaqaqaqabaIaqaqaqabaJaKaLaAayabaMaqaqaqaqaMabafafafaHafafafabaa -aaaaabaNaqaqaqaNabaOaqaqaqabaPayaJaxazabaMaqaqaqaqaCabafafafaHafafafabaa -aaaaabaQaRaqaqaQabaSaqaqaqabaTaTaTaTaTabaEaqaRaRaqaBaUafafafaHafafafabaa -aaaaabaVaqaqaqaOabaWaqaqaqabaXaqaqaqaYabaEaqaRaRaqaBabafafafaHafafafabaa -aaaaabaQaqaqaqaQabaZaqaqaqabaXaqaqaqaYabaEaqaqaqaqaCabafafafaHafafafabaa -aaaaabaIaqaqaRbaabaIaqaqaqbbaqaqaqaqaqabababbbababababaFaGaHbcaHaGaFabaa -aaaaabaQaRaqaqaQabaqaqaqaqabaqaqaqaqaqabaEaBaqaCaBaEabafafafaHafafafabaa -aaaaabababbbababababababababaqaqaqaqaqabaEaqaqaqaRaBabafafafaHafafafabaa -aaaaabaqaqaqaqbdbebfbgbhbiabaXaqaqaRaYabaBaqaqaqaqaEabafafafaHafafafabaa -aaaaabaqbjbjaqaqaqaqaqaqaqabaXaqaqaqaYabaCaqaqaqaqaMabafafafaHafafafabaa -aaaaabaXbkaIaYaqaqaqaqaqaqbbaqaqaqaqaqbbaqaqaRaqaqaEabafafafaHafafafabaa -aaaaabaqblblaqaqaqbmaIaIaOabaqaqaqaqaqabaMaMaBaDaCaMabaFaGaHaHaHaGaFabaa -aaaaabababababababababababababababababababababababababababababababababaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -"} diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm index 66251a4f0c6..51875e9322e 100644 --- a/_maps/map_files/generic/z2.dmm +++ b/_maps/map_files/generic/z2.dmm @@ -5823,291 +5823,6 @@ dir = 8 }, /area/holodeck/rec_center/medical) -"sh" = ( -/turf/closed/indestructible/riveted, -/area/hades) -"si" = ( -/obj/structure/bookcase/random/religion, -/turf/open/floor/plasteel/hades, -/area/hades) -"sj" = ( -/obj/structure/piano, -/turf/open/floor/plasteel/hades, -/area/hades) -"sk" = ( -/obj/effect/gibspawner/human, -/turf/open/floor/plasteel/hades, -/area/hades) -"sl" = ( -/turf/open/floor/plasteel/hades, -/area/hades) -"sm" = ( -/obj/structure/window/fulltile, -/turf/open/floor/plasteel/hades, -/area/hades) -"sn" = ( -/obj/structure/window/reinforced, -/turf/open/floor/plasteel/hades, -/area/hades) -"so" = ( -/obj/effect/gibspawner/human, -/mob/living/simple_animal/hostile/hadesacolyte, -/turf/open/floor/plasteel/hades, -/area/hades) -"sp" = ( -/mob/living/simple_animal/hostile/hadesacolyte, -/turf/open/floor/plasteel/hades, -/area/hades) -"sq" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/fulltile, -/turf/open/floor/plasteel/hades, -/area/hades) -"sr" = ( -/obj/structure/table/reinforced/brass, -/obj/item/candle/infinite, -/turf/open/floor/plasteel/hades, -/area/hades) -"ss" = ( -/obj/structure/table/reinforced/brass, -/obj/item/candle/infinite, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/plasteel/hades, -/area/hades) -"st" = ( -/obj/structure/table/reinforced/brass, -/turf/open/floor/plasteel/hades, -/area/hades) -"su" = ( -/obj/structure/table/reinforced/brass, -/obj/item/candle/infinite, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/plasteel/hades, -/area/hades) -"sv" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/fulltile, -/turf/open/floor/plasteel/hades, -/area/hades) -"sw" = ( -/turf/open/floor/carpet, -/area/hades) -"sx" = ( -/obj/structure/chair/wood/normal{ - icon_state = "wooden_chair"; - dir = 1 - }, -/mob/living/simple_animal/hostile/hadesacolyte, -/turf/open/floor/plasteel/hades, -/area/hades) -"sy" = ( -/obj/structure/chair/wood/normal{ - icon_state = "wooden_chair"; - dir = 1 - }, -/turf/open/floor/plasteel/hades, -/area/hades) -"sz" = ( -/obj/effect/gibspawner/human, -/turf/open/floor/carpet, -/area/hades) -"sA" = ( -/obj/effect/landmark/event_spawn, -/turf/open/floor/carpet, -/area/hades) -"sB" = ( -/obj/structure/dresser, -/turf/open/floor/carpet, -/area/hades) -"sC" = ( -/obj/structure/table/wood, -/obj/item/trash/candle, -/turf/open/floor/carpet, -/area/hades) -"sD" = ( -/obj/structure/flora/grass/green, -/turf/open/floor/grass, -/area/hades) -"sE" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/open/floor/grass, -/area/hades) -"sF" = ( -/obj/structure/flora/ausbushes/palebush, -/turf/open/floor/grass, -/area/hades) -"sG" = ( -/obj/structure/flora/ausbushes/ywflowers, -/turf/open/floor/grass, -/area/hades) -"sH" = ( -/obj/structure/bookcase/random/nonfiction, -/turf/open/floor/carpet, -/area/hades) -"sI" = ( -/obj/structure/bookcase/random/fiction, -/turf/open/floor/carpet, -/area/hades) -"sJ" = ( -/obj/structure/bookcase/random/adult, -/turf/open/floor/carpet, -/area/hades) -"sK" = ( -/obj/structure/bookcase/random/religion, -/turf/open/floor/carpet, -/area/hades) -"sL" = ( -/obj/structure/kitchenspike, -/turf/open/floor/mineral/diamond, -/area/hades) -"sM" = ( -/mob/living/simple_animal/hostile/hadesacolyte, -/turf/open/floor/mineral/gold, -/area/hades) -"sN" = ( -/turf/open/floor/mineral/gold, -/area/hades) -"sO" = ( -/obj/structure/table/wood, -/turf/open/floor/carpet, -/area/hades) -"sP" = ( -/obj/structure/flora/ausbushes/grassybush, -/turf/open/floor/grass, -/area/hades) -"sQ" = ( -/obj/structure/flora/ausbushes/stalkybush, -/turf/open/floor/grass, -/area/hades) -"sR" = ( -/obj/structure/flora/ausbushes/genericbush, -/turf/open/floor/grass, -/area/hades) -"sS" = ( -/obj/structure/bookcase/random/reference, -/turf/open/floor/carpet, -/area/hades) -"sT" = ( -/obj/structure/closet/cabinet, -/turf/open/floor/carpet, -/area/hades) -"sU" = ( -/obj/structure/table/wood, -/obj/item/weapon/paper/hades_instructions, -/turf/open/floor/carpet, -/area/hades) -"sV" = ( -/obj/structure/flora/ausbushes/fernybush, -/turf/open/floor/grass, -/area/hades) -"sW" = ( -/obj/structure/bed, -/obj/item/weapon/bedsheet/black, -/turf/open/floor/carpet, -/area/hades) -"sX" = ( -/mob/living/simple_animal/hostile/hadesacolyte, -/turf/open/floor/carpet, -/area/hades) -"sY" = ( -/obj/structure/table/wood, -/obj/item/weapon/storage/box/matches, -/turf/open/floor/carpet, -/area/hades) -"sZ" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/turf/open/floor/plasteel, -/area/hades) -"ta" = ( -/obj/machinery/door/airlock/wood, -/turf/open/floor/plasteel/hades, -/area/hades) -"tb" = ( -/obj/structure/table/wood, -/obj/item/weapon/lipstick, -/turf/open/floor/carpet, -/area/hades) -"tc" = ( -/obj/structure/table/wood, -/obj/item/weapon/storage/fancy/candle_box, -/turf/open/floor/carpet, -/area/hades) -"td" = ( -/obj/structure/chair/wood/normal{ - icon_state = "wooden_chair"; - dir = 4 - }, -/turf/open/floor/carpet, -/area/hades) -"te" = ( -/obj/structure/chair/wood/normal{ - icon_state = "wooden_chair"; - dir = 8 - }, -/turf/open/floor/carpet, -/area/hades) -"tf" = ( -/obj/structure/table/wood, -/obj/item/weapon/storage/crayons, -/turf/open/floor/carpet, -/area/hades) -"tg" = ( -/obj/structure/table/wood, -/obj/item/weapon/razor, -/turf/open/floor/carpet, -/area/hades) -"th" = ( -/obj/machinery/door/airlock/wood, -/turf/open/floor/carpet, -/area/hades) -"ti" = ( -/obj/structure/chair/hades, -/turf/open/floor/mineral/diamond, -/area/hades) -"tj" = ( -/obj/machinery/vending/cola, -/turf/open/floor/carpet, -/area/hades) -"tk" = ( -/obj/machinery/vending/snack, -/turf/open/floor/carpet, -/area/hades) -"tl" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks/beer, -/turf/open/floor/carpet, -/area/hades) -"tm" = ( -/obj/structure/table/wood, -/obj/machinery/microwave, -/turf/open/floor/carpet, -/area/hades) -"tn" = ( -/obj/structure/table/wood, -/obj/item/weapon/storage/box/donkpockets, -/turf/open/floor/carpet, -/area/hades) -"to" = ( -/obj/machinery/chem_dispenser/drinks, -/obj/structure/table/wood, -/turf/open/floor/carpet, -/area/hades) -"tp" = ( -/obj/structure/chair/wood/normal, -/mob/living/simple_animal/hostile/hadesacolyte, -/turf/open/floor/carpet, -/area/hades) "tq" = ( /obj/structure/closet/cardboard, /turf/open/floor/plating/airless, @@ -6117,10 +5832,9 @@ /turf/open/floor/plating/airless, /area/syndicate_mothership) "ts" = ( -/obj/structure/table/wood, -/obj/item/weapon/storage/box/drinkingglasses, -/turf/open/floor/carpet, -/area/hades) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/centcom/control) (1,1,1) = {" ab @@ -6607,33 +6321,33 @@ ab ab ab ab -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (3,1,1) = {" @@ -6864,33 +6578,33 @@ ab ab ab ab -sh -si -sk -sl -sl -sl -sl -sl -sl -sl -sl -sk -sh -sB -sw -sT -sW -tb -sW -sO -sW -sh -sw -sw -td -sw -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (4,1,1) = {" @@ -7121,33 +6835,33 @@ ab ab ab ab -sh -si -sl -sl -sx -sl -sy -sl -sy -sl -sx -sl -sh -sB -sw -sw -sX -sw -sw -sw -sX -sh -sw -tp -tq -tr -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (5,1,1) = {" @@ -7375,36 +7089,36 @@ ab ab ab ab -sh -sh -sh -sh -si -sl -sl -sy -sl -sy -sk -sy -sl -sy -sl -sh -sB -sw -sw -sw -sw -sw -sw -sw -th -sw -tp -sO -tr -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (6,1,1) = {" @@ -7632,36 +7346,36 @@ ab ab ab ab -sh -si -sj -sm -sq -sl -sk -sy -sl -sx -sl -sy -sk -sy -sl -sh -sB -sw -sw -sw -sw -sw -sX -sw -sh -sw -sw -te -sw -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (7,1,1) = {" @@ -7889,36 +7603,36 @@ ab ab ab ab -sh -si -sk -sn -sr -sl -sl -sy -sl -sy -sl -sx -sl -sy -sl -sh -sB -sw -sT -sW -sU -sW -tg -sW -sh -tj -sw -sw -sw -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (8,1,1) = {" @@ -8146,36 +7860,36 @@ ab ab ab ab -sh -si -sl -sn -ss -sp -sl -sl -sl -sl -sl -sl -sl -sl -sl -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -tk -sw -sw -sw -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (9,1,1) = {" @@ -8403,36 +8117,36 @@ ab ab ab ab -sh -si -sl -so -st -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sC -sO -sU -sY -tc -tf -sO -sw -sh -tl -sw -sw -ts -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (10,1,1) = {" @@ -8660,36 +8374,36 @@ ab ab ab ab -sh -si -sl -sl -st -sw -sw -sz -sw -sw -sz -sw -sA -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sh -tm -sw -sw -sO -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (11,1,1) = {" @@ -8917,36 +8631,36 @@ ab ab ab ab -sh -si -sl -sl -st -sw -sw -sw -sw -sw -sw -sw -sw -sz -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sh -tn -sw -sw -sO -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (12,1,1) = {" @@ -9174,36 +8888,36 @@ ab ab ab ab -sh -si -sk -sp -st -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sw -sh -to -sw -sw -sU -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (13,1,1) = {" @@ -9431,36 +9145,36 @@ ab ab ab ab -sh -si -sl -sn -su -sp -sl -sl -sl -sl -sl -sl -sl -sl -sl -sh -sh -sh -sh -sh -sh -sh -th -sh -sh -sh -sh -th -sh -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (14,1,1) = {" @@ -9688,36 +9402,36 @@ ab ab ab ab -sh -si -sl -sn -sr -sl -sl -sx -sl -sy -sl -sy -sl -sy -sl -sh -sD -sP -sV -sZ -td -td -sw -sw -sw -td -td -sw -sw -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (15,1,1) = {" @@ -9945,36 +9659,36 @@ ab ab ab ab -sh -si -sl -sm -sv -sl -sk -sy -sl -sx -sk -sy -sl -sx -sl -sh -sE -sQ -sE -sZ -sw -sw -sw -sw -sw -sw -sw -sw -sw -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (16,1,1) = {" @@ -10202,36 +9916,36 @@ ab ab ab ab -sh -sh -sh -sh -si -sl -sl -sy -sl -sy -sl -sx -sl -sy -sl -sh -sF -sR -sP -sZ -sw -sw -sw -sw -sw -sw -sw -sw -sw -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (17,1,1) = {" @@ -10462,33 +10176,33 @@ ab ab ab ab -sh -si -sl -sl -sx -sl -sy -sl -sy -sk -sy -sl -sh -sG -sG -sD -sZ -sw -sw -sw -sw -sw -sX -sw -sw -sw -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (18,1,1) = {" @@ -10719,33 +10433,33 @@ ab ab ab ab -sh -si -sk -sl -sl -sl -sl -sl -sl -sl -sl -sk -sh -sD -sE -sF -sZ -te -te -sw -sw -sw -te -te -sw -sw -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (19,1,1) = {" @@ -10976,33 +10690,33 @@ ab ab ab ab -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -th -sh -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (20,1,1) = {" @@ -11245,21 +10959,21 @@ ab ab ab ab -sh -sH -sS -sS -sK -sK -sK -sh -sK -sK -sH -sI -sw -sS -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (21,1,1) = {" @@ -11502,21 +11216,21 @@ ab ab ab ab -sh -sH -sw -sw -sw -sw -sw -sh -sH -sw -sw -sw -sw -sS -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (22,1,1) = {" @@ -11759,21 +11473,21 @@ ab ab ab ab -sh -sI -sw -sw -sX -sX -sw -th -sw -sw -sw -sw -sX -sH -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (23,1,1) = {" @@ -12016,21 +11730,21 @@ ab ab ab ab -sh -sI -sw -sw -sX -sX -sw -sh -sI -sw -sw -sw -sw -sJ -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (24,1,1) = {" @@ -12273,21 +11987,21 @@ ab ab ab ab -sh -sJ -sw -sw -sw -sw -sw -sh -sH -sX -sw -sw -sw -sI -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (25,1,1) = {" @@ -12530,21 +12244,21 @@ ab ab ab ab -sh -sK -sS -sI -sH -sH -sI -sh -sK -sH -sK -sS -sK -sS -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (26,1,1) = {" @@ -12787,21 +12501,21 @@ ab ab ab ab -sh -sh -sh -sh -ta -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (27,1,1) = {" @@ -13044,21 +12758,21 @@ ab ab ab ab -sh -sL -sl -sl -sl -sl -sl -sL -sl -sl -sl -sl -sl -sL -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (28,1,1) = {" @@ -13301,21 +13015,21 @@ ab ab ab ab -sh -sM -sl -sl -sl -sl -sl -sM -sl -sl -sl -sl -sl -sM -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (29,1,1) = {" @@ -13558,21 +13272,21 @@ ab ab ab ab -sh -sN -sl -sl -sl -sl -sl -sN -sl -sl -sl -sl -sl -sN -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (30,1,1) = {" @@ -13815,21 +13529,21 @@ ab ab ab ab -sh -sN -sN -sN -sN -sN -sN -ti -sN -sN -sN -sN -sN -sN -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (31,1,1) = {" @@ -14072,21 +13786,21 @@ ab ab ab ab -sh -sN -sl -sl -sl -sl -sl -sN -sl -sl -sl -sl -sl -sN -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (32,1,1) = {" @@ -14329,21 +14043,21 @@ ab ab ab ab -sh -sM -sl -sl -sl -sl -sl -sM -sl -sl -sl -sl -sl -sM -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (33,1,1) = {" @@ -14586,21 +14300,21 @@ ab ab ab ab -sh -sL -sl -sl -sl -sl -sl -sL -sl -sl -sl -sl -sl -sL -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (34,1,1) = {" @@ -14843,21 +14557,21 @@ ab ab ab ab -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh -sh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab "} (35,1,1) = {" @@ -39948,7 +39662,7 @@ gN gS gN gU -gN +ts gS gS gS @@ -44567,7 +44281,6 @@ fN fN fN fN -gM gR gR gR @@ -44577,9 +44290,10 @@ gR gR gR gR -ie -ip -iN +gR +gR +gR +gR fN fN fN diff --git a/code/game/gamemodes/miniantags/hades/hades.dm b/code/game/gamemodes/miniantags/hades/hades.dm deleted file mode 100644 index 1d253ada6df..00000000000 --- a/code/game/gamemodes/miniantags/hades/hades.dm +++ /dev/null @@ -1,727 +0,0 @@ -#define STATE_JUDGE 0 -#define STATE_WRATH 1 -#define STATE_FLEE 2 - -/mob/living/simple_animal/hostile/hades - name = "hades" - real_name = "hades" - desc = "A strange being, clad in dark robes. Their very presence radiates an uneasy power." - speak_emote = list("preaches","announces","spits","conveys") - emote_hear = list("hums.","prays.") - response_help = "kneels before" - response_disarm = "flails at" - response_harm = "punches" - icon = 'icons/mob/EvilPope.dmi' - icon_state = "EvilPope" - icon_living = "EvilPope" - icon_dead = "popedeath" - speed = 1 - a_intent = "harm" - status_flags = CANPUSH - attack_sound = 'sound/magic/MAGIC_MISSILE.ogg' - death_sound = 'sound/magic/Teleport_diss.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = INFINITY - faction = list("hades") - attacktext = "strikes with an unholy rage at" - maxHealth = 1000 - health = 1000 - healable = 0 - environment_smash = 3 - melee_damage_lower = 15 - melee_damage_upper = 20 - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_MINIMUM - loot = list(/obj/effect/decal/cleanable/blood) - del_on_death = 0 - deathmessage = "begins to sizzle and pop, their flesh peeling away like paper." - - var/isDoingDeath = FALSE - var/isFleeing = FALSE - var/fleeTimes = 0 - var/currentState = STATE_JUDGE - var/rageLevel = 0 - - var/maxWrathTimer = 150 - var/lastWrathTimer = 0 - - var/timeBetweenGrabs = 60 - var/lastGrabTime = 0 - - var/list/validSins = list("Greed","Gluttony","Pride","Lust","Envy","Sloth","Wrath") - var/lastsinPerson = 0 - var/sinPersonTime = 300 - var/lastFlee = 0 - var/fleeTimer = 30 - var/fakesinPersonChance = 60 - var/list/sinPersonsayings = list("You revel in only your own greed.",\ - "There is nothing but your absolution.",\ - "Your choices have led you to this.",\ - "There is only one way out.",\ - "The only way to be free is to be free of yourself.",\ - "Wallow in sin, and give yourself unto darkness.",\ - "Only the truly sinful may stand.",\ - "Find yourself and you will find Absolution.",\ - "Forego the pain of this process, and submit.",\ - "We can be one in suffering.",\ - "You stand on the precipice of ascension, give in.",\ - "You cannot fathom what lies beyond",\ - "Repent your sins.",\ - "This is the eve of your last days.",\ - "Darkness comes.") - - var/list/creepyasssounds = list('sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', \ - 'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg',\ - 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\ - 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg',\ - 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\ - 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg') - - var/obj/effect/proc_holder/spell/targeted/lightning/sinLightning - - var/list/currentAcolytes = list() - -/mob/living/simple_animal/hostile/hades/New() - ..() - - sinLightning = new/obj/effect/proc_holder/spell/targeted/lightning(src) - - sinLightning.charge_max = 1 - sinLightning.clothes_req = 0 - sinLightning.range = 32 - sinLightning.cooldown_min = 1 - - lastsinPerson = world.time - var/list/possible_titles = list("Pope","Bishop","Lord","Cardinal","Deacon","Pontiff") - var/chosen = "Hades, [pick(possible_titles)] of Sin" - name = chosen - real_name = chosen - - world << "[name] has entered your reality. Kneel before them." - world << 'sound/effects/pope_entry.ogg' - - Appear(get_turf(src)) - -/mob/living/simple_animal/hostile/hades/handle_environment(datum/gas_mixture/environment) - //space popes are from space, they need not your fickle "oxygen" - return - -/mob/living/simple_animal/hostile/hades/handle_temperature_damage() - //space popes are from space, they don't uh.. something fire burny death - return - -/mob/living/simple_animal/hostile/hades/death(gibbed) - if(!isDoingDeath) - notransform = TRUE - anchored = TRUE - src.visible_message("[src] begins to twist and distort, before snapping backwards with a sickening crunch.") - spawn(20) - src.visible_message("[src] is being sucked back to their own realm, destabilizing the fabric of time and space itself!") - playsound(get_turf(src), 'sound/effects/hyperspace_begin.ogg', 100, 1) - isDoingDeath = TRUE - AIStatus = AI_OFF - SpinAnimation() - for(var/i in 1 to 5) - for(var/turf/T in spiral_range_turfs(i,src)) - addtimer(src, "sinShed", i*10, FALSE, T) - spawn(60) // required to be spawn so we can call death's ..() to complete death. - SpinAnimation(0,0) - explosion(get_turf(src), 0, 2, 4, 6, flame_range = 6) - ..() - var/area/A = locate(/area/hades) in world - if(A) - var/turf/T = get_turf(locate(/obj/effect/landmark/event_spawn) in A) - if(T) - src.visible_message("[src]'s Staff is flung free as their body explodes.") - var/obj/structure/ladder/unbreakable/hades/churchLadder = new/obj/structure/ladder/unbreakable/hades(T) - var/obj/structure/ladder/unbreakable/hades/bodyLadder = new/obj/structure/ladder/unbreakable/hades(get_turf(src)) - var/obj/item/weapon/hades_staff/HS = new/obj/item/weapon/hades_staff(get_turf(src)) - HS.throw_at_fast(pick(orange(src,7)),10,1) - churchLadder.up = bodyLadder - bodyLadder.down = churchLadder - qdel(src) - -/mob/living/simple_animal/hostile/hades/attackby(obj/item/I, mob/user, params) - ..() - Defend(user,I) - -/mob/living/simple_animal/hostile/hades/grabbedby(mob/living/carbon/user, supress_message = 0) - ..() - Defend(user,user) - -/mob/living/simple_animal/hostile/hades/hitby(atom/movable/AM, skipcatch, hitpush, blocked) - ..() - lastsinPerson -= (sinPersonTime/4) - if(istype(AM,/obj/item)) - var/obj/item/throwCast = AM - Defend(throwCast.thrownby,AM) - -/mob/living/simple_animal/hostile/hades/bullet_act(obj/item/projectile/P, def_zone) - //don't call ..() because we're going to deflect it - lastsinPerson -= (sinPersonTime/4) - Defend(P.firer,P) - return -1 - -/mob/living/simple_animal/hostile/hades/attack_hand(mob/living/carbon/human/M) - ..() - lastsinPerson -= (sinPersonTime/4) - Defend(M,M) - -/mob/living/simple_animal/hostile/hades/proc/Defend(var/mob/attacker,var/source) - if(!isDoingDeath) - rageLevel += 5 - src.visible_message("[src] rounds on the [attacker], gazing at them with a [pick("cold","frosty","freezing","dark")] [pick("glare","gaze","glower","stare")].") - - if(istype(source,/obj/item/projectile)) - src.visible_message("[src] [pick("calmly","silently","nonchalantly")] waves their hand, deflecting the [source].") - var/obj/item/projectile/P = source - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/turf/curloc = get_turf(src) - - P.original = locate(new_x, new_y, P.z) - P.starting = curloc - P.current = curloc - P.firer = src - P.yo = new_y - curloc.y - P.xo = new_x - curloc.x - P.Angle = null - else - if(prob(20)) - var/chosenDefend = rand(1,3) - switch(chosenDefend) - if(1) - attacker.visible_message("[attacker] is lifted from the ground, shadowy powers tossing them aside.") - attacker.throw_at_fast(pick(orange(src,7)),10,1) - if(2) - attacker.visible_message("[attacker] crackles with electricity, a bolt leaping from [src] to them.") - sinLightning.Bolt(src,attacker,30,5,src) - if(3) - src.visible_message("[src] points his staff at [attacker], a swarm of eyeballs lurching fourth!") - for(var/i in 1 to 4) - var/mob/living/simple_animal/hostile/carp/eyeball/E = new/mob/living/simple_animal/hostile/carp/eyeball(pick(orange(attacker,1))) - E.faction = faction - addtimer(E, "gib", 150, FALSE) - -/mob/living/simple_animal/hostile/hades/proc/sinShed(var/turf/T) - var/obj/effect/overlay/temp/cult/sparks/S = PoolOrNew(/obj/effect/overlay/temp/cult/sparks, T) - S.anchored = FALSE - S.throw_at_fast(src,10,1) - PoolOrNew(/obj/effect/overlay/temp/hadesBlood, T) - -/mob/living/simple_animal/hostile/hades/proc/Transfer(var/mob/living/taken, var/turf/transferTarget) - if(transferTarget) - playsound(get_turf(taken), 'sound/magic/Ethereal_Enter.ogg', 50, 1, -1) - PoolOrNew(/obj/effect/overlay/temp/hadesFlick, get_turf(taken)) - taken.forceMove(transferTarget) - Appear(get_turf(taken)) - -/mob/living/simple_animal/hostile/hades/proc/Appear(var/turf/where) - var/obj/effect/timestop/hades/TS = new /obj/effect/timestop/hades(where) - TS.immune = list(src) - -/mob/living/simple_animal/hostile/hades/Life() - if(..() && !isDoingDeath) // appropriately check if we're alive now we leave a corpse - if(health > maxHealth/4 && !isFleeing) - if(rageLevel > 50) - lastWrathTimer = world.time - currentState = STATE_WRATH - else - currentState = STATE_JUDGE - else - if(world.time > lastFlee + fleeTimer) - lastFlee = world.time - isFleeing = TRUE - currentState = STATE_FLEE - - var/area/healthCheck = get_area(src) - - if(istype(healthCheck,/area/chapel/main)) - if(currentState == STATE_FLEE) - lastWrathTimer = world.time - currentState = STATE_WRATH - if(health < maxHealth/2) - health += 10 // slowly regain hp in the chapel, up to a maximum of half our max - - var/spokenThisTurn = FALSE - for(var/mob/living/A in currentAcolytes) - if(!A) - currentAcolytes -= A - continue - if(A.health <= 0) - rageLevel += 5 - if(!spokenThisTurn) - spokenThisTurn = TRUE - var/list/lossSayings = list("They were weak.","For every death, two more rise.",\ - "What is but one servant lost?","Darkness engulf you!","To the Pit with them.",\ - "Fools! All of you!","You can't stop me. You. Will. Be. JUDGED.") - src.say(pick(lossSayings)) - currentAcolytes -= A - A.gib() - - if(currentState == STATE_WRATH) // we have been enraged. - if(world.time > lastWrathTimer + maxWrathTimer) - rageLevel = 0 // wind down if we're wrathful too long. - rageLevel -= 1 // rage phase starts at 50, meaning roughly 20s of rage. - if(currentAcolytes.len == 0) - src.say("Rise, Servants. AID YOUR MASTER.") - playsound(get_turf(src), 'sound/magic/CastSummon.ogg', 100, 1) - for(var/i in 1 to 5) - var/mob/living/simple_animal/hostile/hadesacolyte/HA = new/mob/living/simple_animal/hostile/hadesacolyte(get_turf(pick(orange(2,src)))) - HA.master = src - currentAcolytes += HA - if(target) - if(world.time > lastGrabTime + timeBetweenGrabs) - if(get_dist(src,target) > 4) // you can't run from us. upped to 4 to give more leeway. - lastGrabTime = world.time - var/list/fleeSayings = list("There is no escape from your sins, [target]","Fleeing will only make your punishment worse [target]!",\ - "There is nowhere you can hide, [target]!","You can't run, [target]!","Get back here, [target]!","You coward, [target]!",\ - "I will find you, [target]!","Return to me, [target]!") - src.say(pick(fleeSayings)) - var/mob/living/toGrab = target - toGrab.Beam(src,"blood",'icons/effects/beam.dmi',10) - toGrab.Weaken(6) - playsound(get_turf(src), 'sound/magic/CastSummon.ogg', 100, 1) - toGrab.throw_at_fast(src,10,1) - if(rageLevel >= 100) - rageLevel = 50 - var/list/overboardSayings = list("Ashes! It will all be ashes!","I will bring about the apocolypse!",\ - "There will be nothing but your withered husks!","Face your doom, cretins!","There. Will. Be. ORDER!",\ - "I am your Lord, lay down your arms and submit.","Your souls will be cremated!",\ - "Only in death will you obey!","This is no person's fault but your own!") - src.say(pick(overboardSayings)) - var/turf/StartLoc = get_turf(src) - var/list/nearby = orange(6,src) - var/slashCount = 0 - var/aoeType = rand(1,2) // just for future proofing - for(var/mob/living/A in nearby) - slashCount++ - A.Beam(src,"blood",'icons/effects/beam.dmi',10) - spawn(slashCount + 3) - if(aoeType == 1) - // no more cheaping it out with non-player mobs like turrets or carps - loc = get_turf(A) - sinShed(StartLoc) - A.attack_animal(src) - PoolOrNew(/obj/effect/overlay/temp/hadesBlood,get_turf(A)) - playsound(get_turf(A), 'sound/magic/SummonItems_generic.ogg', 100, 1) - if(aoeType == 2) - sinShed(StartLoc) - PoolOrNew(/obj/effect/overlay/temp/hadesBite,get_turf(A)) - A.Weaken(6) - var/obj/effect/timestop/hades/large/TS = new /obj/effect/timestop/hades/large(StartLoc) - TS.immune = list(src) - spawn((slashCount+1)+3) - loc = StartLoc - - if(currentState == STATE_FLEE) // we've been wounded, let us flee and lick our wounds - var/area/A = locate(/area/chapel/main) in world - if(A) - var/turf/T = get_turf(locate(/obj/effect/landmark/event_spawn) in A) - if(!T) - T = get_turf(src) // no event spawn in chapel, fall back to doing it on the spot. - if(T) - fleeTimes++ - Transfer(src,T) - AIStatus = AI_OFF - notransform = TRUE - anchored = TRUE - for(var/i in 1 to 5) - spawn(i*10) - for(var/turf/S in oview(i,src) - oview((i)-1,src)) - sinShed(S) - health += maxHealth/(10*fleeTimes) // every flee we gain less HP - spawn(50) - isFleeing = FALSE - notransform = FALSE - anchored = FALSE - AIStatus = AI_ON - currentState = STATE_JUDGE - lastsinPerson = 0 // immediately teleport away to judge - - if(currentState == STATE_JUDGE) // our default state, judge a few people and tell them they're rude or something - if(world.time > lastsinPerson + sinPersonTime) - if(prob(fakesinPersonChance)) - lastsinPerson = world.time - visible_message("[pick(sinPersonsayings)]") - playsound(get_turf(src), pick(creepyasssounds), 100, 1) - else - lastsinPerson = world.time - var/mob/living/carbon/human/sinPerson = pick(living_mob_list) - var/depth = living_mob_list.len + 1 // just in case - if(sinPerson) // no more finding nullcakes - if(!sinPerson.ckey) - while(!sinPerson.ckey && depth > 0) - --depth - var/checkPerson = pick(living_mob_list) - if(checkPerson) - sinPerson = checkPerson - if(!sinPerson || !sinPerson.ckey) - // double check ensure that if the above loop fails to get a ckey target - // we don't go and use the last mob checked, causing odd situations - return - - if(prob(65)) // moderately high chance for us to go to them, else they come here. - Transfer(src,get_turf(pick(oview(1,sinPerson)))) - else - Transfer(sinPerson,get_turf(pick(oview(1,src)))) - - var/sinPersonchoice = pick(validSins) - - src.say("Your sin, [sinPerson], is [sinPersonchoice].") - var/isIndulged = prob(50) - if(isIndulged) - src.say("I will indulge your sin, [sinPerson].") - else - src.say("Your sin will be punished, [sinPerson]!") - - switch(sinPersonchoice) - if("Greed") - sin_Greed(sinPerson, isIndulged) - if("Gluttony") - sin_Gluttony(sinPerson, isIndulged) - if("Pride") - sin_Pride(sinPerson, isIndulged) - if("Lust") - sin_Lust(sinPerson, isIndulged) - if("Envy") - sin_Envy(sinPerson, isIndulged) - if("Sloth") - sin_Sloth(sinPerson, isIndulged) - if("Wrath") - sin_Wrath(sinPerson, isIndulged) - - -///Sin related things - -//global Sin procs, shared between staff and pope - -/proc/sin_Greed(var/mob/living/carbon/human/sinPerson, var/isIndulged) - if(isIndulged) - sinPerson << "You feel like you deserve more, in fact, you want everything." - var/list/greed = list(/obj/item/stack/sheet/mineral/gold,/obj/item/stack/sheet/mineral/silver,/obj/item/stack/sheet/mineral/diamond) - for(var/i in 1 to 10) - var/greed_type = pick(greed) - new greed_type(get_turf(sinPerson)) - else - sinPerson << "Your body begins to shift and bend, changing to reflect your inner greed." - var/mob/living/M = sinPerson.change_mob_type(/mob/living/simple_animal/cockroach,get_turf(sinPerson),"Greedroach",1) - M.AddSpell(new/obj/effect/proc_holder/spell/targeted/mind_transfer) - -/proc/sin_Gluttony(var/mob/living/carbon/human/sinPerson, var/isIndulged) - if(isIndulged) - sinPerson << "Your stomach growls, you feel hungry." - var/list/allTypes = list() - for(var/A in typesof(/obj/item/weapon/reagent_containers/food/snacks)) - var/obj/item/weapon/reagent_containers/food/snacks/O = A - if(initial(O.cooked_type)) - allTypes += A - for(var/i in 1 to 10) - var/greed_type = pick(allTypes) - new greed_type(get_turf(sinPerson)) - else - sinPerson << "Your body begins to bloat and stretch, bile rising in your throat." - sinPerson.reagents.add_reagent("nutriment",1000) - -/proc/sin_Pride(var/mob/living/carbon/human/sinPerson, var/isIndulged) - var/obj/item/weapon/twohanded/sin_pride/pride_hammer = new(get_turf(sinPerson)) - pride_hammer.pride_direction = !isIndulged - - if(isIndulged) - sinPerson << "You feel strong enough to take on the world." - pride_hammer.name = "Indulged [pride_hammer.name]" - else - sinPerson << "You feel small and weak, like the entire world is against you." - pride_hammer.name = "Punished [pride_hammer.name]" - -/proc/sin_Lust(var/mob/living/carbon/human/sinPerson, var/isIndulged) - var/obj/item/lovestone/lovestone = new(get_turf(sinPerson)) - lovestone.lust_direction = !isIndulged - - if(isIndulged) - sinPerson << "You feel confident, like everything and everyone is drawn to you." - lovestone.name = "Indulged [lovestone.name]" - else - sinPerson << "You feel lonely... the wish for the warmth of another spark through your mind." - lovestone.name = "Punished [lovestone.name]" - -/proc/sin_Envy(var/mob/living/carbon/human/sinPerson, var/isIndulged) - if(isIndulged) - for(var/mob/living/carbon/human/H in player_list) // name lottery - if(H == sinPerson) - continue - if(prob(25)) - sinPerson.name = H.name - sinPerson.real_name = H.real_name - var/datum/dna/lottery = H.dna - lottery.transfer_identity(sinPerson, transfer_SE=1) - sinPerson.updateappearance(mutcolor_update=1) - sinPerson.domutcheck() - sinPerson << "You feel envious of [sinPerson.name], and your body shifts to reflect that!" - else - var/sinPersonspecies = pick(species_list) - var/newtype = species_list[sinPersonspecies] - sinPerson << "You wish for more from yourself.. your body shifts to suit your wish." - sinPerson.set_species(newtype) - -/proc/sin_Sloth(var/mob/living/carbon/human/sinPerson, var/isIndulged) - if(isIndulged) - sinPerson << "You feel tired..." - sinPerson.drowsyness += 100 - else - sinPerson << "A chill comes over your body, the feeling of frostbite nipping at your fingers." - sinPerson.reagents.add_reagent("frostoil", 50) - -/proc/sin_Wrath(var/mob/living/carbon/human/sinPerson, var/isIndulged) - if(isIndulged) - sinPerson << "You feel wrathful, like you want to destroy everyone and everything." - sinPerson.change_mob_type(/mob/living/simple_animal/slaughter,get_turf(sinPerson),"Wrath Demon",1) - else - sinPerson << "Your chest feels tight, and the world begins to spin around you." - sinPerson.reagents.add_reagent("lexorin", 29) - sinPerson.reagents.add_reagent("mindbreaker", 29) - -/obj/effect/overlay/temp/hadesFlick - name = "transdimensional waste" - icon = 'icons/mob/mob.dmi' - icon_state = "liquify" - duration = 15 - -/obj/effect/overlay/temp/hadesBite - name = "biting tendril" - icon = 'icons/effects/effects.dmi' - icon_state = "tendril_bite" - duration = 15 - -/obj/effect/overlay/temp/hadesBlood - name = "blood plume" - icon = 'icons/effects/128x128.dmi' - icon_state = "spray_plume" - duration = 30 - -/obj/effect/timestop/hades // custom timeslip to make him immune - name = "Frozen Time" - desc = "Time has slowed to a halt." - -/obj/effect/timestop/hades/New() - spawn(5) - ..() - -/obj/effect/timestop/hades/large - freezerange = 6 - icon_state = "huge_rune" - icon = 'icons/effects/224x224.dmi' - - -/obj/item/weapon/twohanded/sin_pride - icon_state = "mjollnir0" - name = "Pride-struck Hammer" - desc = "It resonates an aura of Pride." - force = 5 - throwforce = 15 - w_class = 4 - slot_flags = SLOT_BACK - force_unwielded = 5 - force_wielded = 20 - attack_verb = list("attacked", "smashed", "crushed", "splattered", "cracked") - hitsound = 'sound/weapons/blade1.ogg' - var/pride_direction = FALSE - -/obj/item/weapon/twohanded/sin_pride/update_icon() - icon_state = "mjollnir[wielded]" - return - -/obj/item/weapon/twohanded/sin_pride/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) - if(!proximity) return - if(wielded) - if(istype(A,/mob/living/carbon/human)) - var/mob/living/carbon/H = A - var/mob/living/carbon/U = user - if(H) - if(pride_direction == FALSE) - U.reagents.trans_to(H, user.reagents.total_volume, 1, 1, 0) - U << "Your pride reflects on [H]." - if(H.health > 0) - U.health += force - U.updatehealth() - H.health -= force - H.updatehealth() - H << "You feel insecure, taking on [user]'s burden." - else if(pride_direction == TRUE) - H.reagents.trans_to(user, H.reagents.total_volume, 1, 1, 0) - H << "Your pride reflects on [user]." - if(U.health > 0) - U.health -= force - U.updatehealth() - H.health += force - H.updatehealth() - U << "You feel insecure, taking on [H]'s burden." - -/obj/item/lovestone - name = "Stone of Lust" - desc = "It lays within your hand, radiating pulses of uncomfortable warmth." - icon = 'icons/obj/wizard.dmi' - icon_state = "lovestone" - item_state = "lovestone" - w_class = 1 - var/lust_direction = FALSE - var/lastUsage = 0 - var/usageTimer = 300 - -/obj/item/lovestone/attack_self(mob/user) - if(world.time > lastUsage + usageTimer) - lastUsage = world.time - user.visible_message("[user] grips the [src] tightly, causing it to vibrate and pulse brightly.") - spawn(25) - if(lust_direction == FALSE) - var/list/throwAt = list() - for(var/atom/movable/AM in oview(7,user)) - if(!AM.anchored && AM != user) - throwAt.Add(AM) - for(var/counter = 1, counter < throwAt.len, ++counter) - var/atom/movable/cast = throwAt[counter] - cast.throw_at_fast(user,10,1) - else if(lust_direction == 1) - var/mob/living/carbon/human/H = user - var/mob/living/carbon/human/foundLover = locate(/mob/living/carbon/human) in orange(3,H) - if(!foundLover) - H << "As you hold the stone, loneliness grips you, your heart feeling heavy and you struggle to breath." - for(var/i in 1 to 10) - addtimer(H.reagents, "add_reagent", i*10, FALSE, "initropidril", i) - else - H << "You take comfort in the presence of [foundLover]" - H.reagents.add_reagent("omnizine",25) - H.Beam(foundLover,"r_beam",'icons/effects/beam.dmi',10) - foundLover << "You take comfort in the presence of [H]" - foundLover.reagents.add_reagent("omnizine",25) - else - user << "The stone lays inert. It is still recharging." - -/mob/living/simple_animal/hostile/hadesacolyte - name = "Acolyte of Hades" - desc = "Darkness seethes from their every pore." - icon_state = "hades_acolyte" - icon_living = "hades_acolyte" - icon_dead = "hades_acolyte_dead" - speak_chance = 0 - turns_per_move = 5 - response_help = "trembles in fear of" - response_disarm = "slaps wildly at" - response_harm = "hits" - speed = 1 - maxHealth = 45 - health = 45 - - harm_intent_damage = 5 - melee_damage_lower = 5 - melee_damage_upper = 15 - attacktext = "strikes at" - attack_sound = 'sound/weapons/bladeslice.ogg' - - butcher_results = list(/obj/item/clothing/mask/gas/cyborg/hades = 1,/obj/item/clothing/suit/hooded/chaplain_hoodie/hades = 1,/obj/item/weapon/hades_staff/fake = 1) - - unsuitable_atmos_damage = 0 - del_on_death = 0 - faction = list("hades") - - var/mob/living/simple_animal/hostile/hades/master - -/mob/living/simple_animal/hostile/hadesacolyte/Life() - if(..()) - if(master) - if(get_dist(src,master) > 5) - PoolOrNew(/obj/effect/overlay/temp/hadesFlick,get_turf(src)) - src.visible_message("[src] twists and distorts, before vanishing in a snap.") - src.forceMove(get_turf(pick(orange(2,master)))) - -//acolyte of hades outfit -/obj/item/clothing/mask/gas/cyborg/hades - name = "Skull Mask" - desc = "It's a skull mask, made of a thin, cool metal." - -/obj/item/clothing/suit/hooded/chaplain_hoodie/hades - name = "Dark robes" - desc = "A dark, soft robe." - hooded = 1 - hoodtype = /obj/item/clothing/head/chaplain_hood/hades - -/obj/item/clothing/head/chaplain_hood/hades - name = "Dark hood" - desc = "A dark, soft hood." - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEEARS -//end hades outfit - -/obj/item/hades_summoner - name = "Dark Seed" - desc = "The stone lays inert, but even when holding it you hear maddened whispers." - icon = 'icons/obj/wizard.dmi' - icon_state = "dark_seed_inert" - item_state = "dark_seed_inert" - w_class = 1 - var/isActivated = FALSE - var/whoActivated - var/countDownToSummon = 10 - var/absorbedHP = 0 - -/obj/item/hades_summoner/attack_self(mob/user) - if(!isActivated) - var/choice = input(user,"Rub the stone?",name) in list("Yes","No") - if(choice == "Yes") - if(prob(15)) - user << "You rub the stone.. and a voice springs fourth!" - user << "You hear a voice in your head.. 'Bring me the flesh of a living being.. and we shall bargain.'" - whoActivated = user - isActivated = TRUE - desc = "The stone hums with a soft glow, whispering to you." - icon_state = "dark_seed" - else - user << "The stone shivers, but nothing happens. Perhaps try again later?" - else - if(user != whoActivated) - user << "The stone lays inert." - else - if(countDownToSummon > 0) - user << "You hear a voice in your head.. 'I still require [countDownToSummon] vessels worth of flesh. Bring them to me'" - else - user << "I thank you, acolyte." - var/mob/living/simple_animal/hostile/hadesacolyte/HA = user.change_mob_type(/mob/living/simple_animal/hostile/hadesacolyte,get_turf(user),"[user.name]",1) - var/mob/living/simple_animal/hostile/hades/H = new/mob/living/simple_animal/hostile/hades(get_turf(user)) - H.maxHealth = absorbedHP - H.health = H.maxHealth - if(H.maxHealth < initial(H.maxHealth)) - HA << "You.. you fool! How dare you summon me with such dirty flesh!" - HA.faction -= "hades" - if(H.maxHealth > initial(H.maxHealth)) - HA << "Such.. power! You have exceeded yourself, acolyte. Drink of my might!" - HA.maxHealth = 250 - HA.health = 250 - qdel(src) - -/obj/item/hades_summoner/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) - if(!proximity) - return - if(istype(A,/mob/living)) - var/mob/living/M = A - if(countDownToSummon > 0) - if(M.health > 0 && M.maxHealth > 200) - // no absorbing super strong creatures unless they're dead - user << "Such power.. Slay this [M] so that I may partake of its being." - return - user << "I accept your offering." - absorbedHP += M.maxHealth - if(!M.ckey) - M.gib() - else - M << "You feel the flesh being stripped from your bones. You're overwhelmed with maddening pain, before reforming into another being!" - M.change_mob_type(/mob/living/simple_animal/hostile/hadesacolyte,get_turf(user),"[user.name]",1) - countDownToSummon-- - if(countDownToSummon <= 0) - user << "I am ready to ascend, my acolyte." - - -#undef STATE_JUDGE -#undef STATE_WRATH -#undef STATE_FLEE diff --git a/code/game/gamemodes/miniantags/hades/hades_chapel.dm b/code/game/gamemodes/miniantags/hades/hades_chapel.dm deleted file mode 100644 index b4ba1d53a59..00000000000 --- a/code/game/gamemodes/miniantags/hades/hades_chapel.dm +++ /dev/null @@ -1,143 +0,0 @@ -/area/hades - name = "Chapel of Sin" - icon_state = "yellow" - requires_power = 0 - has_gravity = 1 - -/turf/open/floor/plasteel/hades - name = "Sin-touched Floor" - icon_state = "cult" - -/obj/structure/chair/hades - name = "Cross of Hades" - desc = "An inverted cross, with straps on it to support the weight of a living being." - icon_state = "chair_hades" - var/list/watchedSpikes = list() - -/obj/structure/chair/hades/New() - ..() - flags |= NODECONSTRUCT - for(var/obj/structure/kitchenspike/KS in range(12)) - watchedSpikes += KS - -/obj/structure/chair/hades/proc/considerReady() - //buckled_mobs seems to work inconsistently, so we're doing some custom searching here. - if(!buckled_mobs) - return FALSE - if(!buckled_mobs.len) - return FALSE - for(var/obj/structure/kitchenspike/KS in watchedSpikes) - var/mob/living/M = locate(/mob/living) in get_turf(KS) - if(!M) - return FALSE - return TRUE - -/obj/structure/chair/hades/proc/completeRitual() - for(var/obj/structure/kitchenspike/KS in watchedSpikes) - var/mob/living/M = locate(/mob/living) in get_turf(KS) - M.gib() - playsound(get_turf(src), 'sound/effects/pope_entry.ogg', 100, 1) - sleep(100) - playsound(get_turf(src), 'sound/effects/hyperspace_end.ogg', 100, 1) - new/obj/item/weapon/hades_staff/imbued(get_turf(src)) - src.visible_message("[src] shatters into a thousand shards, a staff falling from it.") - qdel(src) - -/obj/structure/chair/hades/attackby(obj/item/weapon/W, mob/user, params) - ..() - if(istype(W, /obj/item/weapon/hades_staff)) - var/obj/item/weapon/hades_staff/HS = W - if(!HS.isKey) - return - src.visible_message("[user] inserts the [W] into the [src], giving it a quick turn.") - if(considerReady()) - qdel(W) - src.visible_message("[src] shudders, the sound of moving gears arising...") - for(var/mob/living/M in buckled_mobs) - M.gib() - for(var/i in 1 to 4) - addtimer(GLOBAL_PROC, "playsound", i*10, FALSE, get_turf(src), 'sound/effects/clang.ogg', 100, 1) - spawn(50) - src.visible_message("[src] begins to lower into the ground...") - icon_state = "chair_hades_slide" - addtimer(src, "completeRitual", 50, FALSE) - else - src.visible_message("[src] clunks, the sound of grinding gears arising. Nothing happens.") - -/obj/structure/ladder/unbreakable/hades - name = "Dimensional Rift" - desc = "Where does it lead?" - icon = 'icons/mob/EvilPope.dmi' - icon_state = "popedeath" - anchored = TRUE - -/obj/structure/ladder/unbreakable/hades/update_icon() - return - -/obj/item/weapon/paper/hades_instructions - name = "paper- 'Hastily Scrawled Letter'" - info = "The Master has instructed us to collect corpses for the ritual, and told us to deposity them in the Ritual Room, behind a bookcase in the library. The Master has locked the device to only work with his key, so no more accidents happen." - -/obj/item/weapon/hades_staff - name = "Staff of Hades" - desc = "A large, dark staff, with a set of key-like prongs on the end." - icon_state = "staffofchange" - icon = 'icons/obj/guns/magic.dmi' - item_state = "staffofchange" - slot_flags = SLOT_BELT | SLOT_BACK - force = 25 - throwforce = 5 - w_class = 3 - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("slapped", "shattered", "blasphemed", "smashed", "whacked", "crushed", "hammered") - block_chance = 25 - var/isKey = 1 - -/obj/item/weapon/hades_staff/fake - name = "Inert Staff of Hades" - desc = "A large, dark staff." - isKey = 0 - -/obj/item/weapon/hades_staff/imbued - name = "Imbued Staff of Hades" - desc = " Bestowed with the power of wayward souls, this Staff allows the wielder to judge a target." - force = 75 - throwforce = 35 - block_chance = 75 - var/lastJudge = 0 - var/judgeCooldown = 150 - -/obj/item/weapon/hades_staff/imbued/attack(mob/living/carbon/human/M, mob/living/carbon/human/user) - if(!istype(M)) - return ..() - - if(world.time > lastJudge + judgeCooldown) - var/mob/living/sinPerson = M - lastJudge = world.time - var/sinPersonchoice = pick("Greed","Gluttony","Pride","Lust","Envy","Sloth","Wrath") - - src.say("Your sin, [sinPerson], is [sinPersonchoice].") - var/isIndulged = prob(50) - if(isIndulged) - src.say("I will indulge your sin, [sinPerson].") - else - src.say("Your sin will be punished, [sinPerson]!") - - switch(sinPersonchoice) - if("Greed") - sin_Greed(sinPerson, isIndulged) - if("Gluttony") - sin_Gluttony(sinPerson, isIndulged) - if("Pride") - sin_Pride(sinPerson, isIndulged) - if("Lust") - sin_Lust(sinPerson, isIndulged) - if("Envy") - sin_Envy(sinPerson, isIndulged) - if("Sloth") - sin_Sloth(sinPerson, isIndulged) - if("Wrath") - sin_Wrath(sinPerson, isIndulged) - else - ..() - user << "The [src] is still recharging." diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 093922da28c..6fdd489184f 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -385,20 +385,6 @@ limit = 3 category = "Assistance" -/datum/spellbook_entry/item/hadesstone - name = "Dark Seed" - desc = "A small, dark stone that whispers to you menacingly.\ - The seed calls for the corpses of living beings,\ - in order to summon an ancient, powerful being.\ - The power and tenacity of the summoned being directly\ - correlates to the power of the absorbed beings,\ - so choose your targets wisely." - item_path = /obj/item/hades_summoner - cost = 2 - log_name = "DS" - limit = 1 - category = "Assistance" - /datum/spellbook_entry/item/mjolnir name = "Mjolnir" desc = "A mighty hammer on loan from Thor, God of Thunder. It crackles with barely contained power." diff --git a/tgstation.dme b/tgstation.dme index 4185f4a9daa..85deffe5209 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -379,8 +379,6 @@ #include "code\game\gamemodes\miniantags\abduction\machinery\pad.dm" #include "code\game\gamemodes\miniantags\bot_swarm\swarmer.dm" #include "code\game\gamemodes\miniantags\bot_swarm\swarmer_event.dm" -#include "code\game\gamemodes\miniantags\hades\hades.dm" -#include "code\game\gamemodes\miniantags\hades\hades_chapel.dm" #include "code\game\gamemodes\miniantags\monkey\monkey.dm" #include "code\game\gamemodes\miniantags\morph\morph.dm" #include "code\game\gamemodes\miniantags\revenant\revenant.dm" From 1002b7809caff1abb2e6575bc0b3340c639c5655 Mon Sep 17 00:00:00 2001 From: Jordie Date: Sun, 21 Aug 2016 12:32:35 +1000 Subject: [PATCH 22/24] fixes sql command --- SQL/database_changelog.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt index 0d8a4d841fb..11cb5b4e3aa 100644 --- a/SQL/database_changelog.txt +++ b/SQL/database_changelog.txt @@ -2,7 +2,7 @@ Changed appearance bans to be jobbans. -UPDATE `bans` SET `job` = "appearance", `bantype` = "JOB_PERMABAN" WHERE `bantype` = "APPEARANCE_PERMABAN" +UPDATE 'feedback'.`ban` SET `job` = "appearance", `bantype` = "JOB_PERMABAN" WHERE `bantype` = "APPEARANCE_PERMABAN" Remember to add a prefix to the table name if you use them From 1440cd8e8764f151830a08a306e82691d0d3fb30 Mon Sep 17 00:00:00 2001 From: Kyle Spier-Swenson Date: Sun, 21 Aug 2016 10:43:46 -0700 Subject: [PATCH 23/24] Adds a list() --- code/modules/mob/living/simple_animal/hostile/hostile.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index cc65d2b4b00..3bd798886b1 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -89,7 +89,7 @@ var/list/Mobs = hearers(vision_range, targets_from) - src //Remove self, so we don't suicide . += Mobs - var/static/hostile_machines = typecacheof(/obj/machinery/porta_turret, /obj/mecha) + var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha)) for(var/HM in typecache_filter_list(range(vision_range, targets_from), hostile_machines)) if(can_see(targets_from, HM, vision_range)) From ae7b44d5fd83f935fe604b5ecc9372dff8486674 Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Sun, 21 Aug 2016 18:14:13 +0000 Subject: [PATCH 24/24] Automatic changelog compile, [ci skip] --- html/changelog.html | 127 +++++++++------------ html/changelogs/.all_changelog.yml | 45 ++++++++ html/changelogs/AutoChangeLog-pr-19821.yml | 4 - html/changelogs/AutoChangeLog-pr-19838.yml | 8 -- html/changelogs/AutoChangeLog-pr-19892.yml | 4 - html/changelogs/AutoChangeLog-pr-19915.yml | 4 - html/changelogs/AutoChangeLog-pr-19918.yml | 8 -- html/changelogs/AutoChangeLog-pr-19925.yml | 4 - html/changelogs/AutoChangeLog-pr-19926.yml | 4 - html/changelogs/AutoChangeLog-pr-19928.yml | 5 - html/changelogs/AutoChangeLog-pr-19930.yml | 4 - html/changelogs/AutoChangeLog-pr-19942.yml | 4 - html/changelogs/AutoChangeLog-pr-19944.yml | 4 - html/changelogs/AutoChangeLog-pr-19949.yml | 4 - 14 files changed, 98 insertions(+), 131 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-19821.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-19838.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-19892.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-19915.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-19918.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-19925.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-19926.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-19928.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-19930.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-19942.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-19944.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-19949.yml diff --git a/html/changelog.html b/html/changelog.html index 84fd2470d95..7cefd0ea105 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,59 @@ -->
+

21 August 2016

+

Ergovisavi updated:

+
    +
  • Consolidates the fulton packs into a single item and makes them more user friendly
  • +
+

Google Play Store updated:

+
    +
  • Minor Text Fixes.
  • +
+

Incoming5643 updated:

+
    +
  • Smuggler satchels left behind hidden on the station can now reappear in a later round.
  • +
  • There's absolutely no way of knowing when exactly it will reappear however...
  • +
  • Only one item in the satchel will remain when the satchel reappears.
  • +
  • Items are saved in their initial forms, so saving things like chemical grenades will only disappoint you.
  • +
  • The item pool is map specific and needs to be a certain size before satchels can start reappearing, so get to hiding that loot!
  • +
  • The staff of change has been expanded to turn you into even more things that don't have hands.
  • +
+

Jalleo updated:

+
    +
  • Gulag Teleporter of two issues any more please report them.
  • +
+

Jordie0608 updated:

+
    +
  • Advanced Energy Guns once again have a chance to irradiate you if EMPed.
  • +
+

Kor updated:

+
    +
  • Kinetic Accelerators are now modular. You can find mod kits in the mining vendor and in RnD.
  • +
  • Chaplain's dormant spellblade is no longer invisible.
  • +
+

Papa Bones updated:

+
    +
  • A new, scandalous outfit is now available as contraband from the clothesmate vendor, check it out! Fulfill your deep, dark fantasies.
  • +
+

Shadowlight213 updated:

+
    +
  • Service and cargo have lost roundstart tablets and engineering has gained them
  • +
  • you can now charge battery modules in cell chargers. Use a screwdriver on a computer to remove them. As a note, tablets and laptops can be charged directly by placing them in a security charger.
  • +
+

WJohnston updated:

+
    +
  • Metastation and Boxstation now boast auxillary mining construction rooms in arrivals. These allow you to build a base and then launch it to wherever you want on lavaland.
  • +
+

Wjohnston, Gun Hog updated:

+
    +
  • Aliens with Neurotoxic Spit readied will now have drooling animations.
  • +
  • Hunters may now safely leap over lava.
  • +
  • Hulk punches no longer stun Xenos.
  • +
  • Alien evolve and promotion buttons updated to current Xeno sprites
  • +
  • Handcuff sprites for Xenos now show properly.
  • +
+

17 August 2016

Basilman updated:

    @@ -1141,80 +1194,6 @@
  • For slime people the above mechanic also adds/drains slime jelly. So yes inhaling plasma is now a valid way to build jelly (but you'll still suffocate if there's no oxygen).
  • Pod people now mutate if shot with the mutation setting of the floral somatoray.
- -

19 June 2016

-

Joan updated:

-
    -
  • Assassin holoparasite attack damage increased from 13 to 15, stealth cooldown decreased from 20 seconds to 16 seconds.
  • -
  • Charger holoparasite charge cooldown decreased from 5 seconds to 4 seconds.
  • -
  • Chaos holoparasite attack damage decreased from 10 to 7, range decreased from 10 to 7.
  • -
  • Lightning holoparasite attack damage increased from 5 to 7, chain damage increased by 33%.
  • -
  • Clock cult scripture unlock now only counts humans and silicons.
  • -
  • Servants of ratvar can now create cogscarab shells with a Script scripture. Adding a soul vessel to one will produce a small, drone-like being with an inbuilt proselytizer and tools.
  • -
  • Clockwork mobs have their own speechbubble icons.
  • -
  • Invoking Sevtug now causes massive hallucinations, brain damage, confusion, and dizziness for all non-servant humans on the same zlevel as the invoker.
  • -
  • Invoking Sevtug is no longer mind control. RIP mind control 2016-2016.
  • -
  • Clockwork slabs now produce a component every 50 seconds, from 40, Tinkerer's Caches now produce(if near a clockwork wall) a component every 35 seconds, from 30.
  • -
  • Tinkerer's daemons have a slightly higher cooldown for each component of the type they chose to produce that's already in the cache: This is very slight, but it'll add up if you have a lot of one component type and are trying to get more of it with daemons; 5 of a component type will add a second of delay.
  • -
-

Kor and Iamgoofball updated:

-
    -
  • Miners can now purchase fulton extraction packs.
  • -
  • Miners can now purchase fulton medivac packs.
  • -
  • Two new fulton related bundles are available for purchase with vouchers.
  • -
-

Quiltyquilty updated:

-
    -
  • Beepsky now has his own home in the labor shuttle room.
  • -
-

Wizard's Federation updated:

-
    -
  • We've fired the old Pope, who was actually an apprentice in disguise. We've a-pope-riately replaced him with a much more experienced magic user.
  • -
  • Some less-then-sane people have been sighted forming mysterious cults in lieu of recent Pope sightings, lashing out at anyone who speaks ill of him.
  • -
  • We've rejiggered our trans-dimensional rifts, and almost all cases of clergy members being flung into nothingness should be resolved.
  • -
  • All members of the Space Wizard's Clergy have been appropriately warned about usage of skin-to-stone spells, and such there should be no more instances of permanent statueification.
  • -
-

Xhuis updated:

-
    -
  • Revenants have been renamed to umbras and have undergone some tweaks.
  • -
-

coiax updated:

-
    -
  • Drones can hear robotic talk, but cannot communicate on it. AIs and cyborgs are encouraged to share information with station repair drones.
  • -
  • Potted plants can now be ordered from cargo.
  • -
  • AI turrets no longer fire at drones.
  • -
- -

16 June 2016

-

GunHog updated:

-
    -
  • In response to alarmingly high mining cyborg losses, Nanotrasen has equipped the units with an internal positioning beacon, as standard within the module.
  • -
-

Joan updated:

-
    -
  • You can now strike a Tinkerer's Cache with a Clockwork Proselytizer to refill the Proselytizer from the global component cache.
  • -
  • The Clockwork Proselytizer requires slightly less alloy to convert windows and windoors.
  • -
  • Several clockwork objects have more useful descriptions, most notably including structures, which will show a general health level to non-servants and exact health to servants.
  • -
  • The Clockwork Proselytizer has new, more appropriate inhands.
  • -
  • Invoking Inath-Neq, the Resonant Cogwheel, now gives total invulnerability to all servants in range for 15 seconds instead of buffing maximum health.
  • -
  • Impaling a target with a ratvarian spear no longer breaks the spear.
  • -
  • Judicial Markers(the things spawned from Ratvar's Flame, in turn spawned from a Judicial Visor) explode one second faster.
  • -
  • Removed Dementia Doctrine, replacing it with an Application sigil.
  • -
  • Adds the Sigil of Accession, the previously-mentioned Application sigil, which is much like a Sigil of Submission, except it isn't removed on converting un-mindshielded targets and will disappear after converting a mindshielded target.
  • -
  • Sigil of Submission is now a Script instead of a Driver; It's unlocked one tier up, so you have to rely on the Drivers you have until you get Scripts, instead of spamming both Driver sigils for free converts.
  • -
  • To replace Sigil of Submission in the Driver tier; Added Taunting Tirade, which is a chanted scripture with a very fast invocation, which, on chanting, confuses, dizzies, and briefly stuns nearby non-servants and allows the invoker a brief time to relocate before continuing the chant.
  • -
  • Ghosts can now see the Gateway to the Celestial Derelict's remaining time as a countdown.
  • -
  • Anima Fragments are now slightly slower if not at maximum health and no longer drop a soul vessel when destroyed.
  • -
-

Quiltyquilty updated:

-
    -
  • Patches now hold only 40u.
  • -
  • Patches in first aid kits now only contain 20u of chemicals.
  • -
-

coiax updated:

-
    -
  • Polymorphed mobs now have the same name, and where possible, the same equipment as their previous form.
  • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index fec90c2c882..dd6496703ff 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -6680,3 +6680,48 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. key presses. Movements should now be ~25-50ms more responsive. Shadowlight213: - rscadd: Adds modular computers +2016-08-21: + Ergovisavi: + - tweak: Consolidates the fulton packs into a single item and makes them more user + friendly + Google Play Store: + - spellcheck: Minor Text Fixes. + Incoming5643: + - rscadd: Smuggler satchels left behind hidden on the station can now reappear in + a later round. + - experiment: There's absolutely no way of knowing when exactly it will reappear + however... + - rscadd: Only one item in the satchel will remain when the satchel reappears. + - rscadd: Items are saved in their initial forms, so saving things like chemical + grenades will only disappoint you. + - rscadd: The item pool is map specific and needs to be a certain size before satchels + can start reappearing, so get to hiding that loot! + - rscadd: The staff of change has been expanded to turn you into even more things + that don't have hands. + Jalleo: + - bugfix: Gulag Teleporter of two issues any more please report them. + Jordie0608: + - rscadd: Advanced Energy Guns once again have a chance to irradiate you if EMPed. + Kor: + - rscadd: Kinetic Accelerators are now modular. You can find mod kits in the mining + vendor and in RnD. + - bugfix: Chaplain's dormant spellblade is no longer invisible. + Papa Bones: + - rscadd: A new, scandalous outfit is now available as contraband from the clothesmate + vendor, check it out! Fulfill your deep, dark fantasies. + Shadowlight213: + - tweak: Service and cargo have lost roundstart tablets and engineering has gained + them + - tweak: you can now charge battery modules in cell chargers. Use a screwdriver + on a computer to remove them. As a note, tablets and laptops can be charged + directly by placing them in a security charger. + WJohnston: + - rscadd: Metastation and Boxstation now boast auxillary mining construction rooms + in arrivals. These allow you to build a base and then launch it to wherever + you want on lavaland. + Wjohnston, Gun Hog: + - rscadd: Aliens with Neurotoxic Spit readied will now have drooling animations. + - rscadd: Hunters may now safely leap over lava. + - tweak: Hulk punches no longer stun Xenos. + - tweak: Alien evolve and promotion buttons updated to current Xeno sprites + - bugfix: Handcuff sprites for Xenos now show properly. diff --git a/html/changelogs/AutoChangeLog-pr-19821.yml b/html/changelogs/AutoChangeLog-pr-19821.yml deleted file mode 100644 index 7f7087070cb..00000000000 --- a/html/changelogs/AutoChangeLog-pr-19821.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Jalleo" -delete-after: True -changes: - - bugfix: "Gulag Teleporter of two issues any more please report them." diff --git a/html/changelogs/AutoChangeLog-pr-19838.yml b/html/changelogs/AutoChangeLog-pr-19838.yml deleted file mode 100644 index 0397c957ac6..00000000000 --- a/html/changelogs/AutoChangeLog-pr-19838.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Incoming5643" -delete-after: True -changes: - - rscadd: "Smuggler satchels left behind hidden on the station can now reappear in a later round." - - experiment: "There's absolutely no way of knowing when exactly it will reappear however..." - - rscadd: "Only one item in the satchel will remain when the satchel reappears." - - rscadd: "Items are saved in their initial forms, so saving things like chemical grenades will only disappoint you." - - rscadd: "The item pool is map specific and needs to be a certain size before satchels can start reappearing, so get to hiding that loot!" diff --git a/html/changelogs/AutoChangeLog-pr-19892.yml b/html/changelogs/AutoChangeLog-pr-19892.yml deleted file mode 100644 index f688c20db62..00000000000 --- a/html/changelogs/AutoChangeLog-pr-19892.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "WJohnston" -delete-after: True -changes: - - rscadd: "Metastation and Boxstation now boast auxillary mining construction rooms in arrivals. These allow you to build a base and then launch it to wherever you want on lavaland." diff --git a/html/changelogs/AutoChangeLog-pr-19915.yml b/html/changelogs/AutoChangeLog-pr-19915.yml deleted file mode 100644 index 66a03dafb41..00000000000 --- a/html/changelogs/AutoChangeLog-pr-19915.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Jordie0608" -delete-after: True -changes: - - rscadd: "Advanced Energy Guns once again have a chance to irradiate you if EMPed." diff --git a/html/changelogs/AutoChangeLog-pr-19918.yml b/html/changelogs/AutoChangeLog-pr-19918.yml deleted file mode 100644 index 8c87ca947a2..00000000000 --- a/html/changelogs/AutoChangeLog-pr-19918.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Wjohnston, Gun Hog" -delete-after: True -changes: - - rscadd: "Aliens with Neurotoxic Spit readied will now have drooling animations." - - rscadd: "Hunters may now safely leap over lava." - - tweak: "Hulk punches no longer stun Xenos." - - tweak: "Alien evolve and promotion buttons updated to current Xeno sprites" - - bugfix: "Handcuff sprites for Xenos now show properly." diff --git a/html/changelogs/AutoChangeLog-pr-19925.yml b/html/changelogs/AutoChangeLog-pr-19925.yml deleted file mode 100644 index 66367295a45..00000000000 --- a/html/changelogs/AutoChangeLog-pr-19925.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Incoming5643" -delete-after: True -changes: - - rscadd: "The staff of change has been expanded to turn you into even more things that don't have hands." diff --git a/html/changelogs/AutoChangeLog-pr-19926.yml b/html/changelogs/AutoChangeLog-pr-19926.yml deleted file mode 100644 index efeadd255a8..00000000000 --- a/html/changelogs/AutoChangeLog-pr-19926.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Google Play Store" -delete-after: True -changes: - - spellcheck: "Minor Text Fixes." diff --git a/html/changelogs/AutoChangeLog-pr-19928.yml b/html/changelogs/AutoChangeLog-pr-19928.yml deleted file mode 100644 index 23a498956ae..00000000000 --- a/html/changelogs/AutoChangeLog-pr-19928.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Shadowlight213" -delete-after: True -changes: - - tweak: "Service and cargo have lost roundstart tablets and engineering has gained them" - - tweak: "you can now charge battery modules in cell chargers. Use a screwdriver on a computer to remove them. As a note, tablets and laptops can be charged directly by placing them in a security charger." diff --git a/html/changelogs/AutoChangeLog-pr-19930.yml b/html/changelogs/AutoChangeLog-pr-19930.yml deleted file mode 100644 index adfa06a01d9..00000000000 --- a/html/changelogs/AutoChangeLog-pr-19930.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Papa Bones" -delete-after: True -changes: - - rscadd: "A new, scandalous outfit is now available as contraband from the clothesmate vendor, check it out! Fulfill your deep, dark fantasies." diff --git a/html/changelogs/AutoChangeLog-pr-19942.yml b/html/changelogs/AutoChangeLog-pr-19942.yml deleted file mode 100644 index c69b673d62b..00000000000 --- a/html/changelogs/AutoChangeLog-pr-19942.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Kor" -delete-after: True -changes: - - rscadd: "Kinetic Accelerators are now modular. You can find mod kits in the mining vendor and in RnD." diff --git a/html/changelogs/AutoChangeLog-pr-19944.yml b/html/changelogs/AutoChangeLog-pr-19944.yml deleted file mode 100644 index 23ce404728d..00000000000 --- a/html/changelogs/AutoChangeLog-pr-19944.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ergovisavi" -delete-after: True -changes: - - tweak: "Consolidates the fulton packs into a single item and makes them more user friendly" diff --git a/html/changelogs/AutoChangeLog-pr-19949.yml b/html/changelogs/AutoChangeLog-pr-19949.yml deleted file mode 100644 index 6962b8ac4fb..00000000000 --- a/html/changelogs/AutoChangeLog-pr-19949.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Kor" -delete-after: True -changes: - - bugfix: "Chaplain's dormant spellblade is no longer invisible."
" - if(appearance_isbanned(user)) + if(jobban_isbanned(user, "appearance")) dat += "You are banned from using custom names and appearances. You can continue to adjust your characters, but you will be randomised once you join the game.
" dat += "Random Name " dat += "Always Random Name: [be_random_name ? "Yes" : "No"]
" diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 2861e2e41aa..cf11fb4107c 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -407,7 +407,7 @@ var/mob/living/carbon/human/new_character = new(loc) - if(config.force_random_names || appearance_isbanned(src)) + if(config.force_random_names || jobban_isbanned(src, "appearance")) client.prefs.random_character() client.prefs.real_name = client.prefs.pref_species.random_name(gender,1) client.prefs.copy_to(new_character) From 4bbfa163dd3f7d5c0d3cf42d799440ef4c9d6922 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Thu, 18 Aug 2016 16:02:37 -0500 Subject: [PATCH 02/24] Aux Base Fix --- code/modules/mining/mine_items.dm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 5719a095b1c..071314025e0 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -558,6 +558,8 @@ setting = FALSE return + var/area/A = get_area(T) + var/obj/docking_port/stationary/landing_zone = new /obj/docking_port/stationary(T) landing_zone.id = "colony_drop(\ref[src])" landing_zone.name = "Landing Zone" @@ -566,6 +568,8 @@ landing_zone.width = width landing_zone.height = height landing_zone.setDir(lz_dir) + landing_zone.turf_type = T.baseturf + landing_zone.area_type = A.type for(var/obj/machinery/computer/shuttle/S in machines) if(S.shuttleId == shuttle_id) @@ -637,6 +641,9 @@ for(var/S in SSshuttle.stationary) var/obj/docking_port/stationary/SM = S //SM is declared outside so it can be checked for null if(SM.id == "mining_home" || SM.id == "mining_away") + + var/area/A = get_area(landing_spot) + Mport = new(landing_spot) Mport.id = "landing_zone_dock" Mport.name = "landing zone dock" @@ -645,6 +652,9 @@ Mport.width = SM.width Mport.height = SM.height Mport.setDir(dir) + Mport.turf_type = landing_spot.baseturf + Mport.area_type = A.type + break if(!Mport) user << "This station is not equipped with an approprite mining shuttle. Please contact Nanotrasen Support." From 38171aa90ac3f3a23debe0c1aba9014869897ac4 Mon Sep 17 00:00:00 2001 From: Lzimann Date: Thu, 18 Aug 2016 19:58:16 -0300 Subject: [PATCH 03/24] Adds remove spell proc for admins and add it to VV dropdown menu. The change in --- code/datums/datumvars.dm | 13 +++++++++++++ code/modules/admin/admin_verbs.dm | 16 +++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index dea45393146..f8f46c007d7 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -262,6 +262,7 @@ var/global/list/internal_byond_list_vars = list("contents" = TRUE, "verbs" = TRU if(ismob(D)) body += "" + body += "" body += "" body += "" body += "" @@ -562,6 +563,18 @@ body src.give_spell(M) href_list["datumrefresh"] = href_list["give_spell"] + else if(href_list["remove_spell"]) + if(!check_rights(0)) + return + + var/mob/M = locate(href_list["remove_spell"]) + if(!istype(M)) + usr << "This can only be used on instances of type /mob" + return + + remove_spell(M) + href_list["datumrefresh"] = href_list["remove_spell"] + else if(href_list["give_disease"]) if(!check_rights(0)) return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 4c844c89ac1..7a9918b9cdc 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -525,16 +525,30 @@ var/list/admin_verbs_hideable = list( var/obj/effect/proc_holder/spell/S = input("Choose the spell to give to that guy", "ABRAKADABRA") as null|anything in spell_list if(!S) return - S = spell_list[S] + feedback_add_details("admin_verb","GS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] gave [key_name(T)] the spell [S].") message_admins("[key_name_admin(usr)] gave [key_name(T)] the spell [S].") + + S = spell_list[S] if(T.mind) T.mind.AddSpell(new S) else T.AddSpell(new S) message_admins("Spells given to mindless mobs will not be transferred in mindswap or cloning!") +/client/proc/remove_spell(mob/T in mob_list) + set category = "Fun" + set name = "Remove Spell" + set desc = "Remove a spell from the selected mob." + + if(T && T.mind) + var/obj/effect/proc_holder/spell/S = input("Choose the spell to remove", "NO ABRAKADABRA") as null|anything in T.mind.spell_list + if(S) + T.mind.RemoveSpell(S) + log_admin("[key_name(usr)] removed the spell [S] from [key_name(T)].") + message_admins("[key_name_admin(usr)] removed the spell [S] from [key_name(T)].") + feedback_add_details("admin_verb","RS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/give_disease(mob/T in mob_list) set category = "Fun" From 1215e02bee501b078d0f4d6d02bb1fe930babd7a Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Thu, 18 Aug 2016 18:01:06 -0700 Subject: [PATCH 04/24] Adds the ability to get some info about an inputted ckey or name from irc using the existing keyword_lookup proc. Also adds a config option to show the names of admins messaging from irc and that they are from irc. --- code/controllers/configuration.dm | 3 +++ code/modules/admin/verbs/adminhelp.dm | 12 ++++++++++-- code/modules/admin/verbs/adminpm.dm | 3 ++- code/world.dm | 7 +++++++ config/config.txt | 3 +++ 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 0792cd95f10..57a2fa83699 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -213,6 +213,7 @@ var/client_error_message = "Your version of byond is too old, may have issues, and is blocked from accessing this server." var/cross_name = "Other server" + var/showircname = 0 /datum/configuration/New() var/list/L = subtypesof(/datum/game_mode) @@ -380,6 +381,8 @@ global.medal_hub = value if("medal_hub_password") global.medal_pass = value + if("show_irc_name") + config.showircname = 1 if("see_own_notes") config.see_own_notes = 1 if("soft_popcap") diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 7ea4d5bc710..af2f21907d6 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -1,4 +1,4 @@ -/proc/keywords_lookup(msg) +/proc/keywords_lookup(msg,irc) //This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE! var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as", "i") @@ -10,6 +10,7 @@ var/list/surnames = list() var/list/forenames = list() var/list/ckeys = list() + var/founds = "" for(var/mob/M in mob_list) var/list/indexing = list(M.real_name, M.name) if(M.mind) @@ -56,9 +57,16 @@ var/is_antag = 0 if(found.mind && found.mind.special_role) is_antag = 1 + founds += "Name: [found.name]([found.real_name]) Ckey: [found.ckey] [is_antag ? "(Antag)" : null] " msg += "[original_word](?|F) " continue msg += "[original_word] " + if(irc) + if(founds == "") + return "Search Failed" + else + return founds + return msg @@ -160,4 +168,4 @@ message["key"] = global.comms_key message["crossmessage"] = type - world.Export("[global.cross_address]?[list2params(message)]") \ No newline at end of file + world.Export("[global.cross_address]?[list2params(message)]") diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 1c705724097..eaa5871adca 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -190,6 +190,7 @@ var/client/C = directory[target] var/static/stealthkey + var/adminname = config.showircname ? "[sender](IRC)" : "Administrator" if(!C) return "No client" @@ -206,7 +207,7 @@ msg = emoji_parse(msg) C << "-- Administrator private message --" - C << "Admin PM from-Administrator: [msg]" + C << "Admin PM from-[adminname]: [msg]" C << "Click on the administrator's name to reply." //always play non-admin recipients the adminhelp sound diff --git a/code/world.dm b/code/world.dm index 83454220e28..245b94d02c8 100644 --- a/code/world.dm +++ b/code/world.dm @@ -169,6 +169,13 @@ var/last_irc_status = 0 else return IrcPm(input["adminmsg"],input["msg"],input["sender"]) + else if("namecheck" in input) + if(!key_valid) + return "Bad Key" + else + log_admin("IRC Name Check: [input["sender"]] on [input["namecheck"]]") + message_admins("IRC name checking on [input["namecheck"]] from [input["sender"]]") + return keywords_lookup(input["namecheck"],1) /world/Reboot(var/reason, var/feedback_c, var/feedback_r, var/time) diff --git a/config/config.txt b/config/config.txt index 32b7a5549f7..46204abb1aa 100644 --- a/config/config.txt +++ b/config/config.txt @@ -172,6 +172,9 @@ ALLOW_HOLIDAYS ##Remove the # mark if you are going to use the SVN irc bot to relay adminhelps #USEIRCBOT +##Uncomment to show the names of the admin sending a pm from IRC instead of showing as a stealthmin. +#SHOW_IRC_NAME + ##Defines the ticklag for the world. 0.9 is the normal one, 0.5 is smoother. TICKLAG 0.5 From 074bc50fb402735cf2e600146685b5e41641d8ae Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Thu, 18 Aug 2016 20:19:19 -0500 Subject: [PATCH 05/24] Damage Multiplier Config --- code/__DEFINES/combat.dm | 8 +++++- code/controllers/configuration.dm | 11 +++----- code/datums/martial.dm | 2 +- code/game/gamemodes/clock_cult/clock_mobs.dm | 4 +-- code/game/machinery/Sleeper.dm | 2 +- code/game/machinery/cloning.dm | 8 +++--- code/game/objects/items/weapons/defib.dm | 2 +- .../components/unary_devices/cryo.dm | 2 +- .../mob/living/carbon/alien/larva/life.dm | 2 +- code/modules/mob/living/carbon/brain/brain.dm | 2 +- .../mob/living/carbon/brain/brain_item.dm | 2 +- code/modules/mob/living/carbon/brain/life.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 6 ++-- code/modules/mob/living/carbon/human/human.dm | 2 +- .../mob/living/carbon/human/human_damage.dm | 2 +- .../mob/living/carbon/human/human_helpers.dm | 2 +- .../mob/living/carbon/human/species.dm | 6 ++-- .../mob/living/carbon/human/whisper.dm | 2 +- code/modules/mob/living/carbon/life.dm | 4 +-- code/modules/mob/living/living.dm | 28 ++++++------------- code/modules/mob/living/silicon/ai/life.dm | 2 +- .../living/simple_animal/guardian/guardian.dm | 4 +-- .../mob/living/simple_animal/simple_animal.dm | 10 +++---- .../mob/living/simple_animal/slime/life.dm | 2 +- code/modules/surgery/bodyparts/bodyparts.dm | 4 +-- config/game_options.txt | 8 ++---- 26 files changed, 59 insertions(+), 70 deletions(-) diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index c9861cf2f31..b80c70d035c 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -78,4 +78,10 @@ #define WEAPON_LIGHT 0 #define WEAPON_MEDIUM 1 - #define WEAPON_HEAVY 2 \ No newline at end of file + #define WEAPON_HEAVY 2 + + +//Health Defines + +#define HEALTH_THRESHOLD_CRIT 0 +#define HEALTH_THRESHOLD_DEAD -100 \ No newline at end of file diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 0792cd95f10..598f1ef201a 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -137,9 +137,6 @@ var/alert_desc_red_downto = "The station's destruction has been averted. There is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised." var/alert_desc_delta = "Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill." - var/health_threshold_crit = 0 - var/health_threshold_dead = -100 - var/revival_pod_plants = 1 var/revival_cloning = 1 var/revival_brain_life = -1 @@ -167,6 +164,8 @@ var/silent_ai = 0 var/silent_borg = 0 + var/damage_multiplier = 1 //Modifier for damage to all mobs. Impacts healing as well. + var/allowwebclient = 0 var/webclientmembersonly = 0 @@ -452,10 +451,8 @@ else if(type == "game_options") switch(name) - if("health_threshold_crit") - config.health_threshold_crit = text2num(value) - if("health_threshold_dead") - config.health_threshold_dead = text2num(value) + if("damage_multiplier") + config.damage_multiplier = text2num(value) if("revival_pod_plants") config.revival_pod_plants = text2num(value) if("revival_cloning") diff --git a/code/datums/martial.dm b/code/datums/martial.dm index 4d55fc0f8a9..ea41a804136 100644 --- a/code/datums/martial.dm +++ b/code/datums/martial.dm @@ -515,7 +515,7 @@ H.Weaken(4) if(H.staminaloss && !H.sleeping) var/total_health = (H.health - H.staminaloss) - if(total_health <= config.health_threshold_crit && !H.stat) + if(total_health <= HEALTH_THRESHOLD_CRIT && !H.stat) H.visible_message("[user] delivers a heavy hit to [H]'s head, knocking them out cold!", \ "[user] knocks you unconscious!") H.SetSleeping(30) diff --git a/code/game/gamemodes/clock_cult/clock_mobs.dm b/code/game/gamemodes/clock_cult/clock_mobs.dm index b8cea36531a..3c9f29bd46a 100644 --- a/code/game/gamemodes/clock_cult/clock_mobs.dm +++ b/code/game/gamemodes/clock_cult/clock_mobs.dm @@ -239,7 +239,7 @@ if(host) var/resulthealth = round((host.health / host.maxHealth) * 100, 0.5) if(iscarbon(host)) - resulthealth = round((abs(config.health_threshold_dead - host.health) / abs(config.health_threshold_dead - host.maxHealth)) * 100) + resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100) stat(null, "Host Health: [resulthealth]%") if(ratvar_awakens) stat(null, "You are [recovering ? "un" : ""]able to deploy!") @@ -444,7 +444,7 @@ return 0 var/resulthealth = round((host.health / host.maxHealth) * 100, 0.5) if(iscarbon(host)) - resulthealth = round((abs(config.health_threshold_dead - host.health) / abs(config.health_threshold_dead - host.maxHealth)) * 100) + resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - host.health) / abs(HEALTH_THRESHOLD_DEAD - host.maxHealth)) * 100) if(!ratvar_awakens && host.stat != DEAD && resulthealth > 60) //if above 20 health, fails src << "Your host must be at 60% or less health to emerge like this!" return diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 577c4cd0b2f..2e26c95e67f 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -135,7 +135,7 @@ data["occupant"]["stat"] = occupant.stat data["occupant"]["health"] = occupant.health data["occupant"]["maxHealth"] = occupant.maxHealth - data["occupant"]["minHealth"] = config.health_threshold_dead + data["occupant"]["minHealth"] = HEALTH_THRESHOLD_DEAD data["occupant"]["bruteLoss"] = occupant.getBruteLoss() data["occupant"]["oxyLoss"] = occupant.getOxyLoss() data["occupant"]["toxLoss"] = occupant.getToxLoss() diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 126ac66f42f..2da658b0a0a 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -182,8 +182,8 @@ icon_state = "pod_1" //Get the clone body ready - H.adjustCloneLoss(CLONE_INITIAL_DAMAGE) //Yeah, clones start with very low health, not with random, because why would they start with random health - H.adjustBrainLoss(CLONE_INITIAL_DAMAGE) + H.setCloneLoss(CLONE_INITIAL_DAMAGE) //Yeah, clones start with very low health, not with random, because why would they start with random health + H.setBrainLoss(CLONE_INITIAL_DAMAGE) H.Paralyse(4) if(grab_ghost_when == CLONER_FRESH_CLONE) @@ -231,10 +231,10 @@ occupant.Paralyse(4) //Slowly get that clone healed and finished. - occupant.adjustCloneLoss(-((speed_coeff/2))) + occupant.adjustCloneLoss(-((speed_coeff/2) * config.damage_multiplier)) //Premature clones may have brain damage. - occupant.adjustBrainLoss(-((speed_coeff/2))) + occupant.adjustBrainLoss(-((speed_coeff/2) * config.damage_multiplier)) //So clones don't die of oxyloss in a running pod. if (occupant.reagents.get_reagent_amount("salbutamol") < 30) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index aeb4f25d6da..7ef5fffb1dd 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -354,7 +354,7 @@ return 1 /obj/item/weapon/twohanded/shockpaddles/attack(mob/M, mob/user) - var/halfwaycritdeath = (config.health_threshold_crit + config.health_threshold_dead) / 2 + var/halfwaycritdeath = (HEALTH_THRESHOLD_CRIT + HEALTH_THRESHOLD_DEAD) / 2 if(busy) return diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index a73bcae00af..089eea372e5 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -212,7 +212,7 @@ occupantData["stat"] = occupant.stat occupantData["health"] = occupant.health occupantData["maxHealth"] = occupant.maxHealth - occupantData["minHealth"] = config.health_threshold_dead + occupantData["minHealth"] = HEALTH_THRESHOLD_DEAD occupantData["bruteLoss"] = occupant.getBruteLoss() occupantData["oxyLoss"] = occupant.getOxyLoss() occupantData["toxLoss"] = occupant.getToxLoss() diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index d63654ce9e7..0f4de4b6890 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -20,7 +20,7 @@ if(health<= -maxHealth || !getorgan(/obj/item/organ/brain)) death() return - if(paralysis || sleeping || getOxyLoss() > 50 || (status_flags & FAKEDEATH) || health <= config.health_threshold_crit) + if(paralysis || sleeping || getOxyLoss() > 50 || (status_flags & FAKEDEATH) || health <= HEALTH_THRESHOLD_CRIT) if(stat == CONSCIOUS) stat = UNCONSCIOUS blind_eyes(1) diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index a8c82a97520..a089a58bd77 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -56,7 +56,7 @@ /mob/living/carbon/brain/can_be_revived() . = 1 - if(!container || health <= config.health_threshold_dead) + if(!container || health <= HEALTH_THRESHOLD_DEAD) return 0 /mob/living/carbon/brain/update_sight() diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 6b6ba71043a..e5e7d511fc0 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -68,7 +68,7 @@ if(brainmob) if(brainmob.client) - if(brainmob.health <= config.health_threshold_dead) + if(brainmob.health <= HEALTH_THRESHOLD_DEAD) user << "It's lifeless and severely damaged." else user << "You can feel the small spark of life still left in this one." diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index dc05ef62dbb..75f731b6e69 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -22,7 +22,7 @@ /mob/living/carbon/brain/update_stat() if(status_flags & GODMODE) return - if(health <= config.health_threshold_dead) + if(health <= HEALTH_THRESHOLD_DEAD) if(stat != DEAD) death() var/obj/item/organ/brain/BR diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 15193870032..9d30f85a661 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -634,7 +634,7 @@ if(!client) return - if(stat == UNCONSCIOUS && health <= config.health_threshold_crit) + if(stat == UNCONSCIOUS && health <= HEALTH_THRESHOLD_CRIT) var/severity = 0 switch(health) if(-20 to -10) severity = 1 @@ -712,10 +712,10 @@ if(status_flags & GODMODE) return if(stat != DEAD) - if(health<= config.health_threshold_dead || !getorgan(/obj/item/organ/brain)) + if(health<= HEALTH_THRESHOLD_DEAD || !getorgan(/obj/item/organ/brain)) death() return - if(paralysis || sleeping || getOxyLoss() > 50 || (status_flags & FAKEDEATH) || health <= config.health_threshold_crit) + if(paralysis || sleeping || getOxyLoss() > 50 || (status_flags & FAKEDEATH) || health <= HEALTH_THRESHOLD_CRIT) if(stat == CONSCIOUS) stat = UNCONSCIOUS blind_eyes(1) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 029b628ca26..41f2caab2dc 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -837,7 +837,7 @@ var/they_breathe = (!(NOBREATH in C.dna.species.specflags)) var/they_lung = C.getorganslot("lungs") - if(C.health > config.health_threshold_crit) + if(C.health > HEALTH_THRESHOLD_CRIT) return src.visible_message("[src] performs CPR on [C.name]!", "You perform CPR on [C.name].") diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index da3204f6b0e..c218fbb8445 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -10,7 +10,7 @@ total_burn += BP.burn_dam health = maxHealth - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute update_stat() - if(((maxHealth - total_burn) < config.health_threshold_dead) && stat == DEAD ) + if(((maxHealth - total_burn) < HEALTH_THRESHOLD_DEAD) && stat == DEAD ) ChangeToHusk() if(on_fire) shred_clothing() diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index fea4409a2f0..4b25bca1238 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -113,7 +113,7 @@ return 1//Humans can use guns and such /mob/living/carbon/human/InCritical() - return (health <= config.health_threshold_crit && stat == UNCONSCIOUS) + return (health <= HEALTH_THRESHOLD_CRIT && stat == UNCONSCIOUS) /mob/living/carbon/human/reagent_check(datum/reagent/R) return dna.species.handle_chemicals(R,src) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 9184a5aca1a..88455c18f79 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -479,7 +479,7 @@ H.losebreath = 0 var/takes_crit_damage = (!(NOCRITDAMAGE in specflags)) - if((H.health < config.health_threshold_crit) && takes_crit_damage) + if((H.health < HEALTH_THRESHOLD_CRIT) && takes_crit_damage) H.adjustBruteLoss(1) /datum/species/proc/spec_death(gibbed, mob/living/carbon/human/H) @@ -1169,7 +1169,7 @@ if(!breath || (breath.total_moles() == 0) || !lungs) if(H.reagents.has_reagent("epinephrine") && lungs) return - if(H.health >= config.health_threshold_crit) + if(H.health >= HEALTH_THRESHOLD_CRIT) H.adjustOxyLoss(HUMAN_MAX_OXYLOSS) if(!lungs) H.adjustOxyLoss(1) @@ -1329,7 +1329,7 @@ if(!H || !safe_breath_min) //the other args are either: Ok being 0 or Specifically handled. return 0 - if(!(NOBREATH in specflags) || (H.health <= config.health_threshold_crit)) + if(!(NOBREATH in specflags) || (H.health <= HEALTH_THRESHOLD_CRIT)) if(prob(20)) H.emote("gasp") if(breath_pp > 0) diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index 4b4d0b45142..181d5dee7f3 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -37,7 +37,7 @@ // If whispering your last words, limit the whisper based on how close you are to death. if(critical) - var/health_diff = round(-config.health_threshold_dead + health) + var/health_diff = round(-HEALTH_THRESHOLD_DEAD + health) // If we cut our message short, abruptly end it with a-.. var/message_len = length(message) message = copytext(message, 1, health_diff) + "[message_len > health_diff ? "-.." : "..."]" diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 4b075b81d06..bc6497ce7cd 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -48,7 +48,7 @@ var/datum/gas_mixture/breath - if(health <= config.health_threshold_crit || (pulledby && pulledby.grab_state >= GRAB_KILL && !getorganslot("breathing_tube"))) + if(health <= HEALTH_THRESHOLD_CRIT || (pulledby && pulledby.grab_state >= GRAB_KILL && !getorganslot("breathing_tube"))) losebreath++ //Suffocate @@ -311,7 +311,7 @@ if(sleeping) handle_dreams() AdjustSleeping(-1) - if(prob(10) && health>config.health_threshold_crit) + if(prob(10) && health>HEALTH_THRESHOLD_CRIT) emote("snore") var/restingpwr = 1 + 4 * resting diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 8208c2d3bea..5c93339314e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1,13 +1,3 @@ -/* I am informed this was added by Giacom to reduce mob-stacking in escape pods. -It's sorta problematic atm due to the shuttle changes I am trying to do -Sorry Giacom. Please don't be mad :( -/mob/living/Life() - ..() - var/area/A = get_area(loc) - if(A && A.push_dir) - push_mob_back(src, A.push_dir) -*/ - /mob/living/New() . = ..() generateStaticOverlay() @@ -216,7 +206,7 @@ Sorry Giacom. Please don't be mad :( set hidden = 1 if (InCritical()) src.attack_log += "[src] has [whispered ? "whispered his final words" : "succumbed to death"] with [round(health, 0.1)] points of health!" - src.adjustOxyLoss(src.health - config.health_threshold_dead) + src.adjustOxyLoss(src.health - HEALTH_THRESHOLD_DEAD) updatehealth() if(!whispered) src << "You have given up life and succumbed to death." @@ -272,7 +262,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/adjustBruteLoss(amount, updating_health=1) if(status_flags & GODMODE) return 0 - bruteloss = Clamp(bruteloss + amount, 0, maxHealth*2) + bruteloss = Clamp((bruteloss + (amount * config.damage_multiplier)), 0, maxHealth*2) if(updating_health) updatehealth() @@ -282,7 +272,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/adjustOxyLoss(amount, updating_health=1) if(status_flags & GODMODE) return 0 - oxyloss = Clamp(oxyloss + amount, 0, maxHealth*2) + oxyloss = Clamp((oxyloss + (amount * config.damage_multiplier)), 0, maxHealth*2) if(updating_health) updatehealth() @@ -299,7 +289,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/adjustToxLoss(amount, updating_health=1) if(status_flags & GODMODE) return 0 - toxloss = Clamp(toxloss + amount, 0, maxHealth*2) + toxloss = Clamp((toxloss + (amount * config.damage_multiplier)), 0, maxHealth*2) if(updating_health) updatehealth() return amount @@ -317,7 +307,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/adjustFireLoss(amount, updating_health=1) if(status_flags & GODMODE) return 0 - fireloss = Clamp(fireloss + amount, 0, maxHealth*2) + fireloss = Clamp((fireloss + (amount * config.damage_multiplier)), 0, maxHealth*2) if(updating_health) updatehealth() @@ -327,7 +317,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/adjustCloneLoss(amount, updating_health=1) if(status_flags & GODMODE) return 0 - cloneloss = Clamp(cloneloss + amount, 0, maxHealth*2) + cloneloss = Clamp((cloneloss + (amount * config.damage_multiplier)), 0, maxHealth*2) if(updating_health) updatehealth() @@ -344,7 +334,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/adjustBrainLoss(amount) if(status_flags & GODMODE) return 0 - brainloss = Clamp(brainloss + amount, 0, maxHealth*2) + brainloss = Clamp((brainloss + (amount * config.damage_multiplier)), 0, maxHealth*2) /mob/living/proc/setBrainLoss(amount) if(status_flags & GODMODE) @@ -541,7 +531,7 @@ Sorry Giacom. Please don't be mad :( //proc called by revive(), to check if we can actually ressuscitate the mob (we don't want to revive him and have him instantly die again) /mob/living/proc/can_be_revived() . = 1 - if(health <= config.health_threshold_dead) + if(health <= HEALTH_THRESHOLD_DEAD) return 0 /mob/living/proc/update_damage_overlays() @@ -1026,7 +1016,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/carbon/human/update_stamina() if(staminaloss) var/total_health = (health - staminaloss) - if(total_health <= config.health_threshold_crit && !stat) + if(total_health <= HEALTH_THRESHOLD_CRIT && !stat) src << "You're too exhausted to keep going..." Weaken(5) setStaminaLoss(health - 2) diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index d24a997edaf..946f2e04900 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -60,7 +60,7 @@ if(status_flags & GODMODE) return if(stat != DEAD) - if(health <= config.health_threshold_dead) + if(health <= HEALTH_THRESHOLD_DEAD) death() return else if(stat == UNCONSCIOUS) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index c4253391ec3..a10829bc0ae 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -152,7 +152,7 @@ var/global/list/parasites = list() //all currently existing/living guardians if(summoner) var/resulthealth if(iscarbon(summoner)) - resulthealth = round((abs(config.health_threshold_dead - summoner.health) / abs(config.health_threshold_dead - summoner.maxHealth)) * 100) + resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - summoner.health) / abs(HEALTH_THRESHOLD_DEAD - summoner.maxHealth)) * 100) else resulthealth = round((summoner.health / summoner.maxHealth) * 100, 0.5) stat(null, "Summoner Health: [resulthealth]%") @@ -197,7 +197,7 @@ var/global/list/parasites = list() //all currently existing/living guardians if(summoner && hud_used && hud_used.healths) var/resulthealth if(iscarbon(summoner)) - resulthealth = round((abs(config.health_threshold_dead - summoner.health) / abs(config.health_threshold_dead - summoner.maxHealth)) * 100) + resulthealth = round((abs(HEALTH_THRESHOLD_DEAD - summoner.health) / abs(HEALTH_THRESHOLD_DEAD - summoner.maxHealth)) * 100) else resulthealth = round((summoner.health / summoner.maxHealth) * 100, 0.5) hud_used.healths.maptext = "
[resulthealth]%
" diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index abc97e1c958..2966bb0e964 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -290,23 +290,23 @@ /mob/living/simple_animal/adjustBruteLoss(amount) if(damage_coeff[BRUTE]) - . = adjustHealth(amount*damage_coeff[BRUTE]) + . = adjustHealth(amount * damage_coeff[BRUTE] * config.damage_multiplier) /mob/living/simple_animal/adjustFireLoss(amount) if(damage_coeff[BURN]) - . = adjustHealth(amount*damage_coeff[BURN]) + . = adjustHealth(amount * damage_coeff[BURN] * config.damage_multiplier) /mob/living/simple_animal/adjustOxyLoss(amount) if(damage_coeff[OXY]) - . = adjustHealth(amount*damage_coeff[OXY]) + . = adjustHealth(amount * damage_coeff[OXY] * config.damage_multiplier) /mob/living/simple_animal/adjustToxLoss(amount) if(damage_coeff[TOX]) - . = adjustHealth(amount*damage_coeff[TOX]) + . = adjustHealth(amount * damage_coeff[TOX] * config.damage_multiplier) /mob/living/simple_animal/adjustCloneLoss(amount) if(damage_coeff[CLONE]) - . = adjustHealth(amount*damage_coeff[CLONE]) + . = adjustHealth(amount * damage_coeff[CLONE] * config.damage_multiplier) /mob/living/simple_animal/adjustStaminaLoss(amount) return diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index 367fcbb6a35..a4cf1c4a7bb 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -234,7 +234,7 @@ Feedstop(0, 0) return - add_nutrition(rand(7,15)) + add_nutrition((rand(7,15) * config.damage_multiplier)) //Heal yourself. adjustBruteLoss(-3) diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 09a02d973cf..42b001e1ddd 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -96,8 +96,8 @@ /obj/item/bodypart/proc/take_damage(brute, burn) if(owner && (owner.status_flags & GODMODE)) return 0 //godmode - brute = max(brute,0) - burn = max(burn,0) + brute = max(brute * config.damage_multiplier,0) + burn = max(burn * config.damage_multiplier,0) if(status == ORGAN_ROBOTIC) //This makes robolimbs not damageable by chems and makes it stronger diff --git a/config/game_options.txt b/config/game_options.txt index 798460b4c1b..9f7e778833d 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -1,11 +1,7 @@ ### HEALTH ### -# level of health at which a mob becomes unconscious (crit) -HEALTH_THRESHOLD_CRIT 0 - -# level of health at which a mob becomes dead -HEALTH_THRESHOLD_DEAD -100 - +#Damage multiplier, effects both weapons and healing on all mobs. For example, 1.25 would result in 25% higher damage. +DAMAGE_MULTIPLIER 1 ### REVIVAL ### From 08a67efd4d36082c290e4bbd1c3be12709bf258f Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Fri, 19 Aug 2016 09:41:30 -0400 Subject: [PATCH 06/24] Clockwork scripture now has stat logging --- .../gamemodes/clock_cult/clock_scripture.dm | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm index 6d59ad2de81..13fd36b39eb 100644 --- a/code/game/gamemodes/clock_cult/clock_scripture.dm +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -25,6 +25,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed var/multiple_invokers_used = FALSE //If scripture requires more than one invoker var/multiple_invokers_optional = FALSE //If scripture can have multiple invokers to bolster its effects var/tier = SCRIPTURE_PERIPHERAL //The scripture's tier + var/logname = "XX" //what the scripture logs as when recited; make sure this is unique for each scripture! //components the scripture used from a slab var/list/used_slab_components = list("belligerent_eye" = 0, "vanguard_cogwheel" = 0, "guvax_capacitor" = 0, "replicant_alloy" = 0, "hierophant_ansible" = 0) @@ -59,6 +60,8 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed for(var/i in used_cache_components) if(used_cache_components[i]) clockwork_component_cache[i] += consumed_components[i] + else if(slab && !slab.no_cost) //if the slab exists and isn't debug, log the scripture as being used + feedback_add_details("clockcult_scripture_recited", log_name) if(slab) slab.busy = null qdel(src) @@ -192,6 +195,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed required_components = list("belligerent_eye" = 1) usage_tip = "Useful for crowd control in a populated area and disrupting mass movement." tier = SCRIPTURE_DRIVER + logname = "BEL" /datum/clockwork_scripture/channeled/belligerent/chant_effects(chant_number) for(var/mob/living/carbon/C in hearers(7, invoker)) @@ -223,6 +227,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed creator_message = "You form a judicial visor, which is capable of smiting the unworthy." usage_tip = "The visor has a thirty-second cooldown once used, and the marker it creates has a delay of 3 seconds before exploding." tier = SCRIPTURE_DRIVER + logname = "JV" @@ -236,6 +241,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed required_components = list("vanguard_cogwheel" = 1) usage_tip = "You cannot reactivate Vanguard while still shielded by it." tier = SCRIPTURE_DRIVER + logname = "VAN" var/total_duration = 200 /datum/clockwork_scripture/vanguard/check_special_requirements() @@ -284,6 +290,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed consumed_components = list("vanguard_cogwheel" = 1) usage_tip = "The Compromise is very fast to invoke." tier = SCRIPTURE_DRIVER + logname = "SC" /datum/clockwork_scripture/sentinels_compromise/scripture_effects() var/list/nearby_cultists = list() @@ -326,6 +333,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed required_components = list("guvax_capacitor" = 1) usage_tip = "Only works on those in melee range and does not penetrate mindshield implants. Much more efficient than a Sigil of Submission at low Servant amounts." tier = SCRIPTURE_DRIVER + logname = "GUV" /datum/clockwork_scripture/guvax/run_scripture() var/servants = 0 @@ -361,6 +369,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed consumed_components = list("guvax_capacitor" = 1) usage_tip = "Useful for fleeing attackers, as few will be able to follow someone using this scripture." tier = SCRIPTURE_DRIVER + logname = "TT" var/flee_time = 47 //allow fleeing for 5 seconds var/grace_period = 3 //very short grace period so you don't have to stop immediately var/datum/progressbar/progbar @@ -401,6 +410,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed whispered = TRUE usage_tip = "This is inefficient as a way to produce components, as the slab produced must be held by someone with no other slabs to produce components." tier = SCRIPTURE_DRIVER + logname = "REP" /datum/clockwork_scripture/replicant/scripture_effects() invoker << "You copy a piece of replicant alloy and command it into a new slab." //No visible message, for stealth purposes @@ -424,6 +434,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Slabs will draw components from the global cache after the slab's own repositories, making caches very efficient." tier = SCRIPTURE_DRIVER one_per_tile = TRUE + logname = "TC" /datum/clockwork_scripture/create_object/tinkerers_cache/New() var/cache_cost_increase = min(round(clockwork_caches*0.2), 5) @@ -449,6 +460,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed creator_message = "You form a pair of wraith spectacles, which will grant true sight when worn." usage_tip = "\"True sight\" means that you are able to see through walls and in darkness." tier = SCRIPTURE_DRIVER + logname = "WS" @@ -466,6 +478,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "The sigil, while fairly powerful in its stun, does not induce muteness in its victim." tier = SCRIPTURE_DRIVER one_per_tile = TRUE + logname = "SoT" ///////////// // SCRIPTS // @@ -485,6 +498,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Although powerful, the warden is very weak and should optimally be placed behind barricades." tier = SCRIPTURE_SCRIPT one_per_tile = TRUE + logname = "OW" /datum/clockwork_scripture/create_object/ocular_warden/check_special_requirements() for(var/obj/structure/clockwork/ocular_warden/W in range(3, invoker)) @@ -504,6 +518,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed consumed_components = list("guvax_capacitor" = 1, "hierophant_ansible" = 1) usage_tip = "If standing on a Sigil of Transmission, will transfer power to it. Augumented limbs will also be healed unless above a very high threshhold." tier = SCRIPTURE_SCRIPT + logname = "VV" var/total_power_drained = 0 var/power_damage_threshhold = 3000 var/augument_damage_threshhold = 6000 @@ -593,6 +608,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed creator_message = "You form a clockwork proselytizer, which is already pre-loaded with a small amount of replicant alloy." usage_tip = "Clockwork walls cause adjacent tinkerer's caches to generate components passively, making them a vital tool. Clockwork floors heal servants standing on them." tier = SCRIPTURE_SCRIPT + logname = "CP" @@ -607,6 +623,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed consumed_components = list("vanguard_cogwheel" = 1, "replicant_alloy" = 1) usage_tip = "Before using, advise adjacent allies to remove their helmets, external suits, gloves, and shoes." tier = SCRIPTURE_SCRIPT + logname = "FA" multiple_invokers_used = TRUE multiple_invokers_optional = TRUE @@ -642,6 +659,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed whispered = TRUE usage_tip = "You can impale human targets with the spear by pulling them, then attacking. Throwing the spear at a mob will do massive damage and stun them, but break the spear." tier = SCRIPTURE_SCRIPT + logname = "FC" /datum/clockwork_scripture/function_call/check_special_requirements() for(var/datum/action/innate/function_call/F in invoker.actions) @@ -670,6 +688,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed multiple_invokers_optional = TRUE usage_tip = "This gateway is strictly one-way and will only allow things through the invoker's portal." tier = SCRIPTURE_SCRIPT + logname = "SG" /datum/clockwork_scripture/spatial_gateway/check_special_requirements() if(!isturf(invoker.loc)) @@ -713,6 +732,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed creator_message = "You form a soul vessel, which can be used in-hand to attract spirits, or used on an unconscious or dead human to extract their consciousness." usage_tip = "The vessel can be used as a teleport target for Spatial Gateway, though it is generally better-used by placing it in a shell." tier = SCRIPTURE_SCRIPT + logname = "SV" @@ -729,6 +749,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed observer_message = "The slab disgorges a puddle of black metal that contracts and forms into a strange shell!" usage_tip = "Useless without a soul vessel and should not be created without one." tier = SCRIPTURE_SCRIPT + logname = "COG" @@ -746,6 +767,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "This is not a primary conversion method - use Guvax for that. It is advantageous as a trap, however, as it will transmit the name of the newly-converted." tier = SCRIPTURE_SCRIPT one_per_tile = TRUE + logname = "SoS" ////////////////// @@ -766,6 +788,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed observer_message = "The slab disgorges a puddle of black metal that expands and forms into a strange shell!" usage_tip = "Useless without a soul vessel and should not be created without one." tier = SCRIPTURE_APPLICATION + logname = "AF" @@ -785,6 +808,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "It will remain after converting a target, unless that target has a mindshield implant, which it will break to convert them, but consume itself in the process." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE + logname = "SoA" @@ -802,6 +826,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Can be recharged by using Volt Void while standing on it." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE + logname = "SoT" @@ -820,6 +845,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "To revive a servant, the sigil must have 20 vitality plus the target servant's non-oxygen damage. It will still heal dead servants if it lacks the vitality to outright revive them." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE + logname = "VM" /datum/clockwork_scripture/memory_allocation //Memory Allocation: Finds a willing ghost and makes them into a clockwork marauders for the invoker. @@ -835,6 +861,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed consumed_components = list("belligerent_eye" = 1, "vanguard_cogwheel" = 1, "guvax_capacitor" = 2) usage_tip = "Marauders are useful as personal bodyguards and frontline warriors, although they do little damage." tier = SCRIPTURE_APPLICATION + logname = "MA" /datum/clockwork_scripture/memory_allocation/check_special_requirements() for(var/mob/living/simple_animal/hostile/clockwork/marauder/M in living_mob_list) @@ -905,6 +932,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "If it fails to funnel power into a nearby Sigil of Transmission and fails to disable even one thing, it will disable itself for two minutes." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE + logname = "IL" @@ -924,6 +952,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Powerful healing but power use is very inefficient, and its alloy use is little better." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE + logname = "MEM" @@ -943,6 +972,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Producing a gateway has a high power cost. Gateways to or between clockwork obelisks recieve double duration and uses." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE + logname = "CO" @@ -962,6 +992,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Eligible human servants next to the motor will be converted at an additional power cost. It will also cure hallucinations and brain damage in nearby servants." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE + logname = "MAM" @@ -977,6 +1008,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed creator_message = "You form a daemon shell. Attach it to a tinkerer's cache to increase its rate of production." usage_tip = "Vital to your success!" tier = SCRIPTURE_APPLICATION + logname = "TD" /datum/clockwork_scripture/create_object/tinkerers_daemon/check_special_requirements() var/servants = 0 @@ -1008,6 +1040,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Ocular wardens will become empowered, clockwork proselytizers will require no alloy, tinkerer's daemons will produce twice as quickly, \ and interdiction lenses, mending motors, mania motors, and clockwork obelisks will all require no power." tier = SCRIPTURE_REVENANT + logname = "INBE" /datum/clockwork_scripture/invoke_nezbere/check_special_requirements() if(!slab.no_cost && clockwork_generals_invoked["nezbere"] > world.time) @@ -1059,6 +1092,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed consumed_components = list("belligerent_eye" = 3, "vanguard_cogwheel" = 3, "guvax_capacitor" = 6, "hierophant_ansible" = 3) usage_tip = "Causes brain damage, hallucinations, confusion, and dizziness in massive amounts." tier = SCRIPTURE_REVENANT + logname = "ISFP" invokers_required = 3 multiple_invokers_used = TRUE var/list/mindbreaksayings = list("\"Oh, great. I get to shatter some minds.\"", "\"More minds to crush.\"", \ @@ -1129,6 +1163,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed consumed_components = list("belligerent_eye" = 3, "guvax_capacitor" = 3, "replicant_alloy" = 3, "hierophant_ansible" = 6) usage_tip = "Struck targets will also be knocked down for about sixteen seconds." tier = SCRIPTURE_REVENANT + logname = "INET" /datum/clockwork_scripture/invoke_nzcrentr/check_special_requirements() if(!slab.no_cost && clockwork_generals_invoked["nzcrentr"] > world.time) @@ -1191,6 +1226,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "Those affected by this scripture are only weak to things that outright destroy bodies, such as bombs or the singularity." tier = SCRIPTURE_REVENANT var/total_duration = 150 + logname = "IIRC" /datum/clockwork_scripture/invoke_inathneq/check_special_requirements() if(!slab.no_cost && clockwork_generals_invoked["inath-neq"] > world.time) @@ -1241,6 +1277,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed usage_tip = "The gateway is completely vulnerable to attack during its five-minute duration. It will periodically give indication of its general position to everyone on the station \ as well as being loud enough to be heard throughout the entire sector. Defend it with your life!" tier = SCRIPTURE_JUDGEMENT + logname = "AoCJ" /datum/clockwork_scripture/ark_of_the_clockwork_justiciar/New() if(ticker && ticker.mode && ticker.mode.clockwork_objective != CLOCKCULT_GATEWAY) From de3749f2aa1d71c188e2c7c5e770216e2d36f046 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Fri, 19 Aug 2016 10:00:53 -0400 Subject: [PATCH 07/24] can't be trusted --- code/game/gamemodes/clock_cult/clock_scripture.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm index 13fd36b39eb..edb588fe8d8 100644 --- a/code/game/gamemodes/clock_cult/clock_scripture.dm +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -61,7 +61,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed if(used_cache_components[i]) clockwork_component_cache[i] += consumed_components[i] else if(slab && !slab.no_cost) //if the slab exists and isn't debug, log the scripture as being used - feedback_add_details("clockcult_scripture_recited", log_name) + feedback_add_details("clockcult_scripture_recited", logname) if(slab) slab.busy = null qdel(src) From 1818f3781c117f20fa97a44024d9896fb7e2ee64 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Fri, 19 Aug 2016 12:06:49 -0700 Subject: [PATCH 08/24] Fixes medigun description --- code/modules/projectiles/guns/medbeam.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/medbeam.dm b/code/modules/projectiles/guns/medbeam.dm index ffaeaa3e441..c9864dbb8b2 100644 --- a/code/modules/projectiles/guns/medbeam.dm +++ b/code/modules/projectiles/guns/medbeam.dm @@ -1,6 +1,6 @@ /obj/item/weapon/gun/medbeam name = "Medical Beamgun" - desc = "Delivers medical nanites in a focused beam." + desc = "Don't cross the beams!" icon = 'icons/obj/chronos.dmi' icon_state = "chronogun" item_state = "chronogun" From 5bc7fbd7f025e998ec592c5a30a68964769bd382 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Fri, 19 Aug 2016 12:12:59 -0700 Subject: [PATCH 09/24] MCFLT --- code/modules/projectiles/guns/medbeam.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/medbeam.dm b/code/modules/projectiles/guns/medbeam.dm index c9864dbb8b2..770074ad0a1 100644 --- a/code/modules/projectiles/guns/medbeam.dm +++ b/code/modules/projectiles/guns/medbeam.dm @@ -1,6 +1,6 @@ /obj/item/weapon/gun/medbeam name = "Medical Beamgun" - desc = "Don't cross the beams!" + desc = "Don't cross the streams!" icon = 'icons/obj/chronos.dmi' icon_state = "chronogun" item_state = "chronogun" From 0fb4757512040d43056ca9cae6fb5464fdadda77 Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Fri, 19 Aug 2016 13:31:15 -0700 Subject: [PATCH 10/24] Fixes Appearance_PERMABAN type removed. now a jobban Added needed updating to the sql changelog --- SQL/database_changelog.txt | 10 ++++++++ code/__DEFINES/admin.dm | 2 +- code/modules/admin/DB_ban/functions.dm | 10 -------- code/modules/admin/banappearance.dm | 34 -------------------------- code/modules/admin/topic.dm | 6 ----- code/world.dm | 1 - tgstation.dme | 1 - 7 files changed, 11 insertions(+), 53 deletions(-) delete mode 100644 code/modules/admin/banappearance.dm diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt index 85afa5fa07d..0d8a4d841fb 100644 --- a/SQL/database_changelog.txt +++ b/SQL/database_changelog.txt @@ -1,3 +1,13 @@ +19 August 2016, by Shadowlight213 + +Changed appearance bans to be jobbans. + +UPDATE `bans` SET `job` = "appearance", `bantype` = "JOB_PERMABAN" WHERE `bantype` = "APPEARANCE_PERMABAN" + +Remember to add a prefix to the table name if you use them + +---------------------------------------------------- + 3 July 2016, by Jordie0608 Modified table 'poll_question', adding column 'dontshow' which was recently added to the server schema. diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 4df75c4a60e..50f83c2d947 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -14,7 +14,7 @@ #define BANTYPE_JOB_PERMA 3 #define BANTYPE_JOB_TEMP 4 #define BANTYPE_ANY_FULLBAN 5 //used to locate stuff to unban. -#define BANTYPE_APPEARANCE 6 + #define BANTYPE_ADMIN_PERMA 7 #define BANTYPE_ADMIN_TEMP 8 #define BANTYPE_ANY_JOB 9 //used to remove jobbans diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index 82f62503c32..02f585a502f 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -36,10 +36,6 @@ if(BANTYPE_JOB_TEMP) bantype_str = "JOB_TEMPBAN" bantype_pass = 1 - if(BANTYPE_APPEARANCE) - bantype_str = "APPEARANCE_PERMABAN" - duration = -1 - bantype_pass = 1 if(BANTYPE_ADMIN_PERMA) bantype_str = "ADMIN_PERMABAN" duration = -1 @@ -160,9 +156,6 @@ if(BANTYPE_JOB_TEMP) bantype_str = "JOB_TEMPBAN" bantype_pass = 1 - if(BANTYPE_APPEARANCE) - bantype_str = "APPEARANCE_PERMABAN" - bantype_pass = 1 if(BANTYPE_ADMIN_PERMA) bantype_str = "ADMIN_PERMABAN" bantype_pass = 1 @@ -361,7 +354,6 @@ output += "" output += "" output += "" - output += "" output += "" output += "" output += "