mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-12 15:45:25 +01:00
Deconflict
This commit is contained in:
@@ -54,7 +54,7 @@ var/global/nologevent = 0
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////Panels
|
||||
|
||||
/datum/admins/proc/show_player_panel(var/mob/M in GLOB.mob_list)
|
||||
set category = "Admin"
|
||||
set category = null
|
||||
set name = "Show Player Panel"
|
||||
set desc="Edit player (respawn, ban, heal, etc)"
|
||||
|
||||
@@ -937,9 +937,9 @@ var/global/nologevent = 0
|
||||
message_admins("[key_name_admin(usr)] checked the AI laws")
|
||||
|
||||
/client/proc/update_mob_sprite(mob/living/carbon/human/H as mob)
|
||||
set category = "Admin"
|
||||
set name = "Update Mob Sprite"
|
||||
set desc = "Should fix any mob sprite update errors."
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
@@ -71,13 +71,12 @@ var/list/admin_verbs_admin = list(
|
||||
/client/proc/alt_check,
|
||||
/client/proc/secrets,
|
||||
/client/proc/change_human_appearance_admin, /* Allows an admin to change the basic appearance of human-based mobs */
|
||||
/client/proc/change_human_appearance_self, /* Allows the human-based mob itself change its basic appearance */
|
||||
/client/proc/change_human_appearance_self, /* Allows the human-based mob itself to change its basic appearance */
|
||||
/client/proc/debug_variables,
|
||||
/client/proc/reset_all_tcs, /*resets all telecomms scripts*/
|
||||
/client/proc/toggle_mentor_chat,
|
||||
/client/proc/toggle_advanced_interaction, /*toggle admin ability to interact with not only machines, but also atoms such as buttons and doors*/
|
||||
/client/proc/list_ssds,
|
||||
/client/proc/list_afks,
|
||||
/client/proc/list_ssds_afks,
|
||||
/client/proc/cmd_admin_headset_message,
|
||||
/client/proc/spawn_floor_cluwne,
|
||||
/client/proc/show_discord_duplicates, // This needs removing at some point, ingame discord linking got removed in #11359
|
||||
@@ -803,7 +802,7 @@ var/list/admin_verbs_ticket = list(
|
||||
/client/proc/change_human_appearance_admin(mob/living/carbon/human/H in GLOB.mob_list)
|
||||
set name = "C.M.A. - Admin"
|
||||
set desc = "Allows you to change the mob appearance"
|
||||
set category = "Admin"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
@@ -829,7 +828,7 @@ var/list/admin_verbs_ticket = list(
|
||||
/client/proc/change_human_appearance_self(mob/living/carbon/human/H in GLOB.mob_list)
|
||||
set name = "C.M.A. - Self"
|
||||
set desc = "Allows the mob to change its appearance"
|
||||
set category = "Admin"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
|
||||
/client/proc/resolveAllAdminTickets()
|
||||
set name = "Resolve All Open Admin Tickets"
|
||||
set category = "Admin"
|
||||
set category = null
|
||||
|
||||
if(!holder || !check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(alert("Are you sure you want to resolve ALL open tickets?","Resolve all open tickets?","Yes","No") != "Yes")
|
||||
if(alert("Are you sure you want to resolve ALL open admin tickets?","Resolve all open admin tickets?","Yes","No") != "Yes")
|
||||
return
|
||||
|
||||
SStickets.resolveAllOpenTickets()
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
|
||||
/client/proc/resolveAllMentorTickets()
|
||||
set name = "Resolve All Open Mentor Tickets"
|
||||
set category = "Admin"
|
||||
set category = null
|
||||
|
||||
if(!holder || !check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
if(alert("Are you sure you want to resolve ALL open tickets?","Resolve all open tickets?","Yes","No") != "Yes")
|
||||
if(alert("Are you sure you want to resolve ALL open mentor tickets?","Resolve all open mentor tickets?","Yes","No") != "Yes")
|
||||
return
|
||||
|
||||
SSmentor_tickets.resolveAllOpenTickets()
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
return
|
||||
var/ticketID = text2num(href_list["openmentorticket"])
|
||||
SSmentor_tickets.showDetailUI(usr, ticketID)
|
||||
|
||||
|
||||
if(href_list["stickyban"])
|
||||
stickyban(href_list["stickyban"],href_list)
|
||||
|
||||
@@ -169,14 +169,6 @@
|
||||
message_admins("Ban process: A mob matching [playermob.ckey] was found at location [playermob.x], [playermob.y], [playermob.z]. Custom IP and computer id fields replaced with the IP and computer id from the located mob")
|
||||
|
||||
DB_ban_record(bantype, playermob, banduration, banreason, banjob, null, banckey, banip, bancid )
|
||||
if(BANTYPE_PERMA)
|
||||
add_note(banckey, "Permanently Banned - [banreason]", null, usr.ckey, 0)
|
||||
else if(BANTYPE_TEMP)
|
||||
add_note(banckey, "Banned for [banduration] minutes - [banreason]", null, usr.ckey, 0)
|
||||
else if(BANTYPE_JOB_PERMA)
|
||||
add_note(banckey, "Banned from [banjob] - [banreason]", null, usr.ckey, 0)
|
||||
else
|
||||
add_note(banckey, "[banreason]", null, usr.ckey, 0)
|
||||
|
||||
|
||||
else if(href_list["editrights"])
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
/client/proc/jumptoturf(var/turf/T in world)
|
||||
set name = "Jump to Turf"
|
||||
set category = "Admin"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
@@ -191,7 +191,7 @@
|
||||
else
|
||||
if(check_rights(R_ADMIN|R_MOD, 0, X.mob))
|
||||
to_chat(X, "<span class='boldnotice'>[type]: [key_name(src, TRUE, type)]->[key_name(C, TRUE, type)]: [emoji_msg]</span>")
|
||||
|
||||
|
||||
//Check if the mob being PM'd has any open admin tickets.
|
||||
var/tickets = list()
|
||||
if(type == "Mentorhelp")
|
||||
@@ -205,10 +205,10 @@
|
||||
if(type == "Mentorhelp")
|
||||
if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, C.mob)) //Is the person being pm'd an admin? If so we check if the pm'er has open tickets
|
||||
tickets = SSmentor_tickets.checkForTicket(src)
|
||||
else // Ahelp
|
||||
else // Ahelp
|
||||
if(check_rights(R_ADMIN|R_MOD, 0, C.mob)) //Is the person being pm'd an admin? If so we check if the pm'er has open tickets
|
||||
tickets = SStickets.checkForTicket(src)
|
||||
|
||||
|
||||
if(tickets)
|
||||
for(var/datum/ticket/i in tickets)
|
||||
i.addResponse(src, msg)
|
||||
@@ -351,7 +351,7 @@
|
||||
var/client/C = pms[title].client || update_client(title)
|
||||
if(!C)
|
||||
return "[title] (Disconnected)"
|
||||
return "[key_name(C, FALSE)] ([ADMIN_QUE(C.mob,"?")]) ([ADMIN_PP(C.mob,"PP")]) ([ADMIN_VV(C.mob,"VV")]) ([ADMIN_SM(C.mob,"SM")]) ([admin_jump_link(C.mob)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>)"
|
||||
return "[key_name(C, FALSE)] ([ADMIN_QUE(C.mob,"?")]) ([ADMIN_PP(C.mob,"PP")]) ([ADMIN_VV(C.mob,"VV")]) ([ADMIN_TP(C.mob,"TP")]) ([ADMIN_SM(C.mob,"SM")]) ([admin_jump_link(C.mob)])"
|
||||
|
||||
/datum/pm_tracker/proc/update_client(title)
|
||||
var/client/C = GLOB.directory[ckey(title)]
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
var/global/list/frozen_mob_list = list()
|
||||
/client/proc/freeze(var/mob/living/M as mob in GLOB.mob_list)
|
||||
set category = "Admin"
|
||||
set name = "Freeze"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
@@ -87,8 +87,8 @@ var/global/list/frozen_mob_list = list()
|
||||
//////////////////////////Freeze Mech
|
||||
|
||||
/client/proc/freezemecha(var/obj/mecha/O as obj in GLOB.mechas_list)
|
||||
set category = "Admin"
|
||||
set name = "Freeze Mech"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
deity = SSticker.cultdat.entity_name
|
||||
|
||||
log_say("(PRAYER) [msg]", usr)
|
||||
msg = "<span class='notice'>[bicon(cross)]<b><font color=[font_color]>[prayer_type][deity ? " (to [deity])" : ""][mind && mind.isholy ? " (blessings: [mind.num_blessed])" : ""]:</font> [key_name(src, 1)] ([ADMIN_QUE(src,"?")]) ([ADMIN_PP(src,"PP")]) ([ADMIN_VV(src,"VV")]) ([ADMIN_SM(src,"SM")]) ([admin_jump_link(src)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_SC(src,"SC")]) (<A HREF='?_src_=holder;Bless=[UID()]'>BLESS</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b> [msg]</span>"
|
||||
msg = "<span class='notice'>[bicon(cross)]<b><font color=[font_color]>[prayer_type][deity ? " (to [deity])" : ""][mind && mind.isholy ? " (blessings: [mind.num_blessed])" : ""]:</font> [key_name(src, 1)] ([ADMIN_QUE(src,"?")]) ([ADMIN_PP(src,"PP")]) ([ADMIN_VV(src,"VV")]) ([ADMIN_TP(src,"TP")]) ([ADMIN_SM(src,"SM")]) ([admin_jump_link(src)]) ([ADMIN_SC(src,"SC")]) (<A HREF='?_src_=holder;Bless=[UID()]'>BLESS</A>) (<A HREF='?_src_=holder;Smite=[UID()]'>SMITE</A>):</b> [msg]</span>"
|
||||
|
||||
for(var/client/X in GLOB.admins)
|
||||
if(check_rights(R_EVENT,0,X.mob))
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
/proc/Centcomm_announce(var/text , var/mob/Sender)
|
||||
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
|
||||
msg = "<span class='boldnotice'><font color=orange>CENTCOMM: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_CENTCOM_REPLY(Sender,"RPLY")])):</span> [msg]"
|
||||
msg = "<span class='boldnotice'><font color=orange>CENTCOMM: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_TP(Sender,"TP")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_CENTCOM_REPLY(Sender,"RPLY")])):</span> [msg]"
|
||||
for(var/client/X in GLOB.admins)
|
||||
if(R_EVENT & X.holder.rights)
|
||||
to_chat(X, msg)
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
/proc/Syndicate_announce(var/text , var/mob/Sender)
|
||||
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
|
||||
msg = "<span class='boldnotice'><font color='#DC143C'>SYNDICATE: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_SYNDICATE_REPLY(Sender,"RPLY")]):</span> [msg]"
|
||||
msg = "<span class='boldnotice'><font color='#DC143C'>SYNDICATE: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_TP(Sender,"TP")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_SYNDICATE_REPLY(Sender,"RPLY")]):</span> [msg]"
|
||||
for(var/client/X in GLOB.admins)
|
||||
if(check_rights(R_EVENT,0,X.mob))
|
||||
to_chat(X, msg)
|
||||
@@ -59,7 +59,7 @@
|
||||
|
||||
/proc/HONK_announce(var/text , var/mob/Sender)
|
||||
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
|
||||
msg = "<span class='boldnotice'><font color=pink>HONK: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) (<A HREF='?_src_=holder;HONKReply=[Sender.UID()]'>RPLY</A>):</span> [msg]"
|
||||
msg = "<span class='boldnotice'><font color=pink>HONK: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_TP(Sender,"TP")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) ([ADMIN_BSA(Sender,"BSA")]) (<A HREF='?_src_=holder;HONKReply=[Sender.UID()]'>RPLY</A>):</span> [msg]"
|
||||
for(var/client/X in GLOB.admins)
|
||||
if(R_EVENT & X.holder.rights)
|
||||
to_chat(X, msg)
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
/proc/ERT_Announce(var/text , var/mob/Sender, var/repeat_warning)
|
||||
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
|
||||
msg = "<span class='adminnotice'><b><font color=orange>ERT REQUEST: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) (<A HREF='?_src_=holder;ErtReply=[Sender.UID()]'>RESPOND</A>):</b> [msg]</span>"
|
||||
msg = "<span class='adminnotice'><b><font color=orange>ERT REQUEST: </font>[key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_TP(Sender,"TP")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) ([ADMIN_BSA(Sender,"BSA")]) (<A HREF='?_src_=holder;ErtReply=[Sender.UID()]'>RESPOND</A>):</b> [msg]</span>"
|
||||
if(repeat_warning)
|
||||
msg += "<BR><span class='adminnotice'><b>WARNING: ERT request has gone 5 minutes with no reply!</b></span>"
|
||||
for(var/client/X in GLOB.admins)
|
||||
@@ -80,7 +80,7 @@
|
||||
/proc/Nuke_request(text , mob/Sender)
|
||||
var/nuke_code = get_nuke_code()
|
||||
var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN))
|
||||
msg = "<span class='adminnotice'><b><font color=orange>NUKE CODE REQUEST: </font>[key_name(Sender)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) (<A HREF='?_src_=holder;secretsadmin=check_antagonist'>CA</A>) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_CENTCOM_REPLY(Sender,"RPLY")]):</b> [msg]</span>"
|
||||
msg = "<span class='adminnotice'><b><font color=orange>NUKE CODE REQUEST: </font>[key_name(Sender)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_TP(Sender,"TP")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_CENTCOM_REPLY(Sender,"RPLY")]):</b> [msg]</span>"
|
||||
for(var/client/X in GLOB.admins)
|
||||
if(check_rights(R_EVENT,0,X.mob))
|
||||
to_chat(X, msg)
|
||||
|
||||
@@ -776,8 +776,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
feedback_add_details("admin_verb","GIBS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_check_contents(mob/living/M as mob in GLOB.mob_list)
|
||||
set category = "Admin"
|
||||
set name = "Check Contents"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
@@ -957,21 +957,24 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
message_admins("[key_name_admin(usr)] reset NTTC scripts.")
|
||||
feedback_add_details("admin_verb","RAT2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/list_ssds()
|
||||
/client/proc/list_ssds_afks()
|
||||
set category = "Admin"
|
||||
set name = "List SSDs"
|
||||
set desc = "Lists SSD players"
|
||||
set name = "List SSDs and AFKs"
|
||||
set desc = "Lists SSD and AFK players"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
var/msg = "<html><head><title>SSD Report</title></head><body>"
|
||||
/* ======== SSD Section ========= */
|
||||
var/msg = "<html><head><title>SSD & AFK Report</title></head><body>"
|
||||
msg += "SSD Players:<BR><TABLE border='1'>"
|
||||
msg += "<TR><TD><B>Key</B></TD><TD><B>Real Name</B></TD><TD><B>Job</B></TD><TD><B>Mins SSD</B></TD><TD><B>Special Role</B></TD><TD><B>Area</B></TD><TD><B>PPN</B></TD><TD><B>Cryo</B></TD></TR>"
|
||||
var/mins_ssd
|
||||
var/job_string
|
||||
var/key_string
|
||||
var/role_string
|
||||
var/obj_count = 0
|
||||
var/obj_string = ""
|
||||
for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
|
||||
if(!isLivingSSD(H))
|
||||
continue
|
||||
@@ -984,8 +987,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(job_string in command_positions)
|
||||
job_string = "<U>" + job_string + "</U>"
|
||||
role_string = "-"
|
||||
var/obj_count = 0
|
||||
var/obj_string = ""
|
||||
if(H.mind)
|
||||
if(H.mind.special_role)
|
||||
role_string = "<U>[H.mind.special_role]</U>"
|
||||
@@ -1003,24 +1004,12 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
else
|
||||
msg += "<TD><A href='?_src_=holder;cryossd=[H.UID()]'>Cryo</A></TD>"
|
||||
msg += "</TR>"
|
||||
msg += "</TABLE></BODY></HTML>"
|
||||
src << browse(msg, "window=Player_ssd_check")
|
||||
msg += "</TABLE><br></BODY></HTML>"
|
||||
|
||||
/client/proc/list_afks()
|
||||
set category = "Admin"
|
||||
set name = "List AFKs"
|
||||
set desc = "Lists AFK players"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
var/msg = "<html><head><title>AFK Report</title></head><body>"
|
||||
/* ======== AFK Section ========= */
|
||||
msg += "AFK Players:<BR><TABLE border='1'>"
|
||||
msg += "<TR><TD><B>Key</B></TD><TD><B>Real Name</B></TD><TD><B>Job</B></TD><TD><B>Mins AFK</B></TD><TD><B>Special Role</B></TD><TD><B>Area</B></TD><TD><B>PPN</B></TD><TD><B>Cryo</B></TD></TR>"
|
||||
var/mins_afk
|
||||
var/job_string
|
||||
var/key_string
|
||||
var/role_string
|
||||
for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
|
||||
if(H.client == null || H.stat == DEAD) // No clientless or dead
|
||||
continue
|
||||
@@ -1035,8 +1024,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
if(job_string in command_positions)
|
||||
job_string = "<U>" + job_string + "</U>"
|
||||
role_string = "-"
|
||||
var/obj_count = 0
|
||||
var/obj_string = ""
|
||||
obj_count = 0
|
||||
obj_string = ""
|
||||
if(H.mind)
|
||||
if(H.mind.special_role)
|
||||
role_string = "<U>[H.mind.special_role]</U>"
|
||||
@@ -1055,7 +1044,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
msg += "<TD><A href='?_src_=holder;cryossd=[H.UID()];cryoafk=1'>Cryo</A></TD>"
|
||||
msg += "</TR>"
|
||||
msg += "</TABLE></BODY></HTML>"
|
||||
src << browse(msg, "window=Player_afk_check")
|
||||
src << browse(msg, "window=Player_ssd_afk_check;size=600x300")
|
||||
|
||||
/client/proc/toggle_ert_calling()
|
||||
set category = "Event"
|
||||
|
||||
@@ -95,3 +95,8 @@
|
||||
|
||||
// Has the client been varedited by an admin? [Inherits from datum now]
|
||||
// var/var_edited = FALSE
|
||||
|
||||
var/client_keysend_amount = 0
|
||||
var/next_keysend_reset = 0
|
||||
var/next_keysend_trip_reset = 0
|
||||
var/keysend_tripped = FALSE
|
||||
@@ -3,7 +3,46 @@
|
||||
/client/verb/keyDown(_key as text)
|
||||
set instant = TRUE
|
||||
set hidden = TRUE
|
||||
|
||||
client_keysend_amount += 1
|
||||
|
||||
var/cache = client_keysend_amount
|
||||
|
||||
if(keysend_tripped && next_keysend_trip_reset <= world.time)
|
||||
keysend_tripped = FALSE
|
||||
|
||||
if(next_keysend_reset <= world.time)
|
||||
client_keysend_amount = 0
|
||||
next_keysend_reset = world.time + (1 SECONDS)
|
||||
|
||||
//The "tripped" system is to confirm that flooding is still happening after one spike
|
||||
//not entirely sure how byond commands interact in relation to lag
|
||||
//don't want to kick people if a lag spike results in a huge flood of commands being sent
|
||||
if(cache >= MAX_KEYPRESS_AUTOKICK)
|
||||
if(!keysend_tripped)
|
||||
keysend_tripped = TRUE
|
||||
next_keysend_trip_reset = world.time + (2 SECONDS)
|
||||
else
|
||||
log_admin("Client [ckey] was just autokicked for flooding keysends; likely abuse but potentially lagspike.")
|
||||
message_admins("Client [ckey] was just autokicked for flooding keysends; likely abuse but potentially lagspike.")
|
||||
QDEL_IN(src, 1)
|
||||
return
|
||||
|
||||
///Check if the key is short enough to even be a real key
|
||||
if(LAZYLEN(_key) > MAX_KEYPRESS_COMMANDLENGTH)
|
||||
to_chat(src, "<span class='userdanger'>Invalid KeyDown detected! You have been disconnected from the server automatically.</span>")
|
||||
log_admin("Client [ckey] just attempted to send an invalid keypress. Keymessage was over [MAX_KEYPRESS_COMMANDLENGTH] characters, autokicking due to likely abuse.")
|
||||
message_admins("Client [ckey] just attempted to send an invalid keypress. Keymessage was over [MAX_KEYPRESS_COMMANDLENGTH] characters, autokicking due to likely abuse.")
|
||||
QDEL_IN(src, 1)
|
||||
return
|
||||
//offset by 1 because the buffer address is 0 indexed because the math was simpler
|
||||
keys_held[current_key_address + 1] = _key
|
||||
//the time a key was pressed isn't actually used anywhere (as of 2019-9-10) but this allows easier access usage/checking
|
||||
|
||||
keys_held[_key] = world.time
|
||||
|
||||
current_key_address = ((current_key_address + 1) % HELD_KEY_BUFFER_LENGTH)
|
||||
|
||||
var/movement = SSinput.movement_keys[_key]
|
||||
if (prefs.toggles & AZERTY) movement = SSinput.alt_movement_keys[_key]
|
||||
if(!(next_move_dir_sub & movement) && !keys_held["Ctrl"])
|
||||
@@ -40,7 +79,11 @@
|
||||
/client/verb/keyUp(_key as text)
|
||||
set instant = TRUE
|
||||
set hidden = TRUE
|
||||
keys_held -= _key
|
||||
//Can't just do a remove because it would alter the length of the rolling buffer, instead search for the key then null it out if it exists
|
||||
for(var/i in 1 to HELD_KEY_BUFFER_LENGTH)
|
||||
if(keys_held[i] == _key)
|
||||
keys_held[i] = null
|
||||
break
|
||||
var/movement = SSinput.movement_keys[_key]
|
||||
if (prefs.toggles & AZERTY) movement = SSinput.alt_movement_keys[_key]
|
||||
if(!(next_move_dir_add & movement))
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
/client
|
||||
var/list/keys_held = list() // A list of any keys held currently
|
||||
// These next two vars are to apply movement for keypresses and releases made while move delayed.
|
||||
// Because discarding that input makes the game less responsive.
|
||||
var/next_move_dir_add // On next move, add this dir to the move that would otherwise be done
|
||||
var/next_move_dir_sub // On next move, subtract this dir from the move that would otherwise be done
|
||||
/// A rolling buffer of any keys held currently
|
||||
var/list/keys_held = list()
|
||||
///used to keep track of the current rolling buffer position
|
||||
var/current_key_address = 0
|
||||
/// These next two vars are to apply movement for keypresses and releases made while move delayed.
|
||||
/// Because discarding that input makes the game less responsive.
|
||||
/// On next move, add this dir to the move that would otherwise be done
|
||||
var/next_move_dir_add
|
||||
/// On next move, subtract this dir from the move that would otherwise be done
|
||||
var/next_move_dir_sub
|
||||
|
||||
// Set a client's focus to an object and override these procs on that object to let it handle keypresses
|
||||
|
||||
@@ -31,6 +36,11 @@
|
||||
/client/proc/set_macros()
|
||||
set waitfor = FALSE
|
||||
|
||||
//Reset and populate the rolling buffer
|
||||
keys_held.Cut()
|
||||
for(var/i in 1 to HELD_KEY_BUFFER_LENGTH)
|
||||
keys_held += null
|
||||
|
||||
erase_all_macros()
|
||||
|
||||
var/list/macro_sets = SSinput.macro_sets
|
||||
|
||||
@@ -213,13 +213,13 @@
|
||||
if("winter") //Snow terrain is slow to move in and cold! Get the assistants to shovel your driveway.
|
||||
NewTerrainFloors = /turf/simulated/floor/snow // Needs to be updated after turf update
|
||||
NewTerrainWalls = /turf/simulated/wall/mineral/wood
|
||||
NewTerrainChairs = /obj/structure/chair/wood/normal
|
||||
NewTerrainChairs = /obj/structure/chair/wood
|
||||
NewTerrainTables = /obj/structure/table/glass
|
||||
NewFlora = list(/obj/structure/flora/grass/green, /obj/structure/flora/grass/brown, /obj/structure/flora/grass/both)
|
||||
if("jungle") //Beneficial due to actually having breathable air. Plus, monkeys and bows and arrows.
|
||||
NewTerrainFloors = /turf/simulated/floor/grass
|
||||
NewTerrainWalls = /turf/simulated/wall/mineral/sandstone
|
||||
NewTerrainChairs = /obj/structure/chair/wood/normal
|
||||
NewTerrainChairs = /obj/structure/chair/wood
|
||||
NewTerrainTables = /obj/structure/table/wood
|
||||
NewFlora = list(/obj/structure/flora/ausbushes/sparsegrass, /obj/structure/flora/ausbushes/fernybush, /obj/structure/flora/ausbushes/leafybush,
|
||||
/obj/structure/flora/ausbushes/grassybush, /obj/structure/flora/ausbushes/sunnybush, /obj/structure/flora/tree/palm, /mob/living/carbon/human/monkey,
|
||||
|
||||
@@ -14,8 +14,6 @@
|
||||
var/custom_pixel_x_offset = 0 //for admin fuckery.
|
||||
var/custom_pixel_y_offset = 0
|
||||
pass_flags = PASSTABLE
|
||||
pressure_resistance = 100 //100 kPa difference required to push
|
||||
throw_pressure_limit = 120 //120 kPa difference required to throw
|
||||
|
||||
//This is fine right now, if we're adding organ specific damage this needs to be updated
|
||||
/mob/living/carbon/alien/humanoid/New()
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
heal_rate = 5
|
||||
large = 1
|
||||
ventcrawler = 0
|
||||
pressure_resistance = 200 //Because big, stompy xenos should not be blown around like paper.
|
||||
|
||||
/mob/living/carbon/alien/humanoid/queen/New()
|
||||
create_reagents(100)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/mob/living/carbon
|
||||
gender = MALE
|
||||
pressure_resistance = 15
|
||||
var/list/stomach_contents = list()
|
||||
var/list/internal_organs = list()
|
||||
var/list/internal_organs_slot = list() //Same as above, but stores "slot ID" - "organ" pairs for easy access.
|
||||
|
||||
@@ -500,11 +500,12 @@ emp_act
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/experience_pressure_difference(pressure_difference, direction)
|
||||
playsound(src, 'sound/effects/space_wind.ogg', 50, 1)
|
||||
if(shoes)
|
||||
if(istype(shoes,/obj/item/clothing/shoes/magboots) && (shoes.flags & NOSLIP)) //TODO: Make a not-shit shoe var system to negate airflow.
|
||||
return 0
|
||||
..()
|
||||
playsound(src, 'sound/effects/space_wind.ogg', 50, TRUE)
|
||||
if(shoes && istype(shoes, /obj/item/clothing))
|
||||
var/obj/item/clothing/S = shoes
|
||||
if (S.flags & NOSLIP)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/water_act(volume, temperature, source, method = TOUCH)
|
||||
. = ..()
|
||||
|
||||
@@ -2,7 +2,7 @@ var/global/default_martial_art = new/datum/martial_art
|
||||
/mob/living/carbon/human
|
||||
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPMINDSHIELD_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,GLAND_HUD)
|
||||
|
||||
pressure_resistance = 25
|
||||
//Marking colour and style
|
||||
var/list/m_colours = DEFAULT_MARKING_COLOURS //All colours set to #000000.
|
||||
var/list/m_styles = DEFAULT_MARKING_STYLES //All markings set to None.
|
||||
|
||||
@@ -604,6 +604,34 @@
|
||||
else
|
||||
return pick("trails_1", "trails_2")
|
||||
|
||||
/mob/living/experience_pressure_difference(pressure_difference, direction, pressure_resistance_prob_delta = 0)
|
||||
if(buckled)
|
||||
return
|
||||
if(client && client.move_delay >= world.time + world.tick_lag * 2)
|
||||
pressure_resistance_prob_delta -= 30
|
||||
|
||||
var/list/turfs_to_check = list()
|
||||
|
||||
if(has_limbs)
|
||||
var/turf/T = get_step(src, angle2dir(dir2angle(direction) + 90))
|
||||
if (T)
|
||||
turfs_to_check += T
|
||||
|
||||
T = get_step(src, angle2dir(dir2angle(direction) - 90))
|
||||
if(T)
|
||||
turfs_to_check += T
|
||||
|
||||
for(var/t in turfs_to_check)
|
||||
T = t
|
||||
if(T.density)
|
||||
pressure_resistance_prob_delta -= 20
|
||||
continue
|
||||
for(var/atom/movable/AM in T)
|
||||
if(AM.density && AM.anchored)
|
||||
pressure_resistance_prob_delta -= 20
|
||||
break
|
||||
|
||||
..(pressure_difference, direction, pressure_resistance_prob_delta)
|
||||
|
||||
/*//////////////////////
|
||||
START RESIST PROCS
|
||||
@@ -617,6 +645,8 @@
|
||||
return
|
||||
changeNext_move(CLICK_CD_RESIST)
|
||||
|
||||
SEND_SIGNAL(src, COMSIG_LIVING_RESIST, src)
|
||||
|
||||
if(!restrained())
|
||||
if(resist_grab())
|
||||
return
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/mob/living
|
||||
see_invisible = SEE_INVISIBLE_LIVING
|
||||
pressure_resistance = 10
|
||||
|
||||
//Health and life related vars
|
||||
var/maxHealth = 100 //Maximum health that should be possible.
|
||||
@@ -65,7 +66,7 @@
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,SPECIALROLE_HUD)
|
||||
|
||||
var/list/status_effects //a list of all status effects the mob has
|
||||
|
||||
|
||||
var/deathgasp_on_death = FALSE
|
||||
|
||||
var/stun_absorption = null //converted to a list of stun absorption sources this mob has when one is added
|
||||
|
||||
@@ -252,7 +252,7 @@
|
||||
modules += new /obj/item/soap/nanotrasen(src)
|
||||
modules += new /obj/item/storage/bag/trash/cyborg(src)
|
||||
modules += new /obj/item/mop/advanced/cyborg(src)
|
||||
modules += new /obj/item/lightreplacer(src)
|
||||
modules += new /obj/item/lightreplacer/cyborg(src)
|
||||
modules += new /obj/item/holosign_creator(src)
|
||||
emag = new /obj/item/reagent_containers/spray(src)
|
||||
|
||||
@@ -544,7 +544,7 @@
|
||||
modules += new /obj/item/crowbar/cyborg(src)
|
||||
modules += new /obj/item/wirecutters/cyborg(src)
|
||||
modules += new /obj/item/multitool/cyborg(src)
|
||||
modules += new /obj/item/lightreplacer(src)
|
||||
modules += new /obj/item/lightreplacer/cyborg(src)
|
||||
modules += new /obj/item/gripper(src)
|
||||
modules += new /obj/item/matter_decompiler(src)
|
||||
modules += new /obj/item/reagent_containers/spray/cleaner/drone(src)
|
||||
@@ -562,10 +562,6 @@
|
||||
/obj/item/robot_module/drone/respawn_consumable(mob/living/silicon/robot/R)
|
||||
var/obj/item/reagent_containers/spray/cleaner/C = locate() in modules
|
||||
C.reagents.add_reagent("cleaner", 3)
|
||||
|
||||
var/obj/item/lightreplacer/LR = locate() in modules
|
||||
LR.Charge(R)
|
||||
|
||||
..()
|
||||
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
modtype = "Syndicate"
|
||||
req_access = list(access_syndicate)
|
||||
ionpulse = 1
|
||||
magpulse = 1
|
||||
lawchannel = "State"
|
||||
var/playstyle_string = "<span class='userdanger'>You are a Syndicate assault cyborg!</span><br>\
|
||||
<b>You are armed with powerful offensive tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \
|
||||
@@ -80,7 +79,7 @@
|
||||
|
||||
var/datum/action/thermals = new /datum/action/innate/robot_sight/thermal()
|
||||
thermals.Grant(src)
|
||||
|
||||
|
||||
/mob/living/silicon/robot/syndicate/saboteur/verb/modify_name()
|
||||
set name = "Modify Name"
|
||||
set desc = "Change your systems' registered name to fool Nanotrasen systems. No cost."
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
faction = list("syndicate")
|
||||
shoot_sound = 'sound/weapons/wave.ogg'
|
||||
anchored = 1
|
||||
pressure_resistance = 100 //100 kPa difference required to push
|
||||
throw_pressure_limit = 120
|
||||
window_id = "syndiebot"
|
||||
window_name = "Syndicate Bot Interface"
|
||||
var/turf/saved_turf
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
minbodytemp = 0
|
||||
faction = list("cult")
|
||||
flying = 1
|
||||
pressure_resistance = 100
|
||||
universal_speak = 1
|
||||
AIStatus = AI_OFF //normal constructs don't have AI
|
||||
var/const_type = "shade"
|
||||
|
||||
@@ -24,8 +24,6 @@
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
unsuitable_atmos_damage = 15
|
||||
heat_damage_per_tick = 20
|
||||
pressure_resistance = 100 //100 kPa difference required to push
|
||||
throw_pressure_limit = 120 //120 kPa difference required to throw
|
||||
faction = list("alien")
|
||||
status_flags = CANPUSH
|
||||
minbodytemp = 0
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
faction = list("carp")
|
||||
flying = 1
|
||||
pressure_resistance = 200
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
|
||||
var/carp_color = "carp" //holder for icon set
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
attack_sound = 'sound/creatures/headcrab_attack.ogg'
|
||||
speak_emote = list("hisses")
|
||||
var/is_zombie = 0
|
||||
stat_attack = UNCONSCIOUS //so they continue to attack when they are on the ground.
|
||||
stat_attack = DEAD //so they continue to attack when they are on the ground.
|
||||
var/host_species = ""
|
||||
var/list/human_overlays = list()
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
var/mob/living/L = target
|
||||
if (istype(L))
|
||||
if(istype(L))
|
||||
L.adjust_fire_stacks(0.1)
|
||||
L.IgniteMob()
|
||||
|
||||
@@ -141,5 +141,12 @@
|
||||
damage_type = BURN
|
||||
nodamage = FALSE
|
||||
|
||||
/obj/item/projectile/temp/basilisk/icewing/on_hit(atom/target, blocked = FALSE)
|
||||
. = ..()
|
||||
if(.)
|
||||
var/mob/living/L = target
|
||||
if(istype(L))
|
||||
L.apply_status_effect(/datum/status_effect/freon/watcher)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril
|
||||
fromtendril = TRUE
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
|
||||
pressure_resistance = 300
|
||||
faction = list("undead") // did I mention ghost
|
||||
loot = list(/obj/item/reagent_containers/food/snacks/ectoplasm)
|
||||
del_on_death = 1
|
||||
|
||||
@@ -49,10 +49,6 @@ var/global/list/ts_spiderling_list = list()
|
||||
// '1' (default for most simple_mobs, including terror spiders) converts to 3.5, or 2.8 tiles/sec.
|
||||
// '2' converts to 4.5, or 2.2 tiles/sec.
|
||||
|
||||
// Atmos
|
||||
pressure_resistance = 50 //50 kPa difference required to push
|
||||
throw_pressure_limit = 100 //100 kPa difference required to throw
|
||||
|
||||
// Ventcrawling
|
||||
ventcrawler = 1 // allows player ventcrawling
|
||||
var/ai_ventcrawls = TRUE
|
||||
|
||||
@@ -556,6 +556,11 @@
|
||||
genemutcheck(src, block,null, MUTCHK_FORCED)
|
||||
dna.UpdateSE()
|
||||
|
||||
///////////////////////////////// FROZEN /////////////////////////////////////
|
||||
|
||||
/mob/living/proc/IsFrozen()
|
||||
return has_status_effect(/datum/status_effect/freon)
|
||||
|
||||
///////////////////////////////////// STUN ABSORPTION /////////////////////////////////////
|
||||
|
||||
/mob/living/proc/add_stun_absorption(key, duration, priority, message, self_message, examine_message)
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
else if((fall_over || resting) && !lying)
|
||||
fall(fall_over)
|
||||
|
||||
canmove = !(fall_over || resting || stunned || buckled)
|
||||
canmove = !(fall_over || resting || stunned || IsFrozen() || buckled)
|
||||
density = !lying
|
||||
if(lying)
|
||||
if(layer == initial(layer))
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
throw_range = 2
|
||||
throw_speed = 1
|
||||
layer = 4
|
||||
pressure_resistance = 1
|
||||
pressure_resistance = 2
|
||||
attack_verb = list("bapped")
|
||||
var/amount = 0 //Amount of items clipped to the paper. Note: If you have 2 paper, this should be 1
|
||||
var/page = 1
|
||||
|
||||
@@ -303,10 +303,7 @@
|
||||
//Light replacer code
|
||||
if(istype(W, /obj/item/lightreplacer))
|
||||
var/obj/item/lightreplacer/LR = W
|
||||
if(isliving(user))
|
||||
var/mob/living/U = user
|
||||
LR.ReplaceLight(src, U)
|
||||
return
|
||||
LR.ReplaceLight(src, user)
|
||||
|
||||
// attempt to insert light
|
||||
if(istype(W, /obj/item/light))
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
holds_charge = TRUE
|
||||
unique_frequency = TRUE
|
||||
|
||||
/obj/item/gun/energy/kinetic_accelerator/New()
|
||||
/obj/item/gun/energy/kinetic_accelerator/Initialize(mapload)
|
||||
. = ..()
|
||||
if(!holds_charge)
|
||||
empty()
|
||||
@@ -98,8 +98,7 @@
|
||||
if(!QDELING(src) && !holds_charge)
|
||||
// Put it on a delay because moving item from slot to hand
|
||||
// calls dropped().
|
||||
spawn(2)
|
||||
empty_if_not_held()
|
||||
addtimer(CALLBACK(src, .proc/empty_if_not_held), 2)
|
||||
|
||||
/obj/item/gun/energy/kinetic_accelerator/proc/empty_if_not_held()
|
||||
if(!ismob(loc))
|
||||
@@ -143,17 +142,17 @@
|
||||
overheat = FALSE
|
||||
|
||||
/obj/item/gun/energy/kinetic_accelerator/update_icon()
|
||||
overlays.Cut()
|
||||
cut_overlays()
|
||||
if(empty_state && !can_shoot())
|
||||
overlays += empty_state
|
||||
add_overlay(empty_state)
|
||||
|
||||
if(gun_light && can_flashlight)
|
||||
var/iconF = "flight"
|
||||
if(gun_light.on)
|
||||
iconF = "flight_on"
|
||||
overlays += image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset)
|
||||
add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset))
|
||||
if(bayonet && can_bayonet)
|
||||
overlays += knife_overlay
|
||||
add_overlay(knife_overlay)
|
||||
|
||||
|
||||
/obj/item/gun/energy/kinetic_accelerator/experimental
|
||||
|
||||
@@ -165,12 +165,18 @@
|
||||
|
||||
/obj/item/gun/energy/plasmacutter/attackby(obj/item/A, mob/user)
|
||||
if(istype(A, /obj/item/stack/sheet/mineral/plasma))
|
||||
if(power_supply.charge >= power_supply.maxcharge)
|
||||
to_chat(user,"<span class='notice'>[src] is already fully charged.")
|
||||
return
|
||||
var/obj/item/stack/sheet/S = A
|
||||
S.use(1)
|
||||
power_supply.give(1000)
|
||||
on_recharge()
|
||||
to_chat(user, "<span class='notice'>You insert [A] in [src], recharging it.</span>")
|
||||
else if(istype(A, /obj/item/stack/ore/plasma))
|
||||
if(power_supply.charge >= power_supply.maxcharge)
|
||||
to_chat(user,"<span class='notice'>[src] is already fully charged.")
|
||||
return
|
||||
var/obj/item/stack/ore/S = A
|
||||
S.use(1)
|
||||
power_supply.give(500)
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
hitsound = 'sound/weapons/pierce.ogg'
|
||||
var/hitsound_wall = ""
|
||||
pressure_resistance = INFINITY
|
||||
burn_state = LAVA_PROOF
|
||||
var/def_zone = "" //Aiming at
|
||||
var/mob/firer = null//Who shot it
|
||||
@@ -98,7 +97,7 @@
|
||||
var/turf/simulated/wall/W = target_loca
|
||||
if(impact_effect_type)
|
||||
new impact_effect_type(target_loca, hitx, hity)
|
||||
|
||||
|
||||
W.add_dent(WALL_DENT_SHOT, hitx, hity)
|
||||
return 0
|
||||
if(alwayslog)
|
||||
@@ -334,3 +333,6 @@ obj/item/projectile/Crossed(atom/movable/AM, oldloc) //A mob moving on a tile wi
|
||||
/obj/item/projectile/proc/setAngle(new_angle) //wrapper for overrides.
|
||||
Angle = new_angle
|
||||
return TRUE
|
||||
|
||||
/obj/item/projectile/experience_pressure_difference()
|
||||
return
|
||||
@@ -362,7 +362,6 @@
|
||||
drink_icon = "cubalibreglass"
|
||||
drink_name = "Cuba Libre"
|
||||
drink_desc = "A classic mix of rum and cola."
|
||||
taste_description = "fruity alcohol"
|
||||
taste_description = "liberation"
|
||||
|
||||
/datum/reagent/consumable/ethanol/whiskey_cola
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
reagent_state = SOLID
|
||||
color = "#FFFFFF"
|
||||
can_synth = FALSE
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/spider_eggs/on_mob_life(mob/living/M)
|
||||
if(volume > 2.5)
|
||||
@@ -20,6 +21,7 @@
|
||||
description = "Microscopic construction robots."
|
||||
color = "#535E66" // rgb: 83, 94, 102
|
||||
can_synth = FALSE
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/nanomachines/on_mob_life(mob/living/carbon/M)
|
||||
if(volume > 1.5)
|
||||
@@ -33,6 +35,7 @@
|
||||
description = "Microbes with an entirely alien cellular structure."
|
||||
color = "#535E66" // rgb: 83, 94, 102
|
||||
can_synth = FALSE
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/xenomicrobes/on_mob_life(mob/living/carbon/M)
|
||||
if(volume > 1.5)
|
||||
@@ -45,6 +48,7 @@
|
||||
description = "Active fungal spores."
|
||||
color = "#92D17D" // rgb: 146, 209, 125
|
||||
can_synth = FALSE
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/fungalspores/on_mob_life(mob/living/carbon/M)
|
||||
if(volume > 2.5)
|
||||
@@ -58,6 +62,7 @@
|
||||
reagent_state = SOLID
|
||||
color = "#FA0000" // rgb: 250, 0, 0
|
||||
can_synth = FALSE
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/jagged_crystals/on_mob_life(mob/living/carbon/M)
|
||||
M.ForceContractDisease(new /datum/disease/berserker(0))
|
||||
@@ -70,6 +75,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#1E4600"
|
||||
can_synth = FALSE
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/salmonella/on_mob_life(mob/living/carbon/M)
|
||||
M.ForceContractDisease(new /datum/disease/food_poisoning(0))
|
||||
@@ -82,6 +88,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#FF0000"
|
||||
can_synth = FALSE
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/gibbis/on_mob_life(mob/living/carbon/M)
|
||||
if(volume > 2.5)
|
||||
@@ -95,6 +102,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#FFFFFF"
|
||||
can_synth = FALSE
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/prions/on_mob_life(mob/living/carbon/M)
|
||||
if(volume > 4.5)
|
||||
@@ -108,6 +116,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#465046"
|
||||
can_synth = FALSE
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/grave_dust/on_mob_life(mob/living/carbon/M)
|
||||
if(volume > 4.5)
|
||||
@@ -121,6 +130,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#F7E6B1"
|
||||
can_synth = FALSE
|
||||
taste_description = "bacon"
|
||||
|
||||
/datum/reagent/bacon_grease/on_mob_life(mob/living/carbon/M)
|
||||
if(volume > 4.5)
|
||||
@@ -134,6 +144,7 @@
|
||||
reagent_state = SOLID
|
||||
color = "#925D6C"
|
||||
can_synth = FALSE
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/heartworms/on_mob_life(mob/living/carbon/M)
|
||||
if(volume > 4.5)
|
||||
@@ -152,6 +163,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#AB1CCF"
|
||||
can_synth = FALSE
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/concentrated_initro/on_mob_life(mob/living/M)
|
||||
if(volume >= 5)
|
||||
@@ -170,6 +182,7 @@
|
||||
reagent_state = LIQUID
|
||||
nutriment_factor = 2 * REAGENTS_METABOLISM
|
||||
color = "#899613" // rgb: 137, 150, 19
|
||||
taste_description = "watery milk"
|
||||
|
||||
/datum/reagent/mutagen/mutagenvirusfood
|
||||
name = "mutagenic agar"
|
||||
@@ -198,4 +211,4 @@
|
||||
/datum/reagent/plasma_dust/plasmavirusfood/weak
|
||||
name = "weakened virus plasma"
|
||||
id = "weakplasmavirusfood"
|
||||
color = "#CEC3C6" // rgb: 206,195,198
|
||||
color = "#CEC3C6" // rgb: 206,195,198
|
||||
@@ -1,18 +1,3 @@
|
||||
/datum/reagent/serotrotium
|
||||
name = "Serotrotium"
|
||||
id = "serotrotium"
|
||||
description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans."
|
||||
reagent_state = LIQUID
|
||||
color = "#202040" // rgb: 20, 20, 40
|
||||
metabolization_rate = 0.25 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/serotrotium/on_mob_life(mob/living/M)
|
||||
if(ishuman(M))
|
||||
if(prob(7))
|
||||
M.emote(pick("twitch","drool","moan","gasp"))
|
||||
return ..()
|
||||
|
||||
|
||||
/datum/reagent/lithium
|
||||
name = "Lithium"
|
||||
id = "lithium"
|
||||
@@ -170,6 +155,7 @@
|
||||
color = "#60A584" // rgb: 96, 165, 132
|
||||
overdose_threshold = 20
|
||||
addiction_chance = 50
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/crank/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -475,7 +461,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#644600"
|
||||
addiction_chance = 30
|
||||
taste_description = "puke... or worse"
|
||||
taste_description = "the inside of a toilet... or worse"
|
||||
|
||||
/datum/reagent/jenkem/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -491,6 +477,7 @@
|
||||
description = "An illegal performance enhancing drug. Side effects might include chest pain, seizures, swelling, headache, fever... ... ..."
|
||||
reagent_state = LIQUID
|
||||
color = "#60A584" // rgb: 96, 165, 132
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/aranesp/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -515,6 +502,7 @@
|
||||
description = "A mild psychoactive chemical extracted from the cannabis plant."
|
||||
reagent_state = LIQUID
|
||||
color = "#0FBE0F"
|
||||
taste_description = "man like, totally the best like, thing ever dude"
|
||||
|
||||
/datum/reagent/thc/on_mob_life(mob/living/M)
|
||||
M.stuttering += rand(0,2)
|
||||
@@ -697,7 +685,7 @@
|
||||
process_flags = SYNTHETIC
|
||||
overdose_threshold = 20
|
||||
addiction_chance = 50
|
||||
taste_description = "silicone"
|
||||
taste_description = "silicon"
|
||||
|
||||
|
||||
/datum/reagent/surge/on_mob_life(mob/living/M)
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
reagent_state = SOLID
|
||||
nutriment_factor = 15 * REAGENTS_METABOLISM
|
||||
color = "#664330" // rgb: 102, 67, 48
|
||||
var/brute_heal = 1
|
||||
var/burn_heal = 0
|
||||
|
||||
/datum/reagent/consumable/nutriment/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -33,10 +35,8 @@
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.can_eat(diet_flags)) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
|
||||
if(prob(50))
|
||||
update_flags |= M.adjustBruteLoss(-1, FALSE)
|
||||
if(!(NO_BLOOD in H.dna.species.species_traits))//do not restore blood on things with no blood by nature.
|
||||
if(H.blood_volume < BLOOD_VOLUME_NORMAL)
|
||||
H.blood_volume += 0.4
|
||||
update_flags |= M.adjustBruteLoss(-brute_heal, FALSE)
|
||||
update_flags |= M.adjustFireLoss(-burn_heal, FALSE)
|
||||
return ..() | update_flags
|
||||
|
||||
/datum/reagent/consumable/nutriment/on_new(list/supplied_data)
|
||||
@@ -66,36 +66,26 @@
|
||||
id = "protein"
|
||||
description = "Various essential proteins and fats commonly found in animal flesh and blood."
|
||||
diet_flags = DIET_CARN | DIET_OMNI
|
||||
taste_description = "meat" //TODO: Remove
|
||||
|
||||
/datum/reagent/consumable/nutriment/plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores
|
||||
name = "Plant-matter"
|
||||
id = "plantmatter"
|
||||
description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce."
|
||||
diet_flags = DIET_HERB | DIET_OMNI
|
||||
taste_description = "vegetables" //TODO: Remove
|
||||
|
||||
/datum/reagent/consumable/vitamin
|
||||
/datum/reagent/consumable/nutriment/vitamin
|
||||
name = "Vitamin"
|
||||
id = "vitamin"
|
||||
description = "All the best vitamins, minerals, and carbohydrates the body needs in pure form."
|
||||
reagent_state = SOLID
|
||||
color = "#664330" // rgb: 102, 67, 48
|
||||
taste_description = "nutrition"
|
||||
brute_heal = 1
|
||||
burn_heal = 1
|
||||
|
||||
/datum/reagent/consumable/vitamin/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
if(prob(50))
|
||||
update_flags |= M.adjustBruteLoss(-1, FALSE)
|
||||
update_flags |= M.adjustFireLoss(-1, FALSE)
|
||||
/datum/reagent/consumable/nutriment/vitamin/on_mob_life(mob/living/M)
|
||||
if(M.satiety < 600)
|
||||
M.satiety += 30
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!(NO_BLOOD in H.dna.species.species_traits))//do not restore blood on things with no blood by nature.
|
||||
if(H.blood_volume < BLOOD_VOLUME_NORMAL)
|
||||
H.blood_volume += 0.5
|
||||
return ..() | update_flags
|
||||
return ..()
|
||||
|
||||
/datum/reagent/consumable/sugar
|
||||
name = "Sugar"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/reagent/medicine
|
||||
name = "Medicine"
|
||||
id = "medicine"
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/medicine/on_mob_life(mob/living/M)
|
||||
current_cycle++
|
||||
@@ -290,11 +291,6 @@
|
||||
addiction_chance = 5
|
||||
taste_description = "health"
|
||||
|
||||
/datum/reagent/medicine/omnizine/godblood
|
||||
name = "Godblood"
|
||||
description = "Slowly heals all damage types. Has a rather high overdose threshold. Glows with mysterious power."
|
||||
overdose_threshold = 150
|
||||
|
||||
/datum/reagent/medicine/omnizine/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
update_flags |= M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
|
||||
@@ -728,7 +724,7 @@
|
||||
id = "mannitol"
|
||||
description = "Mannitol is a sugar alcohol that can help alleviate cranial swelling."
|
||||
color = "#D1D1F1"
|
||||
taste_description = "neurogenisis"
|
||||
taste_description = "sweetness"
|
||||
|
||||
/datum/reagent/medicine/mannitol/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -786,6 +782,7 @@
|
||||
description = "Increases run speed and eliminates stuns, can heal minor damage. If overdosed it will deal toxin damage and stun."
|
||||
color = "#C8A5DC"
|
||||
can_synth = FALSE
|
||||
taste_description = "<span class='userdanger'>an unstoppable force</span>"
|
||||
|
||||
/datum/reagent/medicine/stimulants/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -962,6 +959,12 @@
|
||||
metabolization_rate = 0.1
|
||||
taste_description = "faint hope"
|
||||
|
||||
/datum/reagent/medicine/omnizine_diluted/godblood
|
||||
name = "Godblood"
|
||||
id = "godblood"
|
||||
description = "Slowly heals all damage types. Has a rather high overdose threshold. Glows with mysterious power."
|
||||
overdose_threshold = 150
|
||||
|
||||
/datum/reagent/medicine/omnizine_diluted/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
update_flags |= M.adjustToxLoss(-0.5*REAGENTS_EFFECT_MULTIPLIER, FALSE)
|
||||
|
||||
@@ -614,6 +614,7 @@
|
||||
description = "A potent alchemic ingredient."
|
||||
reagent_state = LIQUID
|
||||
color = "#092D09"
|
||||
taste_description = "alchemy"
|
||||
|
||||
/datum/reagent/woolbat
|
||||
name = "Wool of bat"
|
||||
@@ -621,6 +622,7 @@
|
||||
description = "A potent alchemic ingredient."
|
||||
reagent_state = LIQUID
|
||||
color = "#080808"
|
||||
taste_description = "alchemy"
|
||||
|
||||
/datum/reagent/tonguedog
|
||||
name = "Tongue of dog"
|
||||
@@ -628,6 +630,7 @@
|
||||
description = "A potent alchemic ingredient."
|
||||
reagent_state = LIQUID
|
||||
color = "#2D0909"
|
||||
taste_description = "alchemy"
|
||||
|
||||
/datum/reagent/triplepiss
|
||||
name = "Triplepiss"
|
||||
@@ -635,6 +638,7 @@
|
||||
description = "Ewwwwwwwww."
|
||||
reagent_state = LIQUID
|
||||
color = "#857400"
|
||||
taste_description = "alchemy"
|
||||
|
||||
/datum/reagent/spraytan
|
||||
name = "Spray Tan"
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#FFAF00"
|
||||
process_flags = ORGANIC | SYNTHETIC
|
||||
taste_description = "burning"
|
||||
var/temp_fire = 4000
|
||||
var/temp_deviance = 1000
|
||||
var/size_divisor = 40
|
||||
@@ -49,6 +50,7 @@
|
||||
reagent_state = LIQUID
|
||||
process_flags = ORGANIC | SYNTHETIC
|
||||
color = "#C86432"
|
||||
taste_description = "burning"
|
||||
|
||||
/datum/reagent/napalm/reaction_temperature(exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > T0C + 100)
|
||||
@@ -253,6 +255,7 @@
|
||||
description = "Sends everything flying from the detonation point."
|
||||
reagent_state = LIQUID
|
||||
color = "#FFA500"
|
||||
taste_description = "air and bitterness"
|
||||
|
||||
/datum/reagent/sorium/reaction_turf(turf/T, volume) // oh no
|
||||
if(prob(75))
|
||||
@@ -269,7 +272,7 @@
|
||||
description = "Sucks everything into the detonation point."
|
||||
reagent_state = LIQUID
|
||||
color = "#800080"
|
||||
taste_description = "the end of the world"
|
||||
taste_description = "compressed bitterness"
|
||||
|
||||
/datum/reagent/liquid_dark_matter/reaction_turf(turf/T, volume) //Oh gosh, why
|
||||
if(prob(75))
|
||||
@@ -302,6 +305,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#FFFF00"
|
||||
penetrates_skin = TRUE
|
||||
taste_description = "salt"
|
||||
|
||||
/datum/reagent/smoke_powder
|
||||
name = "Smoke Powder"
|
||||
@@ -309,6 +313,7 @@
|
||||
description = "Makes a large cloud of smoke that can carry reagents."
|
||||
reagent_state = LIQUID
|
||||
color = "#808080"
|
||||
taste_description = "smoke"
|
||||
|
||||
/datum/reagent/sonic_powder
|
||||
name = "Sonic Powder"
|
||||
@@ -317,6 +322,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#0000FF"
|
||||
penetrates_skin = TRUE
|
||||
taste_description = "loud noises"
|
||||
|
||||
/datum/reagent/cryostylane
|
||||
name = "Cryostylane"
|
||||
@@ -324,6 +330,7 @@
|
||||
description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Cryostylane slowly cools all other reagents in the mob down to 0K."
|
||||
color = "#B2B2FF" // rgb: 139, 166, 233
|
||||
process_flags = ORGANIC | SYNTHETIC
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/cryostylane/on_mob_life(mob/living/M) //TODO: code freezing into an ice cube
|
||||
if(M.reagents.has_reagent("oxygen"))
|
||||
@@ -358,6 +365,7 @@
|
||||
description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Pyrosium slowly heats all other reagents."
|
||||
color = "#B20000" // rgb: 139, 166, 233
|
||||
process_flags = ORGANIC | SYNTHETIC
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/pyrosium/on_mob_life(mob/living/M)
|
||||
if(M.reagents.has_reagent("oxygen"))
|
||||
@@ -380,6 +388,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#A0A090"
|
||||
var/cooling_temperature = 3 // more effective than water
|
||||
taste_description = "the inside of a fire extinguisher"
|
||||
|
||||
/datum/reagent/firefighting_foam/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
// Put out fire
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#CF3600" // rgb: 207, 54, 0
|
||||
taste_mult = 1.2
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/toxin/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -17,6 +18,7 @@
|
||||
description = "A toxic venom injected by spacefaring arachnids."
|
||||
reagent_state = LIQUID
|
||||
color = "#CF3600" // rgb: 207, 54, 0
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/spider_venom/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -81,6 +83,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#13BC5E" // rgb: 19, 188, 94
|
||||
can_synth = FALSE
|
||||
taste_description = "slime"
|
||||
|
||||
/datum/reagent/aslimetoxin/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method != TOUCH)
|
||||
@@ -95,7 +98,6 @@
|
||||
color = "#484848" // rgb: 72, 72, 72
|
||||
metabolization_rate = 0.2
|
||||
penetrates_skin = TRUE
|
||||
taste_description = "metal"
|
||||
taste_mult = 0 // elemental mercury is tasteless
|
||||
|
||||
/datum/reagent/mercury/on_mob_life(mob/living/M)
|
||||
@@ -127,7 +129,7 @@
|
||||
color = "#6A6054"
|
||||
penetrates_skin = TRUE
|
||||
process_flags = ORGANIC | SYNTHETIC
|
||||
taste_description = "spicy freshness"
|
||||
taste_description = "acid"
|
||||
|
||||
/datum/reagent/fluorine/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -142,6 +144,7 @@
|
||||
reagent_state = SOLID
|
||||
color = "#C7C7C7" // rgb: 199,199,199
|
||||
penetrates_skin = TRUE
|
||||
taste_description = "the colour blue and regret"
|
||||
|
||||
/datum/reagent/radium/on_mob_life(mob/living/M)
|
||||
if(M.radiation < 80)
|
||||
@@ -160,6 +163,7 @@
|
||||
color = "#04DF27"
|
||||
metabolization_rate = 0.3
|
||||
taste_mult = 0.9
|
||||
taste_description = "slime"
|
||||
|
||||
/datum/reagent/mutagen/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(!..())
|
||||
@@ -186,6 +190,7 @@
|
||||
description = "Just the regular, boring sort of mutagenic compound. Works in a completely predictable manner."
|
||||
reagent_state = LIQUID
|
||||
color = "#7DFF00"
|
||||
taste_description = "slime"
|
||||
|
||||
/datum/reagent/stable_mutagen/on_mob_life(mob/living/M)
|
||||
if(!ishuman(M) || !M.dna)
|
||||
@@ -251,6 +256,7 @@
|
||||
reagent_state = SOLID
|
||||
color = "#B8B8C0" // rgb: 184, 184, 192
|
||||
taste_mult = 0
|
||||
taste_description = "the inside of a reactor"
|
||||
|
||||
/datum/reagent/uranium/on_mob_life(mob/living/M)
|
||||
M.apply_effect(2, IRRADIATE, negate_armor = 1)
|
||||
@@ -268,6 +274,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#52685D"
|
||||
metabolization_rate = 0.2
|
||||
taste_description = "sweetness"
|
||||
|
||||
/datum/reagent/lexorin/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -332,6 +339,7 @@
|
||||
description = "A deadly neurotoxin produced by the dreaded spess carp."
|
||||
reagent_state = LIQUID
|
||||
color = "#003333" // rgb: 0, 51, 51
|
||||
taste_description = "fish"
|
||||
|
||||
/datum/reagent/carpotoxin/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -345,6 +353,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#6E2828"
|
||||
data = 13
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/staminatoxin/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -358,6 +367,7 @@
|
||||
id = "spore"
|
||||
description = "A natural toxin produced by blob spores that inhibits vision when ingested."
|
||||
color = "#9ACD32"
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/spores/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -376,6 +386,7 @@
|
||||
drink_name = "Beer glass"
|
||||
drink_desc = "A freezing pint of beer"
|
||||
taste_description = "beer"
|
||||
taste_description = "piss water"
|
||||
|
||||
/datum/reagent/beer2/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -487,6 +498,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#DED6D0"
|
||||
penetrates_skin = TRUE
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/formaldehyde/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -504,6 +516,7 @@
|
||||
metabolization_rate = 0.2
|
||||
overdose_threshold = 40
|
||||
can_synth = FALSE
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/venom/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -529,6 +542,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#60A584"
|
||||
metabolization_rate = 1
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/neurotoxin2/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -593,6 +607,7 @@
|
||||
color = "#B0B0B0"
|
||||
metabolization_rate = 0.3
|
||||
penetrates_skin = TRUE
|
||||
taste_description = "prickliness"
|
||||
|
||||
/datum/reagent/itching_powder/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_STAT
|
||||
@@ -806,6 +821,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#6BA688"
|
||||
metabolization_rate = 0.1
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/sulfonal/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -871,6 +887,7 @@
|
||||
color = "#C2D8CD"
|
||||
metabolization_rate = 0.05
|
||||
can_synth = FALSE
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/coniine/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -886,6 +903,7 @@
|
||||
color = "#191919"
|
||||
metabolization_rate = 0.1
|
||||
penetrates_skin = TRUE
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/curare/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -919,6 +937,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8C8C8" //RGB: 200, 200, 200
|
||||
metabolization_rate = 0.2 * REAGENTS_METABOLISM
|
||||
taste_mult = 0
|
||||
|
||||
/datum/reagent/heparin/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -993,6 +1012,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#d3cf50"
|
||||
var/lethality = 0 //Glyphosate is non-toxic to people
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/glyphosate/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -1045,6 +1065,7 @@
|
||||
id = "pestkiller"
|
||||
description = "A harmful toxic mixture to kill pests. Do not ingest!"
|
||||
color = "#4B004B" // rgb: 75, 0, 75
|
||||
taste_description = "bitterness"
|
||||
|
||||
/datum/reagent/pestkiller/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -1125,6 +1146,7 @@
|
||||
description = "A filthy, carcinogenic sludge produced by the Slurrypod plant."
|
||||
reagent_state = LIQUID
|
||||
color = "#00C81E"
|
||||
taste_description = "slime"
|
||||
|
||||
/datum/reagent/toxic_slurry/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -1143,6 +1165,7 @@
|
||||
description = "This is probably not good for you."
|
||||
reagent_state = LIQUID
|
||||
color = "#00FD00"
|
||||
taste_description = "slime"
|
||||
|
||||
/datum/reagent/glowing_slurry/reaction_mob(mob/living/M, method=TOUCH, volume) //same as mutagen
|
||||
if(!..())
|
||||
|
||||
@@ -246,7 +246,7 @@
|
||||
description = "Filthy water scoured from a nasty toilet bowl. Absolutely disgusting."
|
||||
reagent_state = LIQUID
|
||||
color = "#757547"
|
||||
taste_description = "puke"
|
||||
taste_description = "the inside of a toilet... or worse"
|
||||
|
||||
/datum/reagent/fishwater/toiletwater/reaction_mob(mob/living/M, method=TOUCH, volume) //For shennanigans
|
||||
return
|
||||
@@ -391,7 +391,7 @@
|
||||
process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL.
|
||||
metabolization_rate = 1
|
||||
can_synth = FALSE
|
||||
taste_description = "admin abuse"
|
||||
taste_description = "burning"
|
||||
|
||||
/datum/reagent/hellwater/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
return
|
||||
last_process = world.time
|
||||
to_chat(user, "<span class='notice'>The water feels warm and soothing as you touch it. The fountain immediately dries up shortly afterwards.</span>")
|
||||
user.reagents.add_reagent(/datum/reagent/medicine/omnizine/godblood, 20)
|
||||
user.reagents.add_reagent("godblood", 20)
|
||||
update_icon()
|
||||
addtimer(CALLBACK(src, .proc/update_icon), time_between_uses)
|
||||
|
||||
|
||||
@@ -100,7 +100,6 @@
|
||||
icon = 'icons/vehicles/CargoTrain.dmi'
|
||||
icon_state = "ambulance"
|
||||
anchored = FALSE
|
||||
throw_pressure_limit = INFINITY //Throwing an ambulance trolley can kill the process scheduler.
|
||||
|
||||
/obj/structure/bed/amb_trolley/examine(mob/user)
|
||||
. = ..()
|
||||
|
||||
Reference in New Issue
Block a user