Merge branch 'master' of https://github.com/bgobandit/-tg-station into boxshit

Conflicts:
	code/modules/clothing/suits/bio.dm
	code/modules/clothing/suits/utility.dm
This commit is contained in:
bgobandit
2015-10-02 00:41:19 -04:00
698 changed files with 23394 additions and 90780 deletions
+51 -49
View File
@@ -3,46 +3,11 @@
/world/IsBanned(key,address,computer_id)
if (!key || !address || !computer_id)
log_access("Failed Login (invalid data): [key] [address]-[computer_id]")
return list("reason"="invalid login data", "desc"="Your computer provided invalid or blank information to the server on connection (byond username, IP, and Computer ID.) Provided information for reference: Username:'[key]' IP:'[address]' Computer ID:'[computer_id]' If you continue to get this error, please restart byond or contact byond support.")
if(ckey(key) in admin_datums)
//It has proven to be a bad idea to make admins completely immune to bans, making them have to wait for someone with daemon access
//to add a daemon ban to finally stop them. Admin tempbans and admin permabans are special, high-level ban types, which are there to help
//deal with rogue admins quicker. If admin tempbans or admin permabans are ever needed, it should be consider a big deal. The same applies if
//admin bans are ever abused. This ban type does NOT check for IP or Computer ID. The reason for this is so a player cannot find/steal an admin's
//computer id, set it on his computer, get himself banned, resulting in the admin getting banned aswell. - this happens to also be the reason why
//admins were immune to bans in the first place.
if(!config.ban_legacy_system)
var/ckeytext = ckey(key)
if(!establish_db_connection())
world.log << "Ban database connection failure. Admin [ckeytext] not checked"
diary << "Ban database connection failure. Admin [ckeytext] not checked"
return
var/DBQuery/query = dbcon.NewQuery("SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]') AND (bantype = 'ADMIN_PERMABAN' OR (bantype = 'ADMIN_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)")
query.Execute()
while(query.NextRow())
var/pckey = query.item[1]
//var/pip = query.item[2]
//var/pcid = query.item[3]
var/ackey = query.item[4]
var/reason = query.item[5]
var/expiration = query.item[6]
var/duration = query.item[7]
var/bantime = query.item[8]
var/bantype = query.item[9]
var/expires = ""
if(text2num(duration) > 0)
expires = " The ban is for [duration] minutes and expires on [expiration] (server time)."
var/desc = "\nReason: You, or another user of this computer or connection ([pckey]) is banned from playing here. The ban reason is:\n[reason]\nThis ban was applied by [ackey] on [bantime], [expires]"
return list("reason"="[bantype]", "desc"="[desc]")
return ..()
return list("reason"="invalid login data", "desc"="Error: Could not check ban status, Please try again. Error message: Your computer provided invalid or blank information to the server on connection (byond username, IP, and Computer ID.) Provided information for reference: Username:'[key]' IP:'[address]' Computer ID:'[computer_id]'. (If you continue to get this error, please restart byond or contact byond support.)")
var/admin = 0
var/ckey = ckey(key)
if((ckey in admin_datums) || (ckey in deadmins))
admin = 1
//Guest Checking
if(IsGuestKey(key))
@@ -54,7 +19,7 @@
return list("reason"="guest", "desc"="\nReason: Sorry but the server is currently not accepting connections from never before seen players or guests. If you have played on this server with a byond account before, please log in to the byond account you have played from.")
//Population Cap Checking
if(config.extreme_popcap && living_player_count() >= config.extreme_popcap && !(ckey(key) in admin_datums))
if(config.extreme_popcap && living_player_count() >= config.extreme_popcap && !admin)
log_access("Failed Login: [key] - Population cap reached")
return list("reason"="popcap", "desc"= "\nReason: [config.extreme_popcap_message]")
@@ -63,10 +28,13 @@
//Ban Checking
. = CheckBan( ckey(key), computer_id, address )
if(.)
log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
return .
return ..() //default pager ban stuff
if (admin)
log_admin("The admin [key] has been allowed to bypass a matching ban on [.["key"]]")
message_admins("<span class='adminnotice'>The admin [key] has been allowed to bypass a matching ban on [.["key"]]</span>")
addclientmessage(ckey,"<span class='adminnotice'>You have been allowed to bypass a matching ban on [.["key"]]</span>")
else
log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
return .
else
@@ -85,7 +53,7 @@
if(computer_id)
cidquery = " OR computerid = '[computer_id]' "
var/DBQuery/query = dbcon.NewQuery("SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR (bantype = 'TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)")
var/DBQuery/query = dbcon.NewQuery("SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)")
query.Execute()
@@ -99,12 +67,46 @@
var/duration = query.item[7]
var/bantime = query.item[8]
var/bantype = query.item[9]
if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN")
//admin bans MUST match on ckey to prevent cid-spoofing attacks
// as well as dynamic ip abuse
if (pckey != ckey)
continue
if (admin)
if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN")
log_admin("The admin [key] is admin banned, and has been disallowed access")
message_admins("<span class='adminnotice'>The admin [key] is admin banned, and has been disallowed access</span>")
else
log_admin("The admin [key] has been allowed to bypass a matching ban on [pckey]")
message_admins("<span class='adminnotice'>The admin [key] has been allowed to bypass a matching ban on [pckey]</span>")
addclientmessage(ckey,"<span class='adminnotice'>You have been allowed to bypass a matching ban on [pckey]</span>")
continue
var/expires = ""
if(text2num(duration) > 0)
expires = " The ban is for [duration] minutes and expires on [expiration] (server time)."
else
expires = " The is a permanent ban."
var/desc = "\nReason: You, or another user of this computer or connection ([pckey]) is banned from playing here. The ban reason is:\n[reason]\nThis ban was applied by [ackey] on [bantime], [expires]"
return list("reason"="[bantype]", "desc"="[desc]")
return ..() //default pager ban stuff
. = list("reason"="[bantype]", "desc"="[desc]")
log_access("Failed Login: [key] [computer_id] [address] - Banned [.["reason"]]")
return .
. = ..() //default pager ban stuff
if (.)
//byond will not trigger isbanned() for "global" host bans,
//ie, ones where the "apply to this game only" checkbox is not checked (defaults to not checked)
//So it's safe to let admins walk thru host/sticky bans here
if (admin)
log_admin("The admin [key] has been allowed to bypass a matching host/sticky ban")
message_admins("<span class='adminnotice'>The admin [key] has been allowed to bypass a matching host/sticky ban</span>")
addclientmessage(ckey,"<span class='adminnotice'>You have been allowed to bypass a matching host/sticky ban</span>")
return null
else
log_access("Failed Login: [key] [computer_id] [address] - Banned [.["message"]]")
return .
+5 -2
View File
@@ -512,9 +512,12 @@ var/global/floorIsLava = 0
message_admins("<font color='blue'>[usr.key] has started the game.</font>")
feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return 1
else if (ticker.current_state == GAME_STATE_STARTUP)
usr << "<font color='red'>Error: Start Now: Game is in startup, please wait until it has finished.</font>"
else
usr << "<font color='red'>Error: Start Now: Game has already started.</font>"
return 0
return 0
/datum/admins/proc/toggleenter()
set category = "Server"
@@ -820,4 +823,4 @@ var/global/floorIsLava = 0
string = pick(
"Admin login: [key_name(src)]")
if(string)
message_admins("[string]")
message_admins("[string]")
+4 -4
View File
@@ -60,14 +60,14 @@ var/list/admin_verbs_admin = list(
/client/proc/cmd_admin_world_narrate, /*sends text to all players with no padding*/
/client/proc/cmd_admin_local_narrate, //sends text to all mobs within view of atmo
/client/proc/cmd_admin_create_centcom_report,
/client/proc/check_words, /*displays cult-words*/
/client/proc/reset_all_tcs /*resets all telecomms scripts*/
)
var/list/admin_verbs_ban = list(
/client/proc/unban_panel,
/client/proc/jobbans,
/client/proc/unjobban_panel,
/client/proc/DB_ban_panel
/client/proc/DB_ban_panel,
/client/proc/stickybanpanel
)
var/list/admin_verbs_sounds = list(
/client/proc/play_local_sound,
@@ -131,7 +131,8 @@ var/list/admin_verbs_debug = list(
/proc/machine_upgrade,
/client/proc/populate_world,
/client/proc/cmd_display_del_log,
/client/proc/reset_latejoin_spawns
/client/proc/reset_latejoin_spawns,
/client/proc/create_outfits
)
var/list/admin_verbs_possess = list(
/proc/possess,
@@ -169,7 +170,6 @@ var/list/admin_verbs_hideable = list(
/client/proc/cmd_admin_direct_narrate,
/client/proc/cmd_admin_world_narrate,
/client/proc/cmd_admin_local_narrate,
/client/proc/check_words,
/client/proc/play_local_sound,
/client/proc/play_sound,
/client/proc/set_round_end_sound,
-8
View File
@@ -16,14 +16,6 @@ var/jobban_keylist[0] //to store the keys & ranks
//returns a reason if M is banned from rank, returns 0 otherwise
/proc/jobban_isbanned(mob/M, rank)
if(M && rank)
/*
if(_jobban_isbanned(M, rank)) return "Reason Unspecified" //for old jobban
if (guest_jobbans(rank))
if(config.guest_jobban && IsGuestKey(M.key))
return "Guest Job-ban"
if(config.usewhitelist && !check_whitelist(M))
return "Whitelisted Job"
*/
for (var/s in jobban_keylist)
if( findtext(s,"[M.ckey] - [rank]") == 1 )
var/startpos = findtext(s, "## ")+3
-1
View File
@@ -12,7 +12,6 @@
H.gender = pick(MALE, FEMALE)
H.real_name = random_unique_name(H.gender)
H.name = H.real_name
H.dna.generate_uni_identity(H)
H.underwear = random_underwear(H.gender)
H.skin_tone = random_skin_tone()
H.hair_style = random_hair_style(H.gender)
+4 -10
View File
@@ -220,8 +220,8 @@
var/dat = "<B>Showing DNA from blood.</B><HR>"
dat += "<table cellspacing=5><tr><th>Name</th><th>DNA</th><th>Blood Type</th></tr>"
for(var/mob/living/carbon/human/H in mob_list)
if(H.dna && H.ckey)
dat += "<tr><td>[H]</td><td>[H.dna.unique_enzymes]</td><td>[H.blood_type]</td></tr>"
if(H.ckey)
dat += "<tr><td>[H]</td><td>[H.dna.unique_enzymes]</td><td>[H.dna.blood_type]</td></tr>"
dat += "</table>"
usr << browse(dat, "window=DNA;size=440x410")
if("fingerprints")
@@ -231,12 +231,7 @@
dat += "<table cellspacing=5><tr><th>Name</th><th>Fingerprints</th></tr>"
for(var/mob/living/carbon/human/H in mob_list)
if(H.ckey)
if(H.dna && H.dna.uni_identity)
dat += "<tr><td>[H]</td><td>[md5(H.dna.uni_identity)]</td></tr>"
else if(H.dna && !H.dna.uni_identity)
dat += "<tr><td>[H]</td><td>H.dna.uni_identity = null</td></tr>"
else if(!H.dna)
dat += "<tr><td>[H]</td><td>H.dna = null</td></tr>"
dat += "<tr><td>[H]</td><td>[md5(H.dna.uni_identity)]</td></tr>"
dat += "</table>"
usr << browse(dat, "window=fingerprints;size=440x410")
@@ -259,8 +254,7 @@
message_admins("\blue [key_name_admin(usr)] turned all humans into [result]")
var/newtype = species_list[result]
for(var/mob/living/carbon/human/H in mob_list)
hardset_dna(H, null, null, null, null, newtype)
H.regenerate_icons()
H.set_species(newtype)
if("corgi")
if(!check_rights(R_FUN))
+204
View File
@@ -0,0 +1,204 @@
/datum/admins/proc/stickyban(action,data)
if(!check_rights(R_BAN))
return
switch (action)
if ("show")
stickyban_show()
if ("add")
var/list/ban = list()
var/ckey
ban["admin"] = usr.key
ban["type"] = list("sticky")
ban["reason"] = "(InGameBan)([usr.key])" //this will be displayed in dd only
if (data["ckey"])
ckey = ckey(data["ckey"])
else
ckey = input(usr,"Ckey","Ckey","") as text|null
if (!ckey)
return
ckey = ckey(ckey)
if (get_stickyban_from_ckey(ckey))
usr << "<span class='adminnotice'>Error: Can not add a stickyban: User already has a current sticky ban</span>"
if (data["reason"])
ban["message"] = data["reason"]
else
var/reason = input(usr,"Reason","Reason","Ban Evasion") as text|null
if (!reason)
return
ban["message"] = "[reason]"
world.SetConfig("ban",ckey,list2stickyban(ban))
log_admin("[key_name(usr)] has stickybanned [ckey].\nReason: [ban["message"]]")
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has stickybanned [ckey].\nReason: [ban["message"]]</span>")
if ("remove")
if (!data["ckey"])
return
var/ckey = data["ckey"]
var/ban = get_stickyban_from_ckey(ckey)
if (!ban)
usr << "<span class='adminnotice'>Error: No sticky ban for [ckey] found!</span>"
return
if (alert("Are you sure you want to remove the sticky ban on [ckey]?","Are you sure","Yes","No") == "No")
return
if (!get_stickyban_from_ckey(ckey))
usr << "<span class='adminnotice'>Error: The ban disappeared.</span>"
return
world.SetConfig("ban",ckey, null)
log_admin("[key_name(usr)] removed [ckey]'s stickyban")
message_admins("<span class='adminnotice'>[key_name_admin(usr)] removed [ckey]'s stickyban</span>")
if ("remove_alt")
if (!data["ckey"])
return
var/ckey = data["ckey"]
if (!data["alt"])
return
var/alt = ckey(data["alt"])
var/ban = get_stickyban_from_ckey(ckey)
if (!ban)
usr << "<span class='adminnotice'>Error: No sticky ban for [ckey] found!</span>"
return
var/found = 0
//we have to do it this way because byond keeps the case in its sticky ban matches WHY!!!
for (var/key in ban["keys"])
if (ckey(key) == alt)
found = 1
break
if (!found)
usr << "<span class='adminnotice'>Error: [alt] is not linked to [ckey]'s sticky ban!</span>"
return
if (alert("Are you sure you want to disassociate [alt] from [ckey]'s sticky ban? \nNote: Nothing stops byond from re-linking them","Are you sure","Yes","No") == "No")
return
//we have to do this again incase something changes
ban = get_stickyban_from_ckey(ckey)
if (!ban)
usr << "<span class='adminnotice'>Error: The ban disappeared.</span>"
return
found = 0
for (var/key in ban["keys"])
if (ckey(key) == alt)
ban["keys"] -= key
found = 1
break
if (!found)
usr << "<span class='adminnotice'>Error: [alt] link to [ckey]'s sticky ban disappeared.</span>"
return
world.SetConfig("ban",ckey,list2stickyban(ban))
log_admin("[key_name(usr)] has disassociated [alt] from [ckey]'s sticky ban")
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has disassociated [alt] from [ckey]'s sticky ban</span>")
if ("edit")
if (!data["ckey"])
return
var/ckey = data["ckey"]
var/ban = get_stickyban_from_ckey(ckey)
if (!ban)
usr << "<span class='adminnotice'>Error: No sticky ban for [ckey] found!"
return
var/oldreason = ban["message"]
var/reason = input(usr,"Reason","Reason","[ban["message"]]") as text|null
if (!reason || reason == oldreason)
return
//we have to do this again incase something changed while we waited for input
ban = get_stickyban_from_ckey(ckey)
if (!ban)
usr << "<span class='adminnotice'>Error: The ban disappeared.</span>"
return
ban["message"] = "[reason]"
world.SetConfig("ban",ckey,list2stickyban(ban))
log_admin("[key_name(usr)] has edited [ckey]'s sticky ban reason from [oldreason] to [reason]")
message_admins("<span class='adminnotice'>[key_name_admin(usr)] has edited [ckey]'s sticky ban reason from [oldreason] to [reason]</span>")
/datum/admins/proc/stickyban_gethtml(ckey, ban)
. = "<a href='?_src_=holder;stickyban=remove&ckey=[ckey]'>\[-\]</a><b>[ckey]</b><br />"
. += "[ban["message"]] <b><a href='?_src_=holder;stickyban=edit&ckey=[ckey]'>\[Edit\]</a></b><br />"
if (ban["admin"])
. += "[ban["admin"]]<br />"
else
. += "LEGACY<br />"
. += "Caught keys<br />\n<ol>"
for (var/key in ban["keys"])
if (ckey(key) == ckey)
continue
. += "<li><a href='?_src_=holder;stickyban=remove_alt&ckey=[ckey]&alt=[ckey(key)]'>\[-\]</a>[key]</li>"
. += "</ol>\n"
/datum/admins/proc/stickyban_show()
if(!check_rights(R_BAN))
return
var/list/bans = world.GetConfig("ban")
var/banhtml = ""
for(var/key in bans)
var/ckey = ckey(key)
var/ban = stickyban2list(world.GetConfig("ban",key))
banhtml += "<br /><hr />\n"
banhtml += stickyban_gethtml(ckey,ban)
var/html = {"
<head>
<title>Sticky Bans</title>
</head>
<body>
<h2>All Sticky Bans:</h2> <a href='?_src_=holder;stickyban=add'>\[+\]</a><br>
[banhtml]
</body>
"}
usr << browse(html,"window=stickybans;size=700x400")
/proc/get_stickyban_from_ckey(var/ckey)
if (!ckey)
return null
ckey = ckey(ckey)
. = null
for (var/key in world.GetConfig("ban"))
if (ckey(key) == ckey)
. = stickyban2list(world.GetConfig("ban",key))
break
/proc/stickyban2list(var/ban)
if (!ban)
return null
. = params2list(ban)
.["keys"] = text2list(.["keys"], ",")
.["type"] = text2list(.["type"], ",")
.["IP"] = text2list(.["IP"], ",")
.["computer_id"] = text2list(.["computer_id"], ",")
/proc/list2stickyban(var/list/ban)
if (!ban || !islist(ban))
return null
. = ban.Copy()
if (.["keys"])
.["keys"] = list2text(.["keys"], ",")
if (.["type"])
.["type"] = list2text(.["type"], ",")
if (.["IP"])
.["IP"] = list2text(.["IP"], ",")
if (.["computer_id"])
.["computer_id"] = list2text(.["computer_id"], ",")
. = list2params(.)
/client/proc/stickybanpanel()
set name = "Sticky Ban Panel"
set category = "Admin"
if (!holder)
return
holder.stickyban_show()
+30 -2
View File
@@ -23,6 +23,8 @@
message_admins("[key_name_admin(usr)] Rejected [C.key]'s admin help. [C.key]'s Adminhelp verb has been returned to them")
log_admin("[key_name(usr)] Rejected [C.key]'s admin help")
else if(href_list["stickyban"])
stickyban(href_list["stickyban"],href_list)
else if(href_list["makeAntag"])
if (!ticker.mode)
@@ -1527,7 +1529,6 @@
var/client/C = usr.client
if(!isobserver(usr)) C.admin_ghost()
var/mob/dead/observer/A = C.mob
sleep(2)
A.ManualFollow(M)
log_admin("[key_name(usr)] followed [key_name(M)]")
message_admins("[key_name_admin(usr)] followed [key_name_admin(M)]")
@@ -2109,4 +2110,31 @@
message_admins("[key_name_admin(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]")
log_admin("[key_name(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]")
else
usr << "You may only use this when the game is running"
usr << "You may only use this when the game is running"
else if(href_list["create_outfit"])
if(!check_rights(R_ADMIN))
return
var/datum/outfit/O = new /datum/outfit
//swap this for js dropdowns sometime
O.name = href_list["outfit_name"]
O.uniform = text2path(href_list["outfit_uniform"])
O.shoes = text2path(href_list["outfit_shoes"])
O.gloves = text2path(href_list["outfit_gloves"])
O.suit = text2path(href_list["outfit_suit"])
O.head = text2path(href_list["outfit_head"])
O.back = text2path(href_list["outfit_back"])
O.mask = text2path(href_list["outfit_mask"])
O.glasses = text2path(href_list["outfit_glasses"])
O.r_hand = text2path(href_list["outfit_r_hand"])
O.l_hand = text2path(href_list["outfit_l_hand"])
O.suit_store = text2path(href_list["outfit_s_store"])
O.l_pocket = text2path(href_list["outfit_l_pocket"])
O.r_pocket = text2path(href_list["outfit_r_pocket"])
O.id = text2path(href_list["outfit_id"])
O.belt = text2path(href_list["outfit_belt"])
O.ears = text2path(href_list["outfit_ears"])
custom_outfits.Add(O)
message_admins("[key_name(usr)] created \"[O.name]\" outfit!")
+1 -1
View File
@@ -26,7 +26,7 @@
for (var/mob/M in player_list)
if (istype(M, /mob/new_player))
continue
if (M.stat == DEAD || (M.client && M.client.holder && (M.client.prefs.chat_toggles & CHAT_DEAD))) //admins can toggle deadchat on and off. This is a proc in admin.dm and is only give to Administrators and above
if (M.stat == DEAD || istype(M, /mob/living/simple_animal/revenant) || (M.client && M.client.holder && (M.client.prefs.chat_toggles & CHAT_DEAD))) //admins can toggle deadchat on and off. This is a proc in admin.dm and is only give to Administrators and above
M.show_message(rendered, 2)
feedback_add_details("admin_verb","D") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+29 -566
View File
@@ -624,393 +624,56 @@ var/global/list/g_fancy_list_of_types = null
alert("Invalid mob")
return
//log_admin("[key_name(src)] has alienized [M.key].")
var/list/dresspacks = list(
"naked",
"as job...",
"standard space gear",
"tournament standard red",
"tournament standard green",
"tournament gangster",
"tournament chef",
"tournament janitor",
"laser tag red",
"laser tag blue",
"pirate",
"space pirate",
"soviet admiral",
"tunnel clown",
"masked killer",
"assassin",
"mobster",
"death commando",
"emergency response officer",
"centcom official",
"centcom commander",
"special ops officer",
"blue wizard",
"red wizard",
"marisa wizard",
"plasmaman"
)
var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in dresspacks
var/list/outfits = list("Naked","Custom","As Job...")
var/list/paths = typesof(/datum/outfit) - /datum/outfit - typesof(/datum/outfit/job)
for(var/path in paths)
var/datum/outfit/O = path //not much to initalize here but whatever
outfits[initial(O.name)] = path
var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in outfits
if (isnull(dresscode))
return
var/datum/job/jobdatum
if (dresscode == "as job...")
if (dresscode == "As Job...")
var/jobname = input("Select job", "Robust quick dress shop") as null|anything in get_all_jobs()
if(isnull(jobname))
return
jobdatum = SSjob.GetJob(jobname)
var/datum/outfit/custom = null
if (dresscode == "Custom")
var/list/custom_names = list()
for(var/datum/outfit/D in custom_outfits)
custom_names[D.name] = D
var/selected_name = input("Select outfit", "Robust quick dress shop") as null|anything in custom_names
custom = custom_names[selected_name]
if(isnull(custom))
return
feedback_add_details("admin_verb","SEQ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
for (var/obj/item/I in M)
if (istype(I, /obj/item/weapon/implant))
continue
qdel(I)
switch(dresscode)
if ("naked")
if ("Naked")
//do nothing
if ("as job...")
if ("Custom")
//use custom one
M.equipOutfit(custom)
if ("As Job...")
if(jobdatum)
dresscode = jobdatum.title
M.job = jobdatum.title
jobdatum.equip(M)
if ("standard space gear")
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space(M), slot_head)
var /obj/item/weapon/tank/jetpack/J = new /obj/item/weapon/tank/jetpack/oxygen(M)
M.equip_to_slot_or_del(J, slot_back)
J.toggle()
M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask)
J.Topic(null, list("stat" = 1))
if ("tournament standard red","tournament standard green") //we think stunning weapon is too overpowered to use it on tournaments. --rastaf0
if (dresscode=="tournament standard red")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/red(M), slot_w_uniform)
else
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/green(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/thunderdome(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/destroyer(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/smokebomb(M), slot_r_store)
if ("tournament gangster") //gangster are supposed to fight each other. --rastaf0
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/det(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/det_suit(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/ammo_box/c10mm(M), slot_l_store)
if ("tournament chef") //Steven Seagal FTW
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/chef(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/rollingpin(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_s_store)
if ("tournament janitor")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
var/obj/item/weapon/storage/backpack/backpack = new(M)
for(var/obj/item/I in backpack)
qdel(I)
M.equip_to_slot_or_del(backpack, slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/mop(M), slot_r_hand)
var/obj/item/weapon/reagent_containers/glass/bucket/bucket = new(M)
bucket.reagents.add_reagent("water", 70)
M.equip_to_slot_or_del(bucket, slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack)
if ("laser tag red")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/red(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/red(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/red(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/redtaghelm(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/redtag(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/laser/redtag(M), slot_s_store)
if ("laser tag blue")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/blue(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/blue(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/blue(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/bluetaghelm(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/bluetag(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/laser/bluetag(M), slot_s_store)
if ("pirate")
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand)
if ("space pirate")
M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/pirate(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/pirate(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand)
if("tunnel clown")//Tunnel clowns rule!
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/hooded/chaplain_hoodie(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_r_store)
var/obj/item/weapon/card/id/W = new(M)
W.access = get_all_accesses()
W.assignment = "Tunnel Clown!"
W.registered_name = M.real_name
W.update_label(M.real_name)
M.equip_to_slot_or_del(W, slot_wear_id)
var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M)
M.equip_to_slot_or_del(fire_axe, slot_r_hand)
if("masked killer")
M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store)
var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M)
M.equip_to_slot_or_del(fire_axe, slot_r_hand)
for(var/obj/item/carried_item in M.contents)
if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant.
carried_item.add_blood(M)//Oh yes, there will be blood...
if("assassin")
var/obj/item/clothing/under/U = new /obj/item/clothing/under/suit_jacket(M)
M.equip_to_slot_or_del(U, slot_w_uniform)
U.attachTie(new /obj/item/clothing/tie/waistcoat(M))
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store)
var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = new(M)
for(var/obj/item/briefcase_item in sec_briefcase)
qdel(briefcase_item)
for(var/i=3, i>0, i--)
sec_briefcase.contents += new /obj/item/stack/spacecash/c1000
sec_briefcase.contents += new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba
sec_briefcase.contents += new /obj/item/ammo_box/a357
sec_briefcase.contents += new /obj/item/weapon/c4
M.equip_to_slot_or_del(sec_briefcase, slot_l_hand)
var/obj/item/device/pda/heads/pda = new(M)
pda.owner = M.real_name
pda.ownjob = "Reaper"
pda.update_label()
M.equip_to_slot_or_del(pda, slot_belt)
var/obj/item/weapon/card/id/syndicate/W = new(M)
W.access = get_all_accesses()
W.assignment = "Reaper"
W.registered_name = M.real_name
W.update_label(M.real_name)
M.equip_to_slot_or_del(W, slot_wear_id)
// DEATH SQUADS
if("death commando")
equip_deathsquad(M)
if("emergency response officer")
var/alert
if(alert("Code Red ERT?","Select Response Level","Yes","No")=="Yes")
alert = 1
else
alert = 0
switch(input("Which class?") in list("Commander","Security","Engineer","Medic"))
if("Commander")
equip_emergencyresponsesquad(M, "commander",alert)
if("Security")
equip_emergencyresponsesquad(M, "sec",alert)
if("Engineer")
equip_emergencyresponsesquad(M, "eng",alert)
if("Medic")
equip_emergencyresponsesquad(M, "med",alert)
if("centcom official")
equip_centcomofficial(M)
if("centcom commander")
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_commander(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/bulletproof(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cent/commander(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/cohiba(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/clothing/head/centhat(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/lighter(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
var/obj/item/weapon/card/id/W = new(M)
W.icon_state = "centcom"
W.access = get_all_accesses()
W.access += get_centcom_access("Centcom Commander")
W.assignment = "Centcom Commander"
W.registered_name = M.real_name
W.update_label()
M.equip_to_slot_or_del(W, slot_wear_id)
if("special ops officer")
var/obj/item/device/radio/headset/R = new /obj/item/device/radio/headset/headset_cent/commander(M)
R.set_frequency(CENTCOM_FREQ)
R.freqlock = 1
M.equip_to_slot_or_del(R, slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/officer(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/havana(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/beret(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/lighter(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
var/obj/item/weapon/card/id/W = new(M)
W.icon_state = "centcom"
W.access = get_all_accesses()
W.access += get_centcom_access("Special Ops Officer")
W.assignment = "Special Ops Officer"
W.registered_name = M.real_name
W.update_label()
M.equip_to_slot_or_del(W, slot_wear_id)
if("blue wizard")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/staff(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
if("red wizard")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/red(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/staff(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
if("marisa wizard")
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/marisa(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/marisa(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/marisa(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/staff(M), slot_l_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
if("soviet admiral")
M.equip_to_slot_or_del(new /obj/item/clothing/head/hgpiratecap(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cent(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/hgpirate(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform)
var/obj/item/weapon/card/id/W = new(M)
W.icon_state = "centcom"
W.access = get_all_accesses()
W.access += get_centcom_access("Admiral")
W.assignment = "Admiral"
W.registered_name = M.real_name
W.update_label()
M.equip_to_slot_or_del(W, slot_wear_id)
if("mobster")
M.equip_to_slot_or_del(new /obj/item/clothing/head/fedora(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/tommygun(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/really_black(M), slot_w_uniform)
var/obj/item/weapon/card/id/W = new(M)
W.assignment = "Assistant"
W.registered_name = M.real_name
W.update_label()
M.equip_to_slot_or_del(W, slot_wear_id)
if("plasmaman")
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/hardsuit/plasmaman(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/eva/plasmaman(M),slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/weapon/tank/internals/plasmaman/full(M),slot_back)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M),slot_wear_mask)
else
M.equipOutfit(outfits[dresscode])
M.regenerate_icons()
@@ -1104,204 +767,4 @@ var/global/list/g_fancy_list_of_types = null
for(var/path in SSgarbage.noqdelhint)
dat += "[path]<BR>"
usr << browse(dat, "window=dellog")
//Deathsquad
/proc/equip_deathsquad(mob/living/carbon/human/M, officer)
var/obj/item/device/radio/R = new /obj/item/device/radio/headset/headset_cent/alt(M)
R.set_frequency(CENTCOM_FREQ)
R.freqlock = 1
M.equip_to_slot_or_del(R, slot_ears)
if(officer)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/beret(M), slot_head)
//else
// M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad(M), slot_head)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/deathsquad(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/under/color/green(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_wear_mask)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/toggle/thermal(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/flashbangs(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/c4(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/shield/energy(M), slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/tank/internals/emergency_oxygen(M), slot_s_store)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/loyalpin(M), slot_r_hand)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)//Here you go Deuryn
L.imp_in = M
L.implanted = 1
M.sec_hud_set_implants()
var/obj/item/weapon/card/id/W = new(M)
W.icon_state = "centcom"
W.access = get_all_accesses()//They get full station access.
W.access += get_centcom_access("Death Commando")//Let's add their alloted Centcom access.
W.assignment = "Death Commando"
W.registered_name = M.real_name
W.update_label(W.registered_name, W.assignment)
M.equip_to_slot_or_del(W, slot_wear_id)
//Emergency Response Team
/proc/equip_emergencyresponsesquad(mob/living/carbon/human/M, ertrole, alert)
var/obj/item/weapon/card/id/W = null
var/obj/item/device/radio/R = new /obj/item/device/radio/headset/headset_cent/alt(M)
R.set_frequency(CENTCOM_FREQ)
R.freqlock = 1
M.equip_to_slot_or_del(R, slot_ears)
switch(ertrole)
if("commander")
W = new /obj/item/weapon/card/id/ert(M)
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/ert(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
M.equip_to_slot_or_del(W, slot_wear_id)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/full(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(M), slot_in_backpack)
R.keyslot = new /obj/item/device/encryptionkey/heads/captain
if(alert)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store)
else
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/switchblade(M), slot_l_store)
if("sec")
W = new /obj/item/weapon/card/id/ert/Security(M)
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/ert/sec(M), slot_wear_suit)
M.equip_to_slot_or_del(W, slot_wear_id)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/handcuffs(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/full(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(M), slot_in_backpack)
R.keyslot = new /obj/item/device/encryptionkey/heads/hos
if(alert)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/carbine/loyalpin(M), slot_in_backpack)
else
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(M), slot_in_backpack)
if("med")
W = new /obj/item/weapon/card/id/ert/Medical(M)
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/ert/med(M), slot_wear_suit)
M.equip_to_slot_or_del(W, slot_wear_id)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/medical(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(M), slot_r_hand)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(M), slot_in_backpack)
R.keyslot = new /obj/item/device/encryptionkey/heads/cmo
if(alert)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(M), slot_in_backpack)
else
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat(M), slot_in_backpack)
if("eng")
W = new /obj/item/weapon/card/id/ert/Engineer(M)
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/ert/engi(M), slot_wear_suit)
M.equip_to_slot_or_del(W, slot_wear_id)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson/engine(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/rcd_ammo/large(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(M), slot_in_backpack)
R.keyslot = new /obj/item/device/encryptionkey/heads/ce
if(alert)
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/rcd/combat(M), slot_in_backpack)
else
M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack)
M.equip_to_slot_or_del(new /obj/item/weapon/rcd/loaded(M), slot_in_backpack)
R.recalculateChannels()
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)
L.imp_in = M
L.implanted = 1
M.sec_hud_set_implants()
if (W)
W.registered_name = M.real_name
W.update_label(W.registered_name, W.assignment)
/proc/equip_centcomofficial(mob/living/carbon/human/M)
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes)
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves)
M.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cent(M), slot_ears)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses)
M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt)
M.equip_to_slot_or_del(new /obj/item/weapon/pen(M), slot_l_store)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(M), slot_back)
var/obj/item/device/pda/heads/pda = new(M)
pda.owner = M.real_name
pda.ownjob = "Centcom Official"
pda.update_label()
M.equip_to_slot_or_del(pda, slot_r_store)
M.equip_to_slot_or_del(new /obj/item/weapon/clipboard(M), slot_l_hand)
var/obj/item/weapon/card/id/W = new(M)
W.icon_state = "centcom"
W.access = get_centcom_access("Centcom Official")
W.access += access_weapons
W.assignment = "Centcom Official"
W.registered_name = M.real_name
W.update_label()
M.equip_to_slot_or_del(W, slot_wear_id)
usr << browse(dat, "window=dellog")
+20 -111
View File
@@ -222,7 +222,6 @@
H = pick(candidates)
H.mind.make_Cultist()
candidates.Remove(H)
temp.grant_runeword(H)
return 1
@@ -233,7 +232,7 @@
/datum/admins/proc/makeNukeTeam()
var/datum/game_mode/nuclear/temp = new
var/list/mob/dead/observer/candidates = getCandidates("Do you wish to be considered for a nuke team being sent in?", "operative", temp)
var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for a nuke team being sent in?", "operative", temp)
var/list/mob/dead/observer/chosen = list()
var/mob/dead/observer/theghost = null
@@ -307,7 +306,7 @@
// DEATH SQUADS
/datum/admins/proc/makeDeathsquad()
var/mission = input("Assign a mission to the deathsquad", "Assign Mission", "Leave no witnesses.")
var/list/mob/dead/observer/candidates = getCandidates("Do you wish to be considered for an elite Nanotrasen Strike Team?", "deathsquad", null)
var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for an elite Nanotrasen Strike Team?", "deathsquad", null)
var/squadSpawned = 0
if(candidates.len >= 2) //Minimum 2 to be considered a squad
@@ -327,13 +326,13 @@
//Spawn and equip the commando
var/mob/living/carbon/human/Commando = new(spawnloc)
chosen_candidate.client.prefs.copy_to(Commando)
ready_dna(Commando)
if(numagents == 1) //If Squad Leader
Commando.real_name = "Officer [pick(commando_names)]"
equip_deathsquad(Commando, 1)
Commando.equipOutfit(/datum/outfit/death_commando/officer)
else
Commando.real_name = "Trooper [pick(commando_names)]"
equip_deathsquad(Commando)
Commando.equipOutfit(/datum/outfit/death_commando)
Commando.dna.update_dna_identity()
Commando.key = chosen_candidate.key
Commando.mind.assigned_role = "Death Commando"
for(var/obj/machinery/door/poddoor/ert/door in airlocks)
@@ -413,7 +412,7 @@
/datum/admins/proc/makeOfficial()
var/mission = input("Assign a task for the official", "Assign Task", "Conduct a routine preformance review of [station_name()] and its Captain.")
var/list/mob/dead/observer/candidates = getCandidates("Do you wish to be considered to be a Centcom Official?", "pAI")
var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered to be a Centcom Official?", "pAI")
if(candidates.len)
var/mob/dead/observer/chosen_candidate = pick(candidates)
@@ -421,11 +420,11 @@
//Create the official
var/mob/living/carbon/human/newmob = new (pick(emergencyresponseteamspawn))
chosen_candidate.client.prefs.copy_to(newmob)
ready_dna(newmob)
newmob.real_name = newmob.dna.species.random_name(newmob.gender,1)
newmob.dna.update_dna_identity()
newmob.key = chosen_candidate.key
newmob.mind.assigned_role = "Centcom Official"
equip_centcomofficial(newmob)
newmob.equipOutfit(/datum/outfit/centcom_official)
//Assign antag status and the mission
ticker.mode.traitors += newmob.mind
@@ -466,7 +465,7 @@
return makeOfficial()
var/teamsize = min(7,input("Maximum size of team? (7 max)", "Select Team Size",4) as null|num)
var/mission = input("Assign a mission to the Emergency Response Team", "Assign Mission", "Assist the station.")
var/list/mob/dead/observer/candidates = getCandidates("Do you wish to be considered for a Code [alert] Nanotrasen Emergency Response Team?", "deathsquad", null)
var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for a Code [alert] Nanotrasen Emergency Response Team?", "deathsquad", null)
var/teamSpawned = 0
if(candidates.len > 0)
@@ -491,30 +490,30 @@
var/mob/living/carbon/human/ERTOperative = new(spawnloc)
var/list/lastname = last_names
chosen_candidate.client.prefs.copy_to(ERTOperative)
ready_dna(ERTOperative)
var/ertname = pick(lastname)
switch(numagents)
if(1)
ERTOperative.real_name = "Commander [ertname]"
equip_emergencyresponsesquad(ERTOperative, "commander",redalert)
ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/commander/alert : /datum/outfit/ert/commander)
if(2)
ERTOperative.real_name = "Security Officer [ertname]"
equip_emergencyresponsesquad(ERTOperative, "sec",redalert)
ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/security/alert : /datum/outfit/ert/security)
if(3)
ERTOperative.real_name = "Medical Officer [ertname]"
equip_emergencyresponsesquad(ERTOperative, "med",redalert)
ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/medic/alert : /datum/outfit/ert/medic)
if(4)
ERTOperative.real_name = "Engineer [ertname]"
equip_emergencyresponsesquad(ERTOperative, "eng",redalert)
ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/engineer/alert : /datum/outfit/ert/engineer)
if(5)
ERTOperative.real_name = "Security Officer [ertname]"
equip_emergencyresponsesquad(ERTOperative, "sec",redalert)
ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/security/alert : /datum/outfit/ert/security)
if(6)
ERTOperative.real_name = "Medical Officer [ertname]"
equip_emergencyresponsesquad(ERTOperative, "med",redalert)
ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/medic/alert : /datum/outfit/ert/medic)
if(7)
ERTOperative.real_name = "Engineer [ertname]"
equip_emergencyresponsesquad(ERTOperative, "eng",redalert)
ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/engineer/alert : /datum/outfit/ert/engineer)
ERTOperative.dna.update_dna_identity()
ERTOperative.key = chosen_candidate.key
ERTOperative.mind.assigned_role = "ERT"
@@ -559,50 +558,11 @@
//Abductors
/datum/admins/proc/makeAbductorTeam()
var/list/mob/dead/observer/candidates = getCandidates("Do you wish to be considered for an Abductor Team?", "abductor", null)
if(candidates.len >= 2)
//Oh god why we can't have static functions
var/number = ticker.mode.abductor_teams + 1
var/datum/game_mode/abduction/temp
if(ticker.mode.config_tag == "abduction")
temp = ticker.mode
else
temp = new
var/agent_mind = pick(candidates)
candidates -= agent_mind
var/scientist_mind = pick(candidates)
var/mob/living/carbon/human/agent=makeBody(agent_mind)
var/mob/living/carbon/human/scientist=makeBody(scientist_mind)
agent_mind = agent.mind
scientist_mind = scientist.mind
temp.scientists.len = number
temp.agents.len = number
temp.abductors.len = 2*number
temp.team_objectives.len = number
temp.team_names.len = number
temp.scientists[number] = scientist_mind
temp.agents[number] = agent_mind
temp.abductors |= list(agent_mind,scientist_mind)
temp.make_abductor_team(number,preset_scientist=scientist_mind,preset_agent=agent_mind)
temp.post_setup_team(number)
ticker.mode.abductor_teams++
if(ticker.mode.config_tag != "abduction")
ticker.mode.abductors |= temp.abductors
return 1
else
return
new /datum/round_event/abductor
return 1
/datum/admins/proc/makeRevenant()
var/list/mob/dead/observer/candidates = getCandidates("Do you wish to be considered for becoming a revenant?", "revenant", null)
var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for becoming a revenant?", "revenant", null)
if(candidates.len >= 1)
var/spook_op = pick(candidates)
var/mob/dead/observer/O = spook_op
@@ -644,54 +604,3 @@
candidates.Remove(H)
return 1
return 0
/datum/admins/proc/getCandidates(var/Question, var/jobbanType, var/datum/game_mode/gametypeCheck)
var/list/mob/dead/observer/candidates = list()
var/time_passed = world.time
if (!Question)
Question = "Would you like to be a special role?"
for(var/mob/dead/observer/G in player_list)
if(!G.key || !G.client)
continue
if (gametypeCheck)
if(!gametypeCheck.age_check(G.client))
continue
if (jobbanType)
if(jobban_isbanned(G, jobbanType) || jobban_isbanned(G, "Syndicate"))
continue
spawn(0)
G << 'sound/misc/notice2.ogg' //Alerting them to their consideration
switch(alert(G,Question,"Please answer in 30 seconds!","Yes","No"))
if("Yes")
G << "<span class='notice'>Choice registered: Yes.</span>"
if((world.time-time_passed)>300)//If more than 30 game seconds passed.
G << "<span class='danger'>Sorry, you were too late for the consideration!</span>"
G << 'sound/machines/buzz-sigh.ogg'
return
candidates += G
if("No")
G << "<span class='danger'>Choice registered: No.</span>"
return
else
return
sleep(300)
//Check all our candidates, to make sure they didn't log off during the 30 second wait period.
for(var/mob/dead/observer/G in candidates)
if(!G.key || !G.client)
candidates.Remove(G)
return candidates
/datum/admins/proc/makeBody(mob/dead/observer/G_found) // Uses stripped down and bastardized code from respawn character
if(!G_found || !G_found.key) return
//First we spawn a dude.
var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned.
G_found.client.prefs.copy_to(new_character)
ready_dna(new_character)
new_character.key = G_found.key
return new_character
+1 -1
View File
@@ -52,7 +52,7 @@ var/sound/admin_sound
/client/proc/stop_sounds()
set category = "Debug"
set name = "Stop Sounds"
set name = "Stop All Playing Sounds"
if(!src.holder) return
log_admin("[key_name(src)] stopped all currently playing sounds.")
+183 -12
View File
@@ -300,15 +300,13 @@ Traitors and the like can also be revived with the previous role mostly intact.
new_character.real_name = record_found.fields["name"]
new_character.gender = record_found.fields["sex"]
new_character.age = record_found.fields["age"]
new_character.blood_type = record_found.fields["blood_type"]
new_character.hardset_dna(record_found.fields["identity"], record_found.fields["enzymes"], record_found.fields["name"], record_found.fields["blood_type"], record_found.fields["species"], record_found.fields["features"])
else
new_character.gender = pick(MALE,FEMALE)
var/datum/preferences/A = new()
A.real_name = G_found.real_name
A.copy_to(new_character)
A.real_name = G_found.real_name
new_character.dna.update_dna_identity()
if(!new_character.real_name)
new_character.real_name = new_character.dna.species.random_name(new_character.gender,1)
new_character.name = new_character.real_name
if(G_found.mind && !G_found.mind.active)
@@ -316,13 +314,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
new_character.mind.special_verbs = list()
else
new_character.mind_initialize()
if(!new_character.mind.assigned_role) new_character.mind.assigned_role = "Assistant"//If they somehow got a null assigned role.
//DNA
if(record_found)//Pull up their name from database records if they did have a mind.
hardset_dna(new_character, record_found.fields["identity"], record_found.fields["enzymes"], record_found.fields["name"], record_found.fields["blood_type"], record_found.fields["species"], record_found.fields["features"])
else//If they have no records, we just do a random DNA for them, based on their random appearance/savefile.
ready_dna(new_character)
if(!new_character.mind.assigned_role)
new_character.mind.assigned_role = "Assistant"//If they somehow got a null assigned role.
new_character.key = G_found.key
@@ -758,3 +751,181 @@ Traitors and the like can also be revived with the previous role mostly intact.
log_admin("[key_name(usr)] removed latejoin spawnpoints.")
message_admins("[key_name_admin(usr)] removed latejoin spawnpoints.")
var/list/datum/outfit/custom_outfits = list() //Admin created outfits
/client/proc/create_outfits()
set category = "Debug"
set name = "Create Custom Outfit"
if(!check_rights(R_DEBUG)) return
holder.create_outfit()
/datum/admins/proc/create_outfit()
var/list/uniforms = typesof(/obj/item/clothing/under)
var/list/suits = typesof(/obj/item/clothing/suit)
var/list/gloves = typesof(/obj/item/clothing/gloves)
var/list/shoes = typesof(/obj/item/clothing/shoes)
var/list/headwear = typesof(/obj/item/clothing/head)
var/list/glasses = typesof(/obj/item/clothing/glasses)
var/list/masks = typesof(/obj/item/clothing/mask)
var/list/ids = typesof(/obj/item/weapon/card/id)
var/uniform_select = "<select name=\"outfit_uniform\"><option value=\"\">None</option>"
for(var/path in uniforms)
uniform_select += "<option value=\"[path]\">[path]</option>"
uniform_select += "</select>"
var/suit_select = "<select name=\"outfit_suit\"><option value=\"\">None</option>"
for(var/path in suits)
suit_select += "<option value=\"[path]\">[path]</option>"
suit_select += "</select>"
var/gloves_select = "<select name=\"outfit_gloves\"><option value=\"\">None</option>"
for(var/path in gloves)
gloves_select += "<option value=\"[path]\">[path]</option>"
gloves_select += "</select>"
var/shoes_select = "<select name=\"outfit_shoes\"><option value=\"\">None</option>"
for(var/path in shoes)
shoes_select += "<option value=\"[path]\">[path]</option>"
shoes_select += "</select>"
var/head_select = "<select name=\"outfit_head\"><option value=\"\">None</option>"
for(var/path in headwear)
head_select += "<option value=\"[path]\">[path]</option>"
head_select += "</select>"
var/glasses_select = "<select name=\"outfit_glasses\"><option value=\"\">None</option>"
for(var/path in glasses)
glasses_select += "<option value=\"[path]\">[path]</option>"
glasses_select += "</select>"
var/mask_select = "<select name=\"outfit_mask\"><option value=\"\">None</option>"
for(var/path in masks)
mask_select += "<option value=\"[path]\">[path]</option>"
mask_select += "</select>"
var/id_select = "<select name=\"outfit_id\"><option value=\"\">None</option>"
for(var/path in ids)
id_select += "<option value=\"[path]\">[path]</option>"
id_select += "</select>"
var/dat = {"
<html><head><title>Create Outfit</title></head><body>
<form name="outfit" action="byond://?src=\ref[src]" method="get">
<input type="hidden" name="src" value="\ref[src]">
<input type="hidden" name="create_outfit" value="1">
<table>
<tr>
<th>Name:</th>
<td>
<input type="text" name="outfit_name" value="Custom Outfit">
</td>
</tr>
<tr>
<th>Uniform:</th>
<td>
[uniform_select]
</td>
</tr>
<tr>
<th>Suit:</th>
<td>
[suit_select]
</td>
</tr>
<tr>
<th>Back:</th>
<td>
<input type="text" name="outfit_back" value="">
</td>
</tr>
<tr>
<th>Belt:</th>
<td>
<input type="text" name="outfit_belt" value="">
</td>
</tr>
<tr>
<th>Gloves:</th>
<td>
[gloves_select]
</td>
</tr>
<tr>
<th>Shoes:</th>
<td>
[shoes_select]
</td>
</tr>
<tr>
<th>Head:</th>
<td>
[head_select]
</td>
</tr>
<tr>
<th>Mask:</th>
<td>
[mask_select]
</td>
</tr>
<tr>
<th>Ears:</th>
<td>
<input type="text" name="outfit_ears" value="">
</td>
</tr>
<tr>
<th>Glasses:</th>
<td>
[glasses_select]
</td>
</tr>
<tr>
<th>ID:</th>
<td>
[id_select]
</td>
</tr>
<tr>
<th>Left Pocket:</th>
<td>
<input type="text" name="outfit_l_pocket" value="">
</td>
</tr>
<tr>
<th>Right Pocket:</th>
<td>
<input type="text" name="outfit_r_pocket" value="">
</td>
</tr>
<tr>
<th>Suit Store:</th>
<td>
<input type="text" name="outfit_s_store" value="">
</td>
</tr>
<tr>
<th>Right Hand:</th>
<td>
<input type="text" name="outfit_r_hand" value="">
</td>
</tr>
<tr>
<th>Left Hand:</th>
<td>
<input type="text" name="outfit_l_hand" value="">
</td>
</tr>
</table>
<br>
<input type="submit" value="Save">
</form></body></html>
"}
usr << browse(dat, "window=dressup;size=550x600")
+1 -7
View File
@@ -4,7 +4,7 @@
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = ""
flags = CONDUCT
w_class = 2.0
w_class = 2
materials = list(MAT_METAL=100)
throwforce = 2
throw_speed = 3
@@ -105,12 +105,6 @@
user << "<span class='notice'>\The [src] can now be attached!</span>"
return
..()
return
/obj/item/device/assembly/process()
SSobj.processing.Remove(src)
return
/obj/item/device/assembly/examine(mob/user)
+1 -1
View File
@@ -3,7 +3,7 @@
icon = 'icons/obj/tank.dmi'
item_state = "assembly"
throwforce = 5
w_class = 3.0
w_class = 3
throw_speed = 2
throw_range = 4
flags = CONDUCT
+198 -197
View File
@@ -1,197 +1,198 @@
/obj/item/device/assembly/flash
name = "flash"
desc = "A powerful and versatile flashbulb device, with applications ranging from disorienting attackers to acting as visual receptors in robot production."
icon_state = "flash"
item_state = "flashtool"
throwforce = 0
w_class = 1
origin_tech = "magnets=2;combat=1"
crit_fail = 0 //Is the flash burnt out?
var/times_used = 0 //Number of times it's been used.
var/last_used = 0 //last world.time it was used.
/obj/item/device/assembly/flash/update_icon(var/flash = 0)
overlays.Cut()
attached_overlays = list()
if(crit_fail)
overlays += "flashburnt"
attached_overlays += "flashburnt"
if(flash)
overlays += "flash-f"
attached_overlays += "flash-f"
spawn(5)
update_icon()
if(holder)
holder.update_icon()
/obj/item/device/assembly/flash/proc/clown_check(mob/living/carbon/human/user)
if(user.disabilities & CLUMSY && prob(50))
flash_carbon(user, user, 15, 0)
return 0
return 1
/obj/item/device/assembly/flash/activate()
if(!try_use_flash())
return 0
var/turf/T = get_turf(src)
T.visible_message("<span class='disarm'>[src] emits a blinding light!</span>")
for(var/mob/living/carbon/M in viewers(3, null))
flash_carbon(M, null, 2, 0)
/obj/item/device/assembly/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something.
crit_fail = 1
update_icon()
var/turf/T = get_turf(src)
T.visible_message("The [src.name] burns out!")
/obj/item/device/assembly/flash/proc/flash_recharge(interval=10)
if(prob(times_used * 3)) //The more often it's used in a short span of time the more likely it will burn out
burn_out()
return 0
var/deciseconds_passed = world.time - last_used
for(var/seconds = deciseconds_passed/10, seconds>=interval, seconds-=interval) //get 1 charge every interval
times_used--
last_used = world.time
times_used = max(0, times_used) //sanity
return 1
/obj/item/device/assembly/flash/proc/try_use_flash(mob/user = null)
flash_recharge(10)
if(crit_fail)
return 0
playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1)
update_icon(1)
times_used++
if(user && !clown_check(user))
return 0
return 1
/obj/item/device/assembly/flash/proc/flash_carbon(mob/living/carbon/M, mob/user = null, power = 5, targeted = 1)
add_logs(user, M, "flashed", src)
if(user && targeted)
if(M.weakeyes)
M.Weaken(3) //quick weaken bypasses eye protection but has no eye flash
if(M.flash_eyes(1, 1))
M.confused += power
terrible_conversion_proc(M, user)
M.Stun(1)
visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
user << "<span class='danger'>You blind [M] with the flash!</span>"
M << "<span class='userdanger'>[user] blinds you with the flash!</span>"
if(M.weakeyes)
M.Stun(2)
M.visible_message("<span class='disarm'>[M] gasps and shields their eyes!</span>", "<span class='userdanger'>You gasp and shields your eyes!</span>")
else
visible_message("<span class='disarm'>[user] fails to blind [M] with the flash!</span>")
user << "<span class='warning'>You fail to blind [M] with the flash!</span>"
M << "<span class='danger'>[user] fails to blind you with the flash!</span>"
else
if(M.flash_eyes())
M.confused += power
/obj/item/device/assembly/flash/attack(mob/living/M, mob/user)
if(!try_use_flash(user))
return 0
if(iscarbon(M))
flash_carbon(M, user, 5, 1)
return 1
else if(issilicon(M))
add_logs(user, M, "flashed", src)
update_icon(1)
M.Weaken(rand(5,10))
user.visible_message("<span class='disarm'>[user] overloads [M]'s sensors with the flash!</span>", "<span class='danger'>You overload [M]'s sensors with the flash!</span>")
return 1
user.visible_message("<span class='disarm'>[user] fails to blind [M] with the flash!</span>", "<span class='warning'>You fail to blind [M] with the flash!</span>")
/obj/item/device/assembly/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
if(holder)
return 0
if(!try_use_flash(user))
return 0
user.visible_message("<span class='disarm'>[user]'s flash emits a blinding light!</span>", "<span class='danger'>Your flash emits a blinding light!</span>")
for(var/mob/living/carbon/M in oviewers(3, null))
flash_carbon(M, user, 1, 0)
/obj/item/device/assembly/flash/emp_act(severity)
if(!try_use_flash())
return 0
for(var/mob/living/carbon/M in viewers(3, null))
flash_carbon(M, null, 10, 0)
burn_out()
..()
/obj/item/device/assembly/flash/proc/terrible_conversion_proc(mob/M, mob/user)
if(ishuman(M) && ishuman(user) && M.stat != DEAD)
if(user.mind && (user.mind in ticker.mode.head_revolutionaries))
if(M.client)
if(M.stat == CONSCIOUS)
M.mind_initialize() //give them a mind datum if they don't have one.
var/resisted
if(!isloyal(M))
if(user.mind in ticker.mode.head_revolutionaries)
if(ticker.mode.add_revolutionary(M.mind))
times_used -- //Flashes less likely to burn out for headrevs when used for conversion
else
resisted = 1
else
resisted = 1
if(resisted)
user << "<span class='warning'>This mind seems resistant to the flash!</span>"
else
user << "<span class='warning'>They must be conscious before you can convert them!</span>"
else
user << "<span class='warning'>This mind is so vacant that it is not susceptible to influence!</span>"
/obj/item/device/assembly/flash/cyborg
origin_tech = null
/obj/item/device/assembly/flash/cyborg/attack(mob/living/M, mob/user)
..()
cyborg_flash_animation(user)
/obj/item/device/assembly/flash/cyborg/attack_self(mob/user)
..()
cyborg_flash_animation(user)
/obj/item/device/assembly/flash/cyborg/attackby(obj/item/weapon/W, mob/user, params)
return
/obj/item/device/assembly/flash/cyborg/proc/cyborg_flash_animation(mob/living/user)
var/atom/movable/overlay/animation = new(user.loc)
animation.layer = user.layer + 1
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
animation.master = user
flick("blspell", animation)
sleep(5)
qdel(animation)
/obj/item/device/assembly/flash/memorizer
name = "memorizer"
desc = "If you see this, you're not likely to remember it any time soon."
icon = 'icons/obj/device.dmi'
icon_state = "memorizer"
item_state = "nullrod"
/obj/item/device/assembly/flash/handheld //this is now the regular pocket flashes
/obj/item/device/assembly/flash
name = "flash"
desc = "A powerful and versatile flashbulb device, with applications ranging from disorienting attackers to acting as visual receptors in robot production."
icon_state = "flash"
item_state = "flashtool"
throwforce = 0
w_class = 1
materials = list(MAT_METAL = 300, MAT_GLASS = 300)
origin_tech = "magnets=2;combat=1"
crit_fail = 0 //Is the flash burnt out?
var/times_used = 0 //Number of times it's been used.
var/last_used = 0 //last world.time it was used.
/obj/item/device/assembly/flash/update_icon(var/flash = 0)
overlays.Cut()
attached_overlays = list()
if(crit_fail)
overlays += "flashburnt"
attached_overlays += "flashburnt"
if(flash)
overlays += "flash-f"
attached_overlays += "flash-f"
spawn(5)
update_icon()
if(holder)
holder.update_icon()
/obj/item/device/assembly/flash/proc/clown_check(mob/living/carbon/human/user)
if(user.disabilities & CLUMSY && prob(50))
flash_carbon(user, user, 15, 0)
return 0
return 1
/obj/item/device/assembly/flash/activate()
if(!try_use_flash())
return 0
var/turf/T = get_turf(src)
T.visible_message("<span class='disarm'>[src] emits a blinding light!</span>")
for(var/mob/living/carbon/M in viewers(3, null))
flash_carbon(M, null, 5, 0)
/obj/item/device/assembly/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something.
crit_fail = 1
update_icon()
var/turf/T = get_turf(src)
T.visible_message("The [src.name] burns out!")
/obj/item/device/assembly/flash/proc/flash_recharge(interval=10)
if(prob(times_used * 3)) //The more often it's used in a short span of time the more likely it will burn out
burn_out()
return 0
var/deciseconds_passed = world.time - last_used
for(var/seconds = deciseconds_passed/10, seconds>=interval, seconds-=interval) //get 1 charge every interval
times_used--
last_used = world.time
times_used = max(0, times_used) //sanity
return 1
/obj/item/device/assembly/flash/proc/try_use_flash(mob/user = null)
flash_recharge(10)
if(crit_fail)
return 0
playsound(src.loc, 'sound/weapons/flash.ogg', 100, 1)
update_icon(1)
times_used++
if(user && !clown_check(user))
return 0
return 1
/obj/item/device/assembly/flash/proc/flash_carbon(mob/living/carbon/M, mob/user = null, power = 15, targeted = 1)
add_logs(user, M, "flashed", src)
if(user && targeted)
if(M.weakeyes)
M.Weaken(3) //quick weaken bypasses eye protection but has no eye flash
if(M.flash_eyes(1, 1))
M.confused += power
terrible_conversion_proc(M, user)
M.Stun(1)
visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
user << "<span class='danger'>You blind [M] with the flash!</span>"
M << "<span class='userdanger'>[user] blinds you with the flash!</span>"
if(M.weakeyes)
M.Stun(2)
M.visible_message("<span class='disarm'>[M] gasps and shields their eyes!</span>", "<span class='userdanger'>You gasp and shields your eyes!</span>")
else
visible_message("<span class='disarm'>[user] fails to blind [M] with the flash!</span>")
user << "<span class='warning'>You fail to blind [M] with the flash!</span>"
M << "<span class='danger'>[user] fails to blind you with the flash!</span>"
else
if(M.flash_eyes())
M.confused += power
/obj/item/device/assembly/flash/attack(mob/living/M, mob/user)
if(!try_use_flash(user))
return 0
if(iscarbon(M))
flash_carbon(M, user, 5, 1)
return 1
else if(issilicon(M))
add_logs(user, M, "flashed", src)
update_icon(1)
M.Weaken(rand(5,10))
user.visible_message("<span class='disarm'>[user] overloads [M]'s sensors with the flash!</span>", "<span class='danger'>You overload [M]'s sensors with the flash!</span>")
return 1
user.visible_message("<span class='disarm'>[user] fails to blind [M] with the flash!</span>", "<span class='warning'>You fail to blind [M] with the flash!</span>")
/obj/item/device/assembly/flash/attack_self(mob/living/carbon/user, flag = 0, emp = 0)
if(holder)
return 0
if(!try_use_flash(user))
return 0
user.visible_message("<span class='disarm'>[user]'s flash emits a blinding light!</span>", "<span class='danger'>Your flash emits a blinding light!</span>")
for(var/mob/living/carbon/M in oviewers(3, null))
flash_carbon(M, user, 1, 0)
/obj/item/device/assembly/flash/emp_act(severity)
if(!try_use_flash())
return 0
for(var/mob/living/carbon/M in viewers(3, null))
flash_carbon(M, null, 10, 0)
burn_out()
..()
/obj/item/device/assembly/flash/proc/terrible_conversion_proc(mob/M, mob/user)
if(ishuman(M) && ishuman(user) && M.stat != DEAD)
if(user.mind && (user.mind in ticker.mode.head_revolutionaries))
if(M.client)
if(M.stat == CONSCIOUS)
M.mind_initialize() //give them a mind datum if they don't have one.
var/resisted
if(!isloyal(M))
if(user.mind in ticker.mode.head_revolutionaries)
if(ticker.mode.add_revolutionary(M.mind))
times_used -- //Flashes less likely to burn out for headrevs when used for conversion
else
resisted = 1
else
resisted = 1
if(resisted)
user << "<span class='warning'>This mind seems resistant to the flash!</span>"
else
user << "<span class='warning'>They must be conscious before you can convert them!</span>"
else
user << "<span class='warning'>This mind is so vacant that it is not susceptible to influence!</span>"
/obj/item/device/assembly/flash/cyborg
origin_tech = null
/obj/item/device/assembly/flash/cyborg/attack(mob/living/M, mob/user)
..()
cyborg_flash_animation(user)
/obj/item/device/assembly/flash/cyborg/attack_self(mob/user)
..()
cyborg_flash_animation(user)
/obj/item/device/assembly/flash/cyborg/attackby(obj/item/weapon/W, mob/user, params)
return
/obj/item/device/assembly/flash/cyborg/proc/cyborg_flash_animation(mob/living/user)
var/atom/movable/overlay/animation = new(user.loc)
animation.layer = user.layer + 1
animation.icon_state = "blank"
animation.icon = 'icons/mob/mob.dmi'
animation.master = user
flick("blspell", animation)
sleep(5)
qdel(animation)
/obj/item/device/assembly/flash/memorizer
name = "memorizer"
desc = "If you see this, you're not likely to remember it any time soon."
icon = 'icons/obj/device.dmi'
icon_state = "memorizer"
item_state = "nullrod"
/obj/item/device/assembly/flash/handheld //this is now the regular pocket flashes
+1 -1
View File
@@ -5,7 +5,7 @@
item_state = "assembly"
flags = CONDUCT
throwforce = 5
w_class = 2.0
w_class = 2
throw_speed = 2
throw_range = 7
+2 -2
View File
@@ -5,7 +5,7 @@
materials = list(MAT_METAL=500, MAT_GLASS=50)
origin_tech = "magnets=1"
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread
heat = 1000
/obj/item/device/assembly/igniter/New()
..()
@@ -29,4 +29,4 @@
/obj/item/device/assembly/igniter/attack_self(mob/user)
activate()
add_fingerprint(user)
return
return
+29 -8
View File
@@ -1,6 +1,6 @@
/obj/item/device/assembly/infra
name = "infrared emitter"
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted.\n<span class='notice'>Alt-click to rotate it clockwise.</span>"
icon_state = "infrared"
materials = list(MAT_METAL=1000, MAT_GLASS=500)
origin_tech = "magnets=2"
@@ -10,6 +10,16 @@
var/obj/effect/beam/i_beam/first = null
var/obj/effect/beam/i_beam/last = null
/obj/item/device/assembly/infra/New()
..()
SSobj.processing |= src
/obj/item/device/assembly/infra/Destroy()
if(first)
qdel(first)
return ..()
/obj/item/device/assembly/infra/describe()
return "The infrared trigger is [on?"on":"off"]."
@@ -25,7 +35,8 @@
SSobj.processing |= src
else
on = 0
if(first) qdel(first)
if(first)
qdel(first)
SSobj.processing.Remove(src)
update_icon()
return secured
@@ -45,7 +56,7 @@
if(!on)
if(first)
qdel(first)
return
return
if(!secured)
return
if(first && last)
@@ -96,7 +107,7 @@
/obj/item/device/assembly/infra/interact(mob/user)//TODO: change this this to the wire control panel
if(is_secured(user))
user.set_machine(src)
var/dat = text("<TT><B>Infrared Laser</B>\n<B>Status</B>: []<BR>\n<B>Visibility</B>: []<BR>\n</TT>", (on ? text("<A href='?src=\ref[];state=0'>On</A>", src) : text("<A href='?src=\ref[];state=1'>Off</A>", src)), (src.visible ? text("<A href='?src=\ref[];visible=0'>Visible</A>", src) : text("<A href='?src=\ref[];visible=1'>Invisible</A>", src)))
var/dat = "<TT><B>Infrared Laser</B>\n<B>Status</B>: [on ? "<A href='?src=\ref[src];state=0'>On</A>" : "<A href='?src=\ref[src];state=1'>Off</A>"]<BR>\n<B>Visibility</B>: [visible ? "<A href='?src=\ref[src];visible=0'>Visible</A>" : "<A href='?src=\ref[src];visible=1'>Invisible</A>"]<BR>\n</TT>"
dat += "<BR><BR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
dat += "<BR><BR><A href='?src=\ref[src];close=1'>Close</A>"
user << browse(dat, "window=infra")
@@ -105,7 +116,7 @@
/obj/item/device/assembly/infra/Topic(href, href_list)
..()
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
if(usr.incapacitated() || !in_range(loc, usr))
usr << browse(null, "window=infra")
onclose(usr, "infra")
return
@@ -127,12 +138,22 @@
set category = "Object"
set src in usr
if(usr.stat || !usr.canmove || usr.restrained())
if(usr.incapacitated())
return
dir = turn(dir, 90)
return
/obj/item/device/assembly/infra/AltClick(mob/user)
..()
if(!user.canUseTopic(user))
user << "<span class='warning'>You can't do that right now!</span>"
return
if(!in_range(src, user))
return
else
rotate()
/***************************IBeam*********************************/
@@ -145,9 +166,9 @@
var/obj/effect/beam/i_beam/previous = null
var/obj/item/device/assembly/infra/master = null
var/limit = null
var/visible = 0.0
var/visible = 0
var/left = null
anchored = 1.0
anchored = 1
/obj/effect/beam/i_beam/proc/hit()
+12 -10
View File
@@ -15,6 +15,11 @@
/obj/item/device/assembly/prox_sensor/proc/sense()
/obj/item/device/assembly/prox_sensor/New()
..()
SSobj.processing |= src
/obj/item/device/assembly/prox_sensor/describe()
if(timing)
return "<span class='notice'>The proximity sensor is arming.</span>"
@@ -24,7 +29,7 @@
if(!..()) return 0//Cooldown check
timing = !timing
update_icon()
return 0
return 1
/obj/item/device/assembly/prox_sensor/toggle_secure()
@@ -55,13 +60,12 @@
/obj/item/device/assembly/prox_sensor/process()
if(timing && (time >= 0))
if(timing)
time--
if(timing && time <= 0)
timing = 0
toggle_scan()
time = 10
return
if(time <= 0)
timing = 0
toggle_scan()
time = initial(time)
/obj/item/device/assembly/prox_sensor/dropped()
@@ -113,7 +117,7 @@
/obj/item/device/assembly/prox_sensor/Topic(href, href_list)
..()
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
if(usr.incapacitated() || !in_range(loc, usr))
usr << browse(null, "window=prox")
onclose(usr, "prox")
return
@@ -137,5 +141,3 @@
if(usr)
attack_self(usr)
return
+1 -1
View File
@@ -5,7 +5,7 @@
icon_state = "shock_kit"
var/obj/item/clothing/head/helmet/part1 = null
var/obj/item/device/electropack/part2 = null
w_class = 5.0
w_class = 5
flags = CONDUCT
/obj/item/assembly/shock_kit/Destroy()
+12 -12
View File
@@ -10,6 +10,10 @@
var/time = 5
/obj/item/device/assembly/timer/New()
..()
SSobj.processing |= src
/obj/item/device/assembly/timer/describe()
if(timing)
return "The timer is counting down from [time]!"
@@ -20,7 +24,7 @@
if(!..()) return 0//Cooldown check
timing = !timing
update_icon()
return 0
return 1
/obj/item/device/assembly/timer/toggle_secure()
@@ -42,17 +46,16 @@
cooldown = 2
spawn(10)
process_cooldown()
return
update_icon()
/obj/item/device/assembly/timer/process()
if(timing && (time > 0))
if(timing)
time--
if(timing && time <= 0)
timing = 0
timer_end()
time = initial(time)
return
if(time <= 0)
timing = 0
timer_end()
time = initial(time)
/obj/item/device/assembly/timer/update_icon()
@@ -63,7 +66,6 @@
attached_overlays += "timer_timing"
if(holder)
holder.update_icon()
return
/obj/item/device/assembly/timer/interact(mob/user)//TODO: Have this use the wires
@@ -76,12 +78,11 @@
var/datum/browser/popup = new(user, "timer", name)
popup.set_content(dat)
popup.open()
return
/obj/item/device/assembly/timer/Topic(href, href_list)
..()
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
if(usr.incapacitated() || !in_range(loc, usr))
usr << browse(null, "window=timer")
onclose(usr, "timer")
return
@@ -107,4 +108,3 @@
if(usr)
attack_self(usr)
return
+14
View File
@@ -1,3 +1,5 @@
var/obj/machinery/gateway/centerstation/the_gateway = null
/obj/machinery/gateway
name = "gateway"
desc = "A mysterious gateway built by unknown hands, it allows for faster than light travel to far-flung locations."
@@ -9,6 +11,18 @@
var/active = 0
/obj/machinery/gateway/centerstation/New()
..()
if(!the_gateway)
the_gateway = src
/obj/machinery/gateway/centerstation/Destroy()
if(the_gateway == src)
the_gateway = null
..()
/obj/machinery/gateway/initialize()
update_icon()
if(dir == 2)
@@ -181,7 +181,7 @@ var/sc_safecode5 = "[rand(0,9)]"
L.gib()
else if(istype(A,/obj/))
var/obj/O = A
O.ex_act(1.0)
O.ex_act(1)
if(O) qdel(O)
else if(isturf(A))
var/turf/T = A
@@ -80,20 +80,17 @@
user.dna.add_mutation(LASEREYES)
user.dna.add_mutation(COLDRES)
user.dna.add_mutation(XRAY)
hardset_dna(user, null, null, null, null, /datum/species/shadow)
user.regenerate_icons()
user.set_species(/datum/species/shadow)
if("Wealth")
user << "<B>Your wish is granted, but at a terrible cost...</B>"
user << "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart."
new /obj/structure/closet/syndicate/resources/everything(loc)
hardset_dna(user, null, null, null, null, /datum/species/shadow)
user.regenerate_icons()
user.set_species(/datum/species/shadow)
if("Immortality")
user << "<B>Your wish is granted, but at a terrible cost...</B>"
user << "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart."
user.verbs += /mob/living/carbon/proc/immortality
hardset_dna(user, null, null, null, null, /datum/species/shadow)
user.regenerate_icons()
user.set_species(/datum/species/shadow)
if("To Kill")
user << "<B>Your wish is granted, but at a terrible cost...</B>"
user << "The Wish Granter punishes you for your wickedness, claiming your soul and warping your body to match the darkness in your heart."
@@ -107,8 +104,7 @@
for(var/datum/objective/OBJ in user.mind.objectives)
user << "<B>Objective #[obj_count]</B>: [OBJ.explanation_text]"
obj_count++
hardset_dna(user, null, null, null, null, /datum/species/shadow)
user.regenerate_icons()
user.set_species(/datum/species/shadow)
if("Peace")
user << "<B>Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence.</B>"
user << "You feel as if you just narrowly avoided a terrible fate..."
+1
View File
@@ -1,3 +1,4 @@
/client
////////////////
//ADMIN THINGS//
+9 -3
View File
@@ -175,13 +175,19 @@ var/next_external_rsc = 0
src.changes()
else
winset(src, "rpane.changelogb", "background-color=#eaeaea;font-style=bold")
if (ckey in clientmessages)
for (var/message in clientmessages[ckey])
src << message
clientmessages.Remove(ckey)
if (config && config.autoconvert_notes)
convert_notes_sql(ckey)
//////////////
//DISCONNECT//
//////////////
//////////////
//DISCONNECT//
//////////////
/client/Del()
if(holder)
adminGreet(1)
+9
View File
@@ -0,0 +1,9 @@
var/list/clientmessages = list()
proc/addclientmessage(var/ckey, var/message)
ckey = ckey(ckey)
if (!ckey || !message)
return
if (!(ckey in clientmessages))
clientmessages[ckey] = list()
clientmessages[ckey] += message
File diff suppressed because it is too large Load Diff
@@ -156,6 +156,13 @@
admin_sound.status ^= SOUND_PAUSED
feedback_add_details("admin_verb","TMidi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/stop_client_sounds()
set name = "Stop Sounds"
set category = "Preferences"
set desc = "Kills all currently playing sounds, use if admin taste in midis a shite"
src << sound(null)
feedback_add_details("admin_verb","SAPS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/verb/listen_ooc()
set name = "Show/Hide OOC"
set category = "Preferences"
+10 -3
View File
@@ -21,7 +21,7 @@
//Ears: currently only used for headsets and earmuffs
/obj/item/clothing/ears
name = "ears"
w_class = 1.0
w_class = 1
throwforce = 0
slot_flags = SLOT_EARS
burn_state = -1 //Not Burnable
@@ -40,7 +40,7 @@
/obj/item/clothing/glasses
name = "glasses"
icon = 'icons/obj/clothing/glasses.dmi'
w_class = 2.0
w_class = 2
flags_cover = GLASSESCOVERSEYES
slot_flags = SLOT_EYES
var/vision_flags = 0
@@ -66,7 +66,7 @@ BLIND // can't see anything
/obj/item/clothing/gloves
name = "gloves"
gender = PLURAL //Carn: for grammarically correct text-parsing
w_class = 2.0
w_class = 2
icon = 'icons/obj/clothing/gloves.dmi'
siemens_coefficient = 0.50
body_parts_covered = HANDS
@@ -149,6 +149,13 @@ BLIND // can't see anything
permeability_coefficient = 0.50
slowdown = SHOES_SLOWDOWN
var/blood_state = BLOOD_STATE_NOT_BLOODY
var/list/bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
/obj/item/clothing/shoes/clean_blood()
..()
bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
blood_state = BLOOD_STATE_NOT_BLOODY
/obj/item/proc/negates_gravity()
return 0
+11 -4
View File
@@ -1,3 +1,7 @@
/obj/item/clothing/glasses
name = "glasses"
materials = list(MAT_GLASS = 250)
/obj/item/clothing/glasses/meson
name = "Optical Meson Scanner"
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition."
@@ -25,6 +29,7 @@
throw_speed = 4
attack_verb = list("sliced")
hitsound = 'sound/weapons/bladeslice.ogg'
sharpness = IS_SHARP
/obj/item/clothing/glasses/science
name = "Science Goggles"
@@ -99,6 +104,7 @@
throw_speed = 4
attack_verb = list("sliced")
hitsound = 'sound/weapons/bladeslice.ogg'
sharpness = IS_SHARP
/obj/item/clothing/glasses/sunglasses/garb/supergarb
desc = "Believe in us humans."
@@ -118,6 +124,7 @@
throw_speed = 4
attack_verb = list("sliced")
hitsound = 'sound/weapons/bladeslice.ogg'
sharpness = IS_SHARP
/obj/item/clothing/glasses/sunglasses/gar/supergar
desc = "We evolve past the person we were a minute before. Little by little we advance with each turn. That's how a drill works!"
@@ -243,7 +250,7 @@
name = "sunglasses"
icon_state = "sun"
item_state = "sunglasses"
if("Medical HUD")
if("Medical HUD")
name = "Health Scanner HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status."
icon_state = "healthhud"
@@ -253,11 +260,11 @@
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition."
icon_state = "meson"
item_state = "meson"
if("Science Goggles")
if("Science Goggles")
name = "Science Goggles"
desc = "A pair of snazzy goggles used to protect against chemical spills."
icon_state = "purple"
item_state = "glasses"
item_state = "glasses"
if("Glasses")
name = "Prescription Glasses"
desc = "Made by Nerd. Co."
@@ -283,4 +290,4 @@
name = "gar glasses"
icon_state = "gar"
item_state = "gar"
+1
View File
@@ -85,6 +85,7 @@
throw_speed = 4
attack_verb = list("sliced")
hitsound = 'sound/weapons/bladeslice.ogg'
sharpness = IS_SHARP
/obj/item/clothing/glasses/hud/security/sunglasses/gars/supergars
name = "giga HUD gar glasses"
+3 -3
View File
@@ -208,11 +208,11 @@
icon = 'icons/obj/janitor.dmi'
icon_state = "cone"
item_state = "cone"
force = 1.0
throwforce = 3.0
force = 1
throwforce = 3
throw_speed = 2
throw_range = 5
w_class = 2.0
w_class = 2
attack_verb = list("warned", "cautioned", "smashed")
burn_state = -1 //Won't burn in fires
+1 -1
View File
@@ -47,7 +47,7 @@
desc = "It's tasty looking!"
icon_state = "cake0"
flags_cover = HEADCOVERSEYES
var/onfire = 0.0
var/onfire = 0
var/status = 0
var/fire_resist = T0C+1300 //this is the max temp it can stand before you start to cook. although it might not burn away, you take damage
var/processing = 0 //I dont think this is used anywhere.
+1 -1
View File
@@ -4,7 +4,7 @@
icon_state = "gas_alt"
flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
w_class = 3.0
w_class = 3
item_state = "gas_alt"
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
+1 -1
View File
@@ -9,7 +9,7 @@
ignore_maskadjust = 0
flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS
flags_inv = HIDEFACE
w_class = 2.0
w_class = 2
visor_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS
visor_flags_inv = HIDEFACE
flags_cover = MASKCOVERSMOUTH
+172
View File
@@ -0,0 +1,172 @@
/datum/outfit/ert
name = "ERT Common"
uniform = /obj/item/clothing/under/rank/centcom_officer
shoes = /obj/item/clothing/shoes/combat/swat
gloves = /obj/item/clothing/gloves/combat
ears = /obj/item/device/radio/headset/headset_cent/alt
/datum/outfit/ert/post_equip(mob/living/carbon/human/H)
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
L.imp_in = H
L.implanted = 1
H.sec_hud_set_implants()
var/obj/item/device/radio/R = H.ears
R.set_frequency(CENTCOM_FREQ)
R.freqlock = 1
var/obj/item/weapon/card/id/W = H.wear_id
W.registered_name = H.real_name
W.update_label(W.registered_name, W.assignment)
/datum/outfit/ert/commander
name = "ERT Commander"
id = /obj/item/weapon/card/id/ert
suit = /obj/item/clothing/suit/space/hardsuit/ert
glasses = /obj/item/clothing/glasses/thermal/eyepatch
back = /obj/item/weapon/storage/backpack/captain
belt = /obj/item/weapon/storage/belt/security/full
backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\
/obj/item/weapon/melee/baton/loaded=1,\
/obj/item/clothing/mask/gas/sechailer=1,\
/obj/item/weapon/gun/energy/gun=1)
l_pocket = /obj/item/weapon/switchblade
/datum/outfit/ert/commander/post_equip(mob/living/carbon/human/H)
..()
var/obj/item/device/radio/R = H.ears
R.keyslot = new /obj/item/device/encryptionkey/heads/captain
R.recalculateChannels()
/datum/outfit/ert/commander/alert
name = "ERT Commander - High Alert"
backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\
/obj/item/weapon/melee/baton/loaded=1,\
/obj/item/clothing/mask/gas/sechailer/swat=1,\
/obj/item/weapon/gun/energy/pulse/pistol/loyalpin=1)
l_pocket = /obj/item/weapon/melee/energy/sword/saber
/datum/outfit/ert/security
name = "ERT Security"
id = /obj/item/weapon/card/id/ert/Security
suit = /obj/item/clothing/suit/space/hardsuit/ert/sec
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
back = /obj/item/weapon/storage/backpack/security
belt = /obj/item/weapon/storage/belt/security/full
backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\
/obj/item/weapon/storage/box/handcuffs=1,\
/obj/item/clothing/mask/gas/sechailer=1,\
/obj/item/weapon/gun/energy/gun=1,\
/obj/item/weapon/melee/baton/loaded=1,\
/obj/item/weapon/gun/energy/gun/advtaser=1)
/datum/outfit/ert/security/post_equip(mob/living/carbon/human/H)
..()
var/obj/item/device/radio/R = H.ears
R.keyslot = new /obj/item/device/encryptionkey/heads/hos
R.recalculateChannels()
/datum/outfit/ert/security/alert
name = "ERT Security - High Alert"
backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\
/obj/item/weapon/storage/box/handcuffs=1,\
/obj/item/clothing/mask/gas/sechailer/swat=1,\
/obj/item/weapon/melee/baton/loaded=1,\
/obj/item/weapon/gun/energy/pulse/carbine/loyalpin=1)
/datum/outfit/ert/medic
name = "ERT Medic"
id = /obj/item/weapon/card/id/ert/Medical
suit = /obj/item/clothing/suit/space/hardsuit/ert/med
glasses = /obj/item/clothing/glasses/hud/health
back = /obj/item/weapon/storage/backpack/medic
belt = /obj/item/weapon/storage/belt/medical
r_hand = /obj/item/weapon/storage/firstaid/regular
backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\
/obj/item/weapon/melee/baton/loaded=1,\
/obj/item/clothing/mask/gas/sechailer=1,\
/obj/item/weapon/gun/energy/gun=1,\
/obj/item/weapon/reagent_containers/hypospray/combat=1)
/datum/outfit/ert/medic/post_equip(mob/living/carbon/human/H)
..()
var/obj/item/device/radio/R = H.ears
R.keyslot = new /obj/item/device/encryptionkey/heads/cmo
R.recalculateChannels()
/datum/outfit/ert/medic/alert
name = "ERT Medic - High Alert"
backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\
/obj/item/weapon/melee/baton/loaded=1,\
/obj/item/clothing/mask/gas/sechailer/swat=1,\
/obj/item/weapon/gun/energy/pulse/pistol/loyalpin=1,\
/obj/item/weapon/reagent_containers/hypospray/combat/nanites=1)
/datum/outfit/ert/engineer
name = "ERT Engineer"
id = /obj/item/weapon/card/id/ert/Engineer
suit = /obj/item/clothing/suit/space/hardsuit/ert/engi
glasses = /obj/item/clothing/glasses/meson/engine
back = /obj/item/weapon/storage/backpack/industrial
belt = /obj/item/weapon/storage/belt/utility/full
l_pocket = /obj/item/weapon/rcd_ammo/large
r_hand = /obj/item/weapon/storage/firstaid/regular
backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\
/obj/item/weapon/melee/baton/loaded=1,\
/obj/item/clothing/mask/gas/sechailer=1,\
/obj/item/weapon/gun/energy/gun=1,\
/obj/item/weapon/rcd/loaded=1)
/datum/outfit/ert/engineer/post_equip(mob/living/carbon/human/H)
..()
var/obj/item/device/radio/R = H.ears
R.keyslot = new /obj/item/device/encryptionkey/heads/ce
R.recalculateChannels()
/datum/outfit/ert/engineer/alert
name = "ERT Engineer - High Alert"
backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\
/obj/item/weapon/melee/baton/loaded=1,\
/obj/item/clothing/mask/gas/sechailer/swat=1,\
/obj/item/weapon/gun/energy/pulse/pistol/loyalpin=1,\
/obj/item/weapon/rcd/combat=1)
/datum/outfit/centcom_official
name = "Centcom Official"
uniform = /obj/item/clothing/under/rank/centcom_officer
shoes = /obj/item/clothing/shoes/sneakers/black
gloves = /obj/item/clothing/gloves/color/black
ears = /obj/item/device/radio/headset/headset_cent
glasses = /obj/item/clothing/glasses/sunglasses
belt = /obj/item/weapon/gun/energy/gun
l_pocket = /obj/item/weapon/pen
back = /obj/item/weapon/storage/backpack/satchel_norm
r_pocket = /obj/item/device/pda/heads
l_hand = /obj/item/weapon/clipboard
id = /obj/item/weapon/card/id
/datum/outfit/centcom_official/post_equip(mob/living/carbon/human/H)
var/obj/item/device/pda/heads/pda = H.r_store
pda.owner = H.real_name
pda.ownjob = "Centcom Official"
pda.update_label()
var/obj/item/weapon/card/id/W = H.wear_id
W.icon_state = "centcom"
W.access = get_centcom_access("Centcom Official")
W.access += access_weapons
W.assignment = "Centcom Official"
W.registered_name = H.real_name
W.update_label()
+365
View File
@@ -0,0 +1,365 @@
/datum/outfit/space
name = "Standard Space Gear"
uniform = /obj/item/clothing/under/color/grey
shoes = /obj/item/clothing/shoes/sneakers/black
suit = /obj/item/clothing/suit/space
head = /obj/item/clothing/head/helmet/space
back = /obj/item/weapon/tank/jetpack/oxygen
mask = /obj/item/clothing/mask/breath
/datum/outfit/space/post_equip(mob/living/carbon/human/H)
var/obj/item/weapon/tank/jetpack/J = H.back
J.toggle()
J.Topic(null, list("stat" = 1))
/datum/outfit/tournament
/datum/outfit/tournament/
name = "tournament standard red"
uniform = /obj/item/clothing/under/color/red
shoes = /obj/item/clothing/shoes/sneakers/black
suit = /obj/item/clothing/suit/armor/vest
head = /obj/item/clothing/head/helmet/thunderdome
r_hand = /obj/item/weapon/gun/energy/pulse/destroyer
l_hand = /obj/item/weapon/kitchen/knife
r_pocket = /obj/item/weapon/grenade/smokebomb
/datum/outfit/tournament/red
name = "tournament standard green"
uniform = /obj/item/clothing/under/color/green
/datum/outfit/tournament/gangster
name = "tournament gangster"
uniform = /obj/item/clothing/under/rank/det
suit = /obj/item/clothing/suit/det_suit
glasses = /obj/item/clothing/glasses/thermal/monocle
head = /obj/item/clothing/head/det_hat
r_hand = /obj/item/weapon/gun/projectile
l_hand = null
r_pocket = /obj/item/ammo_box/c10mm
/datum/outfit/tournament/janitor
name = "tournament janitor"
uniform = /obj/item/clothing/under/rank/janitor
back = /obj/item/weapon/storage/backpack
suit = null
head = null
r_hand = /obj/item/weapon/mop
l_hand = /obj/item/weapon/reagent_containers/glass/bucket
r_pocket = /obj/item/weapon/grenade/chem_grenade/cleaner
l_pocket = /obj/item/weapon/grenade/chem_grenade/cleaner
backpack_contents = list(/obj/item/stack/tile/plasteel=6)
/datum/outfit/tournament/janitor/post_equip(mob/living/carbon/human/H)
var/obj/item/weapon/reagent_containers/glass/bucket/bucket = H.l_hand
bucket.reagents.add_reagent("water",70)
/datum/outfit/laser_tag
name = "Laser Tag Red"
uniform = /obj/item/clothing/under/color/red
shoes = /obj/item/clothing/shoes/sneakers/red
head = /obj/item/clothing/head/helmet/redtaghelm
gloves = /obj/item/clothing/gloves/color/red
ears = /obj/item/device/radio/headset
suit = /obj/item/clothing/suit/redtag
back = /obj/item/weapon/storage/backpack
suit_store = /obj/item/weapon/gun/energy/laser/redtag
backpack_contents = list(/obj/item/weapon/storage/box=1)
/datum/outfit/laser_tag/blue
name = "Laser Tag Blue"
uniform = /obj/item/clothing/under/color/blue
shoes = /obj/item/clothing/shoes/sneakers/blue
head = /obj/item/clothing/head/helmet/bluetaghelm
gloves = /obj/item/clothing/gloves/color/blue
suit = /obj/item/clothing/suit/bluetag
suit_store = /obj/item/weapon/gun/energy/laser/bluetag
/datum/outfit/pirate
name = "Pirate"
uniform = /obj/item/clothing/under/pirate
shoes = /obj/item/clothing/shoes/sneakers/brown
head = /obj/item/clothing/head/bandana
glasses = /obj/item/clothing/glasses/eyepatch
r_hand = /obj/item/weapon/melee/energy/sword/pirate
/datum/outfit/pirate/space
name = "Space Pirate"
suit = /obj/item/clothing/suit/space/pirate
head = /obj/item/clothing/head/helmet/space/pirate
/datum/outfit/tunnel_clown
name = "Tunnel Clown"
uniform = /obj/item/clothing/under/rank/clown
shoes = /obj/item/clothing/shoes/clown_shoes
gloves = /obj/item/clothing/gloves/color/black
mask = /obj/item/clothing/mask/gas/clown_hat
ears = /obj/item/device/radio/headset
glasses = /obj/item/clothing/glasses/thermal/monocle
suit = /obj/item/clothing/suit/hooded/chaplain_hoodie
l_pocket = /obj/item/weapon/reagent_containers/food/snacks/grown/banana
r_pocket = /obj/item/weapon/bikehorn
id = /obj/item/weapon/card/id
r_hand = /obj/item/weapon/twohanded/fireaxe
/datum/outfit/tunnel_clown/post_equip(mob/living/carbon/human/H)
var/obj/item/weapon/card/id/W = H.wear_id
W.access = get_all_accesses()
W.assignment = "Tunnel Clown!"
W.registered_name = H.real_name
W.update_label(H.real_name)
/datum/outfit/psycho
name = "Masked Killer"
uniform = /obj/item/clothing/under/overalls
shoes = /obj/item/clothing/shoes/sneakers/white
gloves = /obj/item/clothing/gloves/color/latex
mask = /obj/item/clothing/mask/surgical
head = /obj/item/clothing/head/welding
ears = /obj/item/device/radio/headset
glasses = /obj/item/clothing/glasses/thermal/monocle
suit = /obj/item/clothing/suit/apron
l_pocket = /obj/item/weapon/kitchen/knife
r_pocket = /obj/item/weapon/scalpel
r_hand = /obj/item/weapon/twohanded/fireaxe
/datum/outfit/psycho/post_equip(mob/living/carbon/human/H)
for(var/obj/item/carried_item in H.contents)
if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant.
carried_item.add_blood(H)//Oh yes, there will be blood...
H.regenerate_icons()
/datum/outfit/assassin
name = "Assassin"
uniform = /obj/item/clothing/under/suit_jacket
shoes = /obj/item/clothing/shoes/sneakers/black
gloves = /obj/item/clothing/gloves/color/black
ears = /obj/item/device/radio/headset
glasses = /obj/item/clothing/glasses/sunglasses
l_pocket = /obj/item/weapon/melee/energy/sword/saber
l_hand = /obj/item/weapon/storage/secure/briefcase
id = /obj/item/weapon/card/id/syndicate
belt = /obj/item/device/pda/heads
/datum/outfit/assassin/post_equip(mob/living/carbon/human/H)
var/obj/item/clothing/under/U = H.w_uniform
U.attachTie(new /obj/item/clothing/tie/waistcoat(H))
//Could use a type
var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = H.l_hand
for(var/obj/item/briefcase_item in sec_briefcase)
qdel(briefcase_item)
for(var/i=3, i>0, i--)
sec_briefcase.handle_item_insertion(new /obj/item/stack/spacecash/c1000,1)
sec_briefcase.handle_item_insertion(new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow,1)
sec_briefcase.handle_item_insertion(new /obj/item/weapon/gun/projectile/revolver/mateba,1)
sec_briefcase.handle_item_insertion(new /obj/item/ammo_box/a357,1)
sec_briefcase.handle_item_insertion(new /obj/item/weapon/c4,1)
var/obj/item/device/pda/heads/pda = H.belt
pda.owner = H.real_name
pda.ownjob = "Reaper"
pda.update_label()
var/obj/item/weapon/card/id/syndicate/W = H.wear_id
W.access = get_all_accesses()
W.assignment = "Reaper"
W.registered_name = H.real_name
W.update_label(H.real_name)
/datum/outfit/centcom_commander
name = "Centcom Commander"
uniform = /obj/item/clothing/under/rank/centcom_commander
suit = /obj/item/clothing/suit/armor/bulletproof
shoes = /obj/item/clothing/shoes/combat/swat
gloves = /obj/item/clothing/gloves/combat
ears = /obj/item/device/radio/headset/headset_cent/commander
glasses = /obj/item/clothing/glasses/eyepatch
mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
head = /obj/item/clothing/head/centhat
belt = /obj/item/weapon/gun/projectile/revolver/mateba
r_pocket = /obj/item/weapon/lighter
l_pocket = /obj/item/ammo_box/a357
back = /obj/item/weapon/storage/backpack/satchel
id = /obj/item/weapon/card/id
/datum/outfit/centcom_commander/post_equip(mob/living/carbon/human/H)
var/obj/item/weapon/card/id/W = H.wear_id
W.icon_state = "centcom"
W.access = get_all_accesses()
W.access += get_centcom_access("Centcom Commander")
W.assignment = "Centcom Commander"
W.registered_name = H.real_name
W.update_label()
/datum/outfit/spec_ops
name = "Special Ops Officer"
uniform = /obj/item/clothing/under/syndicate
suit = /obj/item/clothing/suit/space/officer
shoes = /obj/item/clothing/shoes/combat/swat
gloves = /obj/item/clothing/gloves/combat
glasses = /obj/item/clothing/glasses/thermal/eyepatch
ears = /obj/item/device/radio/headset/headset_cent/commander
mask = /obj/item/clothing/mask/cigarette/cigar/havana
head = /obj/item/clothing/head/helmet/space/beret
belt = /obj/item/weapon/gun/energy/pulse/pistol/m1911
r_pocket = /obj/item/weapon/lighter
back = /obj/item/weapon/storage/backpack/satchel
id = /obj/item/weapon/card/id
/datum/outfit/spec_ops/post_equip(mob/living/carbon/human/H)
var/obj/item/weapon/card/id/W = H.wear_id
W.icon_state = "centcom"
W.access = get_all_accesses()
W.access += get_centcom_access("Special Ops Officer")
W.assignment = "Special Ops Officer"
W.registered_name = H.real_name
W.update_label()
var/obj/item/device/radio/headset/R = H.ears
R.set_frequency(CENTCOM_FREQ)
R.freqlock = 1
/datum/outfit/wizard
name = "Blue Wizard"
uniform = /obj/item/clothing/under/color/lightpurple
suit = /obj/item/clothing/suit/wizrobe
shoes = /obj/item/clothing/shoes/sandal
ears = /obj/item/device/radio/headset
head = /obj/item/clothing/head/wizard
r_pocket = /obj/item/weapon/teleportation_scroll
r_hand = /obj/item/weapon/spellbook
l_hand = /obj/item/weapon/staff
back = /obj/item/weapon/storage/backpack
backpack_contents = list(/obj/item/weapon/storage/box=1)
/datum/outfit/wizard/red
name = "Red Wizard"
suit = /obj/item/clothing/suit/wizrobe/red
head = /obj/item/clothing/head/wizard/red
/datum/outfit/wizard/weeb
name = "Marisa Wizard"
suit = /obj/item/clothing/suit/wizrobe/marisa
shoes = /obj/item/clothing/shoes/sandal/marisa
head = /obj/item/clothing/head/wizard/marisa
/datum/outfit/soviet
name = "Soviet Admiral"
uniform = /obj/item/clothing/under/soviet
head = /obj/item/clothing/head/hgpiratecap
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
ears = /obj/item/device/radio/headset/headset_cent
glasses = /obj/item/clothing/glasses/thermal/eyepatch
suit = /obj/item/clothing/suit/hgpirate
back = /obj/item/weapon/storage/backpack/satchel
belt = /obj/item/weapon/gun/projectile/revolver/mateba
id = /obj/item/weapon/card/id
/datum/outfit/soviet/post_equip(mob/living/carbon/human/H)
var/obj/item/weapon/card/id/W = H.wear_id
W.icon_state = "centcom"
W.access = get_all_accesses()
W.access += get_centcom_access("Admiral")
W.assignment = "Admiral"
W.registered_name = H.real_name
W.update_label()
/datum/outfit/mobster
name = "Mobster"
uniform = /obj/item/clothing/under/suit_jacket/really_black
head = /obj/item/clothing/head/fedora
shoes = /obj/item/clothing/shoes/laceup
gloves = /obj/item/clothing/gloves/color/black
ears = /obj/item/device/radio/headset
glasses = /obj/item/clothing/glasses/sunglasses
r_hand = /obj/item/weapon/gun/projectile/automatic/tommygun
id = /obj/item/weapon/card/id
/datum/outfit/mobster/post_equip(mob/living/carbon/human/H)
var/obj/item/weapon/card/id/W = H.wear_id
W.assignment = "Assistant"
W.registered_name = H.real_name
W.update_label()
/datum/outfit/plasmaman
name = "Plasmaman"
head = /obj/item/clothing/head/helmet/space/hardsuit/plasmaman
suit = /obj/item/clothing/suit/space/eva/plasmaman
back = /obj/item/weapon/tank/internals/plasmaman/full
mask = /obj/item/clothing/mask/breath
/datum/outfit/death_commando
name = "Death Commando"
uniform = /obj/item/clothing/under/color/green
suit = /obj/item/clothing/suit/space/hardsuit/deathsquad
shoes = /obj/item/clothing/shoes/combat/swat
gloves = /obj/item/clothing/gloves/combat
mask = /obj/item/clothing/mask/gas/sechailer/swat
glasses = /obj/item/clothing/glasses/hud/toggle/thermal
back = /obj/item/weapon/storage/backpack/security
l_pocket = /obj/item/weapon/melee/energy/sword/saber
r_pocket = /obj/item/weapon/shield/energy
suit_store = /obj/item/weapon/tank/internals/emergency_oxygen
belt = /obj/item/weapon/gun/projectile/revolver/mateba
r_hand = /obj/item/weapon/gun/energy/pulse/loyalpin
id = /obj/item/weapon/card/id
ears = /obj/item/device/radio/headset/headset_cent/alt
backpack_contents = list(/obj/item/weapon/storage/box=1,\
/obj/item/ammo_box/a357=1,\
/obj/item/weapon/storage/firstaid/regular=1,\
/obj/item/weapon/storage/box/flashbangs=1,\
/obj/item/device/flashlight=1,\
/obj/item/weapon/c4=1)
/datum/outfit/death_commando/post_equip(mob/living/carbon/human/H)
var/obj/item/device/radio/R = H.ears
R.set_frequency(CENTCOM_FREQ)
R.freqlock = 1
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)//Here you go Deuryn
L.imp_in = H
L.implanted = 1
H.sec_hud_set_implants()
var/obj/item/weapon/card/id/W = H.wear_id
W.icon_state = "centcom"
W.access = get_all_accesses()//They get full station access.
W.access += get_centcom_access("Death Commando")//Let's add their alloted Centcom access.
W.assignment = "Death Commando"
W.registered_name = H.real_name
W.update_label(W.registered_name, W.assignment)
/datum/outfit/death_commando/officer
name = "Death Commando Officer"
head = /obj/item/clothing/head/helmet/space/beret
+6 -2
View File
@@ -37,13 +37,17 @@
user << "<span class='notice'>You cannot retrieve any bananium from the prototype shoes.</span>"
/obj/item/clothing/shoes/clown_shoes/banana_shoes/attackby(obj/item/O, mob/user, params)
if(!bananium.can_insert(O))
if(!istype(O,/obj/item/stack/sheet))
return
if(!bananium.get_item_material_amount(O))
user << "<span class='notice'>This item has no bananium!</span>"
return
if(!user.unEquip(O))
user << "<span class='notice'>You can't drop [O]!</span>"
return
var/sheet_amount = bananium.insert_stack(O)
var/obj/item/stack/sheet/S = O
var/sheet_amount = bananium.insert_stack(O,S.amount)
if(sheet_amount)
user << "<span class='notice'>You insert [sheet_amount] bananium sheets into the prototype shoes.</span>"
else
+2
View File
@@ -9,6 +9,7 @@
strip_delay = 70
put_on_delay = 70
burn_state = -1 //Won't burn in fires
origin_tech = "magnets=2"
/obj/item/clothing/shoes/magboots/verb/toggle()
set name = "Toggle Magboots"
@@ -52,3 +53,4 @@
name = "blood-red magboots"
icon_state = "syndiemag0"
magboot_state = "syndiemag"
origin_tech = "magnets=2,syndicate=3"
+15 -1
View File
@@ -62,6 +62,16 @@
put_on_delay = 50
burn_state = -1 //Won't burn in fires
/obj/item/clothing/shoes/galoshes/dry
name = "absorbent galoshes"
desc = "A pair of orange rubber boots, designed to prevent slipping on wet surfaces while also drying them."
icon_state = "galoshes_dry"
/obj/item/clothing/shoes/galoshes/dry/step_action()
var/turf/simulated/t_loc = get_turf(src)
if(istype(t_loc) && t_loc.wet)
t_loc.MakeDry(TURF_WET_WATER)
/obj/item/clothing/shoes/clown_shoes
desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!"
name = "clown shoes"
@@ -107,7 +117,7 @@
put_on_delay = 40
/obj/item/clothing/shoes/cult
name = "cultist boots"
name = "nar-sian invoker boots"
desc = "A pair of boots worn by the followers of Nar-Sie."
icon_state = "cult"
item_state = "cult"
@@ -117,6 +127,10 @@
heat_protection = FEET
max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT
/obj/item/clothing/shoes/cult/alt
name = "cultist boots"
icon_state = "cultalt"
/obj/item/clothing/shoes/cyborg
name = "cyborg boots"
desc = "Shoes for a cyborg costume."
+2 -2
View File
@@ -271,7 +271,7 @@
item_state = "wiz_helm"
item_color = "wiz"
unacidable = 1 //No longer shall our kind be foiled by lone chemists with spray bottles!
armor = list(melee = 40, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 100, rad = 50)
armor = list(melee = 40, bullet = 40, laser = 40, energy = 20, bomb = 35, bio = 100, rad = 50)
heat_protection = HEAD //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
unacidable = 1
@@ -285,7 +285,7 @@
slowdown = 1
w_class = 3
unacidable = 1
armor = list(melee = 40, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 100, rad = 50)
armor = list(melee = 40, bullet = 40, laser = 40, energy = 20, bomb = 35, bio = 100, rad = 50)
allowed = list(/obj/item/weapon/teleportation_scroll,/obj/item/weapon/tank/internals)
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
+6 -1
View File
@@ -70,6 +70,11 @@
body_parts_covered = CHEST|GROIN
armor = list(melee = 50, bullet = 40, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/vest/capcarapace/alt
name = "captain's parade jacket"
desc = "For when an armoured vest isn't fashionable enough."
icon_state = "capformal"
item_state = "capspacesuit"
/obj/item/clothing/suit/armor/riot
name = "riot suit"
@@ -122,7 +127,7 @@
/obj/item/clothing/suit/armor/reactive
name = "reactive teleport armor"
desc = "Someone seperated our Research Director from his own head!"
var/active = 0.0
var/active = 0
icon_state = "reactiveoff"
item_state = "reactiveoff"
blood_overlay_type = "armor"
+4 -2
View File
@@ -21,8 +21,8 @@
permeability_coefficient = 0.01
flags = THICKMATERIAL
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
slowdown = 1.0
allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen, /obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray)
slowdown = 1
allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/hypospray)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
strip_delay = 70
@@ -48,9 +48,11 @@
//Security biosuit, grey with red stripe across the chest
/obj/item/clothing/head/bio_hood/security
armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 100, rad = 20)
icon_state = "bio_security"
/obj/item/clothing/suit/bio_suit/security
armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 100, rad = 20)
icon_state = "bio_security"
+1 -1
View File
@@ -19,7 +19,7 @@
permeability_coefficient = 0.50
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/extinguisher, /obj/item/weapon/crowbar)
slowdown = 1.0
slowdown = 1
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
flags = STOPSPRESSUREDMAGE | THICKMATERIAL
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+5 -2
View File
@@ -6,7 +6,7 @@
item_state = "" //no inhands
item_color = "bluetie"
slot_flags = 0
w_class = 2.0
w_class = 2
/obj/item/clothing/tie/blue
name = "blue tie"
@@ -84,6 +84,7 @@
desc = "A bronze medal."
icon_state = "bronze"
item_color = "bronze"
materials = list(MAT_METAL=1000)
burn_state = -1 //Won't burn in fires
//Pinning medals on people
@@ -109,7 +110,7 @@
/obj/item/clothing/tie/medal/conduct
name = "distinguished conduct medal"
desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew."
desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is the most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew."
/obj/item/clothing/tie/medal/bronze_heart
name = "bronze heart medal"
@@ -125,6 +126,7 @@
desc = "A silver medal."
icon_state = "silver"
item_color = "silver"
materials = list(MAT_SILVER=1000)
/obj/item/clothing/tie/medal/silver/valor
name = "medal of valor"
@@ -139,6 +141,7 @@
desc = "A prestigious golden medal."
icon_state = "gold"
item_color = "gold"
materials = list(MAT_GOLD=1000)
/obj/item/clothing/tie/medal/gold/captain
name = "medal of captaincy"
+6 -10
View File
@@ -52,21 +52,19 @@
if(isnull(M.key)) return
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(!istype(H.dna, /datum/dna))
return 0
if(H.gloves)
if(fingerprintslast != H.ckey)
fingerprintshidden += text("\[[time_stamp()]\] (Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
fingerprintshidden += "\[[time_stamp()]\] (Wearing gloves). Real name: [H.real_name], Key: [H.key]"
fingerprintslast = H.ckey
return 0
if(!( fingerprints ))
if(!fingerprints)
if(fingerprintslast != H.ckey)
fingerprintshidden += text("\[[time_stamp()]\] Real name: [], Key: []",H.real_name, H.key)
fingerprintshidden += "\[[time_stamp()]\] Real name: [H.real_name], Key: [H.key]"
fingerprintslast = H.ckey
return 1
else
if(fingerprintslast != M.ckey)
fingerprintshidden += text("\[[time_stamp()]\] Real name: [], Key: []",M.real_name, M.key)
fingerprintshidden += "\[[time_stamp()]\] Real name: [M.real_name], Key: [M.key]"
fingerprintslast = M.ckey
return
@@ -75,17 +73,15 @@
if(isnull(M)) return
if(isnull(M.key)) return
if(ishuman(M))
var/mob/living/carbon/human/H = M
//Add the list if it does not exist.
if(!fingerprintshidden)
fingerprintshidden = list()
//Fibers~
add_fibers(M)
add_fibers(H)
//Now, lets get to the dirty work.
//First, make sure their DNA makes sense.
var/mob/living/carbon/human/H = M
check_dna_integrity(H) //sets up dna and its variables if it was missing somehow
//Check if the gloves (if any) hide fingerprints
if(H.gloves)
@@ -19,6 +19,11 @@
volume = 5
spillable = 0
/obj/item/weapon/reagent_containers/glass/rag/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] ties the [src.name] around their head and groans! It looks like--</span>")
user.say("MY BRAIN HURTS!!")
return (OXYLOSS)
/obj/item/weapon/reagent_containers/glass/rag/afterattack(atom/A as obj|turf|area, mob/user,proximity)
if(!proximity)
return
@@ -28,6 +33,9 @@
reagents.reaction(C, INGEST)
reagents.trans_to(C, reagents.total_volume)
C.visible_message("<span class='danger'>[user] has smothered \the [C] with \the [src]!</span>", "<span class='userdanger'>[user] has smothered you with \the [src]!</span>", "<span class='italics'>You hear some struggling and muffled cries of surprise.</span>")
var/reagentlist = pretty_string_from_reagent_list(A.reagents)
log_game("[key_name(user)] smothered [key_name(A)] with a damp rag containing [reagentlist]")
log_attack("[key_name(user)] smothered [key_name(A)] with a damp rag containing [reagentlist]")
else
reagents.reaction(C, TOUCH)
reagents.clear_reagents()
+3 -2
View File
@@ -6,12 +6,13 @@
name = "forensic scanner"
desc = "Used to remotely scan objects and biomass for DNA and fingerprints. Can print a report of the findings."
icon_state = "forensicnew"
w_class = 3.0
w_class = 3
item_state = "electronic"
flags = CONDUCT | NOBLUDGEON
slot_flags = SLOT_BELT
var/scanning = 0
var/list/log = list()
origin_tech = "engineering=3;biotech=2"
/obj/item/device/detective_scanner/attack_self(mob/user)
if(log.len && !scanning)
@@ -82,7 +83,7 @@
if(ishuman(A))
var/mob/living/carbon/human/H = A
if (istype(H.dna, /datum/dna) && !H.gloves)
if(!H.gloves)
fingerprints += md5(H.dna.uni_identity)
else if(!ismob(A))
+61
View File
@@ -0,0 +1,61 @@
/datum/round_event_control/abductor
name = "Abductors"
typepath = /datum/round_event/abductor
weight = 5
max_occurrences = 1
earliest_start = 180000 // 30 min
gamemode_blacklist = list("nuclear","wizard","revolution","abduction")
/datum/round_event/abductor
/datum/round_event/abductor/start()
//spawn abductor team
if(!makeAbductorTeam())
message_admins("Abductor event failed to find players. Retrying in 30s.")
spawn(30)
makeAbductorTeam()
/datum/round_event/abductor/proc/makeAbductorTeam()
var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for an Abductor Team?", "abductor", null)
if(candidates.len >= 2)
//Oh god why we can't have static functions
var/number = ticker.mode.abductor_teams + 1
var/datum/game_mode/abduction/temp
if(ticker.mode.config_tag == "abduction")
temp = ticker.mode
else
temp = new
var/agent_mind = pick(candidates)
candidates -= agent_mind
var/scientist_mind = pick(candidates)
var/mob/living/carbon/human/agent=makeBody(agent_mind)
var/mob/living/carbon/human/scientist=makeBody(scientist_mind)
agent_mind = agent.mind
scientist_mind = scientist.mind
temp.scientists.len = number
temp.agents.len = number
temp.abductors.len = 2*number
temp.team_objectives.len = number
temp.team_names.len = number
temp.scientists[number] = scientist_mind
temp.agents[number] = agent_mind
temp.abductors |= list(agent_mind,scientist_mind)
temp.make_abductor_team(number,preset_scientist=scientist_mind,preset_agent=agent_mind)
temp.post_setup_team(number)
ticker.mode.abductor_teams++
if(ticker.mode.config_tag != "abduction")
ticker.mode.abductors |= temp.abductors
return 1
else
return 0
+3 -1
View File
@@ -28,8 +28,10 @@
/datum/round_event/alien_infestation/start()
var/list/vents = list()
for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in world)
if(qdeleted(temp_vent))
continue
if(temp_vent.loc.z == ZLEVEL_STATION && !temp_vent.welded)
var/datum/pipeline/temp_vent_parent = temp_vent.parents["p1"]
var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1
if(temp_vent_parent.other_atmosmch.len > 20) //Stops Aliens getting stuck in small networks. See: Security, Virology
vents += temp_vent
+2
View File
@@ -6,6 +6,8 @@
earliest_start = 48000 // 1 hour 20 minutes
gamemode_blacklist = list("blob") // Just in case blob survives that long
/datum/round_event/blob
announceWhen = 12
endWhen = 120
+3
View File
@@ -20,6 +20,9 @@
var/alertadmins = 1 //should we let the admins know this event is firing
//should be disabled on events that fire a lot
var/list/gamemode_blacklist = list() // Event won't happen in these gamemodes
var/list/gamemode_whitelist = list() // Event will happen ONLY in these gamemodes if not empty
/datum/round_event_control/wizard
wizardevent = 1
+4 -5
View File
@@ -11,11 +11,10 @@
for(var/mob/living/carbon/human/H in mob_list)
var/obj/item/weapon/storage/backpack/b = locate() in H.contents
new /obj/item/weapon/storage/spooky(b)
if(H.dna)
if(prob(50))
hardset_dna(H, null, null, null, null, /datum/species/skeleton)
else
hardset_dna(H, null, null, null, null, /datum/species/zombie)
if(prob(50))
H.set_species(/datum/species/skeleton)
else
H.set_species(/datum/species/zombie)
for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in mob_list)
Ian.place_on_head(new /obj/item/weapon/bedsheet(Ian))
+4 -5
View File
@@ -37,20 +37,19 @@
if(istype(C, /mob/living/carbon/human))
var/mob/living/carbon/human/H = C
if(prob(5))
H.irradiate(rand(100, 160))
H.rad_act(rand(100, 160))
else
H.irradiate(rand(15, 75))
H.rad_act(rand(15, 75))
if(prob(25))
if(prob(75))
randmutb(H)
domutcheck(H, null, 1)
else
randmutg(H)
domutcheck(H, null, 1)
H.domutcheck()
else if(istype(C, /mob/living/carbon/monkey))
var/mob/living/carbon/monkey/M = C
M.irradiate(rand(15, 75))
M.rad_act(rand(15, 75))
/datum/round_event/radiation_storm/end()
+9 -5
View File
@@ -7,11 +7,15 @@
/datum/round_event/spacevine/start()
var/list/turfs = list() //list of all the empty floor turfs in the hallway areas
var/obj/effect/spacevine/SV = new()
for(var/area/hallway/A in world)
for(var/turf/simulated/F in A)
if(!F.density && !F.contents.len)
if(F.Enter(SV))
turfs += F
qdel(SV)
if(turfs.len) //Pick a turf to spawn at if we can
var/turf/simulated/T = pick(turfs)
spawn(0) new/obj/effect/spacevine_controller(T) //spawn a controller at turf
@@ -362,7 +366,7 @@
qdel(B)
qdel(src)
else if(is_sharp(W))
else if(W.is_sharp())
qdel(src)
else if(istype(W, /obj/item/weapon/weldingtool))
@@ -554,14 +558,14 @@
/obj/effect/spacevine/ex_act(severity, target)
switch(severity)
if(1.0)
if(1)
qdel(src)
return
if(2.0)
if(2)
if (prob(90))
qdel(src)
return
if(3.0)
if(3)
if (prob(50))
qdel(src)
return
+1 -1
View File
@@ -22,7 +22,7 @@
var/list/vents = list()
for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in world)
if(temp_vent.loc.z == ZLEVEL_STATION && !temp_vent.welded)
var/datum/pipeline/temp_vent_parent = temp_vent.parents["p1"]
var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1
if(temp_vent_parent.other_atmosmch.len > 20)
vents += temp_vent
+1 -1
View File
@@ -18,7 +18,7 @@
endWhen = rand(25, 100)
for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in machines)
if(temp_vent.loc.z == ZLEVEL_STATION && !temp_vent.welded)
var/datum/pipeline/temp_vent_parent = temp_vent.parents["p1"]
var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1
if(temp_vent_parent.other_atmosmch.len > 20)
vents += temp_vent
if(!vents.len)
+1 -1
View File
@@ -22,7 +22,7 @@
/obj/item/weapon/greentext/
name = "greentext"
desc = "No one knows what this massive tome does, but it feels <i><font color='green'>desirable</font></i> all the same..."
w_class = 4.0
w_class = 4
icon = 'icons/obj/wizard.dmi'
icon_state = "greentext"
var/mob/living/last_holder
+5 -7
View File
@@ -17,13 +17,11 @@
PoolOrNew(/obj/effect/effect/smoke, W.loc)
var/mob/living/carbon/human/I = new /mob/living/carbon/human(W.loc)
I.real_name = W.real_name
I.dna.unique_enzymes = W.dna.unique_enzymes
I.name = W.real_name
I.dna.blood_type = W.dna.blood_type
I.dna.uni_identity = W.dna.uni_identity
I.dna.struc_enzymes = W.dna.struc_enzymes
updateappearance(I)
W.dna.transfer_identity(I, transfer_SE=1)
I.real_name = I.dna.real_name
I.name = I.dna.real_name
I.updateappearance(mutcolor_update=1)
I.domutcheck()
if(W.ears) I.equip_to_slot_or_del(new W.ears.type, slot_ears)
if(W.w_uniform) I.equip_to_slot_or_del(new W.w_uniform.type , slot_w_uniform)
if(W.shoes) I.equip_to_slot_or_del(new W.shoes.type, slot_shoes)
+4 -5
View File
@@ -21,10 +21,9 @@
all_the_same = 1
for(var/mob/living/carbon/human/H in mob_list) //yes, even the dead
if(H.dna)
hardset_dna(H, null, null, null, null, new_species)
H.real_name = new_species.random_name(H.gender,1)
H.regenerate_icons()
H << "<span class='notice'>You feel somehow... different?</span>"
H.set_species(new_species)
H.real_name = new_species.random_name(H.gender,1)
H.dna.unique_enzymes = H.dna.generate_unique_enzymes()
H << "<span class='notice'>You feel somehow... different?</span>"
if(!all_the_same)
new_species = pick(all_species)
+24 -14
View File
@@ -88,8 +88,8 @@
/obj/item/weapon/reagent_containers/food/drinks/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/clothing/mask/cigarette)) //ciggies are weird
return
if(is_hot(I))
var/added_heat = (is_hot(I) / 100) //ishot returns a temperature
if(I.is_hot())
var/added_heat = (I.is_hot() / 100) //ishot returns a temperature
if(src.reagents)
src.reagents.chem_temp += added_heat
user << "<span class='notice'>You heat [src] with [I].</span>"
@@ -107,6 +107,7 @@
force = 14
throwforce = 10
amount_per_transfer_from_this = 20
materials = list(MAT_GOLD=1000)
possible_transfer_amounts = null
volume = 150
flags = CONDUCT | OPENCONTAINER
@@ -128,14 +129,6 @@
list_reagents = list("coffee" = 30)
spillable = 1
/obj/item/weapon/reagent_containers/food/drinks/tea
name = "Duke Purple Tea"
desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea."
icon_state = "tea"
item_state = "coffee"
list_reagents = list("tea" = 30)
spillable = 1
/obj/item/weapon/reagent_containers/food/drinks/ice
name = "Ice Cup"
desc = "Careful, cold ice, do not chew."
@@ -143,14 +136,29 @@
list_reagents = list("ice" = 30)
spillable = 1
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate
name = "Dutch Hot Coco"
desc = "Made in Space South America."
/obj/item/weapon/reagent_containers/food/drinks/mug/ // parent type is literally just so empty mug sprites are a thing
name = "mug"
desc = "A drink served in a classy mug."
icon_state = "tea"
item_state = "coffee"
list_reagents = list("hot_coco" = 30, "sugar" = 5)
spillable = 1
/obj/item/weapon/reagent_containers/food/drinks/mug/on_reagent_change()
if(reagents.total_volume)
icon_state = "tea"
else
icon_state = "tea_empty"
/obj/item/weapon/reagent_containers/food/drinks/mug/tea
name = "Duke Purple Tea"
desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea."
list_reagents = list("tea" = 30)
/obj/item/weapon/reagent_containers/food/drinks/mug/coco
name = "Dutch Hot Coco"
desc = "Made in Space South America."
list_reagents = list("hot_coco" = 30, "sugar" = 5)
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen
name = "Cup Ramen"
desc = "Just add 10ml of water, self heats! A taste that reminds you of your school years."
@@ -202,12 +210,14 @@
name = "captain's flask"
desc = "A silver flask belonging to the captain."
icon_state = "flask"
materials = list(MAT_SILVER=500)
volume = 60
/obj/item/weapon/reagent_containers/food/drinks/flask/det
name = "detective's flask"
desc = "The detective's only true friend."
icon_state = "detflask"
materials = list(MAT_METAL=250)
list_reagents = list("whiskey" = 30)
/obj/item/weapon/reagent_containers/food/drinks/britcup
@@ -136,14 +136,15 @@
desc = "A bottle with a sharp broken bottom."
icon = 'icons/obj/drinks.dmi'
icon_state = "broken_bottle"
force = 9.0
throwforce = 5.0
force = 9
throwforce = 5
throw_speed = 3
throw_range = 5
item_state = "beer"
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("stabbed", "slashed", "attacked")
var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken")
sharpness = IS_SHARP
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin
name = "Griffeater Gin"
@@ -298,13 +299,13 @@
..()
/obj/item/weapon/reagent_containers/food/drinks/bottle/molotov/attackby(obj/item/I, mob/user, params)
if(is_hot(I) && !active)
if(I.is_hot() && !active)
active = 1
var/turf/bombturf = get_turf(src)
var/area/bombarea = get_area(bombturf)
message_admins("[key_name(user)]<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A> has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[bombarea] (JMP)</a>.")
log_game("[key_name(user)] has primed a [name] for detonation at [bombarea] ([bombturf.x],[bombturf.y],[bombturf.z]).")
user << "<span class='info'>You light \the [src] on fire.</span>"
overlays += fire_overlay
if(!isGlass)
+5 -5
View File
@@ -150,9 +150,9 @@
var/obj/item/weapon/reagent_containers/food/snacks/customizable/C = new custom_food_type(get_turf(src))
C.initialize_custom_food(src, S, user)
return 0
if(is_sharp(W))
var/sharpness = is_sharp(W)
if(slice(sharpness, W, user))
var/sharp = W.is_sharp()
if(sharp)
if(slice(sharp, W, user))
return 1
//Called when you finish tablecrafting a snack.
@@ -176,7 +176,7 @@
return 1
var/slices_lost = 0
if (accuracy > 1)
if (accuracy >= IS_SHARP_ACCURATE)
user.visible_message( \
"[user] slices [src].", \
"<span class='notice'>You slice [src].</span>" \
@@ -278,7 +278,7 @@
/obj/item/weapon/reagent_containers/food/snacks/store/attackby(obj/item/weapon/W, mob/user, params)
..()
if(W.w_class <= 2 & !istype(W, /obj/item/weapon/reagent_containers/food/snacks)) //can't slip snacks inside, they're used for custom foods.
if(is_sharp(W))
if(W.is_sharp())
return 0
if(stored_item)
return 0
@@ -112,8 +112,8 @@
for(var/datum/disease/D in O.viruses)
if(!(D.spread_flags & SPECIAL))
B.data["viruses"] += D.Copy()
if(check_dna_integrity(O))
B.data["blood_DNA"] = copytext(O.dna.unique_enzymes,1,0)
if(O.has_dna())
B.data["blood_DNA"] = O.dna.unique_enzymes
if(O.resistances&&O.resistances.len)
B.data["resistances"] = O.resistances.Copy()
+1 -1
View File
@@ -487,7 +487,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
if(is_sharp(W))
if(W.is_sharp())
user.show_message("<span class='notice'>You carve a face into [src]!</span>", 1)
new /obj/item/clothing/head/hardhat/pumpkinhead (user.loc)
qdel(src)
+8 -8
View File
@@ -49,7 +49,7 @@
icon_state = "logs"
force = 5
throwforce = 5
w_class = 3.0
w_class = 3
throw_speed = 2
throw_range = 3
plant_type = 2
@@ -110,7 +110,7 @@
force = 0
slot_flags = SLOT_HEAD
throwforce = 0
w_class = 1.0
w_class = 1
throw_speed = 1
throw_range = 3
@@ -128,7 +128,7 @@
force = 0
slot_flags = SLOT_HEAD
throwforce = 0
w_class = 1.0
w_class = 1
throw_speed = 1
throw_range = 3
plant_type = 0
@@ -172,7 +172,7 @@
force = 15
hitsound = 'sound/weapons/bladeslice.ogg'
throwforce = 5
w_class = 1.0
w_class = 1
throw_speed = 1
throw_range = 3
plant_type = 1
@@ -258,7 +258,7 @@
icon = 'icons/obj/items.dmi'
icon_state = "banana_peel"
item_state = "banana_peel"
w_class = 1.0
w_class = 1
throwforce = 0
throw_speed = 3
throw_range = 7
@@ -295,14 +295,14 @@
desc = "A reminder of meals gone by."
icon_state = "corncob"
item_state = "corncob"
w_class = 1.0
w_class = 1
throwforce = 0
throw_speed = 3
throw_range = 7
/obj/item/weapon/grown/corncob/attackby(obj/item/weapon/grown/W, mob/user, params)
..()
if(is_sharp(W))
if(W.is_sharp())
user << "<span class='notice'>You use [W] to fashion a pipe out of the corn cob!</span>"
new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc)
user.unEquip(src)
@@ -314,7 +314,7 @@
desc = "A cob with snap pops"
icon_state = "snapcorn"
item_state = "corncob"
w_class = 1.0
w_class = 1
throwforce = 0
throw_speed = 3
throw_range = 7
+15 -14
View File
@@ -24,7 +24,7 @@
flags = OPENCONTAINER
slot_flags = SLOT_BELT
throwforce = 0
w_class = 2.0
w_class = 2
throw_speed = 3
throw_range = 10
@@ -46,7 +46,7 @@
flags = OPENCONTAINER
slot_flags = SLOT_BELT
throwforce = 0
w_class = 2.0
w_class = 2
throw_speed = 3
throw_range = 10
@@ -65,9 +65,9 @@
icon_state = "cultivator"
item_state = "cultivator"
flags = CONDUCT
force = 5.0
throwforce = 7.0
w_class = 2.0
force = 5
throwforce = 7
w_class = 2
materials = list(MAT_METAL=50)
attack_verb = list("slashed", "sliced", "cut", "clawed")
hitsound = 'sound/weapons/bladeslice.ogg'
@@ -78,15 +78,16 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "hatchet"
flags = CONDUCT
force = 12.0
w_class = 1.0
throwforce = 15.0
force = 12
w_class = 1
throwforce = 15
throw_speed = 3
throw_range = 4
materials = list(MAT_METAL=15000)
origin_tech = "materials=2;combat=1"
attack_verb = list("chopped", "torn", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
sharpness = IS_SHARP
/obj/item/weapon/hatchet/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is chopping at \himself with the [src.name]! It looks like \he's trying to commit suicide.</span>")
@@ -97,11 +98,11 @@
icon_state = "scythe0"
name = "scythe"
desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow."
force = 13.0
throwforce = 5.0
force = 13
throwforce = 5
throw_speed = 2
throw_range = 3
w_class = 4.0
w_class = 4
flags = CONDUCT | NOSHIELD
slot_flags = SLOT_BACK
origin_tech = "materials=2;combat=2"
@@ -123,14 +124,14 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
volume = 50
w_class = 1.0
w_class = 1
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(1,2,5,10,15,25,50)
/obj/item/weapon/reagent_containers/glass/bottle/nutrient/New()
..()
src.pixel_x = rand(-5.0, 5)
src.pixel_y = rand(-5.0, 5)
src.pixel_x = rand(-5, 5)
src.pixel_y = rand(-5, 5)
/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez
+3 -3
View File
@@ -230,9 +230,9 @@
if (mutmod == 2)
if(prob(50)) //50%
mutate()
else if(prob(75)) //37.5%
else if(prob(50)) //25%
hardmutate()
else if(prob(10)) //1/80
else if(prob(50)) //12.5%
mutatespecie()
return
return
@@ -897,7 +897,7 @@
podman.faction |= factions
if(!features["mcolor"])
features["mcolor"] = "#59CE00"
hardset_dna(podman,null,null,podman.real_name,blood_type,/datum/species/plant/pod,features)//Discard SE's and UI's, podman cloning is inaccurate, and always make them a podman
podman.hardset_dna(null,null,podman.real_name,blood_type,/datum/species/plant/pod,features)//Discard SE's and UI's, podman cloning is inaccurate, and always make them a podman
podman.set_cloned_appearance()
else //else, one packet of seeds. maybe two
+1 -1
View File
@@ -284,7 +284,7 @@
icon_state ="scanner"
throw_speed = 3
throw_range = 5
w_class = 1.0
w_class = 1
var/obj/machinery/computer/libraryconsole/bookmanagement/computer //Associated computer - Modes 1 to 3 use this
var/obj/item/weapon/book/book //Currently scanned book
var/mode = 0 //0 - Scan only, 1 - Scan and Set Buffer, 2 - Scan and Attempt to Check In, 3 - Scan and Attempt to Add to Inventory
+1 -1
View File
@@ -43,7 +43,7 @@
new /obj/item/weapon/ore/diamond(src)
if(21 to 25)
for(var/i = 0, i < 5, i++)
new /obj/item/weapon/contraband/poster(src)
new /obj/item/weapon/poster/contraband(src)
if(26 to 30)
for(var/i = 0, i < 3, i++)
new /obj/item/weapon/reagent_containers/glass/beaker/noreact(src)
+10 -6
View File
@@ -7,7 +7,7 @@
icon = 'icons/obj/machines/mining_machines.dmi'
icon_state = "ore_redemption"
density = 1
anchored = 1.0
anchored = 1
input_dir = NORTH
output_dir = SOUTH
req_access = list(access_mineral_storeroom)
@@ -257,7 +257,7 @@
icon = 'icons/obj/machines/mining_machines.dmi'
icon_state = "mining"
density = 1
anchored = 1.0
anchored = 1
var/obj/item/weapon/card/id/inserted_id
var/list/prize_list = list(
new /datum/data/mining_equipment("Stimpack", /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack, 50),
@@ -440,7 +440,7 @@
icon_state = "Jaunter"
item_state = "electronic"
throwforce = 0
w_class = 2.0
w_class = 2
throw_speed = 3
throw_range = 5
origin_tech = "bluespace=2"
@@ -507,6 +507,7 @@
var/fieldsactive = 0
var/burst_time = 50
var/fieldlimit = 3
origin_tech = "magnets=2;combat=2"
/obj/item/weapon/resonator/proc/CreateResonance(target, creator)
var/turf/T = get_turf(target)
@@ -719,11 +720,12 @@
icon_state = "lazarus_hypo"
item_state = "hypo"
throwforce = 0
w_class = 2.0
w_class = 2
throw_speed = 3
throw_range = 5
var/loaded = 1
var/malfunctioning = 0
origin_tech = "biotech=4"
/obj/item/weapon/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag)
if(!loaded)
@@ -774,10 +776,11 @@
name = "mining scanner"
icon_state = "mining1"
item_state = "analyzer"
w_class = 2.0
w_class = 2
flags = CONDUCT
slot_flags = SLOT_BELT
var/cooldown = 0
origin_tech = "engineering=1;magnets=1"
/obj/item/device/mining_scanner/attack_self(mob/user)
if(!user.client)
@@ -805,10 +808,11 @@
name = "advanced mining scanner"
icon_state = "mining0"
item_state = "analyzer"
w_class = 2.0
w_class = 2
flags = CONDUCT
slot_flags = SLOT_BELT
var/cooldown = 0
origin_tech = "engineering=3;magnets=3"
/obj/item/device/t_scanner/adv_mining_scanner/scan()
if(!cooldown)
@@ -5,7 +5,7 @@
icon_state = "x2"
name = "Input area"
density = 0
anchored = 1.0
anchored = 1
New()
icon_state = "blank"
@@ -14,7 +14,7 @@
icon_state = "x"
name = "Output area"
density = 0
anchored = 1.0
anchored = 1
New()
icon_state = "blank"
+1 -1
View File
@@ -61,7 +61,7 @@
icon = 'icons/obj/machines/mining_machines.dmi'
icon_state = "stacker"
density = 1
anchored = 1.0
anchored = 1
var/obj/machinery/mineral/stacking_unit_console/CONSOLE
var/stk_types = list()
var/stk_amt = list()
+1 -1
View File
@@ -6,7 +6,7 @@
icon = 'icons/obj/machines/mining_machines.dmi'
icon_state = "unloader"
density = 1
anchored = 1.0
anchored = 1
input_dir = WEST
output_dir = EAST
+13 -12
View File
@@ -62,10 +62,10 @@
flags = CONDUCT
slot_flags = SLOT_BELT
force = 15
throwforce = 10.0
throwforce = 10
item_state = "pickaxe"
w_class = 4.0
materials = list(MAT_METAL=3750) //one sheet, but where can you make them?
w_class = 4
materials = list(MAT_METAL=2000) //one sheet, but where can you make them?
var/digspeed = 40
var/list/digsound = list('sound/effects/picaxe1.ogg','sound/effects/picaxe2.ogg','sound/effects/picaxe3.ogg')
origin_tech = "materials=1;engineering=1"
@@ -128,23 +128,24 @@
icon_state = "shovel"
flags = CONDUCT
slot_flags = SLOT_BELT
force = 8.0
force = 8
var/digspeed = 20
throwforce = 4.0
throwforce = 4
item_state = "shovel"
w_class = 3.0
w_class = 3
materials = list(MAT_METAL=50)
origin_tech = "materials=1;engineering=1"
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
sharpness = IS_SHARP
/obj/item/weapon/shovel/spade
name = "spade"
desc = "A small tool for digging and moving dirt."
icon_state = "spade"
item_state = "spade"
force = 5.0
throwforce = 7.0
w_class = 2.0
force = 5
throwforce = 7
w_class = 2
/**********************Mining car (Crate like thing, not the rail car)**************************/
@@ -168,7 +169,7 @@
desc = "An emergency shelter stored within a pocket of bluespace."
icon_state = "pill3"
icon = 'icons/obj/chemical.dmi'
w_class = 1.0
w_class = 1
var/used = FALSE
/obj/item/weapon/survivalcapsule/attack_self()
@@ -194,9 +195,9 @@
start_turf = locate(start_turf.x -2, start_turf.y - 2, start_turf.z)
room = spawn_room(start_turf, x_size, y_size, walltypes, floor_type, "Emergency Shelter")
start_turf = get_turf(src.loc)
//Fill it
cur_turf = locate(start_turf.x, start_turf.y-2, start_turf.z)
new /obj/machinery/door/airlock/glass(cur_turf)
+11 -16
View File
@@ -28,13 +28,13 @@ var/global/list/rockTurfEdgeCache
/turf/simulated/mineral/ex_act(severity, target)
..()
switch(severity)
if(3.0)
if(3)
if (prob(75))
src.gets_drilled(null, 1)
if(2.0)
if(2)
if (prob(90))
src.gets_drilled(null, 1)
if(1.0)
if(1)
src.gets_drilled(null, 1)
return
@@ -85,7 +85,7 @@ var/global/list/rockTurfEdgeCache
new src.type(T)
/turf/simulated/mineral/random
name = "mineral deposit"
name = "rock"
icon_state = "rock"
var/mineralSpawnChanceList = list(
"Uranium" = 5, "Diamond" = 1, "Gold" = 10,
@@ -533,12 +533,12 @@ var/global/list/rockTurfEdgeCache
/turf/simulated/floor/plating/asteroid/ex_act(severity, target)
contents_explosion(severity, target)
switch(severity)
if(3.0)
if(3)
return
if(2.0)
if(2)
if (prob(20))
src.gets_dug()
if(1.0)
if(1)
src.gets_dug()
return
@@ -602,16 +602,11 @@ var/global/list/rockTurfEdgeCache
icon_state = "asteroid_dug"
return
/turf/simulated/floor/plating/asteroid/singularity_act()
return
/turf/simulated/floor/plating/asteroid/singularity_pull(S, current_size)
if(current_size == STAGE_THREE)
if(prob(30))
gets_dug()
else if(current_size == STAGE_FOUR)
if(prob(50))
gets_dug()
else if(current_size >= STAGE_FIVE)
if(prob(90))
gets_dug()
return
/turf/proc/updateMineralOverlays()
src.overlays.Cut()
+1 -1
View File
@@ -6,7 +6,7 @@
icon = 'icons/obj/economy.dmi'
icon_state = "coinpress0"
density = 1
anchored = 1.0
anchored = 1
var/amt_silver = 0 //amount of silver
var/amt_gold = 0 //amount of gold
var/amt_diamond = 0
+2 -2
View File
@@ -5,9 +5,9 @@
name = "Money bag"
icon_state = "moneybag"
flags = CONDUCT
force = 10.0
force = 10
throwforce = 0
w_class = 4.0
w_class = 4
burn_state = 0 //Burnable
burntime = 20
+17 -2
View File
@@ -22,6 +22,7 @@
icon_state = "Uranium ore"
origin_tech = "materials=5"
points = 18
materials = list(MAT_URANIUM=MINERAL_MATERIAL_AMOUNT)
refined_type = /obj/item/stack/sheet/mineral/uranium
/obj/item/weapon/ore/iron
@@ -29,6 +30,7 @@
icon_state = "Iron ore"
origin_tech = "materials=1"
points = 1
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT)
refined_type = /obj/item/stack/sheet/metal
/obj/item/weapon/ore/glass
@@ -36,6 +38,7 @@
icon_state = "Glass ore"
origin_tech = "materials=1"
points = 1
materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
refined_type = /obj/item/stack/sheet/glass
/obj/item/weapon/ore/glass/attack_self(mob/living/user)
@@ -60,8 +63,9 @@
/obj/item/weapon/ore/plasma
name = "plasma ore"
icon_state = "Plasma ore"
origin_tech = "materials=2"
origin_tech = "plasmatech=2;materials=2"
points = 36
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT)
refined_type = /obj/item/stack/sheet/mineral/plasma
/obj/item/weapon/ore/plasma/attackby(obj/item/I, mob/user, params)
@@ -78,6 +82,7 @@
icon_state = "Silver ore"
origin_tech = "materials=3"
points = 18
materials = list(MAT_SILVER=MINERAL_MATERIAL_AMOUNT)
refined_type = /obj/item/stack/sheet/mineral/silver
/obj/item/weapon/ore/gold
@@ -85,6 +90,7 @@
icon_state = "Gold ore"
origin_tech = "materials=4"
points = 18
materials = list(MAT_GOLD=MINERAL_MATERIAL_AMOUNT)
refined_type = /obj/item/stack/sheet/mineral/gold
/obj/item/weapon/ore/diamond
@@ -92,6 +98,7 @@
icon_state = "Diamond ore"
origin_tech = "materials=6"
points = 36
materials = list(MAT_DIAMOND=MINERAL_MATERIAL_AMOUNT)
refined_type = /obj/item/stack/sheet/mineral/diamond
/obj/item/weapon/ore/bananium
@@ -99,6 +106,7 @@
icon_state = "Clown ore"
origin_tech = "materials=4"
points = 27
materials = list(MAT_BANANIUM=MINERAL_MATERIAL_AMOUNT)
refined_type = /obj/item/stack/sheet/mineral/bananium
/obj/item/weapon/ore/slag
@@ -218,7 +226,7 @@
flags = CONDUCT
force = 1
throwforce = 2
w_class = 1.0
w_class = 1
var/string_attached
var/list/sideslist = list("heads","tails")
var/cmineral = null
@@ -237,36 +245,43 @@
cmineral = "gold"
icon_state = "coin_gold_heads"
value = 160
materials = list(MAT_GOLD = 400)
/obj/item/weapon/coin/silver
cmineral = "silver"
icon_state = "coin_silver_heads"
value = 40
materials = list(MAT_SILVER = 400)
/obj/item/weapon/coin/diamond
cmineral = "diamond"
icon_state = "coin_diamond_heads"
value = 120
materials = list(MAT_DIAMOND = 400)
/obj/item/weapon/coin/iron
cmineral = "iron"
icon_state = "coin_iron_heads"
value = 20
materials = list(MAT_METAL = 400)
/obj/item/weapon/coin/plasma
cmineral = "plasma"
icon_state = "coin_plasma_heads"
value = 80
materials = list(MAT_PLASMA = 400)
/obj/item/weapon/coin/uranium
cmineral = "uranium"
icon_state = "coin_uranium_heads"
value = 160
materials = list(MAT_URANIUM = 400)
/obj/item/weapon/coin/clown
cmineral = "bananium"
icon_state = "coin_bananium_heads"
value = 600 //makes the clown cri
materials = list(MAT_BANANIUM = 400)
/obj/item/weapon/coin/adamantine
cmineral = "adamantine"
+8 -24
View File
@@ -106,6 +106,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob/dead/observer/Move(NewLoc, direct)
if (orbiting)
stop_orbit()
if(NewLoc)
loc = NewLoc
for(var/obj/effect/step_trigger/S in NewLoc)
@@ -158,12 +160,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(mind.current.key && copytext(mind.current.key,1,2)!="@") //makes sure we don't accidentally kick any clients
usr << "<span class='warning'>Another consciousness is in your body...It is resisting you.</span>"
return
if(mind.current.ajourn && mind.current.stat != DEAD) //check if the corpse is astral-journeying (it's client ghosted using a cultist rune).
var/obj/effect/rune/R = locate() in mind.current.loc //whilst corpse is alive, we can only reenter the body if it's on the rune
if(!(R && R.word1 == wordhell && R.word2 == wordtravel && R.word3 == wordself)) //astral journeying rune
usr << "<span class='warning'>The astral cord that ties your body and your spirit has been severed. You are likely to wander the realm beyond until your body is finally dead and thus reunited with you.</span>"
return
mind.current.ajourn=0
mind.current.key = key
return 1
@@ -200,8 +196,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
/mob/dead/observer/verb/follow()
set category = "Ghost"
set name = "Follow" // "Haunt"
set desc = "Follow and haunt a mob."
set name = "Orbit" // "Haunt"
set desc = "Follow and orbit a mob."
var/list/mobs = getmobs()
var/input = input("Please, select a mob!", "Haunt", null, null) as null|anything in mobs
@@ -211,22 +207,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
// This is the ghost's follow verb with an argument
/mob/dead/observer/proc/ManualFollow(atom/movable/target)
if(target && target != src)
if(following && following == target)
if(orbiting && orbiting == target)
return
following = target
src << "<span class='notice'>Now following [target].</span>"
spawn(0)
var/turf/pos = get_turf(src)
while(loc == pos && target && following == target && client)
var/turf/T = get_turf(target)
if(!T)
break
// To stop the ghost flickering.
if(loc != T)
loc = T
pos = loc
sleep(15)
if (target == following) following = null
src << "<span class='notice'>Now orbiting [target].</span>"
orbit(target,24,0)
/mob/dead/observer/verb/jumptomob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak
@@ -377,4 +361,4 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(istype(target) && (target != src))
ManualFollow(target)
if(href_list["reenter"])
reenter_corpse()
reenter_corpse()
+8 -26
View File
@@ -86,22 +86,14 @@
/mob/living/carbon/human/interactive/proc/random()
//this is here because this has no client/prefs/brain whatever.
underwear = random_underwear(gender)
skin_tone = random_skin_tone()
hair_style = random_hair_style(gender)
facial_hair_style = random_facial_hair_style(gender)
hair_color = random_short_color()
facial_hair_color = hair_color
eye_color = "blue"
age = rand(AGE_MIN,AGE_MAX)
ready_dna(src,random_blood_type())
//job handling
var/list/jobs = SSjob.occupations
for(var/datum/job/J in jobs)
if(J.title == "Cyborg" || J.title == "AI" || J.title == "Chaplain" || J.title == "Mime")
jobs -= J
myjob = pick(jobs)
src.job = myjob.title
job = myjob.title
if(!graytide)
myjob.equip(src)
myjob.apply_fingerprints(src)
@@ -120,25 +112,18 @@
/mob/living/carbon/human/interactive/New()
..()
gender = pick(MALE,FEMALE)
if(gender == MALE)
name = "[pick(first_names_male)] [pick(last_names)]"
real_name = name
else
name = "[pick(first_names_female)] [pick(last_names)]"
real_name = name
random()
MYID = new(src)
MYID.name = "[src.real_name]'s ID Card ([myjob.title])"
MYID.assignment = "[myjob.title]"
MYID.registered_name = src.real_name
MYID.access = myjob.access
src.equip_to_slot_or_del(MYID, slot_wear_id)
equip_to_slot_or_del(MYID, slot_wear_id)
MYPDA = new(src)
MYPDA.owner = src.real_name
MYPDA.owner = real_name
MYPDA.ownjob = "Crew"
MYPDA.name = "PDA-[src.real_name] ([myjob.title])"
src.equip_to_slot_or_del(MYPDA, slot_belt)
MYPDA.name = "PDA-[real_name] ([myjob.title])"
equip_to_slot_or_del(MYPDA, slot_belt)
zone_sel = new /obj/screen/zone_sel()
zone_sel.selecting = "chest"
if(prob(10)) //my x is augmented
@@ -186,7 +171,7 @@
if(TRAITS & TRAIT_SMART)
smartness = 25
else if(TRAITS & TRAIT_DUMB)
mutations |= CLUMSY
disabilities |= CLUMSY
smartness = 75
if(TRAITS & TRAIT_MEAN)
@@ -293,7 +278,7 @@
/mob/living/carbon/human/interactive/Life()
..()
if(isnotfunc())
if(isnotfunc())
walk(src,0)
return
if(a_intent != "disarm")
@@ -371,9 +356,7 @@
if(!l_hand || !r_hand)
var/obj/item/clothing/C = TARGET
take_to_slot(C)
if(equip_to_appropriate_slot(C))
C.update_icon()
else
if(!equip_to_appropriate_slot(C))
var/obj/item/I = get_item_by_slot(C)
unEquip(I)
equip_to_appropriate_slot(C)
@@ -384,7 +367,6 @@
equip_to_appropriate_slot(MYPDA)
if(MYID in src.loc)
equip_to_appropriate_slot(MYID)
update_icons()
//THIEVING SKILLS END
//-------------TOUCH ME
if(istype(TARGET,/obj/structure))
+59 -18
View File
@@ -31,11 +31,23 @@ obj/effect/dummy/slaughter/relaymove(mob/user, direction)
/mob/living/proc/phaseout(obj/effect/decal/cleanable/B)
if(iscarbon(src))
var/mob/living/carbon/C = src
if(C.l_hand || C.r_hand)
C << "<span class='warning'>You may not hold items while blood crawling!</span>"
return 0
var/obj/item/weapon/bloodcrawl/B1 = new(C)
var/obj/item/weapon/bloodcrawl/B2 = new(C)
B1.icon_state = "bloodhand_left"
B2.icon_state = "bloodhand_right"
C.put_in_hands(B1)
C.put_in_hands(B2)
C.regenerate_icons()
var/mob/living/kidnapped = null
var/turf/mobloc = get_turf(src.loc)
src.notransform = TRUE
spawn(0)
src.visible_message("[src] sinks into the pool of blood.")
src.visible_message("<span class='warning'>[src] sinks into the pool of blood!</span>")
playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, 1, -1)
var/obj/effect/dummy/slaughter/holder = PoolOrNew(/obj/effect/dummy/slaughter,mobloc)
src.ExtinguishMob()
@@ -45,42 +57,71 @@ obj/effect/dummy/slaughter/relaymove(mob/user, direction)
if(istype(src.pulling, /mob/living))
var/mob/living/victim = src.pulling
if(victim.stat == CONSCIOUS)
src.visible_message("[victim] kicks free of the [src] at the last second!")
src.visible_message("<span class='warning'>[victim] kicks free of the blood pool just before entering it!</span>")
else
victim.loc = holder
src.visible_message("<span class='warning'><B>The [src] drags [victim] into the pool of blood!</B>")
victim.emote("scream")
src.visible_message("<span class='warning'><b>[src] drags [victim] into the pool of blood!</b></span>")
kidnapped = victim
src.loc = holder
src.holder = holder
if(kidnapped)
src << "<B>You begin to feast on [kidnapped]. You can not move while you are doing this.</B>"
playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1)
sleep(30)
playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1)
sleep(30)
playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1)
sleep(30)
src << "<span class='danger'>You begin to feast on [kidnapped]. You can not move while you are doing this.</span>"
for(var/i = 3; i > 0; i--)
playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1)
sleep(30)
if(kidnapped)
src << "<B>You devour [kidnapped]. Your health is fully restored.</B>"
src << "<span class='danger'>You devour [kidnapped]. Your health is fully restored.</span>"
src.adjustBruteLoss(-1000)
src.adjustFireLoss(-1000)
src.adjustOxyLoss(-1000)
src.adjustToxLoss(-1000)
kidnapped.ghostize()
qdel(kidnapped)
if(istype(src, /mob/living/simple_animal/slaughter))
var/mob/living/simple_animal/slaughter/S = src
kidnapped << "<span class='userdanger'>You feel teeth sink into your flesh, and the--</span>"
kidnapped.adjustBruteLoss(1000)
kidnapped.loc = src
S.consumed_mobs.Add(kidnapped)
else
kidnapped.ghostize()
qdel(kidnapped)
else
src << "<B>You happily devour...nothing? Your meal vanished at some point!</B>"
src << "<span class='danger'>You happily devour... nothing? Your meal vanished at some point!</span>"
src.notransform = 0
return 1
/obj/item/weapon/bloodcrawl
name = "blood crawl"
desc = "You are unable to hold anything while in this form."
icon = 'icons/effects/blood.dmi'
flags = NODROP
/mob/living/proc/phasein(obj/effect/decal/cleanable/B)
if(src.notransform)
src << "<B>Finish eating first!</B>"
src << "<span class='warning'>Finish eating first!</span>"
return 0
B.visible_message("<span class='warning'>[B] starts to bubble...</span>")
if(!do_after(src, 20, target = B))
return
if(!B)
return
src.loc = B.loc
src.client.eye = src
src.visible_message("<span class='warning'><B>The [src] rises out of the pool of blood!</B>")
src.visible_message("<span class='warning'><B>[src] rises out of the pool of blood!</B>")
playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1)
if(iscarbon(src))
var/mob/living/carbon/C = src
for(var/obj/item/weapon/bloodcrawl/BC in C)
C.flags = null
C.unEquip(BC)
qdel(BC)
var/oldcolor = src.color
if(istype(B, /obj/effect/decal/cleanable/xenoblood)) //Makes the mob have the color of the blood pool it came out of for a few seconds
src.color = rgb(43, 186, 0)
else
src.color = rgb(149, 10, 10)
qdel(src.holder)
src.holder = null
return 1
spawn(30)
src.color = oldcolor
return 1
@@ -93,16 +93,16 @@
..()
switch (severity)
if (1.0)
if (1)
gib()
return
if (2.0)
if (2)
adjustBruteLoss(60)
adjustFireLoss(60)
adjustEarDamage(30,120)
if(3.0)
if(3)
adjustBruteLoss(30)
if (prob(50))
Paralyse(1)
@@ -1,8 +1,8 @@
/mob/living/carbon/alien/humanoid/hunter
name = "alien hunter"
caste = "h"
maxHealth = 150
health = 150
maxHealth = 125
health = 125
icon_state = "alienh_s"
/mob/living/carbon/alien/humanoid/hunter/New()
@@ -88,10 +88,16 @@
if(A)
if(istype(A, /mob/living))
var/mob/living/L = A
L.visible_message("<span class ='danger'>[src] pounces on [L]!</span>", "<span class ='userdanger'>[src] pounces on you!</span>")
L.Weaken(5)
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
step_towards(src,L)
var/blocked = 0
if(ishuman(A))
var/mob/living/carbon/human/H = A
if(H.check_shields(90, "the [name]", src, 1))
blocked = 1
if(!blocked)
L.visible_message("<span class ='danger'>[src] pounces on [L]!</span>", "<span class ='userdanger'>[src] pounces on you!</span>")
L.Weaken(5)
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
step_towards(src,L)
toggle_leap(0)
pounce_cooldown = !pounce_cooldown
@@ -1,8 +1,8 @@
/mob/living/carbon/alien/humanoid/sentinel
name = "alien sentinel"
caste = "s"
maxHealth = 125
health = 125
maxHealth = 150
health = 150
icon_state = "aliens_s"
@@ -35,4 +35,3 @@
/mob/living/carbon/alien/humanoid/sentinel/movement_delay()
. = ..()
. += 1
@@ -2,6 +2,7 @@
name = "alien"
icon_state = "alien_s"
pass_flags = PASSTABLE
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno = 5, /obj/item/stack/sheet/animalhide/xeno = 1)
var/obj/item/r_store = null
var/obj/item/l_store = null
var/caste = ""
@@ -40,9 +40,9 @@
if(L.amount_grown >= L.max_grown) //TODO ~Carn
L << "<span class='name'>You are growing into a beautiful alien! It is time to choose a caste.</span>"
L << "<span class='info'>There are three to choose from:"
L << "<span class='name'>Hunters</span> <span class='info'>are strong and agile, able to hunt away from the hive and rapidly move through ventilation shafts. Hunters generate plasma slowly and have low reserves.</span>"
L << "<span class='name'>Sentinels</span> <span class='info'>are tasked with protecting the hive and are deadly up close and at a range. They are not as physically imposing nor fast as the hunters.</span>"
L << "<span class='name'>Drones</span> <span class='info'>are the working class, offering the largest plasma storage and generation. They are the only caste which may evolve again, turning into the dreaded alien queen.</span>"
L << "<span class='name'>Hunters</span> <span class='info'>are the most agile caste tasked with hunting for hosts. They are faster than a human and can even pounce, but are not much tougher than a drone.</span>"
L << "<span class='name'>Sentinels</span> <span class='info'>are tasked with protecting the hive. With their ranged spit, invisibility, and high health, they make formidable guardians and acceptable secondhand hunters.</span>"
L << "<span class='name'>Drones</span> <span class='info'>are the weakest and slowest of the castes, but can grow into the queen if there is none, and are vital to maintaining a hive with their resin secretion abilities.</span>"
var/alien_caste = alert(L, "Please choose which alien caste you shall belong to.",,"Hunter","Sentinel","Drone")
var/mob/living/carbon/alien/humanoid/new_xeno
@@ -1,6 +1,5 @@
/obj/item/organ/internal/alien
origin_tech = "biotech=5"
icon = 'icons/effects/blood.dmi'
icon_state = "xgibmid2"
var/list/alien_powers = list()
@@ -30,6 +29,7 @@
/obj/item/organ/internal/alien/plasmavessel
name = "plasma vessel"
icon_state = "plasma"
origin_tech = "biotech=5;plasma=2"
w_class = 3
zone = "chest"
@@ -48,6 +48,7 @@
/obj/item/organ/internal/alien/plasmavessel/large
name = "large plasma vessel"
icon_state = "plasma_large"
w_class = 4
storedPlasma = 200
max_plasma = 500
@@ -59,6 +60,7 @@
/obj/item/organ/internal/alien/plasmavessel/small
name = "small plasma vessel"
icon_state = "plasma_small"
w_class = 2
storedPlasma = 100
max_plasma = 150
@@ -66,6 +68,7 @@
/obj/item/organ/internal/alien/plasmavessel/small/tiny
name = "tiny plasma vessel"
icon_state = "plasma_tiny"
w_class = 1
max_plasma = 100
alien_powers = list(/obj/effect/proc_holder/alien/transfer)
@@ -100,6 +103,7 @@
/obj/item/organ/internal/alien/hivenode
name = "hive node"
icon_state = "hivenode"
zone = "head"
slot = "hivenode"
origin_tech = "biotech=5;magnets=4;bluespace=3"
@@ -117,6 +121,7 @@
/obj/item/organ/internal/alien/resinspinner
name = "resin spinner"
icon_state = "stomach-x"
zone = "mouth"
slot = "resinspinner"
origin_tech = "biotech=5;materials=4"
@@ -125,6 +130,7 @@
/obj/item/organ/internal/alien/acid
name = "acid gland"
icon_state = "acid"
zone = "mouth"
slot = "acidgland"
origin_tech = "biotech=5;materials=2;combat=2"
@@ -133,6 +139,7 @@
/obj/item/organ/internal/alien/neurotoxin
name = "neurotoxin gland"
icon_state = "neurotox"
zone = "mouth"
slot = "neurotoxingland"
origin_tech = "biotech=5;combat=5"
@@ -141,6 +148,7 @@
/obj/item/organ/internal/alien/eggsac
name = "egg sac"
icon_state = "eggsac"
zone = "groin"
slot = "eggsac"
w_class = 4
@@ -57,6 +57,10 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds
RefreshInfectionImage()
if(stage == 5 && prob(50))
for(var/datum/surgery/S in owner.surgeries)
if(S.location == "chest" && istype(S.get_surgery_step(), /datum/surgery_step/manipulate_organs))
AttemptGrow(0)
return
AttemptGrow()
@@ -79,10 +83,8 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds
stage = 4 // Let's try again later.
return
if(owner.lying)
owner.overlays += image('icons/mob/alien.dmi', loc = owner, icon_state = "burst_lie")
else
owner.overlays += image('icons/mob/alien.dmi', loc = owner, icon_state = "burst_stand")
var/overlay = image('icons/mob/alien.dmi', loc = owner, icon_state = "burst_lie")
owner.overlays += overlay
spawn(6)
var/atom/xeno_loc = owner
if(!gib_on_success)
@@ -94,6 +96,9 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds
if(gib_on_success)
owner.stomach_contents += new_xeno
owner.gib()
else
owner.adjustBruteLoss(40)
owner.overlays -= overlay
qdel(src)
@@ -19,6 +19,7 @@ var/const/MAX_ACTIVE_TIME = 400
throw_range = 5
tint = 3
flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH
layer = MOB_LAYER
var/stat = CONSCIOUS //UNCONSCIOUS is the idle state in this case
+10 -6
View File
@@ -85,15 +85,19 @@
update_icon()
name = "Man-Machine Interface"
/obj/item/device/mmi/proc/transfer_identity(mob/living/carbon/human/H) //Same deal as the regular brain proc. Used for human-->robot people.
/obj/item/device/mmi/proc/transfer_identity(mob/living/L) //Same deal as the regular brain proc. Used for human-->robot people.
brainmob = new(src)
brainmob.name = H.real_name
brainmob.real_name = H.real_name
if(check_dna_integrity(H))
brainmob.dna = H.dna
brainmob.name = L.real_name
brainmob.real_name = L.real_name
if(L.has_dna())
var/mob/living/carbon/C = L
if(!brainmob.dna)
brainmob.dna = new /datum/dna(brainmob)
C.dna.copy_dna(brainmob.dna)
brainmob.container = src
if(istype(H))
if(ishuman(L))
var/mob/living/carbon/human/H = L
var/obj/item/organ/internal/brain/newbrain = H.getorgan(/obj/item/organ/internal/brain)
newbrain.loc = src
brain = newbrain
@@ -26,10 +26,10 @@
qdel(brainmob)
//Update the body's icon so it doesnt appear debrained anymore
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.update_hair(0)
//Update the body's icon so it doesnt appear debrained anymore
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.update_hair(0)
/obj/item/organ/internal/brain/Remove(mob/living/carbon/M, special = 0)
..()
@@ -56,9 +56,11 @@
brainmob.name = L.real_name
brainmob.real_name = L.real_name
brainmob.timeofhostdeath = L.timeofdeath
if(iscarbon(L))
if(L.has_dna())
var/mob/living/carbon/C = L
brainmob.dna = C.dna
if(!brainmob.dna)
brainmob.dna = new /datum/dna(brainmob)
C.dna.copy_dna(brainmob.dna)
if(L.mind)
L.mind.transfer_to(brainmob)
brainmob << "<span class='notice'>You feel slightly disoriented. That's normal when you're just a brain.</span>"
@@ -117,5 +119,5 @@
/obj/item/organ/internal/brain/alien
name = "alien brain"
desc = "We barely understand the brains of terrestial animals. Who knows what we may find in the brain of such an advanced species?"
icon_state = "brain-alien"
icon_state = "brain-x"
origin_tech = "biotech=7"
+4 -4
View File
@@ -45,12 +45,12 @@
if(status_flags & GODMODE) return
if(exposed_temperature > bodytemperature)
var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0)
adjustFireLoss(20.0*discomfort)
var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1)
adjustFireLoss(20*discomfort)
else
var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0)
adjustFireLoss(5.0*discomfort)
var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1)
adjustFireLoss(5*discomfort)
/mob/living/carbon/brain/handle_regular_status_updates() //TODO: comment out the unused bits >_>
@@ -55,17 +55,21 @@ var/global/posibrain_notif_cooldown = 0
return
transfer_personality(user)
/obj/item/device/mmi/posibrain/transfer_identity(mob/living/carbon/H)
name = "positronic brain ([H])"
brainmob.name = H.real_name
brainmob.real_name = H.real_name
brainmob.dna = H.dna
brainmob.timeofhostdeath = H.timeofdeath
/obj/item/device/mmi/posibrain/transfer_identity(mob/living/carbon/C)
name = "positronic brain ([C])"
brainmob.name = C.real_name
brainmob.real_name = C.real_name
brainmob.dna = C.dna
if(C.has_dna())
if(!brainmob.dna)
brainmob.dna = new /datum/dna(brainmob)
C.dna.copy_dna(brainmob.dna)
brainmob.timeofhostdeath = C.timeofdeath
brainmob.stat = 0
if(brainmob.mind)
brainmob.mind.assigned_role = "Positronic Brain"
if(H.mind)
H.mind.transfer_to(brainmob)
if(C.mind)
C.mind.transfer_to(brainmob)
brainmob.mind.remove_all_antag()
brainmob.mind.wipe_memory()
+3 -1
View File
@@ -22,6 +22,8 @@
for(var/atom/movable/food in stomach_contents)
qdel(food)
remove_from_all_data_huds()
if(dna)
qdel(dna)
return ..()
/mob/living/carbon/Move(NewLoc, direct)
@@ -78,7 +80,7 @@
. = ..()
/mob/living/carbon/electrocute_act(shock_damage, obj/source, siemens_coeff = 1.0, override = 0)
/mob/living/carbon/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, override = 0)
shock_damage *= siemens_coeff
if(shock_damage<1 && !override)
return 0
@@ -1,4 +1,4 @@
/mob/living/carbon/hitby(atom/movable/AM, skipcatch, hitpush = 1)
/mob/living/carbon/hitby(atom/movable/AM, skipcatch, hitpush = 1, blocked = 0)
if(!skipcatch) //ugly, but easy
if(in_throw_mode && !get_active_hand()) //empty active hand and we're in throw mode
if(canmove && !restrained())
@@ -9,9 +9,6 @@
var/obj/item/handcuffed = null //Whether or not the mob is handcuffed
var/obj/item/legcuffed = null //Same as handcuffs but for legs. Bear traps use this.
var/list/features = list("mcolor" = "FFF", "tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None")
//inventory slots
var/obj/item/back = null
var/obj/item/clothing/mask/wear_mask = null
+4 -1
View File
@@ -50,9 +50,12 @@
msg += "It isn't responding to anything around it; it seems to be asleep.\n"
msg += "</span>"
if (digitalcamo)
if(digitalcamo)
msg += "It is moving its body in an unnatural and blatantly unsimian manner.\n"
if(!getorgan(/obj/item/organ/internal/brain))
msg += "<span class='deadsay'>It appears that it's brain is missing...</span>\n"
msg += "*---------*</span>"
user << msg

Some files were not shown because too many files have changed in this diff Show More